The adjective certified is sometimes used to describe parts that have been tested in some way prior to entry into a library (e.g., [Lenz 87]. Testing parts prior to their insertion into a reuse library is often claimed to be a productivity advantage. There is the vague expectation that building software from tested parts will somehow make testing simpler or less resource intensive, and that products will be of higher quality [Bass 87,Knig 92,Lenz 87]. Despite the various discussions of testing and reuse, the term certified is not formally defined in the reuse literature.
We are engaged in a research program that is addressing the issue of certifying reusable parts. We advocate the development of software by reuse with the specific intent of establishing as many of the required properties in the final product as possible by depending upon properties present in the reusable parts. For this goal to succeed, a precise definition of certification of reusable parts is required. Given the informal notions of certification that have appeared, it is tempting to think that a definition of certification should be in terms of some test metric or similar. The major difficulty with this approach, no matter how carefully applied, is that any single definition that is offered cannot possibly meet the needs of all interested parties. A second difficulty is that by focusing on a testing-based definition, other important aspects of quality, such as efficient execution performance or ease of maintenance, are omitted from consideration. These difficulties have lead us to establish the following definitions:
An important byproduct of this precise definition of certification is that it provides a mechanism for communication about part quality between the developer of a part and users of the part. Users no longer have to question the quality of parts - certification describes for the prospective user exactly what can be expected of a part. When developing a part for placement in the library, it is the developer's responsibility to show that the part has the properties required for that library. When using a part, it is the user's responsibility to enquire about the precise set of properties that the part has and ensure that they meet his or her needs.
These definitions appear to be of only marginal value because the prescribed properties are not included. However, it is precisely this aspect that makes the definitions useful. The definitions have three very valuable characteristics:
The properties included in a specific instance of certification can be anything relevant to the organization expecting to use the certified parts. However, since preparation of reusable parts is a major capital undertaking, it is inappropriate to include properties that are not essential. The opposite circumstance is also a factor. If establishing a necessary system characteristic is facilitated by the parts in the reuse library having a certain property, then that property had better be included in the certification instance.
Thus the key to the definition of any specific certification instance is the use to be made of the properties in the definition. The only justification for the inclusion of a particular property in a specific certification instance is that possession of that property by parts in a library contributes to the establishment of useful characteristics in systems built from those parts.
We now have a general definition of certification for reusable parts and a conceptual approach to developing specific definitions as required. The key issues to be addressed in the area of certification are:
For software reuse to succeed in delivering a substantial improvement in programmer productivity requires progress in a number of areas. Part certification is an important one.