1️⃣

Requirements Engineering

The primary measure of success of a software system is the degree to which it meets the purpose for which it was intended.

Software systems requirements engineering (RE) is the process of discovering that purpose and documenting these in a form that is amenable to analysis, communication, and subsequent implementation.

Requirements are typically expressed from the system’s point of view.

Examples of requirements:

The system shall allow users to reserve taxis.

The system should be implemented in Java.

Types of requirements

Example of bad requirements:

The World and the Machine

Terminology:

The purpose of the machine is always in the world.

Requirements engineering is concerned with phenomena occurring in the world.

For an ambulance dispatching system:

  • the occurrences of incidents
  • the report of incidents by public calls
  • the encodings of calls' details into the dispatching software
  • the allocation of an ambulance
  • the arrival of an ambulance at the incident location

As opposed to phenomena occurring inside the machine:

Requirement models are models of the world!

Goals, domain assumptions, requirements

Goals are prescriptive assertions formulated in terms of world phenomena (not necessarily shared). (What we want to achieve)

Domain properties/assumptions are descriptive assertions assumed to hold in the world. (We have no control on them)

Requirements are prescriptive assertions formulated in terms of shared phenomena.

Example:

Goal:

Domain assumptions:

Requirement:

The requirements R are complete if:

  1. R ensure satisfaction of goals G in the context of domain properties D
    1. R and D ⊨ G
    1. Analogy with program correctness: a Program P running on a particular Computer C is correct if it satisfies the Requirements R
      1. P and C ⊨ R
  1. G adequately capture all the stakeholders’ needs
  1. D represent valid properties/assumptions about the world