Software Requirements
Definition
A software requirement is a documented, precise statement of a capability, condition, or constraint that the software system must satisfy, in order to solve a real-world problem or fulfill a user need.
IEEE definition: "A condition or capability needed by a user to solve a problem or achieve an objective" OR "a condition or capability that must be met or possessed by a system to satisfy a contract, standard, specification, or other formally imposed document."
Levels of Requirements (Requirement Abstraction Hierarchy)
- Business Requirements — high-level organizational goals ("increase sales by 20%")
- User Requirements — what users need to do with the system ("user shall be able to place an order")
- Functional Requirements — specific system behaviors ("system shall calculate tax on checkout")
- Non-functional Requirements — quality attributes (performance, security, usability)
Characteristics of a Good Requirement
A well-written requirement should be:
- Correct — accurately represents user need
- Unambiguous — only one interpretation possible
- Complete — all necessary info included
- Consistent — doesn't conflict with other requirements
- Verifiable/Testable — can be checked via a test
- Traceable — linked to its source and to design/test elements
- Feasible — realistically implementable within constraints
- Prioritized — ranked by importance/necessity
Requirement Types (broad classification)
- Functional Requirements (FR) — what the system should do
- Non-functional Requirements (NFR) — how well the system does it (quality attributes)
- Domain Requirements — imposed by the application domain (e.g., banking regulations)
- Constraints — limitations (technology, budget, time, legal)
Exam tip: The "Characteristics of a good requirement" list (Correct, Unambiguous, Complete, Consistent, Verifiable, Traceable, Feasible) is a very frequently asked short-answer question — memorize it as a checklist (mnemonic: CUCCVTF).