Reveng: a cost-effective approach to reverse-engineering

Like many other Software Engineering buzzwords, "Reverse Engineering" emerges as an attempt to formalize some specific tasks, which have long been performed by almost every software development or maintenance team, but which were not judged worth before to be considered an engineering discipline. The emergence of powerful Computer Aided Software Engineering (CASE) tools opens new opportunities for the cost-effective re-use of the investments made in existing software systems, and thus for the development of specific tools and techniques to recover the original design of these systems.While most of the current discussion is centered around the development and utilization of tools to automate the Reverse Engineering Process, our attention focuses on the practical application of these tools and techniques under conditions found in real world entreprises. From this view-point, the scope of the Reverse Engineering Techniques appears to be much broader than implied by the characteristics of individual tools.Our approach is based on experiences gained by CMG in projects, either directly related to Reverse Engineering or dealing with tasks, where specific Reverse Engineering Techniques and Tools were advantageously used (e.g. Software Maintenance, Re-Design, Down-Sizing, Conversion). It also evidentiates some pitfalls, which may lead to the failure of some Reverse Engineering projects.