Requirement Engineering
Requirements Engineering (RE) is the systematic and repeatable process of defining, managing, and testing the requirements for a product. It's essentially the backbone for a successful software project, ensuring the final product actually meets the customer's needs.
What is Requirement Engineering?
- Requirement: A requirement is a function, constraint, or other property that the system must provide to fulfill the needs of its intended user(s).
- Engineering: This implies that systematic and repeatable techniques should be used.
- RE Definition: Requirements Engineering involves software engineering actions that begin with communication activity and continue into the modeling activity. The entire process creates a solid foundation for the subsequent design and construction phases.
If the software engineering team doesn't first understand the problem's requirements, the resulting software has a high probability of not meeting customer needs.
Characteristics of a Good Requirement
For software development to be a success and not a disaster, the requirements must be top-notch1. A good requirement is:
- Unambiguous & Clear: It must have only one possible interpretation 2and a standard structure3. No vague language allowed!
- Correct: It must accurately describe a real and necessary need for the customer4.
- Understandable: The meaning should be easily graspable by any reader5.
- Verifiable (Testable): A specific mechanism must exist so the requirement can be tested6. If you can't test it, you can't prove it works.
- Complete: All essential information should be present7.
- Consistent: It must not conflict with any other requirements8.
- Traceable: It can be tracked back to its origin and forward through design and code9.
Requirement Engineering Tasks
- Inception: Establish a fundamental understanding of the core problem and the nature of the desired solution by asking "context-free" questions. This phase identifies the people who want a solution and the kind of solution desired.
- Elicitation: Draw out the requirements from various stakeholders (customers, users, and others). The goal is to find out what the product objectives are and how the product fits into business needs.
- Elaboration: Create a refined technical model (an analysis model) that represents the information, functional, and behavioral aspects of the requirements. This is often driven by creating and refining user scenarios describing end-user interactions.