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.
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.
Functionality
Functional requirements may include:
feature sets
capabilities
security
Usability
Usability requirements may include such subcategories as:
human factors
aesthetics
consistency in the user interface
online and context-sensitive help
wizards and agents
user documentation
training materials
Reliability
Reliability requirements to be considered are:
frequency and severity of failure
recoverability
predictability
accuracy
mean time between failure (MTBF)
Performance
A performance requirement imposes conditions on functional requirements. For
example, for a given action, it may specify performance parameters for:
speed
efficiency
availability
accuracy
throughput
response time
recovery time
resource usage
Supportability
Supportability requirements may include:
testability
extensibility
adaptability
maintainability
compatibility
configurability
serviceability
installability
localizability (internationalization)
Design Requirement
A design requirement, often called a design constraint,
specifies or constrains the design of a system.
Implementation Requirement
An implementation requirement specifies or constrains the coding or
construction of a system. Examples are:
required standards
implementation languages
policies for database integrity
resource limits
operation environments
Interface Requirement
An interface requirement specifies:
an external item with which a system must interact
constraints on formats, timings, or other factors used by such an
interaction
Physical Requirement
A physical requirement specifies a physical characteristic that a system must
possess; for example,
material
shape
size
weight
This type of requirement can be used to represent hardware requirements, such
as the physical network configurations required.