Requirements Engineering
Requirements engineering is the process of defining, documenting, and maintaining requirements. It determines what the system should do (functional) and how well it should do it (non-functional).
Types of Requirements
Functional requirements describe system behaviour — inputs, outputs, and processing. Non-functional requirements specify quality attributes: performance, security, usability, reliability, and scalability. Domain requirements come from the application domain.
Elicitation
Requirements elicitation gathers needs from stakeholders through interviews, questionnaires, observation, brainstorming, prototyping, and use case workshops. Challenges include tacit knowledge, conflicting stakeholder views, and scope creep.
Analysis and Negotiation
Requirements are analysed for completeness, consistency, and feasibility. Conflicts between stakeholders are negotiated and prioritised. Techniques include requirements modelling (use cases, data flow diagrams) and prioritisation methods (MoSCoW).
Specification
The Software Requirements Specification (SRS) documents all requirements formally. IEEE 830 standard provides a template. An SRS should be complete, consistent, unambiguous, verifiable, and modifiable. It serves as a contract between developers and clients.
Validation
Requirements validation ensures requirements accurately reflect stakeholder needs. Techniques include reviews, walkthroughs, prototyping, and test case generation. Fixing requirements errors early is far cheaper than fixing them in later phases.
Requirements Management
Requirements change over time. Requirements management tracks changes, maintains traceability (linking requirements to design/code/tests), and handles version control. A traceability matrix maps requirements to implementation.
Summary
Requirements engineering is critical to project success. Proper elicitation, analysis, specification, and validation prevent costly misunderstandings and rework in later development phases.