What Architects Should Know About Reverse Engineering and Rengineering

Architecture reconstruction is a form of reverse engineering that reconstructs architectural views from an existing system. It is often necessary because a complete and authentic architectural description is not available. This paper puts forward the goals of architecture reconstruction, revisits the technical difficulties we are facing in architecture reconstruction, and presents a summary of a literature survey about the types of architectural viewpoints addressed in reverse engineering research.

[1]  Arun Lakhotia,et al.  Toward experimental evaluation of subsystem classification recovery techniques , 1995, Proceedings of 2nd Working Conference on Reverse Engineering.

[2]  Alexander Egyed,et al.  A scenario-driven approach to traceability , 2001, Proceedings of the 23rd International Conference on Software Engineering. ICSE 2001.

[3]  Nick Mitchell,et al.  Visualizing the Execution of Java Programs , 2001, Software Visualization.

[4]  Onaiza Maqbool,et al.  The weighted combined algorithm: a linkage algorithm for software clustering , 2004, Eighth European Conference on Software Maintenance and Reengineering, 2004. CSMR 2004. Proceedings..

[5]  Norman Wilde,et al.  A case study of feature location in unstructured legacy Fortran code , 2001, Proceedings Fifth European Conference on Software Maintenance and Reengineering.

[6]  Gregor Snelting,et al.  Assessing Modular Structure of Legacy Code Based on Mathematical Concept Analysis , 1997, Proceedings of the (19th) International Conference on Software Engineering.

[7]  Vassilios Tzerpos,et al.  An optimal algorithm for MoJo distance , 2003, 11th IEEE International Workshop on Program Comprehension, 2003..

[8]  David W. Embley,et al.  Assessing the quality of abstract data types written in Ada , 1988, Proceedings. [1989] 11th International Conference on Software Engineering.

[9]  Daniel Jackson,et al.  Lightweight extraction of object models from bytecode , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[10]  Johan Moe,et al.  Understanding distributed systems via execution trace data , 2001, Proceedings 9th International Workshop on Program Comprehension. IWPC 2001.

[11]  Amir Michail,et al.  Design recovery of interactive graphical applications , 2003, 25th International Conference on Software Engineering, 2003. Proceedings..

[12]  Thomas W. Reps,et al.  Identifying Modules via Concept Analysis , 1999, IEEE Trans. Software Eng..

[13]  Dowming Yeh,et al.  Reverse engineering aggregation relationship based on propagation of operations , 2002, Proceedings of the Sixth European Conference on Software Maintenance and Reengineering.

[14]  Monica S. Lam,et al.  Automatic extraction of object-oriented component interfaces , 2002, ISSTA '02.

[15]  Guy Melançon,et al.  Software components capture using graph clustering , 2003, 11th IEEE International Workshop on Program Comprehension, 2003..

[16]  Hong Yan,et al.  DiscoTect: a system for discovering architectures from running systems , 2004, Proceedings. 26th International Conference on Software Engineering.

[17]  Gregory D. Abowd,et al.  Architectural synthesis: integrating multiple architectural perspectives , 1999, Sixth Working Conference on Reverse Engineering (Cat. No.PR00303).

[18]  Richard C. Holt,et al.  Reconstructing ownership architectures to help understand software systems , 1999, Proceedings Seventh International Workshop on Program Comprehension.

[19]  Mikael Lindvall,et al.  Does the code match the design? A process for architecture evaluation , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[20]  IEEE-SA Standards Board , 2000 .

[21]  Shi-Kuo Chang,et al.  Advances in Software Engineering and Knowledge Engineering , 1993, Series on Software Engineering and Knowledge Engineering.

[22]  Giuliano Antoniol,et al.  Augmenting pattern-based architectural recovery with flow analysis: Mosaic-a case study , 1996, Proceedings of WCRE '96: 4rd Working Conference on Reverse Engineering.

[23]  Harald C. Gall,et al.  Pattern-supported architecture recovery , 2002, Proceedings 10th International Workshop on Program Comprehension.

[24]  Mircea Trifu,et al.  Architecture-aware adaptive clustering of OO systems , 2004, Eighth European Conference on Software Maintenance and Reengineering, 2004. CSMR 2004. Proceedings..

[25]  Gregor Snelting,et al.  On the inference of configuration structures from source code , 1994, Proceedings of 16th International Conference on Software Engineering.

[26]  Doris L. Carver,et al.  A visual representation model for software subsystem decomposition , 1998, Proceedings Fifth Working Conference on Reverse Engineering (Cat. No.98TB100261).

[27]  Rainer Koschke,et al.  Static trace extraction , 2002, Ninth Working Conference on Reverse Engineering, 2002. Proceedings..

[28]  Rudolf Ferenc,et al.  Mining design patterns from C++ source code , 2003, International Conference on Software Maintenance, 2003. ICSM 2003. Proceedings..

[29]  Paul Clements,et al.  Documenting Software Architecture: Documenting Behavior , 2002 .

[30]  Mehdi Jazayeri,et al.  Architecture recovery in ARES , 1996, ISAW '96.

[31]  Stéphane Ducasse,et al.  Using dynamic information for the iterative recovery of collaborations and roles , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[32]  Jukka Viljamaa,et al.  Reverse engineering framework reuse interfaces , 2003, ESEC/FSE-11.

[33]  Eleni Stroulia,et al.  A study on the current state of the art in tool-supported UML-based static reverse engineering , 2002, Ninth Working Conference on Reverse Engineering, 2002. Proceedings..

[34]  Nicolas Anquetil,et al.  Extracting concepts from file names; a new file clustering criterion , 1998, Proceedings of the 20th International Conference on Software Engineering.

[35]  Harald C. Gall,et al.  Finding objects in procedural programs: an alternative approach , 1995, Proceedings of 2nd Working Conference on Reverse Engineering.

[36]  Andrian Marcus,et al.  Recovering documentation-to-source-code traceability links using latent semantic indexing , 2003, 25th International Conference on Software Engineering, 2003. Proceedings..

[37]  Rainer Koschke Rekonstruktion von Software-Architekturen , 2005, Informatik - Forschung und Entwicklung.

[38]  Jean-Francois Girard,et al.  Comparison of abstract data type and abstract state encapsulation detection techniques for architectural understanding , 1997, Proceedings of the Fourth Working Conference on Reverse Engineering.

[39]  Chung-Horng Lung,et al.  Software architecture recovery and restructuring through clustering techniques , 1998, ISAW '98.

[40]  Giuseppe A. Di Lucca,et al.  Recovering use case models from object-oriented code: a thread-based approach , 2000, Proceedings Seventh Working Conference on Reverse Engineering.

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

[42]  René L. Krikhaar,et al.  Architecture comprehension tools for a PBX system , 1999, Proceedings of the Third European Conference on Software Maintenance and Reengineering (Cat. No. PR00090).

[43]  Joseph Gil,et al.  Revealing class structure with concept lattices , 2003, 10th Working Conference on Reverse Engineering, 2003. WCRE 2003. Proceedings..

[44]  Gail C. Murphy,et al.  Conceptual module querying for software reengineering , 1998, Proceedings of the 20th International Conference on Software Engineering.

[45]  Emden R. Gansner,et al.  Using automatic clustering to produce high-level system organizations of source code , 1998, Proceedings. 6th International Workshop on Program Comprehension. IWPC'98 (Cat. No.98TB100242).

[46]  Mark Harman,et al.  A multiple hill climbing approach to software module clustering , 2003, International Conference on Software Maintenance, 2003. ICSM 2003. Proceedings..

[47]  Eleni Stroulia,et al.  Mining system-user interaction traces for use case models , 2002, Proceedings 10th International Workshop on Program Comprehension.

[48]  Dennis B. Smith,et al.  Towards a framework for program understanding , 1996, WPC '96. 4th Workshop on Program Comprehension.

[49]  Kamran Sartipi,et al.  A graph pattern matching approach to software architecture recovery , 2001, Proceedings IEEE International Conference on Software Maintenance. ICSM 2001.

[50]  René L. Krikhaar,et al.  Reverse architecting approach for complex systems , 1997, 1997 Proceedings International Conference on Software Maintenance.

[51]  Ali Shokoufandeh,et al.  Applying spectral methods to software clustering , 2002, Ninth Working Conference on Reverse Engineering, 2002. Proceedings..

[52]  Periklis Andritsos,et al.  Software clustering based on information loss minimization , 2003, 10th Working Conference on Reverse Engineering, 2003. WCRE 2003. Proceedings..

[53]  Václav Rajlich,et al.  Case study of feature location using dependence graph , 2000, Proceedings IWPC 2000. 8th International Workshop on Program Comprehension.

[54]  Michael W. Godfrey,et al.  The build-time software architecture view , 2001, Proceedings IEEE International Conference on Software Maintenance. ICSM 2001.

[55]  S. Mansoor Sarwar,et al.  Software clustering techniques and the use of combined algorithm , 2003, Seventh European Conference onSoftware Maintenance and Reengineering, 2003. Proceedings..

[56]  Melissa P. Chase,et al.  Managing recovered function and structure of legacy software components , 1998, Proceedings Fifth Working Conference on Reverse Engineering (Cat. No.98TB100261).

[57]  Frank Tip,et al.  Reengineering class hierarchies using concept analysis , 1998, SIGSOFT '98/FSE-6.

[58]  Wei Zhao,et al.  SNIAFL: towards a static non-interactive approach to feature location , 2004, ICSE 2004.

[59]  Alexander S. Yeh,et al.  Recognizers for extracting architectural features from source code , 1995, Proceedings of 2nd Working Conference on Reverse Engineering.

[60]  Kamran Sartipi Alborz: a query-based tool for software architecture recovery , 2001, Proceedings 9th International Workshop on Program Comprehension. IWPC 2001.

[61]  James H. Cross,et al.  Reverse engineering and design recovery: a taxonomy , 1990, IEEE Software.

[62]  Hausi A. Müller,et al.  Shimba—an environment for reverse engineering Java software systems , 2001, Softw. Pract. Exp..

[63]  Ilka Philippow,et al.  Supporting architectural restructuring by analyzing feature models , 2004, Eighth European Conference on Software Maintenance and Reengineering, 2004. CSMR 2004. Proceedings..

[64]  Giuliano Antoniol,et al.  A cliche-based environment to support architectural reverse engineering , 1996, Proceedings of WCRE '96: 4rd Working Conference on Reverse Engineering.

[65]  John T. Stasko,et al.  Visualizing Interactions in Program Executions , 1997, Proceedings of the (19th) International Conference on Software Engineering.

[66]  Derek Rayside,et al.  The effect of call graph construction algorithms for object-oriented programs on automatic clustering , 2000, Proceedings IWPC 2000. 8th International Workshop on Program Comprehension.

[67]  Dusan M. Velasevic,et al.  A use-case driven method of architecture recovery for program understanding and reuse reengineering , 2000, Proceedings of the Fourth European Conference on Software Maintenance and Reengineering.

[68]  Jürgen Wolff von Gudenberg,et al.  Pattern-based design recovery of Java software , 1998, SIGSOFT '98/FSE-6.

[69]  Claudio Riva,et al.  Combining static and dynamic views for architecture reconstruction , 2002, Proceedings of the Sixth European Conference on Software Maintenance and Reengineering.

[70]  André Marburger,et al.  E-CARES research project: understanding complex legacy telecommunication systems , 2001, Proceedings Fifth European Conference on Software Maintenance and Reengineering.

[71]  Gokul V. Subramaniam,et al.  Deriving an object model from legacy Fortran code , 1996, 1996 Proceedings of International Conference on Software Maintenance.

[72]  Arie van Deursen,et al.  Symphony: view-driven software architecture reconstruction , 2004, Proceedings. Fourth Working IEEE/IFIP Conference on Software Architecture (WICSA 2004).

[73]  Jeff Kramer,et al.  Developing an approach for the recovery of distributed software architectures , 1998, Proceedings. 6th International Workshop on Program Comprehension. IWPC'98 (Cat. No.98TB100242).

[74]  Gerald C. Gannod,et al.  Verification of recovered software architectures , 2003, 11th IEEE International Workshop on Program Comprehension, 2003..

[75]  David Notkin,et al.  Software Reflexion Models: Bridging the Gap between Design and Implementation , 2001, IEEE Trans. Software Eng..

[76]  Alexander S. Yeh,et al.  Reverse Engineering to the Architectural Level , 1995, 1995 17th International Conference on Software Engineering.

[77]  Giuliano Antoniol,et al.  Object oriented design pattern inference , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[78]  David R. Harris,et al.  Relating expectations to automatically recovered design patterns , 2002, Ninth Working Conference on Reverse Engineering, 2002. Proceedings..

[79]  Gregor Snelting,et al.  Reengineering of configurations based on mathematical concept analysis , 1996, TSEM.

[80]  Robert W. Schwanke,et al.  An intelligent tool for re-engineering software modularity , 1991, [1991 Proceedings] 13th International Conference on Software Engineering.

[81]  Spencer Rugaber,et al.  Using visualization for architectural localization and extraction , 1997, Proceedings of the Fourth Working Conference on Reverse Engineering.

[82]  David Notkin,et al.  ArchJava: connecting software architecture to implementation , 2002, ICSE '02.

[83]  Richard C. Holt,et al.  MoJo: a distance metric for software clusterings , 1999, Sixth Working Conference on Reverse Engineering (Cat. No.PR00303).

[84]  Spiros Mancoridis,et al.  Toward a generic framework for computing subsystem interfaces , 1996, ISAW '96.

[85]  Richard L. Piazza,et al.  Design Recovery for Distributed Systems , 1997, IEEE Trans. Software Eng..

[86]  Paolo Tonella,et al.  Reverse engineering of the interaction diagrams from C++ code , 2003, International Conference on Software Maintenance, 2003. ICSM 2003. Proceedings..

[87]  Melissa P. Chase,et al.  Analysis and presentation of recovered software architectures , 1996, Proceedings of WCRE '96: 4rd Working Conference on Reverse Engineering.

[88]  Amir Michail,et al.  Data mining library reuse patterns using generalized association rules , 2000, Proceedings of the 2000 International Conference on Software Engineering. ICSE 2000 the New Millennium.

[89]  Arie van Deursen,et al.  Identifying objects using cluster and concept analysis , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[90]  Richard C. Holt,et al.  Recovering the structure of software systems using tube graph interconnection clustering , 1996, 1996 Proceedings of International Conference on Software Maintenance.

[91]  René L. Krikhaar,et al.  Architecture analysis tools to support evolution of large industrial systems , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[92]  David Notkin,et al.  Software reflexion models: bridging the gap between source and high-level models , 1995, SIGSOFT FSE.

[93]  Lionel C. Briand,et al.  Towards the reverse engineering of UML sequence diagrams , 2003, 10th Working Conference on Reverse Engineering, 2003. WCRE 2003. Proceedings..

[94]  Stéphane Ducasse,et al.  Recovering high-level views of object-oriented applications from static and dynamic information , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[95]  Tarja Systä,et al.  Understanding the Behavior of Java Programs , 2000, WCRE.

[96]  Farhad Mavaddat,et al.  Architectural design recovery using data mining techniques , 2000, Proceedings of the Fourth European Conference on Software Maintenance and Reengineering.

[97]  Richard C. Holt,et al.  Using graph patterns to extract scenarios , 2002, Proceedings 10th International Workshop on Program Comprehension.

[98]  Jim Welsh,et al.  Towards pattern-based design recovery , 2002, ICSE '02.

[99]  Rainer Koschke,et al.  Aiding program comprehension by static and dynamic feature analysis , 2001, Proceedings IEEE International Conference on Software Maintenance. ICSM 2001.

[100]  Hausi A. Müller,et al.  Rigi: a system for programming-in-the-large , 1988, Proceedings. [1989] 11th International Conference on Software Engineering.

[101]  Fernando Brito e Abreu,et al.  A coupling-guided cluster analysis approach to reengineer the modularity of object-oriented systems , 2000, Proceedings of the Fourth European Conference on Software Maintenance and Reengineering.

[102]  Rick Kazman,et al.  View extraction and view fusion in architectural understanding , 1998, Proceedings. Fifth International Conference on Software Reuse (Cat. No.98TB100203).

[103]  Valérie Issarny,et al.  Multi-view description of software architectures , 1998, ISAW '98.

[104]  Jörg Niere,et al.  Handling large search space in pattern-based reverse engineering , 2003, 11th IEEE International Workshop on Program Comprehension, 2003..

[105]  Robert L. Nord,et al.  Reconstructing software architecture for J2EE web applications , 2003, 10th Working Conference on Reverse Engineering, 2003. WCRE 2003. Proceedings..

[106]  Giuliano Antoniol,et al.  Design pattern recovery in object-oriented software , 1998, Proceedings. 6th International Workshop on Program Comprehension. IWPC'98 (Cat. No.98TB100242).

[107]  Lutz Prechelt,et al.  Design recovery by automated search for structural design patterns in object-oriented software , 1996, Proceedings of WCRE '96: 4rd Working Conference on Reverse Engineering.

[108]  Spiros Mancoridis,et al.  Form: a framework for creating views of program executions , 2001, Proceedings IEEE International Conference on Software Maintenance. ICSM 2001.

[109]  Rainer Koschke,et al.  A framework for experimental evaluation of clustering techniques , 2000, Proceedings IWPC 2000. 8th International Workshop on Program Comprehension.

[110]  Jean-Francois Girard,et al.  Finding components in a hierarchy of modules: a step towards architectural understanding , 1997, 1997 Proceedings International Conference on Software Maintenance.

[111]  Martin Gogolla,et al.  Capturing dynamic program behaviour with UML collaboration diagrams , 2001, Proceedings Fifth European Conference on Software Maintenance and Reengineering.

[112]  Richard C. Holt,et al.  The Orphan Adoption problem in architecture maintenance , 1997, Proceedings of the Fourth Working Conference on Reverse Engineering.

[113]  Rainer Koschke,et al.  Hierarchical reflexion models , 2003, 10th Working Conference on Reverse Engineering, 2003. WCRE 2003. Proceedings..

[114]  Barbara G. Ryder,et al.  Constructing precise object relation diagrams , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[115]  Arun Lakhotia,et al.  A formalism to automate mapping from program features to code , 2000, Proceedings IWPC 2000. 8th International Workshop on Program Comprehension.

[116]  Michael W. Godfrey,et al.  Architecture recovery of dynamically linked applications: a case study , 2002, Proceedings 10th International Workshop on Program Comprehension.

[117]  Spiros Mancoridis,et al.  CRAFT: a framework for evaluating software clustering results in the absence of benchmark decompositions [Clustering Results Analysis Framework and Tools] , 2001, Proceedings Eighth Working Conference on Reverse Engineering.

[118]  Rudolf K. Keller,et al.  Pattern-based reverse-engineering of design components , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[119]  Welf Löwe,et al.  Automatic design pattern detection , 2003, 11th IEEE International Workshop on Program Comprehension, 2003..

[120]  Paul Clements,et al.  Documenting Software Architecture: Documenting Behavior , 2002 .

[121]  Martin P. Robillard,et al.  Separating features in source code: an exploratory study , 2001, Proceedings of the 23rd International Conference on Software Engineering. ICSE 2001.

[122]  Robert L. Nord,et al.  Proceedings of the Working IEEE/IFIP Conference on Software Architecture , 2006 .

[123]  Paolo Tonella,et al.  Concept Analysis for Module Restructuring , 2001, IEEE Trans. Software Eng..

[124]  Melissa P. Chase,et al.  Manipulating Recovered Software Architecture Views , 1997, Proceedings of the (19th) International Conference on Software Engineering.

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

[126]  T. Systa,et al.  On the relationships between static and dynamic models in reverse engineering Java software , 1999, Sixth Working Conference on Reverse Engineering (Cat. No.PR00303).

[127]  Norman Wilde,et al.  TraceGraph: immediate visual location of software features , 2000, Proceedings 2000 International Conference on Software Maintenance.