Wikipedia / Non-functional requirement
Wikipedia / Non-functional requirement
In systems engineering and requirements engineering, a non-functional requirement (NFR) is a requirement that specifies criteria that can be used to judge the operation of a system, rather than specific behaviours. They are contrasted with functional requirements that define specific behavior or functions. The plan for implementing functional requirements is detailed in the system design. The plan for implementing non-functional requirements is detailed in the system architecture, because they are usually architecturally significant requirements. Non-functional requirements are also known as cross-functional requirements by some.
In software architecture, non-functional requirements are known as "architectural characteristics". Note that synchronous communication between software architectural components entangles them, and they must share the same architectural characteristics.
Definition
Broadly, functional requirements define what a system is supposed to do and non-functional requirements define how a system is supposed to be. Functional requirements are usually in the form of "system shall do <requirement>", an individual action or part of the system, perhaps explicitly in the sense of a mathematical function, a black box description input, output, process and control functional model or IPO model. In contrast, non-functional requirements are in the form of "system shall be <requirement>", an overall property of the system as a whole or of a particular aspect and not a specific function. The system's overall properties commonly mark the difference between whether the development project has succeeded or failed.
Non-functional requirements are often called the "quality attributes" of a system. The emergent properties of a system are classified as non-functional requirements. Other terms for non-functional requirements are "qualities", "quality goals", "quality of service requirements", "constraints", "non-behavioral requirements", or "technical requirements". Informally these are sometimes called the "ilities", from attributes like stability and portability. Qualities—that is non-functional requirements—can be divided into two main categories:
Execution qualities, such as safety, security and usability, which are observable during operation (at run time).
Evolution qualities, such as testability, maintainability, extensibility and scalability, which are embodied in the static structure of the system.
As non-functional requirements are all requirements that do not fall into the functional requirements category, they also include both characteristics of the functions and constraints on the system such as non-design items of statutory, regulatory, standards and protocols, or other external requirements.
It is important to specify non-functional requirements in a specific and measurable way.
Classification of non-functional requirements
Common non-functional classifications, relevant for all types of systems include
Performance
Scalability
Testability
Specific type of systems explicitly enumerate categories of non-functional requirements in their standards
Hardware systems
Embedded systems
Safety-critical systems
Software systems
Examples
A system may be required to present the user with a display of the number of records in a database. This is a functional requirement. How current this number needs to be, is a non-functional requirement. If the number needs to be updated in real time, the system architects must ensure that the system is capable of displaying the record count within an acceptably short interval of the number of records changing.
Sufficient network bandwidth may be a non-functional requirement of a system. Other examples include:
Auditability and control
Boot up time
Capacity, current and forecast
Cost, initial and life-cycle cost
Dependency on other parties
Efficiency (resource consumption for given load)
Effectiveness (resulting performance in relation to effort)
Emotional factors (like fun or absorbing or has "wow factor")
Ethics
Exploitability
Extensibility (adding features, and carry-forward of customizations at next major version upgrade)
Failure management
Fault tolerance (e.g. operational system monitoring, measuring, and management)
Flexibility (e.g. to deal with future changes in requirements)
Footprint reduction - reduce the exe files size
Integrability (e.g. ability to integrate components)
Legal and licensing issues or patent-infringement-avoidability
Maintainability (e.g. mean time to repair – MTTR)
Management
Memory optimization
Modifiability
Performance (speed, battery life, throughput, response time (performance engineering))
Physical (size, weight, power, cooling, etc.)
Platform compatibility
Privacy (compliance to privacy laws)
Quality (e.g. faults discovered, faults delivered, fault removal efficacy)
Reliability (e.g. mean time between/to failures – MTBF/MTTF)
Reporting
Resource constraints (processor speed, memory, disk space, network bandwidth, etc.)
Scalability (horizontal, vertical)
Schedule (project management) for development and delivery
Security (cyber and physical)
Software, tools, standards etc. Compatibility
Usability (human factors) by target user community
Criticism
The term "non-functional requirement" is criticized for being seen as a misnomer diminishing of the importance of the set of requirements it covers. In its place, the term "cross-functional requirement" (CFR) has been proposed and adopted at ThoughtWorks.
See also
ISO/IEC 25010:2011
References
Notes
External links