liveBook · Manning

Nonfunctional requirement

As explained in Object-Oriented Software Design in C++

A requirement that imposes a constraint on an application's qualities, operation, environment, or implementation-independent behavior rather than specifying a discrete feature.

A nonfunctional requirement imposes a restriction or constraint that an application must satisfy to succeed. It addresses qualities, platforms, maintainability, or other behavior without defining a discrete feature. Functional requirements state what the application must do; nonfunctional requirements constrain how practical and acceptable that functionality is. section 3.3 section 3.10

Write nonfunctional requirements as strong, testable constraints:

  • State measurable limits, such as requiring a book search to take under two seconds. section 3.3
  • Specify supported environments, such as Windows, macOS, and Linux. section 3.3
  • Constrain user experience without prescribing implementation, such as requiring similarity to a previous interface. section 3.3
  • Require customizable messages in English, Spanish, or Vietnamese; localization may also affect dates, times, monetary formats, and character encoding. section 3.3
  • Use must or shall, and keep design and implementation details out of the requirement. section 3.3 section 3.10

Book catalogue search

For a book catalogue server, “A book search must take under 2 seconds” constrains performance, while “The application must run on Windows, macOS, and Linux” constrains the platform. A fully functional catalogue still fails if it responds too slowly or cannot run where customers need it. section 3.3

Figure 3.2 A more advanced version of the book catalogue application. A librarian interacts with the book catalogue server to enter new books into the catalogue and to update and remove existing books. A customer interacts with the server to search for books. The books are stored in a backend database.

Use the catalogue-system view to relate nonfunctional constraints to customers, librarians, the server, and the backend database. section 3.1

How Object-Oriented Software Design in C++ covers it

How deep it goes
Defines constraints, gives book-catalogue examples, and links them to use cases and black-box tests, but stops short of implementation design.
Examples
Uses book-search latency, operating-system support, interface similarity, and multilingual messages as concrete constraints.
What it assumes
Assumes a basic distinction between what an application does and the constraints governing its successful operation.
What you can do after
Evaluate/understand application constraints and express them as strong, implementation-independent requirements that can be tested.
How it connects
Connects functional requirements with use cases, functional specifications, localization, internationalization, and black-box testing.

Also explained in

Compare how 6 books explain nonfunctional requirement →

Related concepts

This explainer was generated by Manning's knowledge graph from the text of Object-Oriented Software Design in C++. The section links point to the parts of the book it draws on.