Domain requirements reflect the environment in which the system operates so, when we talk about an application domain we mean environments such as train operation, medical records, e-commerce etc.
Domain requirements may be expressed using specialised domain terminology or reference to domain concepts. Because these requirements are specialised, software engineers often find it difficult to understand how they are related to other system requirements.
Domain requirements are important because they often reflect fundamentals of the application domain. If these requirements are not satisfied, it may be impossible to make the system work satisfactorily. For example, the requirements for the insulin pump system that delivers insulin on demand include the following domain requirement:
This requirement means that the developers must be familiar with that standard to ensure that they do not violate it. It constrains both the design of the device and the development process. Other requirements have to be checked against this standard.
Sometimes, characteristics of the application domain mean that the requirements specification has to include a description of how to carry out some computations. For example, the domain requirement below is included in the requirements specification for an automated train protection system. This system automatically stops a train if it goes through a red signal. This requirement states how the train deceleration is computed by the system. It uses domain-specific terminology. To understand it, you need some understanding of the operation of railway systems and train characteristics.
The deceleration of the train shall be computed as:
D (train) = D (control) + D (gradient)
D (gradient) is 9.81ms2 * compensated gradient/alpha and
the values of 9.81ms2 /alpha are known for different types of train.
The requirement for the train system illustrates a major problem with domain requirements. They are written in the language of the application domain (mathematical equations in this case) and it is often difficult for software engineers to understand them. Domain experts may leave information out of a requirement simply because it is so obvious to them. However, it may not be obvious to the developers of the system and they may therefore implement the requirement in the wrong way.