Techniques for Software Renovation

Michael B. Siff
University of Wisconsin

Software renovation is the process of introducing new features---including polymorphism, objects, and encapsulation---into existing software systems while preserving the original functionality of the system. The goal of software renovation is to improve the efficiency of development, maintenance, and comprehension. The research described in this thesis focuses on three software-renovation techniques:

  1. Generalization: The identification and subsequent transformation of program components that operate on a particular type of input into polymorphic program components that operate on a wide array of inputs.
  2. Modularization: The clustering of associated data types and functions with the intent of encapsulating the types and function into distinct classes or modules.
  3. Physical subtyping: The identification of relationships among data types based on the representation of the types in memory with the intent of generating inheritance hierarchies.

The techniques described in the thesis are aimed particularly at the problem of transforming legacy C programs into C++ programs that make use of C++'s advanced features---most notably classes, templates, inheritance, and virtual functions. Some aspects of this work apply specifically to the C-to-C++ problem; however, most aspects apply to almost any language.

(Click here to access the paper.)