DECODE: a cooperative environment for reverse-engineering legacy software

While automated program understanders have had some success in partially extracting design information from source code, they are unlikely to be able to completely understand existing real-world legacy systems. To address this problem, we have been developing DECODE, an environment in which programmer and system cooperate to extract object-oriented designs from legacy systems. DECODE consists of three components: an automated program understander that extracts some initial stereotypical object-oriented design elements; a structured notebook that provides the user with a graphical view of the system's understanding and the ability to extend this understanding by linking source code fragments to object-oriented design elements; and a query processor that uses this design information to support conceptual queries about the program's code and design. This paper describes DECODE and our initial successes and failures with using it to reverse engineer several non-trivial COBOL programs.

[1]  John Hartman,et al.  Understanding natural programs using proper decomposition , 1991, [1991 Proceedings] 13th International Conference on Software Engineering.

[2]  Mark Weiser,et al.  Program Slicing , 1981, IEEE Transactions on Software Engineering.

[3]  Ted J. Biggerstaff,et al.  Program understanding and the concept assignment problem , 1994, CACM.

[4]  Françoise Détienne,et al.  An Empirically-Derived Control Structure for the Process of Program Understanding , 1990, Int. J. Man Mach. Stud..

[5]  Richard C. Waters,et al.  The programmer's apprentice , 1990, ACM Press frontier series.

[6]  Koji Takeda,et al.  MERA: meta language for software engineering , 1992, Proceedings Fourth International Conference on Software Engineering and Knowledge Engineering.

[7]  Wojtek Kozaczynski,et al.  Recovering reusable components from legacy systems by program segmentation , 1993, [1993] Proceedings Working Conference on Reverse Engineering.

[8]  Kate Ehrlich,et al.  Empirical Studies of Programming Knowledge , 1984, IEEE Transactions on Software Engineering.

[9]  Thomas Ball,et al.  Visualizing program slices , 1994, Proceedings of 1994 IEEE Symposium on Visual Languages.

[10]  William Lewis Johnson,et al.  Intention-based diagnosis of errors in novice programs (program understanding, debugging, intelligent computer-aided instruction) , 1986 .

[11]  Linda Mary Wills,et al.  Automated program recognition by graph parsing , 1992 .

[12]  Wojtek Kozaczynski,et al.  Program Concept Recognition and Transformation , 1992, IEEE Trans. Software Eng..

[13]  Elliot Soloway,et al.  Delocalized Plans and Program Comprehension , 1986, IEEE Software.

[14]  C. V. Ramamoorthy,et al.  The C Information Abstraction System , 1990, IEEE Trans. Software Eng..

[15]  Premkumar T. Devanbu,et al.  LaSSIE—a knowledge-based software information system , 1991, ICSE '90.

[16]  Norman Wilde,et al.  Dependency analysis tools: reusable components for software maintenance , 1989, Proceedings. Conference on Software Maintenance - 1989.

[17]  Ted J. Biggerstaff,et al.  Program understanding and the concept assignment problem : Reverse engineering , 1994 .

[18]  Linda M. Wills,et al.  Automated Program Recognition: A Feasibility Demonstration , 1987, Artif. Intell..

[19]  Alex Quilici,et al.  A memory-based approach to recognizing programming plans , 1994, CACM.

[20]  Elliot Soloway,et al.  Mental models and software maintenance , 1986, J. Syst. Softw..

[21]  George T. Heineman,et al.  Graphical support for code-level software understanding , 1994, Proceedings KBSE '94. Ninth Knowledge-Based Software Engineering Conference.