Understanding Software Systems Using Reverse Engineering Technology

Software engineering research has focused primarily on software construction, neglecting software maintenance and evolution. Observed is a shift in research from synthesis to analysis. The process of reverse engineering is introduced as an aid in program understanding. This process is concerned with the analysis of existing software systems to make them more understandable for maintenance, re-engineering, and evolution purposes. Presented is reverse engineering technology developed as part of the Rigi project. The Rigi approach involves the identi cation of software artifacts in the subject system and the aggregation of these artifacts to form more abstract system representations. Early industrial experience has shown that software engineers using Rigi can quickly build mental models from the discovered abstractions that are compatible with the mental models formed by the maintainers of the underlying software.

[1]  Spencer Rugaber,et al.  Recognizing design decisions in programs , 1990, IEEE Software.

[2]  Alan R. Hevner,et al.  Using function abstraction to understand program behavior , 1990, IEEE Software.

[3]  Hausi A. Müller,et al.  A reverse-engineering approach to subsystem structure identification , 1993, J. Softw. Maintenance Res. Pract..

[4]  Victor R. Basili,et al.  Maintenance = Reuse-Oriented Software Development , 1989 .

[5]  Thomas A. Standish An Essay on Software Reuse , 1984, IEEE Transactions on Software Engineering.

[6]  Christopher W. Pidgeon,et al.  TMM: Software Maintenance by Transformation , 1986, IEEE Software.

[7]  Alexander L. Wolf,et al.  Acm Sigsoft Software Engineering Notes Vol 17 No 4 Foundations for the Study of Software Architecture , 2022 .

[8]  Alberto O. Mendelzon,et al.  Visualizing and querying software structures , 1992, International Conference on Software Engineering.

[9]  Martin Ward Proving program refinements and transformations , 1986 .

[10]  Hausi A. Müller,et al.  Structural Redocumentation: A Case Study , 1995, IEEE Softw..

[11]  Vassileios Karakostas,et al.  Modelling and maintenance software systems at the teleological level , 1990, J. Softw. Maintenance Res. Pract..

[12]  Glenford J Myers,et al.  Reliable software through composite design , 1975 .

[13]  Jean-Francois Girard,et al.  Reverse engineering of user interfaces , 1993, [1993] Proceedings Working Conference on Reverse Engineering.

[14]  H.A. Muller,et al.  Using virtual subsystems in project management , 1993, Proceedings of 6th International Workshop on Computer-Aided Software Engineering.

[15]  CORPORATE Computer Science and Technology Board,et al.  Scaling up: a research agenda for software engineering , 1990, CACM.

[16]  Thomas G. Lane Studying software architecture through design spaces and rules , 1990 .

[17]  William G. Griswold Program restructuring as an aid to software maintenance , 1992 .

[18]  Hausi A. Müller,et al.  Domain-retargetable reverse engineering , 1993, 1993 Conference on Software Maintenance.

[19]  R. W. Schwanke,et al.  Discovering, visualizing, and controlling software structure , 1989, IWSSD '89.

[20]  Kenny Wong Managing views in a program understanding tool , 1993, CASCON.

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

[22]  Ted J. Biggerstaff,et al.  Design recovery for maintenance and reuse , 1989, Computer.

[23]  Mark Dawood,et al.  Reengineering Technology Report. Volume 2. , 1995 .

[24]  Hausi A. Müller,et al.  Programmable Reverse Engineering , 1994, Int. J. Softw. Eng. Knowl. Eng..

[25]  Hans Albert Muller,et al.  Rigi: a model for software system construction, integration, and evolution based on module interface specifications , 1986 .

[26]  Erich B. Buss,et al.  A software reverse engineering experience , 2010, CASCON.

[27]  Atul Prakash,et al.  Source code retrieval using program patterns , 1992, [1992] Proceedings of the Fifth International Workshop on Computer-Aided Software Engineering.

[28]  Shi Kuo Chang,et al.  International journal of software engineering and knowledge engineering : SEKE , 1991 .

[29]  Robert S. Arnold Software Reengineering , 1993 .

[30]  Ruven E. Brooks,et al.  Towards a Theory of the Comprehension of Computer Programs , 1983, Int. J. Man Mach. Stud..

[31]  M. Shaw Larger scale systems require higher-level abstractions , 1989, IWSSD '89.

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

[33]  Hausi A. Müller,et al.  Composing subsystem structures using (k,2)-partite graphs , 1990, Proceedings. Conference on Software Maintenance 1990.

[34]  Atul Prakash,et al.  Investigating Reverse Engineering Technologies for the CAS Program Understanding Project , 1994, IBM Syst. J..

[35]  Scott R. Tilley,et al.  Documenting-in-the-large vs. documenting-in-the-small , 1993, CASCON.

[36]  Judith E. Grass Object-Oriented Design Archaeology with CIA++ , 1992, Comput. Syst..

[37]  Scott R. Tilley Domain-retargetable reverse engineering. II. Personalized user interfaces , 1994, Proceedings 1994 International Conference on Software Maintenance.

[38]  J. F. Traub,et al.  Scaling Up: A Research Agenda for Software Engineering , 1989 .

[39]  Hausi A. Müller,et al.  Personalized information structures , 1993, SIGDOC '93.

[40]  Hausi A. Müller,et al.  A reverse engineering environment based on spatial and visual software interconnection models , 1992, SDE 5.

[41]  Harold Ossher,et al.  A Mechanism for Specifying the Structure of Large, Layered Systems , 1987, Research Directions in Object-Oriented Programming.

[42]  Hausi A. Müller,et al.  Documenting software systems with views , 1992, SIGDOC '92.

[43]  Linda M. Wills,et al.  Recognizing a program's design: a graph-parsing approach , 1990, IEEE Software.