The Promise of Software Reuse

Reuse Economics

There is no need to reuse software if it does not give us some advantage over the alternative (i.e., not reusing software.) Software reuse must offer clear economic advantages. Reusable software must reduce the amount of time/money required to create, enhance and maintain software products or it is of no value beyond that of an academic exercise.  Purveyors of object oriented technologies without a software reuse strategy are at best missing the point, and at their worst are selling buzz words. Object oriented technology is only one piece of the reusable software puzzle.

The most obvious savings from reusable software are seen when a component is created once and reused in other related software products. The more the component is used in subsequent software projects, the greater the economic advantage. The economic advantage is imporved as the ratio of existing components to new components is increased in each new product.

Further, the same forces that result in reusable software, typically result in software that is more readily enhanced. The discipline of dependency managment and the decoupling aspects inherent in the production of reusable software lead to the discovery of techniques that improve the flexibility of software written.This enables products to be introduced in stages beginning with basic functionality that satisfies first-to-market needs, and evolving rapidly towards a more full functioning product that adapts as user feedback introduces refined requirements.

More subtly, but perhaps more economically pronounced, is the potential impact of software reuse on the cost of maintenance. The primary force that reduces mainenance costs is the elimination of copies. Once a component has been fully verified, it is fully verified for all uses/instances. During verification, any fixes made to the reused component are propagated to all projects that use the component.

Finally, as software interfaces become standardized and reuse becomes more pervasive, the effects of competition in the component market-place can have additional economic advantages. For example, consider the effects of this type of competition in the realm of  electronic components.

In the current state-of-the-art time savings are generally long term in nature. However, when the practices become common, even near term savings will be realized. The economic advantages will be realized only through the study and application of practices that promote the development of software reuse. It is important to maintain focus on the reuse objective so as not to wander without purpose among the surrounding distractions.

Dependency Management

There are many problems that must be solved in order to achieve software reuse, but the fundamental key to reuse is dependency management.

Dependency management encompasses techniques that ensure that software components are as independent of one another as possible. A component can only be reused in another environment if the target environment provides all of the facilities required by the component. When components are unnecessarily dependent upon a particular environment, then they become unusable in another environment.

Object oriented languages provide constructs that allow software designers to de-couple modules from one another at the language level. However, there are other organizational aspects of the software development environment that must be considered to ensure that a module is truly reusable.

Among these aspects are:

Reusable software promises improvements in the following areas:
mike@mnmoran.org