0% found this document useful (0 votes)
37 views3 pages

Lectura Importance of Quality Attributes in Software Architecture

Uploaded by

Leonard 911
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
37 views3 pages

Lectura Importance of Quality Attributes in Software Architecture

Uploaded by

Leonard 911
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Importance of Quality Attributes in Software Architecture

Justin Kohlhepp

I’ve often been asked to define what a software architect does. We do many different things, and the job
description varies quite a bit among different companies, and across different sub-disciplines such as
infrastructure architect or application architect. But the best definition I’ve come up with for what a software
architect does is this: we balance the different quality attributes of a system so that they are best aligned to
delivering business value for our organization. In this post I will talk about what quality attributes are and
how they are employed when architecting a system.

What are quality attributes?


Quality attributes are those properties of a system that do not directly relate to the functionality of that
system. A good example is performance. No one uses a system solely because of its performance. They
use it for the functionality that system provides. However, performance is very important, and a user might
very well choose to use a different system that provides similar functionality if that other system has
superior performance.
Quality attributes are closely related to non-functional requirements. Non-functional requirements are
specific, measurable properties of a system that relate to a quality attribute. If there is a requirement that a
system perform all transactions in under 1 second, that would be a non-functional requirement. However,
saying that a system should emphasize performance over usability is a discussion of quality attributes.

Common Quality Attributes


If you look around the Internet, there are many different lists of quality attributes. Many of the lists contain
concepts that are synonymous or very closely related. In order to make quality attributes a bit easier to
digest, I’ve come up with 7 major categories that group the underlying concepts.

The quality of a system to be online when users or other systems want to interact with
it. This includes a system’s ability to avoid outages, as well as ability to recover from
outages quickly and fully. Systems may also increase availability by degrading
Availability gracefully when certain resources are not available in order to still provide a subset of
total functionality.
Related qualities: recoverability, degradability, dependability, redundancy, stability,
survivability

The quality of a system to provided consistent results, effectively handle variation in


inputs and environmental conditions, and recovery gracefully from error conditions. In
addition, reliable systems prevent unauthorized or inappropriate usage of functionality
Reliability
or resources.
Related qualities: predictability, repeatability, robustness, fault-tolerance, durability,
resilience, integrity, security

Usability The quality of a system to be easily understood by users. A highly usable system will
allow users to get desired tasks done efficiently and correctly. The system should be
efficient for both new users and experienced users, with minimal time invested by the
user in order to learn the system.
Related qualities: understandability, learnability, efficiency, discoverability,
seamlessness, perceived performance, simplicity, flexibility, adaptability,
demonstrability, customizability, tailorability, accessibility, localization,
internationalization, mobility

The quality of a system to execute actions within acceptable time periods. This
includes the time it takes to execute a single action, as well as the ability to support
Performance multiple actions being executed simultaneously (scalability).
Related qualities: timeliness, responsiveness, scalability, distributability, perceived
performance

The quality of a system to be efficiently changed by development staff. Changes might


include functional changes, enhancements, defect corrections, or an increase in other
quality aspects. All aspects of the cost of change should be considered, including
actual code changes, as well as cost of deployment, testing, etc.
Maintainability
Related qualities: complexity, modifiability, refactorabilty, evolvability, upgradability,
conceptual integrity, modularity, orthogonality, composability, reusability, extensibility,
interoperability, integratability, portability, compatibility, buildability, testability,
verifiability, debugability, deployability, future viability, external dependency

The quality of a system to be easily administered by support staff. Depending on the


system this could include things like adding new users, changing configuration, doing
Manageability backups, error correction, logging, etc.
Related qualities: administrability, operability, serviceability, supportability, failure
transparency, reproducibility, auditability, traceability, configurability

The amount of resources that need to be invested in the system. This includes both the
initial creation / installation of the system, cost of modification, as well as cost of just
keeping it running. Resources could include direct monetary costs as well as indirect
Cost
cost such as employee time, data center real estate, power consumption, etc.
Related qualities: project costs, infrastructure costs, cost of ownership, affordability,
time to market, hard vs. soft

It’s All About Balance


You can’t have your cake and eat it, too. For a given system, you can’t set the dial to 11 for every quality
attribute in that list. For one thing, the cost would astronomical and the time to market would reach infinity.
But, in addition, different quality attributes tend to have a negative influence on other attributes. For
example, to maximize the security of a system, you would lock the server in a room connected to no other
devices. But this has a negative impact on usability. Some choices you make to increase reliability, such as
distributed transactions or persistent message queues might have a negative effect on performance.
This is where architecture comes in. As an architect, you have to understand how the choices you are
making affect the quality attributes of the resulting system. And you have to understand which quality
attributes are important for the system you are delivering. If you are writing drivers for medical devices, you
probably want to maximize availability and reliability. But if you are working for Facebook, it would probably
be a lot more important to maximize usability. You have to have a good understanding of the business you
are supporting, the goals of the system you are creating, and how the quality attributes of that system will
affect the value your system will deliver.

Referencia

Kohlhepp, J. (31 de marzo, 2012) Importance of Quality Attributes in Software Architecture.


Recuperado de http://rationalgeek.com/blog/quality-attributes/

You might also like