Requirements capture

Fred Brooks: deciding precisely what to build is hardest part of software development; poor requirements specification cripples the system if done wrong; it is the hardest part to rectify later.

Requirements are conditions for a successful solution. Specifications are detailed characteristics of the system, including how the system can be verified. Requirements are functional or non-functional.

Functional requirements are inputs, outputs, computations, timing.

Non-functional requirements are response time, throughput, resource usage, reliability, availability, failure recovery, maintainability, reusability, platform, technology, cost, delivery date.

The first step is to achieve common understanding with the customer/users. Important points:
- Ask questions - brainstorming.
- Get stakeholder input - interviews.
- Make meetings effective.
- Define a need - observation.
- Examine alternative feasible approaches - prototyping.
- Develop evaluation criteria.
- Use system modeling methods - informal use case analysis.
- Set the scene for traceability.
- Stick to standards (usually military).


The outputs of requirements capture include:
- a vision document that contains summary (the need), goals, contract, stakeholders (users, actors), key features, (functional - use cases), constraints.
- a requirements document that includes both functional and non-functional requirements; it should be as unambiguous as possible; functional requirements may be expressed as use case diagrams. Non-functional requirements are best expressed in natural language text. They include look and feel, usability, performance, maintainability, security.
- a testing, verification document that outlines how the system will be tested

Modeling techniques include use case analysis and Class-Resonsibility-Collaborator (CRC) cards. A use case includes a single functional requirement of the system and the actors that take part in the case. It is focused on actions, i.e. procedural issues. A CRC card focuses on data organization issues. Both can be used since the end system will have both aspects.