H. Brunelière, J. Cabot, J. Canovas Izquierdo, L. Orue-Echevarria, O. Strauss, M. Wimmer: Software Modernization Revisited: Challenges and Prospects, IEEE Computer, 48 (2015), 8, pages 76 - 80. doi: 10.1109/MC.2015.234
Organizations undertake more and more software modernization projects every day, mostly owing to rapid changes in the technological landscape pushing them to evolve their systems before those systems become obsolete. Such projects are sometimes taken too lightly and start more because of passing fads than because they’re motivated by real technological limitations or system problems. In our experience, many managers have only a partial view of these projects’ complexity and consequences.
A modernization project usually has three phases. First, reverse engineering provides an understanding of the system’s purpose and current state. Many supporting approaches rely on model-based techniques to discover software models representing the system at a higher abstraction level. Examples of such models are UML (Unified Modeling Language) class diagrams, state machines, and workflows. Second, forward engineering analyzes those models and transforms them (if necessary) to become the modernized system’s specification. Finally, developers or automated code generation techniques (or a combination of both) use these models to produce the corresponding code for the targeted platform.
Tools can help in some of these tasks—for example, tools that discover UML models from Java code, or code generators for various platforms. But currently no global methodology exists that can guide software engineers through the whole process. Moreover, no real support exists for assessing project risks or final software quality.