Quality attribute

Medium

A quality attribute is a non-functional requirement that describes how a system should perform a certain function or behave under certain conditions. It defines the system's properties and constraints, such as performance, security, or reliability, rather than its specific features.

First used·1990s

Definitions·1

Synonyms·5

Category·Software Architecture

Also known as

Non-Functional Requirement (NFR)Quality of Service (QoS) RequirementSystem QualityArchitectural CharacteristicIlity

Definitions

What it means.

  1. 01

    In Software Architecture

    In the context of software architecture, a Quality Attribute is a measurable or testable property of a system that indicates how well the system satisfies the needs of its stakeholders. These are often called non-functional requirements (NFRs) or "ilities" because many of them end in "-ility" (e.g., reliability, scalability).

    Quality attributes describe how a system should behave, rather than what it should do. While functional requirements define features (e.g., "a user can log in"), quality attributes define the constraints and characteristics of those features (e.g., "the login process must complete within 2 seconds and be secure against common attacks").

    Key Concepts

    • The "Ilities": Common quality attributes include Performance, Scalability, Availability, Reliability, Security, Maintainability, Usability, and Testability. Each one addresses a specific concern about the system's operation.
    • Trade-offs: A critical aspect of architectural design is managing trade-offs between quality attributes. For instance, increasing security with multiple layers of encryption might negatively impact performance. Architects must balance these competing concerns based on business goals.
    • Measurability: To be effective, quality attributes must be specific and measurable. A vague goal like "the system should be fast" is not useful. A better definition is a quality attribute scenario: "Under a load of 1,000 concurrent users, 99% of page loads must complete in under 500 milliseconds."

    Usage

    Quality attributes are primary drivers for architectural decisions. The choice of technology stack, design patterns, and infrastructure is heavily influenced by the need to meet specific quality attribute targets. They also form the basis for Service Level Agreements (SLAs) and performance testing.

Origin

Where it comes from.

Etymology

The term is a compound of "Quality" and "Attribute". "Quality" originates from the Latin word "qualitas," meaning "of what kind" or "character." "Attribute" comes from the Latin "attribuere," meaning "to assign" or "bestow." In combination, it signifies a characteristic or property that defines the nature or standard of a system.

Historical context

The concept of system qualities has existed since the early days of computing, initially focused on correctness and performance (efficiency). As software systems grew in complexity and became more integrated into business operations during the 1970s and 1980s, the need for other characteristics like reliability and maintainability became more apparent.

The term Quality Attribute gained formal prominence in the 1990s with the rise of software architecture as a distinct discipline. Institutions like the Software Engineering Institute (SEI) at Carnegie Mellon University played a pivotal role in formalizing these concepts. They developed methods like the Quality Attribute Workshop (QAW) and architectural analysis techniques (e.g., ATAM - Architecture Tradeoff Analysis Method) to systematically identify, prioritize, and design for these non-functional requirements. This shift marked a move from an implicit understanding of system quality to an explicit, engineering-driven approach.

Usage

In context.

  • When designing the e-commerce platform, availability was the most critical quality attribute to ensure customers could always access the store.

  • The architect had to make a trade-off between the security and performance quality attributes of the new authentication service.

  • Each non-functional requirement was mapped to a specific quality attribute to guide the development team's implementation choices.

  • For our real-time data processing pipeline, low latency is a key architectural characteristic we must achieve.

FAQ

Common questions.

A functional requirement specifies what a system should do (e.g., 'a user can add an item to a shopping cart'). A quality attribute, also known as a non-functional requirement, specifies how well the system performs that function (e.g., 'adding an item to the cart must take less than 200 milliseconds'). Functional requirements define features, while quality attributes define the characteristics and constraints of those features.

Taxonomy

Filed under.

Categories

Software ArchitectureSoftware EngineeringSystem Design

Tags

Non-Functional RequirementsSystem QualitiesArchitectureSoftware DesignIlities