Architecture Quality Attributes Non-Functional Requirements

1.    Background

In systems and software engineering, functional requirements define what we need a system to do and non-functional requirements define how a system needs to operate while providing the domain capability.

Most agile software teams have good discipline around the definition of functional requirements, in the form of feature descriptions, user stories and acceptance criteria. That said, this effort is typically focused on functional requirements and not on deriving non-functional requirements… which almost always require some additional system thinking and architecture design. So, an increased emphasis on non-functional attributes adds some needed balance to achieve an overall robust capability. Indeed, many of the technical issues encountered in production are due to some deficiency in non-functional requirements.

2.    Non-Functional Requirements

Non-functional requirements specify disciplines for how-well a system needs to operate and are derived from customer and business goals. This is contrasted with functional requirements that define domain capabilities and features. The design approach for both functional and non-functional requirements should be included in the system architecture for both applications and infrastructure. 

Non-functional requirements specify the properties of a system. Familiar terms for non-functional requirements are constraints, quality attributes, and quality of service requirements. Informally, these are sometimes called the “-ilities,” from properties like scalability and reliability. In this paper, we’ll call the non-functional properties of a system or component quality attributes.

3.    Quality Attributes

The following set of Quality Attributes have been found to play a significant role in the architecture development and deployment of many large-scale integrated software systems. Others may be considered in your architecture work, but these must be considered. Let’s divide them into three major (and measurable) categories.

  • Effectiveness – degree to which something is successful compared to the required result
  • Efficiency – ratio of useful work performed (by machine or process) to the total energy expended
  • Robustness – condition of strength and good health; and capability to withstand or overcome adverse conditions

3.1 Effectiveness Quality Attributes

Capability

  • Suitability – quality of being right or appropriate for customer purpose or situation
  • Usability – ease of use and learnability of software application, website, device, or process
  • Accessibility – the degree to which a product, device, service, or environment is available to as many customers as needed

Performance

  • Load – Amount of transactional pressure applied to the system… for start-up, steady-state and peak conditions
  • Throughput – Amount of transactional flow through the system per unit time
  • Response – the response time perceived by the customer for any single transaction

Interoperability

  • Openness – extent of application design to support syntactic, semantic, cross-domain Interoperability for information exchange
  • Backward Compatibility – extent of design to receive, read, view or play of older standards or formats
  • Cross-Platform – design for runtime libraries to reuse code and provide abstraction layers… and run same high-level source code on differently configured hardware

3.2 Efficiency Quality Attributes

Development

  • Time to Market – length of time from definition of market need to deployment into production  
  • Velocity – how much work an Agile team can successfully complete within a two-week sprint
  • Rework – how often defects are caught before release and how long they remain unresolved

Sustainment

  • Supportability – ease to which system design characteristics permit upgrades for planned lifecycle
  • Maintainability – ease and speed with which a system can be restored to operational status after a failure occurs
  • Testability – the degree to which a software artifact supports testing within a given context

Evolution

  • Extensibility – ease of grow for new capabilities or features
  • Reusability – ease of modification for a new use or to add new functionality
  • Scalability – ease of a system, network, or process to grow as customer needs increase 

3.3 Robustness Quality Attributes

Availability

  • Reliability – capability of a system or component to function under stated conditions for a specified period of time
  • Fault tolerance – capability of a system to failover and continue operating properly in the event of the failure of (or one or more faults within) some of its components
  • Safety – capability of a life-critical (or mission-critical) system to behave as needed, even when components fail

Recoverability

  • Fault Resilience – capability to provide and maintain an acceptable level of service in the face of failures with challenges to normal operation
  • Repairability – the capability and time (e.g., MTTR) to return components to normal function
  • Survivability – capability to recover or continue infrastructure after a natural or man-made disaster

 Cyber Security

  • Application Security – mitigate security vulnerabilities at different stages of an app lifecycle
  • Information Security – protecting information by mitigating threat risks
  • Network Security – prevent and monitor unauthorized access, misuse, modification, or denial of a computer network and network-resources.

4. Quality Attribute Assessment

Although the above list of quality attributes is long, it is in no way exhaustive. And it’s also important to note that not all quality attributes need to be applied for every component on each system. Applicable quality attributes are derived from customer or business goals and are assessed for efficacy during the architecture/requirements development process.

Assessment for quality attributes is accomplished early in the design process… say, in a workshop setting using ATAM (Architecture Trade-off Analysis Method), a standard process developed by the Software Engineering Institute. As part of the Quality Attribute Workshop, participants will identify architecture-critical quality attributes, such as performance, availability, interoperability, and security.  

These inputs help craft the architecture for a software system by discovering and prioritizing quality attributes, trade-offs and sensitivity points. It’s helpful to define levels of discipline for each quality attribute and track targets against the current system capabilities in a radar scan, as shown in the header.