Requirements engineering
Requirements engineering is the subdiscipline within software engineering concerned with establishing the capabilities and conditions of software needed by stakeholders to solve a problem or achieve an objective, or to satisfy a contract, standard, or specification.
It encompasses four principal activities:
- Requirements elicitation – soliciting requirements from stakeholders, through techniques such as interviews, workshops, and EventStorming.
- Requirements analysis – examining elicited requirements for completeness, consistency, and feasibility, and resolving conflicts between stakeholders.
- Requirements specification – documenting the analyzed requirements, typically as functional and non-functional requirements, in a system requirements specification (SRS).
- Requirements validation – confirming, usually via acceptance testing, that the specified requirements do in fact reflect what stakeholders need.
These activities are rarely a strict, one-pass pipeline. Requirements typically evolve throughout a project’s life – early on, some requirements are captured but not yet fully worked out, and analysis and specification continue as understanding deepens. See requirements for more on how individual requirements are expressed.