Recast: Evolution of Object-Oriented Applications
Recast: Evolution of Object-Oriented Applications is a project funded by the Swiss National Science Foundation (SNSF project # 620-066077) led By Prof. S. Ducasse from 2002 to 2006.
This research project is about reengineering object-oriented applications. Reengineering such applications inherits complex problems related to software maintenance, i.e., program understanding, program analysis, and program transformation and adds to them (1) the complexity introduced by late binding, dynamic typing, and incremental definition specific to object-oriented programming, and (2) the complexity related to the new way of software development (multiple parallel versions, frameworks, and products lines). Based on our research experience, this research project is structured in three non-orthogonal directions: (a) reengineering, (b) analysis of versions and (c) migration of object-oriented applications towards components.
Software Engineering, Object-Oriented Programming Reengineering, Reverse Engineering, Program Understanding, Architecture, Meta-Model, Code Analysis, Frameworks, Patterns.
Most of the effort while developing and maintaining a system is spent supporting its evolution [Som96]. This document presents RECAST, a research project whose goal is to support the evolution of objectoriented applications. The following two laws due to Manny Lehman illustrate the vision of RECAST. They stress the fact that software must continuously evolve to stay useful and that this evolution is accompanied by complexity.
- *Continuous Changes.* an E-type program1 that is used must be continually adapted else it becomes progressively less satisfactory [Leh96]
- *Increasing Complexity.* As a program is evolved its complexity increases unless work is done to maintain or reduce it. [Leh96]
RECAST is based on the vision that supporting evolution of applications will be always mandatory. This is independent of the language and the paradigm used to develop the applications. Tools and techniques are necessary to support the evolution of applications. RECAST structures the research on evolution of object-oriented applications around three directions.
- *Reengineering.* First it considers the reengineering aspect of evolution. It addresses questions such as: how can we understand a large industrial application, i.e., reverse engineer it, how can we identify problems that hamper evolution, how can we change it, i.e., reengineer the application to fix those problems. - *Versions.* Second, it considers multiple versions analysis, i.e., systems are put best understood by taking into account their evolution over several versions. Hence a temporal dimension is added and used to understand applications and predict their future.
- *Migration.* Then finally it approaches paradigm shift by investigating how the migration of objectoriented systems into component systems can be supported. It introduces the problematic of supporting the identification, extraction and migration of code in terms of components.
The concrete results we want to obtain within a period of three to four years are the following.
- *Reengineering - Meta-meta-model.* One of the key aspects of this project is the new infrastructure and meta-model we want to develop. Having an extensible meta-model will support a new range of work such as the architecture extraction, program understanding, and program analysis and will allow us to create a synergy between the other research directions.
- *Reengineering - Supporting Code Understanding and new IDEs.* We want to investigate new ways of helping programmers to understand code. The idea is to add semantic information to code fragments and integrate it into new IDEs. - *Version Analysis.* We want to use the version information to support the understanding of application. We want to be able to analyse versions of a system with our tool CODECRAWLER.
- *Component Migration - A Framework for Component Description.* We want to work on the migration of object-oriented code towards components. For this purpose, we want to design a framework with which different component models can be represented and compared.
- *Component Migration - Component Identification.* We want to gain experience in the identification of components within object-oriented code. We plan to apply concept analysis and cluster analysis techniques.