Exploring Inter-Module Relationships in Evolving Software Systems

Many of the existing approaches to reverse architecting - the reverse engineering of the architecture of software systems - are based on software exploration tools which provide interactive ways of exploring the system. These tools start with high-level views of the system and refine them with drill-down techniques applied on the high-level entities such as modules and packages, leaving aside valuable information contained in the dependencies between them. In this article we argue that the visualization of inter-module relations bears great potential for supporting the understanding of large evolving software systems. We present two concrete examples of such visualizations. The first, the semantic dependency matrix is a technique for displaying details about a dependency between two modules which groups together classes with similar behavior. The second, the edge evolution film-strip presents the evolution of an inter-module relation through multiple versions of the system. Based on our experience with the edge evolution film strip, we propose a pattern language for inter-module relationships. We exemplify both the visualizations and the pattern language with examples from two large open source software systems

[1]  Richard C. Holt,et al.  GASE: visualizing software evolution-in-the-large , 1996, Proceedings of WCRE '96: 4rd Working Conference on Reverse Engineering.

[2]  Margaret-Anne D. Storey,et al.  SHriMP views: an interactive environment for exploring Java programs , 2001, Proceedings 9th International Workshop on Program Comprehension. IWPC 2001.

[3]  Richard C. Holt,et al.  ADG: Annotated Dependency Graphs for Software Understanding , 2003, VISSOFT.

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

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

[6]  Claudio Riva,et al.  Reverse architecting: an industrial experience report , 2000, Proceedings Seventh Working Conference on Reverse Engineering.

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

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

[9]  Michele Lanza,et al.  Softwarenaut: exploring hierarchical system decompositions , 2006, Conference on Software Maintenance and Reengineering (CSMR'06).

[10]  Stéphane Ducasse,et al.  Characterizing the evolution of class hierarchies , 2005, Ninth European Conference on Software Maintenance and Reengineering.

[11]  Hausi A. Müller,et al.  How do program understanding tools affect how programmers understand programs? , 1997, Proceedings of the Fourth Working Conference on Reverse Engineering.

[12]  Alistair Cockburn,et al.  Agile Software Development , 2001 .

[13]  Hausi A. Müller,et al.  How do program understanding tools affect how programmers understand programs? , 2000, Sci. Comput. Program..

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

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

[16]  Audris Mockus,et al.  Does Code Decay? Assessing the Evidence from Change Management Data , 2001, IEEE Trans. Software Eng..

[17]  Doug Kimelman,et al.  Visualizing the behavior of object-oriented systems , 1993, OOPSLA '93.

[18]  Michele Lanza,et al.  Softwarenaut: cutting edge visualization , 2006, SoftVis '06.

[19]  Rainer Koschke,et al.  Atomic architectural component recovery for program understanding and evolution , 2002, International Conference on Software Maintenance, 2002. Proceedings..

[20]  Martin Pinzger,et al.  ArchView - Analyzing Evolutionary Aspects of Complex Software Systems , 2005 .