- **Requirements engineering** designates all the activities related to requirements discovery, negotiation, documentation, and maintenance.
- Alternative designation: analysis
>[!hint]+ Zave, 1997
>Requirements engineering, in the scope of software engineering, is focused on the real-world objectives established for the functionalities and the restrictions of software systems.
- This activity aims to analyse and classify the elicited, but not yet handled, requirements.
- Organises the requirements in cohesive groups.
- The analyst must intervene, whenever the requirements: do not make sense; are in contradiction among them; are incoherent; are incomplete; are vague.
### 4. Negotiation
- Requirements engineering involves communication and negotiation among various stakeholders.
- Conflict situations between requirements are inevitable. One needs to promote negotiation mechanisms among the stakeholders. Its result can have a significant impact on the acceptance of the final system.
- Another form of handling conflicts consists in adopting prioritisation techniques, to sustain the choice of the requirements subset to be implemented at each instant.
### 5. Documentation
- Requirements documents serve as the principal reference to the subsequent phases of the development process.
- The requirements document is organised according to two distinct perspectives:
1. user requirements - describe the expectations and the necessities of the users;
2. system requirements - establish the agreement between the client and the development team.
- The structure/formality of the documentation should vary in line with the system characteristics and the adopted process.
### 6. Validation
- The objective is to ensure that the requirements define the system desired by the client.
- One should examine the requirements document through inspections or technical reviews of the specifications, to evaluate if it describes the intended system.
- Validation is a testing activity.
- While the requirements engineering activities are conducted, it is necessary to execute tasks that allow requirements to be verified and validated.
### 7. Management
- The requirements set is constantly changing.
- Mechanisms to manage that instability context are needed, in order to evaluate the impact that the changes in the requirements can have.
- One must reject changes that imply: a significative increase in cost; a postponement of the final delievery; a system devaluation for the user.
- The requirements management activity seeks to aid the development team to identify, control and trace the requirements and their changes.
## Difficulties
1. Communication problems between requirements engineers and users are common.
2. Changes in the requirements must be considered as a natural fact.