Quality is not something you "test into" a system — it's designed in through architecture. The architecture determines whether a system can be fast, secure, reliable, and maintainable. Quality attributes (also called "non-functional requirements" or "-ilities") are the primary drivers of most architectural decisions.

8.1 ISO 25010 Product Quality Model

ISO 25010 defines eight quality characteristics for software products. This is the standard vocabulary used to discuss quality across the industry.

ISO 25010 — Product Quality Model Functional Suitability Completeness · Correctness · Appropriateness Performance Efficiency Time behavior · Resource utilization · Capacity Compatibility Co-existence · Interoperability Usability Learnability · Operability · Accessibility Reliability Maturity · Availability · Fault tolerance · Recoverability Security Confidentiality · Integrity · Non-repudiation · Authenticity Maintainability Modularity · Reusability · Analysability · Modifiability · Testability Portability Adaptability · Installability · Replaceability Memorize all 8 characteristics and their sub-characteristics!
You must know all 8 quality characteristics and their sub-characteristics. The exam frequently asks about the relationship between architectural decisions and specific quality attributes.

8.2 Quality Scenarios

Quality attributes like "the system should be fast" are too vague to be useful. A quality scenario makes them concrete and measurable — specific enough to test and verify.

A quality scenario has six parts:

Source of Stimulus Stimulus Artifact Response Measure Who triggers it? What happens? What part? Outcome & metric? + Environment + Response Measure Under what conditions? How is it measured?

Example Quality Scenarios

QualityScenario
Performance"Under normal load (1000 concurrent users), the system responds to search queries within 2 seconds for the 95th percentile."
Availability"When a database node fails, the system switches to a replica within 30 seconds with no data loss."
Modifiability"A developer can add a new payment provider within 3 person-days without modifying existing payment code."
Security"An unauthorized user attempting to access admin APIs receives a 403 response; the attempt is logged and an alert is triggered."
Testability"A developer can run all unit tests for a single module in under 60 seconds in isolation."

8.3 Quality Trade-offs

You cannot maximize all quality attributes simultaneously — they tension against each other. Architecture is fundamentally about making informed trade-offs between competing qualities.

⚖️ Key Quality Trade-offs Performance Security ⚡ TENSION ⚡ Flexibility Simplicity ⚡ TENSION ⚡ Availability Consistency ⚡ TENSION ⚡ Maintainability Performance ⚡ TENSION ⚡ Security Usability ⚡ TENSION ⚡ Architecture = making informed trade-offs, not finding perfect solutions

8.4 ATAM — Architecture Tradeoff Analysis Method

ATAM is a structured method for evaluating architecture against quality goals. It brings together stakeholders, architects, and evaluators to systematically identify risks, sensitivity points, and trade-off points.

StepActivity
1Present the architecture and business drivers
2Identify architectural approaches (patterns, tactics used)
3Generate quality attribute utility tree (prioritize quality goals)
4Analyze approaches against scenarios
5Identify sensitivity points and trade-off points
6Identify risks and non-risks
ATAM TermDefinition
Sensitivity PointA property that is critical to achieving a particular quality goal. Changing it significantly impacts that quality.
Trade-off PointA property that affects multiple quality attributes — improving one quality degrades another.
RiskAn architecturally significant decision with potentially negative outcome.
Non-riskA decision that is considered safe upon analysis.

8.5 Quality Metrics

MetricWhat It MeasuresWhy It Matters
Cyclomatic ComplexityNumber of independent paths through codeHigh complexity = hard to test and maintain
Afferent Coupling (Ca)How many modules depend on this oneHigh Ca = high responsibility, risky to change
Efferent Coupling (Ce)How many modules this depends onHigh Ce = fragile, many reasons to change
Instability (I = Ce/(Ca+Ce))Tendency to change (0=stable, 1=unstable)Stable modules should be abstract; unstable ones concrete

Fitness Functions — Automated Architecture Guardrails

Fitness functions are automated tests that verify architectural properties. Instead of relying on manual code reviews to catch architecture violations, you codify the rules and run them in CI/CD.

Examples:

  • ArchUnit (Java): "Classes in package domain must not depend on classes in package infrastructure"
  • Performance test: "The 95th percentile response time must be under 200ms"
  • Dependency check: "No circular dependencies between top-level packages"
  • Security scan: "No high-severity CVEs in dependencies"

Fitness functions make quality continuous and automated rather than periodic and manual.