<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.epf.uma:ContentDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.epf.uma="http://www.eclipse.org/epf/uma/1.0.6/uma.ecore" xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.1" xmlns:rmc="http://www.ibm.com/rmc" rmc:version="7.5.1" xmi:id="-Q72-dNdHnZ93aRXAB_d34A" name="requirement_pitfalls_1,_1AOsMO0JEdqHTdbLTmC5IQ" guid="-Q72-dNdHnZ93aRXAB_d34A" authors="Chris Sibbald" changeDate="2006-09-27T10:14:43.000-0700" version="0.2">
  <mainDescription>&lt;p>&#xD;
    Explanations and examples follow for each of the following common pitfalls to avoid in defining and writing&#xD;
    requirements (for more information, see &lt;a&#xD;
    href=&quot;./../../../core.tech.common.base/guidances/supportingmaterials/references.tech_6CCF393.html&quot;&#xD;
    guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>[TEL06]&lt;/a>):&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
    &lt;li>&#xD;
        Avoid ambiguity.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Don't make multiple requirements.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Never use let-out or escape words.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Don't ramble.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Resist designing the system.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Avoid mixing different kinds of requirements.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Do not speculate.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Do not use vague, undefined terms.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Do not express possibilities.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Avoid wishful thinking.&#xD;
    &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;h4>&#xD;
    Avoid ambiguity.&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Avoidance of ambiguity is one of the subtlest and most difficult issues in writing requirements. Try to write as&#xD;
    clearly and explicitly as possible. Be specific. Remember, though, that if you carry this too far, the text becomes&#xD;
    dull and unreadable, which makes it difficult for other people to review. Although this guideline emphasizes&#xD;
    structured, written expression of requirements, informal text, diagrams, conversations, and phone calls are excellent&#xD;
    ways of removing ambiguity.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Some constructions (such as the use of or and unless in requirements) allow different groups of readers to understand&#xD;
    different things from the same wording. Developers could use this technique deliberately, so as to postpone, until too&#xD;
    late, any possibility of the customer's asking for what was truly wanted. This is dangerous and could easily backfire.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    The only approach that works is for developers to make requirements as clear as possible, and for all stakeholders to&#xD;
    co-operate. In the long run, project success is in everybody's interest.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Dangerous ambiguities can be caused by the word &lt;strong>or&lt;/strong> and also by many more-subtle errors.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
    Example&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
    &lt;em>The same subsystem shall also be able to generate a visible or audible caution/warning signal for the attention of&#xD;
    the co-pilot or navigator.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Which subsystem? Is the signal to be visible, audible, or both? Is it both caution and warning, just caution, or just&#xD;
    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&#xD;
    what conditions?&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Don't make multiple requirements.&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Requirements which contain conjunctions (words that join independent clauses together) are dangerous. Problems arise&#xD;
    when readers try to figure out which part applies, especially if the different clauses seem to conflict, or if the&#xD;
    individual parts apply separately. Multiple requirements also make verification more complex.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Dangerous conjunctions include: and, or, but.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
    Example&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
    &lt;em>The battery low warning lamp shall light up when the voltage drops below 3.6 Volts, and the current workspace or&#xD;
    input data shall be saved.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Should the battery low warning lamp light up when the voltage drops and the workspace is saved? Should the battery low&#xD;
    warning lamp light up and the workspace be saved when the voltage drops?&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Never use let-out or escape words&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Requirements that include options or exceptions are dangerous. They seem to ask for something definite, but at the last&#xD;
    moment they back down and allow for other options. Problems arise when the requirements are to be tested, and someone&#xD;
    has to decide what (if anything) could prove the requirement was met.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Dangerous words that imply exceptions include: if, when, but, except, unless, although.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
    Examples&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
    &lt;em>The forward passenger doors shall open automatically when the aircraft has halted, except when the rear ramp is&#xD;
    deployed.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    &lt;em>The fire alarm shall always be sounded when smoke is detected, unless the alarm is being tested or the engineer has&#xD;
    suppressed the alarm.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    The latter sentence is a truly dangerous requirement!&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Don't ramble.&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Long rambling sentences, especially when combined with arcane language, references to unreachable documents, and other&#xD;
    defects of writing, quickly lead to confusion and error.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
    Example&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
    &lt;em>Provided that the designated input signals from the specified devices are received in the correct order where the&#xD;
    system is able to differentiate the designators, the output signal shall comply with the required framework of section&#xD;
    3.1.5 to indicate the desired input state.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Resist designing the system&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Requirements should specify the design envelope without unnecessary constraints on a specific design. If we supply too&#xD;
    much detail we start to design the system. Going too far is tempting for designers, especially when they come to their&#xD;
    favorite bits.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Danger signs include names of components, materials, software objects/procedures, and database fields.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
    Example&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
    &lt;em>The antenna shall be capable of receiving FM signals, using a copper core with nylon covering and a waterproof&#xD;
    hardened rubber shield.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Specifying design rather than actual need increases the cost of systems by placing needless constraints on development&#xD;
    and manufacture. Often knowing why is much better than knowing what.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Avoid mixing different kinds of requirements&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    The user requirements form a complete model of what users want. They need to be organized coherently to show gaps and&#xD;
    overlaps. The same applies to system requirements, which form a complete functional model of the proposed system. A&#xD;
    quick road to confusion is to mix up requirements for users, systems, and how the system should be designed, tested, or&#xD;
    installed.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Danger signs are any references to system, design, testing, or installation.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
    Example&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
    &lt;em>The user shall be able to view the currently selected channel number which shall be displayed in 14pt Swiss type on&#xD;
    an LCD panel tested to Federal Regulation Standard 567-89 and mounted with shockproof rubber washers.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Do not speculate.&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Requirements are part of a contract between customer and developer. There is no room for wish lists, meaning general&#xD;
    terms about things that somebody probably wants.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Danger signs include vagueness about which type of user is speaking, and generalization such as: usually, generally,&#xD;
    often, normally, typically.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
    Example&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
    &lt;em>Users normally require early indication of intrusion into the system.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Do not use vague, undefined terms&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Many words used informally to indicate system quality are too vague for use in requirements. Vague terms include, among&#xD;
    others: user-friendly, versatile, flexible, approximately, as possible.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Requirements using these terms are unverifiable because there is no definite test to show whether the system has the&#xD;
    indicated property.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
    Examples&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
    &lt;em>The print dialog shall be versatile and user-friendly.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    &lt;em>The OK status indicator lamp shall be illuminated as soon as possible after the system self-check is&#xD;
    completed.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Do not express possibilities.&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Suggestions that are not explicitly stated as requirements are invariably ignored by developers.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    &quot;Possible options&quot; are indicated with terms such as: may, might, should, ought, could, perhaps, probably&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
    Example&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
    &lt;em>The reception subsystem probably ought to be powerful enough to receive a signal inside a steel-framed&#xD;
    building.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Avoid wishful thinking.&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Engineering is a real-world activity. No system or component is perfect. Wishful thinking means asking for the&#xD;
    impossible.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Wishful-thinking terms include: reliable, safe, handle all unexpected failures, please all users, run on all platforms,&#xD;
    never fail, upgradeable to all future situations.&#xD;
&lt;/p>&#xD;
&lt;h5>&#xD;
    Examples&#xD;
&lt;/h5>&#xD;
&lt;p>&#xD;
    &lt;em>The gearbox shall be 100% safe in normal operation.&lt;/em>&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    &lt;em>The network shall handle all unexpected errors without crashing.&lt;/em>&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>
