A requirement is defined as "a condition or capability to which a system must conform".
There are many different kinds of requirements. One way of categorizing them is described as the FURPS+ model [GRA92], using the acronym FURPS to describe the major categories of requirements with subcategories as shown below.
The "+" in FURPS+ reminds you to include such requirements as:
(See also [IEEE Std 610.12.1990].)
Functional requirements specify actions that a system must be able to perform, without taking physical constraints into consideration. These are often best described in a use-case model and in use cases. Functional requirements thus specify the input and output behavior of a system.
Requirements that are not functional, such as the ones listed below, are sometimes called non-functional requirements. Many requirements are non-functional, and describe only attributes of the system or attributes of the system environment. Although some of these may be captured in use cases, those that cannot may be specified in Supplementary Specifications. Nonfunctional requirements are those that address issues such as those described below.
A complete definition of the software requirements, use cases, and Supplementary Specifications may be packaged together to define a Software Requirements Specification (SRS) for a particular "feature" or other subsystem grouping.
Functional requirements may include:
Usability requirements may include such subcategories as:
Reliability requirements to be considered are:
A performance requirement imposes conditions on functional requirements. For example, for a given action, it may specify performance parameters for:
Supportability requirements may include:
A design requirement, often called a design constraint, specifies or constrains the design of a system.
An implementation requirement specifies or constrains the coding or construction of a system. Examples are:
An interface requirement specifies:
A physical requirement specifies a physical characteristic that a system must possess; for example,
This type of requirement can be used to represent hardware requirements, such as the physical network configurations required.