Nothing Special   »   [go: up one dir, main page]

Skip to main content
Log in

An Approach for Recovering Distributed System Architectures

  • Published:
Automated Software Engineering Aims and scope Submit manuscript

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.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Subscribe and save

Springer+ Basic
$34.99 /Month
  • Get 10 units per month
  • Download Article/Chapter or eBook
  • 1 Unit = 1 Article or 1 Chapter
  • Cancel anytime
Subscribe now

Buy Now

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

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.

    Google Scholar 

  • Bass, L., Clements, P., and Kazman, R. 1998. Software Architecture in Practice. Addison–Wesley, Reading, Massachusetts.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • Canfora, G., Cimitile, A., and Munro, M. 1996. An improved algorithm for identifying objects in code. Software: Practice and Experience, 26(1):25–48.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • Cimitile, A. and Visaggio, G. 1995. Software salvaging and the call dominance tree. Journal of Systems and Software, 28:117–127.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • Feldman, S.I. 1979. Make—A Program for Maintaining Computer Programs. Software: Practice and Experience, 9:255–265.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • Kruchten, P.B. 1995. The 4 + 1 view model of architecture. IEEE Software, 12(6):42–50.

    Google Scholar 

  • 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.

    Google Scholar 

  • Lakhotia, A. 1997. A unified framework for expressing software subsystem classification techniques. Journal of Systems and Software, 36(3):211–231.

    Google Scholar 

  • Letowsky, S. and Soloway, E. 1986. Delocalized plans and program comprehension. IEEE Software, 3(3):41–49.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • Murphy, G.C. and Notkin, D. 1996. Lightweight lexical source model extraction. ACM Transactions on Software Engineering and Methodology, 5(3):262–292.

    Google Scholar 

  • 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.

    Google Scholar 

  • Paul, S. and Prakash, A. 1994. A framework for source code search using program patterns. IEEE Transactions on Software Engineering, 20(6):463–475.

    Google Scholar 

  • 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.

    Google Scholar 

  • Reiss, S.P. 1990. Connecting tools using message passing in the field environment. IEEE Software, 7(4):57–66.

    Google Scholar 

  • Rich, C. and Wills, L.M. 1990. Recognizing a program's design: A graph–parsing approach. IEEE Software, 7(1):82–89.

    Google Scholar 

  • 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.

    Google Scholar 

  • Rugaber, S., Stirewalt, K., and Wills, L.M. 1996. Understanding interleaved code. Automated Software Engineering Journal, 3(1/2):47–76.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

    Google Scholar 

  • Shaw, M. and Garlan, D. 1996. Software Architecture—Perspectives on an Emerging Discipline. Upper Saddle River, New Jersey: Prentice–Hall.

    Google Scholar 

  • 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.

    Google Scholar 

  • Stevens, W.R., 1990. Unix Network Programming. Upper Saddle River, New Jersey: Prentice Hall.

    Google Scholar 

  • 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.

    Google Scholar 

  • 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.

Download references

Author information

Authors and Affiliations

Authors

Rights and permissions

Reprints 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

Download citation

  • Issue Date:

  • DOI: https://doi.org/10.1023/A:1011217720860

Navigation