Although object-oriented design methods and programming languages are considered valuable for building flexible and adaptable systems, experience has shown that applying these techniques in isolation is not sufficient. This is now well-accepted in the object-oriented community and the state-of-the-art encourages the construction of frameworks to cope with the wide variety of customer needs and evolving requirements. A framework is a semi-finished application architecture together with a component library, which supports the construction of families of systems for a specific problem domain. The software industry has accepted the principle of frameworks but now demands an approach to transform their object-oriented legacy systems into object-oriented frameworks.
The poster presents the FAMOOS approach for evolving object-oriented legacy systems into frameworks. This approach distinguishes between high-level problems in the application architecture, and low-level problems in the detailed object-oriented design. Low-level problems stem mostly developers being unfamiliar with the object-oriented paradigm or changes in de velopment team. Examples are misuse of inheritance, code duplication and misplaced operations. Typical high-level problems are insufficient documentation and lack of modularity.
We validate our approach against industrial case studies to investigate their applicability on an industrial scale. The case studies are provided by the industrial partners in the project. They have provided legacy systems which range from 55,000 lines up to 2,500,000 lines of C++ or ADA code in different domains (user interface, network management, space mission manage ment). The systems exhibit a range of problems, effectively preventing them from satisfying the evolving requirements imposed by their customers.
The project is work in progress. We will present two areas where we had some initial results.
Code duplication visualizationFirst, on the low-level problem side, we demonstrate a tool that visualizes code duplication. Different patterns of dots representing lines that are duplicated within a file or between a set of files, show good and bad use of cut-and-paste programming. Code duplication in OO systems may, for instance, indicate misuse of inheritance. Some first experiments are done in analyzing industrial code.
Architectural extraction by prototyping Secondly, we present a prototype approach to recover architectural information. This may be needed when no accurate documentation is available. A prototype is useful to communicate with the original development team. It also allows the reengineer to focus on different aspects of the system at a time. Thirdly, it demands awareness of all aspects that are being prototyped by requiring to have a full running prototype at all stages. We used this approach to get the basic understanding of an industrial system consisting of 350,000 lines of C++-code. This system suffered from an almost complete lack of documentation and technical comments in the code. The prototype clearly helped to extract the architecture of the system due to discussions about the prototype with the developers. Assumptions of the prototype developers proved partly false, but it triggered the developers of the old system to explain the aspects of its architecture and its features.
* FAMOOS is ESPRIT IV project #21975. The name is an acronym for Framework-based Approach for Mastering Object-Oriented Software Evolution. Authors' address: Institut fur Informatik (IAM), Universite Bern, Neubruckstrasse 10, CH-3012 Berne, Switzerland. Tel: +41 (31) 631.3547. Fax: +41 (31) 631.3965. E-mail: email@example.com. WWW: http://iamwww.unibe.ch/~famoos/