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 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 ", 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 ==