In addition to the functions a system must perform, there are often constraints the system must satisfy.
Some constraints may apply to individual use cases.
For example, a constraint on opening an account at an online liquor store is that customers must be at least 21 years old.
UML allows us to annotate elements by constraints. A constraint usually has the form:
{ condition }
The condition can be expressed informally or formally.
For example:
A system-wide constraint is called a non-functional requirement.
The FURPS model organizes all requirements into five categories:
F = Functional
U = Usability
R = Reliability
P = Performance
S = Supportability
The FURPS+ model adds a few more categories.
Level of user expertise
assumed.
User interface standards
used.
Documentation provided.
Safety and security
requirements.
Availability, robustness,
and reliability of the system.
Exception handling
Mean time between failures
Error tolerance
Data loss tolerance
number of concurrent users
supported
response time
number of transactions per second
How will system be
extended?
Who maintains the system?
Platform?
Interfaces to existing
systems.
Protocols used.
Who manages the running
system?
Who installs the system?
How many installations are there?
Licensing?
Liability issues?
Licensing fees or
liabilities incurred from using third-party components or algorithms?