An Approach for Recovering Distributed System Architectures

Reasoning about software systems at the architectural level is key to effective software development, management, evolution and reuse. All too often, though, the lack of appropriate documentation leads to a situation where architectural design information has to be recovered directly from implemented software artifacts. This is a very demanding process, particularly when involving recovery of runtime abstractions (clients, servers, interaction protocols, etc.) that are typical to the design of distributed software systems. This paper presents an exploratory reverse engineering approach, called X-ray, to aid programmers in recovering architectural runtime information from a distributed system's existing software artifacts. X-ray comprises three domain-based static analysis techniques, namely component module classification, syntactic pattern matching, and structural reachability analysis. These complementary techniques can facilitate the task of identifying a distributed system's implemented executable components and their potential runtime interconnections. The component module classification technique automatically distinguishes source code modules according to the executables components they implement. The syntactic pattern matching technique in turn helps to recognise specific code fragments that may implement typical component interaction features. Finally, the structural reachability analysis technique aids in the association of those features to the code specific for each executable component. The paper describes and illustrates the main concepts underlying each technique, reports on their implementation as a suit of new and off-the-shelf tools, and, to give evidence of the utility of the approach, provides a detailed account of a successful application of the three techniques to help recover a static approximation of the runtime architecture for Field, a publicly-available distributed programming environment.

[1]  R. E. Kurt Stirewalt,et al.  Understanding interleaved code , 2004, Automated Software Engineering.

[2]  Jeff Kramer Exoskeletal software , 1994, Proceedings of 16th International Conference on Software Engineering.

[3]  David Garlan,et al.  Introduction to the Special Issue on Software Architecture , 1995, IEEE Trans. Software Eng..

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

[5]  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.

[6]  Jeff Magee,et al.  A CASE tool for software architecture design , 1996, Automated Software Engineering.

[7]  Naranker Dulay,et al.  Specifying Distributed Software Architectures , 1995, ESEC.

[8]  Giuliano Antoniol,et al.  Identifying design-code inconsistencies in object-oriented software: a case study , 1998, Proceedings. International Conference on Software Maintenance (Cat. No. 98CB36272).

[9]  Leon Sterling,et al.  The Art of Prolog , 1987, IEEE Expert.

[10]  Alexander S. Yeh,et al.  Extracting architectural features from source code , 2004, Automated Software Engineering.

[11]  D. R. Harris,et al.  Recovering abstract data types and object instances from a conventional procedural language , 1995, Proceedings of 2nd Working Conference on Reverse Engineering.

[12]  Jean-Francois Girard,et al.  Multi-Valued Constant Propagation Analysis for User Interface Reengineering , 1995, Int. J. Softw. Eng. Knowl. Eng..

[13]  Thomas Kunz,et al.  Using Automatic Process Clustering for Design Recovery and Distributed Debugging , 1995, IEEE Trans. Software Eng..

[14]  Richard N. Taylor,et al.  A language and environment for architecture-based software development and evolution , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[15]  Robert L. Nord,et al.  Software Architecture in Industrial Applications , 1995, 1995 17th International Conference on Software Engineering.

[16]  William G. Griswold,et al.  Fast, flexible syntactic pattern matching and processing , 1996, WPC '96. 4th Workshop on Program Comprehension.

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

[18]  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.

[19]  Nabor C. Mendonça Architecture Recovery for Distributed Systems , 2001 .

[20]  Aniello Cimitile,et al.  A Logic-Based Approach to Reverse Engineering Tools Production , 1992, IEEE Trans. Software Eng..

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

[22]  Leon Sterling,et al.  The art of Prolog (2nd ed.): advanced programming techniques , 1994 .

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

[24]  Paul Clements,et al.  Software architecture in practice , 1999, SEI series in software engineering.

[25]  Peter Young,et al.  Visualising software in virtual reality , 1998, Proceedings. 6th International Workshop on Program Comprehension. IWPC'98 (Cat. No.98TB100242).

[26]  Roy H. Campbell,et al.  Monitoring compliance of a software system with its high-level design models , 1996, Proceedings of IEEE 18th International Conference on Software Engineering.

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

[28]  Leon Sterling,et al.  The Art of Prolog - Advanced Programming Techniques , 1986 .

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

[30]  Hausi A. Müller,et al.  The Software Bookshelf , 1997, IBM Syst. J..

[31]  Richard N. Taylor,et al.  A Classification and Comparison Framework for Software Architecture Description Languages , 2000, IEEE Trans. Software Eng..

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

[33]  Atul Prakash,et al.  A Framework for Source Code Search Using Program Patterns , 1994, IEEE Trans. Software Eng..

[34]  David Notkin,et al.  Lightweight lexical source model extraction , 1996, TSEM.

[35]  Steven P. Reiss,et al.  Connecting tools using message passing in the Field environment , 1990, IEEE Software.

[36]  Emden R. Gansner,et al.  A Technique for Drawing Directed Graphs , 1993, IEEE Trans. Software Eng..

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

[38]  Djenana Campara,et al.  InSight-reverse engineer CASE tool , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[39]  Matthew S. Hecht,et al.  Flow Analysis of Computer Programs , 1977 .

[40]  Arun Lakhotia,et al.  A Unified Framework For Expressing Software Subsystem Classification Techniques , 1997, J. Syst. Softw..

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

[42]  Per Runeson,et al.  Architecture Design Recovery of a Family of Embedded Software Systems , 1999, WICSA.

[43]  James Noble,et al.  Ownership types for flexible alias protection , 1998, OOPSLA '98.

[44]  Mary Shaw,et al.  Software architecture - perspectives on an emerging discipline , 1996 .

[45]  Qiang Yang,et al.  The program understanding problem: analysis and a heuristic approach , 1996, Proceedings of IEEE 18th International Conference on Software Engineering.

[46]  Glenn S. Fowler,et al.  Ciao: a graphical navigator for software and document repositories , 1995, Proceedings of International Conference on Software Maintenance.

[47]  Mary Shaw,et al.  Abstractions for Software Architecture and Tools to Support Them , 1995, IEEE Trans. Software Eng..

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

[49]  René L. Krikhaar,et al.  A two-phase process for software architecture improvement , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[50]  Malcolm Munro,et al.  Evaluating the use of dominance trees for C and COBOL , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

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

[52]  P. Tonella,et al.  A cliche-based environment to support architectural reverse engineering , 1996, 1996 Proceedings of International Conference on Software Maintenance.

[53]  Stan Jarzabek PQL: A Language for Specifying Abstract Program Views , 1995, ESEC.

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

[55]  Stuart I. Feldman,et al.  Make — a program for maintaining computer programs , 1979, Softw. Pract. Exp..

[56]  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.

[57]  Nabor Das Chagas Mendonca Software Architecture Recovery for Dis-tributed Systems , 1999 .

[58]  Rick Kazman,et al.  Software architectural transformation , 1999, Sixth Working Conference on Reverse Engineering (Cat. No.PR00303).

[59]  Jeff Kramer,et al.  Component module classification for distributed software understanding , 1999, Proceedings IEEE International Conference on Software Maintenance - 1999 (ICSM'99). 'Software Maintenance for Business Change' (Cat. No.99CB36360).

[60]  W. Richard Stevens,et al.  Unix network programming , 1990, CCRV.

[61]  Rick Kazman,et al.  Playing Detective: Reconstructing Software Architecture from Available Evidence , 1999, Automated Software Engineering.

[62]  Premkumar T. Devanbu,et al.  GEN++ - An Analyzer Generator for C++ Programs , 1994 .

[63]  Jeff Kramer,et al.  Requirements for an effective architecture recovery framework , 1996, ISAW '96.

[64]  Harald C. Gall,et al.  A comparison of four reverse engineering tools , 1997, Proceedings of the Fourth Working Conference on Reverse Engineering.

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

[66]  Philippe Kruchten,et al.  The 4+1 View Model of Architecture , 1995, IEEE Softw..

[67]  Roy H. Campbell,et al.  Architecture-oriented visualization , 1996, OOPSLA '96.

[68]  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).

[69]  Gerardo Canfora,et al.  An improved algorithm for identifying objects in code , 1996 .

[70]  Alex Quilici,et al.  Some experiments toward understanding how program plan recognition algorithms scale , 1996, Proceedings of WCRE '96: 4rd Working Conference on Reverse Engineering.

[71]  Giuseppe Visaggio,et al.  Software salvaging and the call dominance tree , 1995, J. Syst. Softw..

[72]  Betty H. C. Cheng,et al.  A framework for classifying and comparing software reverse engineering and design recovery techniques , 1999, Sixth Working Conference on Reverse Engineering (Cat. No.PR00303).

[73]  Mary Shaw,et al.  Comparing Architectural Design Styles , 1995, IEEE Softw..

[74]  Jim Q. Ning,et al.  Knowledge-based program analysis , 1990, IEEE Software.

[75]  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).

[76]  David Garlan,et al.  Exploiting style in architectural design environments , 1994, SIGSOFT '94.

[77]  Emden R. Gansner,et al.  A C++ data model supporting reachability analysis and dead code detection , 1997, ESEC '97/FSE-5.

[78]  Barbara G. Ryder,et al.  Program decomposition for pointer aliasing: a step toward practical analyses , 1996, SIGSOFT '96.

[79]  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).

[80]  Jeff Magee,et al.  Dynamic structure in software architectures , 1996, SIGSOFT '96.

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