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 against agreed acceptance criteria, 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.

Requirements can also be captured as first-class elements of a system model, rather than as prose. The Systems Modeling Language (SysML) provides a requirement diagram for this, along with explicit traceability relationships (satisfy, verify, refine, derive) to the design elements that realize or test each requirement.

See also