Software Engineering
Home Planning Requirements Writing Hazard Analysis Requirement Analysis Config Control Software Design Software Testing Software Standards Basic Logic

Requirements Writing - Definition of a "Requirement"

The English Professor

Require: “To call for as obligatory or appropriate; demand.”

Requirement: “Something that is required; a necessity.”

Excerpted from The American Heritage Dictionary of the English Language, Third Edition Copyright © 1992 by Houghton Mifflin Company.

However, this definition is far too broad to be of any use to the engineer. We need to sub-divide the term "requirement" by adding an adjective to describe the type of requirement.

The Engineer

“Requirement” is sub-divided into six categories (per IEEE recommendations):

  • Product environment. Describes the environment in which the software will run.
  • Product features. Describes the features (from the user's perspective).

  • User characteristics. Describes the user, such as expected level of education.

  • Design constraints. Anything that constrains the design, such as communication interfaces to other systems.

  • Assumptions and dependencies. This can include any applicable standards or dependencies to other projects.

  • Specific Requirements. This is the motherlode! THESE requirements describe what we are actually creating. When an engineer says "requirement," this is what is meant. These are further decomposed into:

    • Functional Requirements - the functionality to be provided.

    • Performance Requirements - such as speed, number of transactions.

    • External Interfaces - interfaces to other systems or the user.

    • Design Constraints - any other implementation constraints.

    • Attributes - e.g. reliability, availability, security, portability

Since the Specific Requirements actually describe what is being built, they must be verified! Testing is the most common means of verification.

The other requirements (the non-specific requirements) cannot be verified. While the information they provide is necessary, and although the English Professor would call them "requirements," they describe things that either pre-exist, or exist outside of, the software being built. Therefore, non-specific requirements are not verifiable. That is why when engineers say "requirement," they generally mean "specific requirement."