|MSc-IT Study Material|
January 2011 Edition
Computer Science Department, University of Cape Town
| MIT Notes Home | Edition Home |
The requirements engineering process begins by examining the problem which the software should solve and gaining an understanding of both the problem's nature and the nature of the desired solution. This should be done in a context-free manner, that is, a manner which does not presume to know anything concerning the problem, the customers, the users, and the requested solution. The following questions may be asked:
Who is requesting the software?
Who will use the software?
What is the benefit that the software will bring?
It is important to identify the stakeholders in the project. Stakeholders are the people who will find benefit in the project and the software being developed. They may include:
Business operations managers
Advertising and marketing staff
Each of the stakeholders will have a different view on what the software product should do and on what the software engineers should focus on. This might be on creating “sexy” features (from the marketing department), staying within budgets and deadlines (from managers), maintainability (from support engineers) and so on. Out of these views, the requirements engineer should determine which requirements there are a consensus on, and on which requirements the stakeholders disagree. Resolving disagreements between stakeholders makes up the negotiation step.
Something to consider during inception is the effectiveness of the communication between the requirements engineer and the customers. This may be done by, for example, asking the customer if they feel that they have been asked appropriate questions concerning their problems, and if the person communicating with the requirements engineer feels that they are (or are not) the person who should be answering the engineer's questions.
This step is concerned with identifying the overall problem the software is attempting to solve, proposing solutions, negotiating between the differing approaches to solving the problem, and finally specifying a basic set of requirements.
This can be done by calling a meeting between all of the stakeholders. It is important to nominate someone to act as a facilitator, who will guide the meeting. Each of the attendees should bring to the meeting a list of:
objects that make up the system's operating environment
objects used by the system (such as those things which make up the input to the system)
objects produced by the system
the services that interact with these objects
various constraints, such as time and budget constraints, interoperability constraints, performance restraints, usability constraints, and so on.
This step involves expanding on the requirements defined in the previous two steps, and from these requirements producing an analysis model, which is a technical model of the software and its functions.
The construction of analysis models will be discussed in detail in the following two chapters.
This step involves negotiating between the various stakeholders in order to remove any conflict in the requirements. A useful technique for resolving these conflicting requirements is to provide each of the stakeholders with a finite number of priority points. They may then allocate points between the conflicting requirements as they see fit. The overall importance of any requirement can then be determined by the number of priority points that it has received.
The specification step produces the final product of the requirements engineering process. It describes the software, both its functions and constraints. The specification need not be a written document, but could also be a graphical model (such as those produced using the UML), software prototype or formal model, or a collection of these.
This step is concerned with ensuring that the gathered requirements in the software specification meet certain standards of quality. For example, have the requirements been written to the proper level of abstraction, or do they provide too much technical detail for the given stage of development? Is the requirement necessary, or something not essential to the software? Are the requirements unambiguous? Do requirements contradict other requirements?
A useful action during validation is to ensure that each requirement has a source attributed to it. In this way, if more information is required, the requirements engineers know who to contact.
Requirements change over time; requirements management is concerned with controlling and tracking change in the requirements.
Requirements management proceeds by associating requirements with various aspects of the software engineering process. As these aspects are changed, the requirements associated with them can be easily identified and changed. As these requirements are changed, all aspects of development associated with the modified requirements can be examined, and in this way the changes can more easily be propagated through the project.
Such an association between requirements and aspects of the project can be done using a table: each row in the table represents a specific requirement, each column an aspect of the software project. The entries mark whether a requirement is associated with that aspect.