Guideline: Requirement Pitfalls
This guideline describes common pitfalls to avoid in defining and writing requirements.
Relationships
Main Description

Research and experience shows that requirements errors are very common, accounting for as much as 56% of all errors made during development [TAV84].  Compounding this problem is the fact that the cost of correcting requirements errors increases exponentially throughout the software development lifecycle [BOE88].

Frederick Brooks summarized this situation nicely:

The hardest single part of building a software system is deciding what to build. No other part of the conceptual work is as difficult as establishing the detailed technical requirements…. No other part of the work so cripples the resulting system if done wrong. No other part is as difficult to rectify later.[BRO87]

Therefore, it is critical that you detect requirements errors as early as possible, before they propagate to design, implementation, and test artifacts.

What to avoid when writing requirements

Although there is sure way to eliminate requirements errors in general, there are common pitfalls in writing requirements that are relatively easy to avoid [TEL06].

Ambiguity

Avoiding ambiguity is one of the most difficult mandates in writing requirements. Try to write as clearly and explicitly as possible. Be specific. If you must use vague or ambiguous terms, make sure that you define them in the glossary.

Have several colleagues and stakeholders review your requirements to ensure a consistent, common understanding. Although there is no definitive test for ambiguity, other than consensus, some dangerous ambiguities can be caused by the use of the words for, or, and unless

Example

"The same subsystem shall also be able to generate a visible or audible caution/warning signal for the attention of the co-pilot or navigator."

Which subsystem? Is the signal to be visible, audible, or both? Is this both a caution and a warning, just a caution, or just a warning? Is it for both the co-pilot and the navigator or just one of them? If just one of them, which one and under what conditions?

Multiple requirements

Requirements that contain conjunctions (words that join independent clauses together) are dangerous. Problems arise when readers try to figure out which part applies, especially if the different clauses seem to conflict or if the individual parts apply separately. Multiple requirements also make verification more complex.

Dangerous conjunctions include: and, or, but.

Example

"The battery low warning lamp shall light up when the voltage drops below 3.6 Volts, and the current workspace or input data shall be saved."

Should the battery low-warning lamp light up when the voltage drops and when the workspace is saved? Should the battery low warning lamp light up and the workspace be saved when the voltage drops?

Let-out or escape clauses

Requirements that include options or exceptions are dangerous. They seem to ask for something definite, but at the last moment, they back down and allow other options. Problems arise when the requirements are to be tested, and someone has to decide what (if anything) could prove that the requirement was met.

Dangerous words that imply exceptions include: if, when, but, except, unless, although.

Examples

"The forward passenger doors shall open automatically when the aircraft has halted, except when the rear ramp is deployed."

"The fire alarm shall always be sounded when smoke is detected, unless the alarm is being tested or the engineer has suppressed the alarm."

The latter sentence is a truly dangerous requirement!

Rambling

Long, rambling sentences, especially when combined with arcane language or references to unreachable documents, quickly lead to confusion and error.

Example

"Provided that the designated input signals from the specified devices are received in the correct order where the system is able to differentiate the designators, the output signal shall comply with the required framework of section 3.1.5 to indicate the desired input state."

Premature design

Requirements should specify the design envelope without unnecessary constraints on a specific design. If we supply too much detail, we start to design the system. Going too far is tempting for designers, especially when they come to their favorite bits.

Danger signs include names of components, materials, software objects or procedures, and database fields.

Example

"The antenna shall be capable of receiving FM signals, using a copper core with nylon covering and a waterproof hardened rubber shield."

Specifying design rather than actual need increases the cost of systems by placing needless constraints on development and manufacture. Often, knowing why is much better than knowing what.

Mixing different kinds of requirements

The user requirements form a complete model of what users want. They need to be organized coherently to show gaps and overlaps. The same applies to system requirements, which form a complete functional model of the proposed system. A quick road to confusion is to mix up requirements for users, systems, and how the system should be designed, tested, or installed.

Danger signs are any references to system, design, testing, or installation.

Example

"The user shall be able to view the currently selected channel number which shall be displayed in 14pt Swiss type on an LCD panel tested to Federal Regulation Standard 567-89 and mounted with shockproof rubber washers."

Speculation

Requirements are part of a contract between customer and developer. There is no room for wish lists, meaning general terms about things that somebody probably wants.

Danger signs include vagueness about which type of user is speaking and generalizations, such as usually, generally, often, normally, typically.

Example

"Users normally require early indication of intrusion into the system."

Vague, undefined terms

Many words used informally to indicate system quality are too vague for use in requirements. Vague terms include, among others: user-friendly, versatile, flexible, approximately, as possible.

Requirements using these terms are unverifiable, because there is no definitive test to show whether the system has the indicated property.

Examples

"The print dialog shall be versatile and user-friendly."

"The OK status indicator lamp shall be illuminated as soon as possible after the system self-check is completed."

Expressing mere possibilities

Suggestions that are not explicitly stated as requirements are invariably ignored by developers.

"Possible options" are indicated with terms such as may, might, should, ought, could, perhaps, probably.

Example

"The reception subsystem probably ought to be powerful enough to receive a signal inside a steel-framed building."

Wishful thinking

Wishful thinking means asking for the impossible. Engineering is a real-world activity, and no system or component is perfect.

Wishful-thinking terms include reliable, safe, handle all unexpected failures, please all users, run on all platforms, never fail, upgradeable to all future situations.

Examples

"The gearbox shall be 100% safe in normal operation."

"The network shall handle all unexpected errors without crashing."