The official definition for a non-functional requirement specifies how the system should behave:
“A non-functional requirement is a statement of how a system must behave, it is a constraint upon the systems behavior.”
Non-functional requirements specify all the remaining requirements not covered by the functional requirements. They specify criteria that judge the operation of a system, rather than specific behaviors, for example:
“Display of the patient’s vital signs must respond to a change in the patient’s status within 2 seconds.”
Non functional requirements (NFR) are also knows as Quality of Service (QoS) or Service level requirements or quality attributes or constraints or system capabilities.
In addition to the business requirements i.e the functional requirements of a system, you must satisfy the non functional requirements. You can get most of these qualities of service measurement for each of the service-level requirements by working with the stakeholders of the system during the inception and elaboration phases. Potentially many different stakeholders have an interest in getting the non-functional requirements right. This is because for many large systems the people buying the system are completely different from those who are going to use it (customers and users).
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.
In general, functional requirements define what a system is supposed to do whereas non-functional requirements define how a system is supposed to be. Basically what system “does” or “shall do” comes under functional requirements whereas what system “shall be” comes under non-functional requirements.
The architecture you create must address the following service-level requirements:
Based on the functional requirements and customers expectations, trade-offs between these requirements will have to be made. For example, if the most important service-level requirement is the performance of the system, you might sacrifice the maintainability and extensibility of the system to ensure that you meet the performance quality of service.
The non-functional requirements are broadly categorized into two categories:
- Run-time: These are observable at run time
- Availability / Reliability
- Response time, transaction throughput
- Development time: These are embodied in the static structure of the software system
- Modifiability / Extensibility
- Support for new capabilities or ability to exploit new technologies
There is a good questionnaire available to get the non functional requirements from customer/stakeholder at http://www.csee.umbc.edu/courses/undergraduate/345/spring04/mitchell/nfr.html
Finally a small example should give you a good idea about the difference between functional and non-functional requirements. In an online store the system may be required to present the user with a display of the number of items available in the stock. This is a functional requirement. How up-to-date this number needs to be is a non-functional requirement.