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.