In systems engineering and requirements engineering, a non-functional requirement is a requirement
that specifies criteria that can be used to judge the operation of a system, rather than
specific behaviors.
This should be 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.
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 ", an
individual action of 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 ",
an overall property of the system as a whole or of a particular aspect and not a specific
function.
The systems' overall properties commonly mark the difference between whether the development
project has succeeded or failed.
Non-functional requirements are often called qualities of a system.
Other terms for non-functional requirements are "constraints", "quality attributes", "quality
goals", "quality of service requirements" and "non-behavioral 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 security and usability, which are observable at run time.
Evolution qualities, such as testability, maintainability, extensibility and scalability,
which are embodied in the static structure of the software system.
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 up-to-date 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 updating the displayed 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: Accessibility
Audit and control Availability
Backup Capacity, current and forecast
Certification Compliance
Configuration management Dependency on other parties
Deployment Documentation
Disaster recovery Efficiency
Effectiveness Emotional factors
Environmental protection Escrow
Exploitability Extensibility
Failure management Fault tolerance
Legal and licensing issues or patent-infringement-avoidability Interoperability
Maintainability Modifiability
Network topology Open source
Operability Performance / response time
Platform compatibility Price
Privacy Portability
Quality Recovery / recoverability
Reliability Reporting
Resilience Resource constraints
Response time Robustness
Safety or Factor of safety Scalability
Security Software, tools, standards etc.
Compatibility Stability
Supportability Testability
Usability by target user community See also
ISO/IEC 9126 Requirements analysis
Functional requirements Usability requirements
Non-Functional Requirements framework URPS
References
External links Scientific links
http:www.idi.ntnu.nosueide-fordyp05.pdf Templates and examples
www.csc.calpoly.edu Volere Requirements Resources
Modeling non-functional properties in SOA Modeling Non-Functional Aspects in Service
Oriented Architecture Wada, Suzuki,Oba Agile non-functional requirements
Non-Functional Requirements: Do User Stories Really Help?
Structural requirements Measurable Structural Quality as Expression
of Non-Functional Requirements