Automation

It is widely believed that significant improvements in software quality and productivity can be achieved only from systematic and comprehensive software reuse – which means that nothing would be started from scratch if there is something can be reused and reuse permeates the entire software lifecycle. Clearly, this introduces much routine work that involves little creativity (e.g., classifying and finding the reusable components). Thus, automation support is essential to making large-scale software reuse practical, that is, software developers should be relieved of this technical overhead to the degree possible in order to be able to focus on the real essence of software design and implementation [#!NoSilverBullet!#].

However, the applicability of automation depends on the realization of standardization and tailorability. Generally, well-defined standards prove especially amenable to automation [#!Caldiera91!#].

The degree and effectiveness of automation depends on how much knowledge the automation tools have available about the tasks to be automated: the better these tools understand the tasks, the more they can help. This matches well with the objectives of a PCE, which applies the knowledge of the software process to automatically execute portions of it.

We are encoding incrementally into our Oz/Marvel process our increasing knowledge about reusable architectures, components and modules such as encapsulation and functional hierarchy. Specifically, we represent the concepts of system architecture, subsystems, components, etc., using Marvel's object-oriented database schema, and include in the process simple design rules that explicitly carry out automatic reasoning based on these concepts. For example, there are rules enforcing that within a certain system, a component at a given functional level can only invoke visible operations of components at the next lower level, and the detailed implementation of a component is invisible outside that component. And other rules know how to search the component repository to find the proper components and the ``glues'' to integrate those components into a system.

Separately from Oz, we constructed a special R/Marvel process as an extension of C/Marvel concerned specifically with automating software reuse within a software process. We experimented with modeling and automating some reuse-oriented activities, including classifying and finding the relevant software artifacts. R/Marvel automatically indexes potentially reusable functions based on the naming and documentation standards we followed to develop Marvel. It assists the reuser to find the relevant items by representing queries as objects and providing rules that reason with those objects (i.e., rules concerned with creating and modifying a query).