Non-functional requirement
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 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 doNon-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.
- Evolution qualities, such as testability, maintainability, extensibility and scalability, which are embodied in the static structure of the system.
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 includeSpecific type of systems explicitly enumerate categories of non-functional requirements in their standards
- Hardware systems
- Embedded systems
- Safety-critical systems
- Software systems
Examples
Sufficient network bandwidth may be a non-functional requirement of a system. Other examples include:
- Accessibility
- Adaptability
- Auditability and control
- Availability
- Backup
- Boot up time
- Capacity, current and forecast
- Certification
- Compliance
- Configuration management
- Conformance
- Cost, initial and life-cycle cost
- Data integrity
- Data retention
- Dependency on other parties
- Deployment
- Development environment
- Disaster recovery
- Documentation
- Durability
- Efficiency
- Effectiveness
- Elasticity
- Emotional factors
- Environmental protection
- Escrow
- Ethics
- Exploitability
- Extensibility
- Failure management
- Fault tolerance
- Flexibility
- Footprint reduction - reduce the exe files size
- Integrability
- Internationalization and localization
- Interoperability
- Legal and licensing issues or patent-infringement-avoidability
- Maintainability
- Management
- Memory optimization
- Modifiability
- Network topology
- Open source
- Operability
- Performance
- Physical
- Platform compatibility
- Privacy
- Portability
- Quality
- Readability
- Reliability
- Reporting
- Resilience
- Resource constraints
- Response time
- Reusability
- Robustness
- Safety or factor of safety
- Scalability
- Schedule for development and delivery
- Security
- Software, tools, standards etc. Compatibility
- Stability
- Supportability
- Testability
- Throughput
- Training
- Transparency
- Usability by target user community
- Volume testing
Criticism