Paradigm shift in software re-engineering: an experience report

Software re-engineering is one of the solutions advocated for the problems that are encountered during maintenance. The three major phases of a re-engineering process are (i) reverse engineering the code into an abstraction, (ii) modifying the abstraction and (iii) implementing the modified abstraction. This paper is a contribution to the second phase of a re-engineering project. We present a methodology to transform a functional abstraction, obtained by reversing legacy software, into an object-oriented abstraction. This methodology has been applied to a case study that can be scaled to an industry-sized problem. Advantages of the object-oriented approach for developing the reengineered product are briefly discussed. We used the Z and Object-Z formal notations for representing the functional and object-oriented abstractions respectively.Our methodology consists of two phases: (i) the naive transformation that transforms the Z paragraphs into Object-Z class definitions and concentrates on preserving the application domain information; (ii) the modification of Object-Z class definitions, if necessary, to take advantage of object-oriented features. The latter phase concentrates on using inheritance, encapsulation, and polymorphism while preserving the application domain information. We also discuss the limitations of the current approach, automation of the transformation process, and continuing work in this direction.