Requirements of a system are specifications of the service it should provide (features), limits (industry standards, cost limits, ...) and constraints (physical or legal constraints, ...) on it, and background information that is necessary to develop it. It's possible to divide requirements in three categories: functional requirements (what the system must do), non-functional requirements (proprieties the system must have) and constraints. Thus requirements are all the proprieties of a product whose availability affects its feasibility, its realization and its quality.
The requirements management consists in a systematic approach to identify, to define, to structure, to analyze and to verify the requirements that are being handled during the whole development and life cycle of a product.
The requirements management is really important during the first part of the development process of a product: the definition of the specifications. It is on the top left part of the well-known V development model. This task must thus be performed by the customer team itself and only when it is done, can suppliers start working on the concrete development of the product. The success of the work of the suppliers and the cooperation between all of those involved depends directly on the quality of the specifications. To be complete, the specifications must take all the system requirements into account.
However, it is good to let the suppliers give their feedback about the requirements to proceed the necessary adjustments to the specifications, if needed. They are also used at the end of the process during the tests. The features and proprieties of the developed product are checked by confronting the results of the tests with the specifications. The benefits of a good requirements management favorably affects the whole development process. It is also possible after the completion of the product to continue collecting information, such as client or end user feedback, in the requirements data base to improve the quality of the next generations of the product.
The need of a good requirements management increases with the complexity of the system. Because software is often quite complex, requirements management tools are ideal to precisely manage software development or software based products. But the development of any industrial product also requires a good requirements management.
A good requirements management allows to avoid many (but generally not all) design mistakes and to reduce failures during the development process. The cost of fixing errors or changing functionalties increases exponentially with the development phases. In software development, studies showed that the repair cost of an error is about 10 times higher during the tests as during the requirements management. During the maintenance, it is 100 times higher. It is thus worthwhile to insure that non error goes on undiscovered and no main need remains uncovered past the requirements phase. It is also a fact that the main error causes come from bad or wrong requirements. Therefore an improved requirements management can lead subsequently to a reduction in the product failures and development cost of the product.
The global overall quality of the product increases also with an efficient requirements management. In this way, the developer can control all the properties of the product and achieve compliance with standards and regulations. for instance to get an ISO 9000 certification, developers should demonstrate maturity and control of the requirements management process. The customer will be satisfied only if the product does what it is supposed to do. To know what it is supposed to do and also what it really does, good specifications and requirements management are needed. Quality of a product does not happen by chance but only through a well thought out and controlled process.
In practice, only few new functionalities are added in new product versions, by-products or concurrent products. Of course it is not worthwhile to start developing a new product from scratch, and part of former projects (when not whole projects) are generally reused to develop new products. However, the use of already developed elements is only possible, when all the requirements of these elements are known and integrated to the data base of requirements of the new project to detect incompatibilities and to proceed the necessary adjustments. Because even if the variations between different products are small, they are also different. The crash of the first launch of the Ariane 5 rocket was caused by the failure of a software component that had been working perfectly with the smaller Ariane 4. This tragic event shows how complex and risked it is to reuse parts of former projects. A good requirements management should help to reduce the error risk by controlling all the characteristics of every elements of a complex project.
Developers are usually working simultaneously on different projects that can be really close. The size of developer teams can be important. Therefore, it is really important to organize the information. A project cannot succeed, if important information remains (in the head or) on the desk of different people instead of being shared. They can also mix things up by working on concurrent projects, if it is not clearly structured. Only an efficient requirements management allows to work successfully on complex projects.
We have seen the main benefits brought about by good requirements management. Sucess is however by no means easy. Requirements are usually many, varied and complex. One can always try to improve the requirements management and it is worthwhile. However, there is no perfect method. Developers should adapt the different existing methods to their projects, that is, to the size of it, to the kind of product, to the work habits and work process of the company and so on.
The utilization of CASE tools for requirements management can be of great help. Tools, like the market leader Telelogic DOORS or for instance IBM Rational RequisitePro, help the analysts to structure their requirements by capturing, linking, tracing, analyzing and managing a wide range of information in a data base, which access and edition rights are user defined. It is possible so to handle different versions of a requirement, to control the history of the modifications, to link requirements with each other in order to control the dependencies. This is especially useful whith requirement changes: one can automatically analyze the consequences of any change. CASE tools offer many other features, like for example the possibility of distributed work. They can help a lot developers to manage the requirements, but one should also keep in mind they are just tools, and they are not sufficient alone to insure a successful requirements management.
The requirements are generally still badly managed by many projects. And many companies don't use CASE tools at all or only for parts of projects. Or they don't use them right. A reason is that it is really hard and laborious to manage requirements efficiently. And it is not just hard: at the very beginning of the development, it requires time and money. However, an optimized requirements management should eventually reduce the global costs and delays.
Requirements management is one of the most important part of a product development. If done with success, the benefits can be numerous and allow to develop quicker and at lower cost complex products of quality. Thus, although requirements management is a quite difficult task, IT projects should try to improve it as much as possible.
Nicolas Roffet, 7th of October 2003.