Abstract
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.
Similar content being viewed by others
Explore related subjects
Discover the latest articles, news and stories from top researchers in related subjects.References
Antoniol, G., Fiutem, R., and Cristoforetti, L. 1998. Design pattern recovery in object–oriented software. In Proceedings of the 6th Workshop on Program Comprehension, Ischia, Italy, IEEE CS Press, pp. 153–160.
Bass, L., Clements, P., and Kazman, R. 1998. Software Architecture in Practice. Addison–Wesley, Reading, Massachusetts.
Bellay, B. and Gall, H. 1997. A comparison of four reverse engineering tools. In Proceedings of the 4th Working Conference on Reverse Engineering, Amsterdam, Holland, IEEE CS Press.
Bratthall, L. and Runeson, P. 1999. Architecture design recovery of a family of embedded software systems. In Proceedings of the 1st IFIP Working Conference on Software Architecture, San Antonio, Texas, USA, pp. 3–14.
Burd, E.L. and Munro, M. 1999. Evaluating the use of dominance trees for C and COBOL. In Proceedings of the International Conference on Software Maintenance, Oxford, England, IEEE CS Press, pp. 401–410.
Canfora, G., Cimitile, A., and de Carlini, U. 1992. A logic–based approach to reverse engineering tools production. IEEE Transactions on Software Engineering, 18(12):1053–1064.
Canfora, G., Cimitile, A., and Munro, M. 1996. An improved algorithm for identifying objects in code. Software: Practice and Experience, 26(1):25–48.
Carrière, S.J., Woods, S., and Kazman, R. 1999. Software architectural transformation. In Proceedings of the 6th Working Conference on Reverse Engineering, IEEE CS Press.
Chen, Y., Nishimoto, M.Y., and Ramamoorthy, C.V. 1990. The C information abstraction system. IEEE Transactions on Software Engineering, SE–16(3):325–334.
Chen, Y.–F., Gansner, E.R., and Koutsofios, E. 1998. A C++ data model supporting reachability analysis and dead code detection. IEEE Transactions on Software Engineering, 24(9).
Chen, Y.–F.R., et al., 1995. Ciao: A graphical navigator for software and document repositories. In Proceedings of the International Conference on Software Maintenance, IEEE CS Press, pp. 66–75.
Chikofsky, E.J. and James H. Cross II. 1990. Reverse engineering and design recovery: A taxonomy. IEEE Software, 7(1):13–17.
Cimitile, A. and Visaggio, G. 1995. Software salvaging and the call dominance tree. Journal of Systems and Software, 28:117–127.
Clarke, D.G., Potter, J.M., and Noble, J. 1998. Ownership types for flexible alias protection. In Proceedings of the ACM SIGPLAN Conference on Object–Oriented Programming, Systems, Languages, and Applications '98, Vancouver, B.C., Canada, ACM Press, pp. 48–64.
Consens, M., Mendelzon, A., and Ryman, A. 1992. Visualizing and querying software structures. In Proceedings of the 14th International Conference on Software Engineering. IEEE CS Press.
Devanbu, P. and Eaves, L. 1994. Gen++—An analyzer generator for C++ Programs. Technical report, AT&T Bell Laboratories, Murray Hill, New Jersey.
Feldman, S.I. 1979. Make—A Program for Maintaining Computer Programs. Software: Practice and Experience, 9:255–265.
Finnigan, P., Holt, R.C., Kalas, I., Kerr, S., Kontogiannis, K., Müller, H., Mylopoulos, J., Perelgut, S., Stanley, M., and Wong, K., 1997. The software bookshelf. IBM Systems Journal, 36:564–593.
Fiutem, R. and Antoniol, G. 1998. Identifying design–code inconsistencies in object–oriented software, In Proceedings of the International Conference on Software Maintenance, IEEE CS Press, pp. 94–102.
Fiutem, R., Tonella, P., Antoniol, G., and Merlo, E., 1996. A cliché–based environment to support architectural reverse engineering. In Proceedings of the International Conference on Software Maintenance, IEEE CS Press, pp. 319–328.
Gall, H., Jazayeri, M., Klösch, R., Lugmayr, W., and Trausmuth, G. 1996. Architecture recovery in ARES. In Proceedings of the 2nd ACM SIGSOFT International Software Architecture Workshop, San Francisco, USA, ACM Press, pp. 111–115.
Gannod, G.C. and Cheng, B.H.C. 1999. A framework for classifying and comparing software reverse engineering and design recovery tools. In Proceedings of the 6th Working Conference on Reverse Engineering. IEEE CS Press.
Gansner, E.R., Koutsofios, E., North, S.C., and Vo, K.–P. 1993. A technique for drawing directed graphs. IEEE Transactions on Software Engineering, 19(13):214–230.
Garlan, D., Allen, R., and Ockerbloom, J. 1994. Exploiting style in architectural design environments. In Proceedings of the 2nd ACM SIGSOFT Symposium on the Foundations of Software Engineering, pp. 175–188.
Garlan, D. and Perry, D.E. 1995. Introduction to the special issue on software architecture. IEEE Transactions on Software Engineering, 21(4):269–274.
Girard, J.–F., Koschke, R., and Schied, G. 1997. Comparison of abstract data type and abstract state encapsulation detection techniques for architectural understanding. In Proceedings of the 4th Working Conference on Reverse Engineering, Amsterdam, Holland, IEEE CS Press.
Griswold, W.G., Atkinson, D.C., and McCurdy, C. 1996. Fast, flexible syntactic pattern matching and processing. In Proceedings of the 4th Workshop on Program Comprehension, IEEE CS Press, pp. 144–153.
Harandi, M.T. and Ning, J.Q. 1990. Knowledge–based program analysis. IEEE Software, 7(1):74–81.
Harris, D.R., Reubenstein, H.B., and Yeh, A.S. 1995. Reverse engineering to the architectural level. In Proceedings of the 17th International Conference on Software Engineering, IEEE CS Press, pp. 186–195.
Harris, D.R., Yeh, A.S., and Reubenstein, H.B. 1996. Extracting architectural features from source code. Automated Software Engineering Journal, 3(1/2):109–138.
Hecht, M.S. 1977. Flow Analysis of Computer Programs. Elsevier North–Holland, Inc.
Holtzblatt, L.J., Piazza, R.L., Reubenstein, H.B., Roberts, S.N., and Harris, D.R. 1997. Design recovery for distributed systems. IEEE Transactions on Software Engineering, 23(7):461–472.
Imagix Corporation, 1999. The imagix 4D C/C++ reverse–engineering and documentation system. Online system description. Available at http://www.Imagix.com.
Jarzabek, S. 1995. PQL: A language for specifying abstract program views. In Proceedings of the 5th European Software Engineering Conference, pp. 324–342.
Jerding, D. and Rugaber, S. 1998. Extraction of architectural connections from event traces. In Proceedings of the ACM SIGPLAN–SIGSOFT Workshop on Program Analysis for Software Tools and Engineering. ACM Press.
Kazman, R. and Carrière, S.J. 1999. Playing detective: Reconstructing software architecture from available evidence. Automated Software Engineering Journal, 6(2):107–138.
Keller, R.K., Schauer, R., Robitaille, S., and Pagé, P. 1999. Pattern–based reverse–engineering of design components. In Proceedings of the 21st International Conference on Software Engineering, Los Angeles, CA, USA, pp. 226–235, ACM Press.
Kozaczynski, W., Ning, J.Q., and Engberts, A. 1992. Program concept recognition and transformation. IEEE Transactions on Software Engineering, 18(12):1065–1075.
Krämer, C. and Prechelt, L. 1996. Design recovery by automated search for structural design patterns in object–oriented software. In Proceedings of the 3rd Working Conference on Reverse Engineering, IEEE CS Press, pp. 208–215.
Kramer, J. 1994. Exoskeletal software. In Proceedings of the 16th International Conference on Software Engineering. IEEE CS Press, (Invited Panel Presentation).
Krikhaar, R., Postma, A., Sellink, A., Stroucken, M., and Verhoef, C. 1999. A two–phase process for software architecture improvement. In Proceedings of the International Conference on Software Maintenance, Oxford, England, IEEE CS Press, pp. 371–380.
Kruchten, P.B. 1995. The 4 + 1 view model of architecture. IEEE Software, 12(6):42–50.
Kunz, T. and Black, J.P. 1995. Using automatic process clustering for design recovery and distributed debugging. IEEE Transactions on Software Engineering, 21(6):515–527.
Lakhotia, A. 1997. A unified framework for expressing software subsystem classification techniques. Journal of Systems and Software, 36(3):211–231.
Letowsky, S. and Soloway, E. 1986. Delocalized plans and program comprehension. IEEE Software, 3(3):41–49.
Magee, J., Dulay, N., Eisenbach, S., and Kramer, J. 1995. Specifying distributed software architectures. In Proceedings of the 5th European Software Engineering Conference, pp. 137–153. Vol. 989 of Lecture Notes in Computer Science, Springer–Verlag.
Magee, J. and Kramer, J. 1996. Dynamic structure in software architectures. In Proceedings of the 4th ACM SIGSOFT Symposium on the Foundations of Software Engineering, ACM Press, pp. 3–14.
Mancoridis, S., Mitchell, B.S., Rorres, C., Chen, Y., and Gansner, E.R. 1998. Using automatic clustering to produce high–level system organizations of source code. In Proceedings of the 6th Workshop on Program Comprehension, Ischia, Italy, IEEE CS Press, pp. 45–52.
Medvidovic, N., Rosenblum, D.S., and Taylor, R.N. 1999. A language and environment for architecture–based software development and evolution. In Proceedings of the 21st International Conference on Software Engineering, Los Angeles, CA, USA, ACM Press, pp. 44–53.
Medvidovic, N. and Taylor, R.N. 2000. A classification and comparison framework for software architecture description languages. IEEE Transactions on Software Engineering, 26(1).
Mendonça, N.C. 1999. Software architecture recovery for distributed systems. Ph.D. thesis, University of London, Imperial College of Science, Technology and Medicine.
Mendonça, N.C. and Kramer, J. 1996. Requirements for an effective architecture recovery framework. In Proceedings of the 2nd ACM SIGSOFT International Software Architecture Workshop, San Francisco, USA, ACM Press, pp. 101–105.
Mendonça, N.C. and Kramer, J. 1998. Developing an approach for the recovery of distributed software architectures. In Proceedings of the 6th Workshop on Program Comprehension, Ischia, Italy, IEEE CS Press, pp. 28–36.
Mendonça, N.C. and Kramer, J. 1999. Component module classification for distributed software understanding. In Proceedings of the International Conference on Software Maintenance, Oxford, England, IEEE CS Press, pp. 119–127.
Merlo, E., Girard, J.F., Hendren, L., and Mori, R.D. 1995. Multi–valued constant propagation analysis for user interface reengineering. International Journal of Software Engineering and Knowledge Engineering, 5(1):2–23.
Müller, H.A., Orgun, M.A., Tilley, S.R., and Uhl, J.S. 1993. A reverse–engineering approach to subsystem structure identification. Journal of Software Maintenance: Research and Practice, 5(4):181–204.
Murphy, G.C. and Notkin, D. 1996. Lightweight lexical source model extraction. ACM Transactions on Software Engineering and Methodology, 5(3):262–292.
Murphy, G.C., Notkin, D., and Sullivan, K. 1995. Software reflexion models: Bridging the gap between source and higher–level models. In Proceedings of the 3rd ACM SIGSOFT Symposium on the Foundations of Software Engineering, pp. 18–28.
Ng, K., Kramer, J., and Magee, J. 1996. A CASE tool for software architecture design. Automated Software Engineering Journal, 3(3/4):261–284.
Paul, S. and Prakash, A. 1994. A framework for source code search using program patterns. IEEE Transactions on Software Engineering, 20(6):463–475.
Rajala, N., Campara, D., and Mansurov, N. 1999. inSight—reverse engineering case tool. In Proceedings of the 21st International Conference on Software Engineering, Los Angeles, CA, USA, ACM Press, pp. 630–633.
Reiss, S.P. 1990. Connecting tools using message passing in the field environment. IEEE Software, 7(4):57–66.
Rich, C. and Wills, L.M. 1990. Recognizing a program's design: A graph–parsing approach. IEEE Software, 7(1):82–89.
Rodrigues, M.A.F. 1993. ANIMADO: An animation system prototype using dynamics. Master's thesis, State University of Campinas, Brazil, Department of Computing and Automation, Faculty of Electrical Engineering, In Portuguese.
Rugaber, S., Stirewalt, K., and Wills, L.M. 1996. Understanding interleaved code. Automated Software Engineering Journal, 3(1/2):47–76.
Sefika, M., Sane, A., and Campbell, R.H. 1996a. Architecture–oriented visualisation. In Proceedings of the ACM SIGPLAN Conference on Object–Oriented Programming, Systems, Languages, and Applications, ACM Press, pp. 389–405.
Sefika, M., Sane, A., and Campbell, R.H., 1996b. Monitoring compliance of a software system with its high–level design models. In Proceedings of the 18th International Conference on Software Engineering, IEEE CS Press, pp. 387–396.
Shaw, M. 1995. Comparing architectural design styles. IEEE Software, 12(6):27–41.
Shaw, M., DeLine, R., Klein, D.V., Ross, T.L., Young, D.M., and Zelesnik, G. 1995. Abstractions for software architecture and tools to support them. IEEE Transactions on Software Engineering, 21(4):314–335.
Shaw, M. and Garlan, D. 1996. Software Architecture—Perspectives on an Emerging Discipline. Upper Saddle River, New Jersey: Prentice–Hall.
Soni, D., Nord, R.L., and Hofmeister, C. 1995. Software architecture in industrial applications. In Proceedings of the 17th International Conference on Software Engineering. ACM Press, pp. 196–207.
Sterling, L. and Shapiro, E. 1994. The Art of Prolog: Advanced Programming Techniques. 2nd edition, Cambridge, USA: The MIT Press.
Stevens, W.R., 1990. Unix Network Programming. Upper Saddle River, New Jersey: Prentice Hall.
Tonella, P., Fiutem, R., Antoniol, G., and Merlo, E. 1996. Augmenting pattern–based architectural recovery with flow analysis: Mosaic—a case study. In Proceedings of the 3rd Working Conference on Reverse Engineering. IEEE CS Press.
Tridgell, A. 1994. SAMBA: unix talking with PC's. In Linux Journal, Vol.4, Available online at http://linuxjournal.–com/cgi–bin/frames.pl/lj–issues/issue7/samba.html.
Waters, B. and Abowd, G. 1999. Architectural synthesis: Integrating multiple architectural perspectives. In Proceedings of the 6th Working Conference on Reverse Engineering. IEEE CS Press.
Woods, S. and Quilici, A. 1996.Some experiments toward understanding how program plan recognition algorithms scale. In Proceedings of the 3rd Working Conference on Reverse Engineering, IEEE CS Press, pp. 21–30.
Woods, S. and Yang, Q. 1996. Approaching the program understanding problem: Analysis and a heuristic solution. In Proceedings of the 18th International Conference on Software Engineering. IEEE CS Press.
Yeh, A.S., Harris, D.R., and Chase, M.P. 1997. Manipulating recovered software architecture views. In Proceedings of the 19th International Conference on Software Engineering, ACM Press, pp. 184–194.
Yeh, A.S., Harris, D.R., and Reubenstein, H.B. 1995. Recovering abstract data types and objects instances from a conventional procedural language. In Proceedings of the 2nd Working Conference on Reverse Engineering, IEEE CS Press, pp. 227–236.
Young, P. and Munro, M. 1998. Visualising software in virtual reality. In Proceedings of the 6th Workshop on Program Comprehension, Ischia, Italy, IEEE CS Press, pp. 19–26.
Zhang, S., Ryder, B.G., and Landi, W. 1996. Program decomposition for pointer aliasing: A step toward practical analyses. In Proceedings of the 4th ACM SIGSOFT Symposium on the Foundations of Software Engineering, ACM Press, pp. 81–92.
Author information
Authors and Affiliations
Rights and permissions
About this article
Cite this article
Mendonça, N.C., Kramer, J. An Approach for Recovering Distributed System Architectures. Automated Software Engineering 8, 311–354 (2001). https://doi.org/10.1023/A:1011217720860
Issue Date:
DOI: https://doi.org/10.1023/A:1011217720860