non-functional requirement
{{Short description|Type of requirement in systems engineering}}
{{Use American English|date = March 2019}}
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.{{Cite journal |doi = 10.1109/MS.2012.174|title = Characterizing Architecturally Significant Requirements|journal = IEEE Software|volume = 30|issue = 2|pages = 38–45|year = 2013|last1 = Chen|first1 = Lianping|last2 = Ali Babar|first2 = Muhammad|last3 = Nuseibeh|first3 = Bashar|hdl = 10344/3061| s2cid=17399565 |hdl-access = free}}
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.{{Cite book |title=Fundamentals of Software Architecture: An Engineering Approach |year=2020 |isbn=978-1492043454 |last1=Richards |first1=Mark |last2=Ford |first2=Neal |publisher=O'Reilly Media, Incorporated }}
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
Non-functional requirements are often called the "quality attributes" of a system. Other terms for non-functional requirements are "qualities", "quality goals", "quality of service requirements", "constraints", "non-behavioral requirements",{{cite book | last1=Stellman | first1=Andrew | last2=Greene | first2=Jennifer | title=Applied Software Project Management | url=http://www.stellman-greene.com/aspm/ | page=113 | publisher=O'Reilly Media | year=2005 | isbn=978-0-596-00948-9 | url-status=dead | archive-url=https://web.archive.org/web/20150209011617/http://www.stellman-greene.com/aspm/ | archive-date=2015-02-09 }} or "technical requirements".{{cite web |last1=Ambler |first1=Scott |title=Technical (Non-Functional) Requirements: An Agile Introduction |url=http://agilemodeling.com/artifacts/technicalRequirement.htm |website=Agile Modelling |publisher=Ambysoft Inc. |access-date=5 October 2018}} 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.{{cite book|last1=Wiegers|first1=Karl|last2=Beatty|first2=Joy|title=Software Requirements, Third Edition|year=2013|publisher=Microsoft Press|isbn=978-0-7356-7966-5}}{{cite book |last1=Young |first1=Ralph R. |title=Effective Requirements Practices |year=2001 |publisher=Addison-Wesley |isbn=978-0-201-70912-4 |url-access=registration |url=https://archive.org/details/unset0000unse_g5k2 }}
It is important to specify non-functional requirements in a specific and measurable way.{{cite book |last1=Zimmermann|first1=Olaf |last2=Stocker|first2=Mirko| title=Design Practice Repository |year=2021 |publisher=LeanPub |url=https://leanpub.com/dpr }}{{Cite journal |doi = 10.1109/MS.2008.31|title = A Risk-Based, Value-Oriented Approach to Quality Requirements|journal = IEEE Software|volume = 25|issue = 2|pages = 34–41|year = 2008|last1 = Glinz|first1 = Martin| s2cid=19015424 | url=https://www.zora.uzh.ch/id/eprint/7375/10/ieeesoftwaregetPDFV.pdf }}
Examples
{{More citations needed|date=February 2023}}
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:
{{div col|colwidth=30em}}
- Accessibility
- Adaptability
- Auditability and control
- Availability (see service level agreement)
- 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 (resource consumption for given load)
- Effectiveness (resulting performance in relation to effort)
- Elasticity
- Emotional factors (like fun or absorbing or has "wow factor")
- Environmental protection
- Escrow
- 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)
- Internationalization and localization
- Interoperability
- Legal and licensing issues or patent-infringement-avoidability
- Maintainability (e.g. mean time to repair – MTTR)
- Management
- Memory optimization
- Modifiability
- Network topology
- Open source
- Operability
- Performance / response time (performance engineering)
- Platform compatibility
- Privacy (compliance to privacy laws)
- Portability
- Quality (e.g. faults discovered, faults delivered, fault removal efficacy)
- Readability
- Reliability (e.g. mean time between/to failures – MTBF/MTTF)
- Reporting
- Resilience
- Resource constraints (processor speed, memory, disk space, network bandwidth, etc.)
- Response time
- Reusability
- Robustness
- Safety or factor of safety
- Scalability (horizontal, vertical)
- Security (cyber and physical)
- Software, tools, standards etc. Compatibility
- Stability
- Supportability
- Testability
- Throughput
- Transparency
- Usability (human factors) by target user community
- Volume testing
{{Div col end}}
See also
References
{{Reflist}}
External links
- {{cite CiteSeerX|title=Quantification and Traceability of Requirements|author=Petter L. H. Eide
|date=2005|citeseerx=10.1.1.95.6464 }}
- {{cite web|url=http://www.csc.calpoly.edu/~jdalbey/SWE/QA/nonfunctional.html|title=Nonfunctional Requirements|first=John|last=Dalbey|website=Csc.calpoly.edu|access-date=3 October 2017}}
- {{cite web|url=http://www.cs.umb.edu/~jxs/pub/scc.pdf|title=Modeling Non-Functional Aspects in Service Oriented Architecture|website=Cs.umb.edu|access-date=3 October 2017|archive-url=https://web.archive.org/web/20110724131731/http://www.cs.umb.edu/~jxs/pub/scc.pdf|archive-date=24 July 2011|url-status=dead}}
- {{cite web|url=http://www.methodsandtools.com/archive/archive.php?id=113|title=Non-Functional Requirements: Do User Stories Really Help?|website=Methodsandtools.com|access-date=3 October 2017}}
- {{cite web|url=http://it-cisq.org/non-functional-requirements-be-here|title=Non-Functional Requirements Be Here - CISQ - Consortium for IT Software Quality|website=it-cisq.org|access-date=3 October 2017}}
- {{Cite web | url=https://ozimmer.ch/practices/2020/11/19/ExtraExtraReadAllboutIt.html | title="Do Software Architectures Meet Extra-Functional or Non-Functional Requirements?"| date=19 November 2020}}
{{Software quality}}
{{Authority control}}