Skip to content

Instantly share code, notes, and snippets.

@weitsang
Last active August 29, 2015 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save weitsang/411ad0dc8a2d54e01d37 to your computer and use it in GitHub Desktop.
Save weitsang/411ad0dc8a2d54e01d37 to your computer and use it in GitHub Desktop.
Lecture Notes, CS3281 AY 1415, Lecture 1

On Software Requirements

CS3281/CS3282 Lecture Notes

Semester 1, AY 2014/15

13 August 2014

Introduction

  • Specify what your end-product can do / what the customer wants
  • Functional / non-functional requirements
  • Many tools for requirement analysis
  • Use whatever tools suitable for your project

Why Good Requirements Important?

  • Helps to define the goals of the project
  • Helps to communicate among team members and with customers
  • Serve as a contract (for CS3281, can change later)
  • Helps to determine test cases and evaluation criteria
  • Helps to plan projects (estimate time, prioritize features)
  • Helps to reduce bugs
  • Leads to better software design

Properties of Good Requirements

  • Adapted from Scott Sehlhorst’s Top Ten Rules
    1. Correct -- of course
    2. Valuable — put in requirements that are of good values to the users; solve their problems; support their strategy, etc.
      • prioritize the requirements (must-have, good-to-have, only-if-time-permits, etc)
    3. Easy to read — write for people with diff background; use figures; scannable; cross-references, etc.
    4. Design free — focus on what, not how
    5. Attainable - don't put in things you can't attain
      • e.g., "analyze 100 video cameras in real-time"
    6. Complete - doesn't leave out anything, consider error cases, external systems
    7. Consistent — don’t put in impossible requirements, use consistent terms
      • e.g., "device"/"phone"/"mobile" -- are they the same or not. Establish a project glossary will help.
      • e.g., "only administrator can edit X", else where, "any user can edit X"
    8. Unambiguous - cannot be interpreted differently by different people
      • e.g., avoid "the user",
    9. Verifiable - can be verified within your means (finite, cost-effective way to verify)
      • e.g., avoid "easy to use", "should work most of the time"
    10. Atomic — cannot say “half of this requirement is implemented”
      • e.g., "user can post text, URLs, or photos to their wall."

Requirements for Discussion

Dilbert on Requirements

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment