Towards reverse engineering software ecosystems

Reverse engineering is the process of recovering a projectpsilas components and the relationships between them with the goal of creating representations of the project at a higher level of abstraction. When dealing with the large amounts of information that are analyzed during reverse engineering visualization and exploratory navigation are important tools. However, a software system does not exist by itself. Instead, a project is part of a larger software ecosystem of projects that is developed in the context of an organization, a research group of an open-source community. In our work, we argue that reverse engineering an ecosystem is a natural and complementary extension to the traditional single system reverse engineering. We propose a methodology based on visualization, top-down exploration, architecture recovery and software evolution analysis for the reverse engineering software ecosystems. Our methodology starts with visualizing high-level structural and evolutionary aspects of the ecosystem from which the reverse engineer can navigate to views which present architectural aspects of the individual projects. To support our approach we implemented tool support for analyzing the ecosystem level as well as the intra-project level.

[1]  Ted J. Biggerstaff,et al.  Program understanding and the concept assignment problem , 1994, CACM.

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

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

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

[5]  Ian Sommerville,et al.  Software engineering (5th ed.) , 1995 .

[6]  Michele Lanza,et al.  Exploring Inter-Module Relationships in Evolving Software Systems , 2007, 11th European Conference on Software Maintenance and Reengineering (CSMR'07).

[7]  Alan J. Perlis,et al.  Special Feature: Epigrams on programming , 1982, SIGP.

[8]  Stephen G. Eick,et al.  Seesoft-A Tool For Visualizing Line Oriented Software Statistics , 1992, IEEE Trans. Software Eng..

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

[10]  Hausi A. Müller,et al.  Manipulating and documenting software structures using SHriMP views , 1995, Proceedings of International Conference on Software Maintenance.

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

[12]  Stéphane Ducasse,et al.  Polymetric Views - A Lightweight Visual Approach to Reverse Engineering , 2003, IEEE Trans. Software Eng..

[13]  Michele Lanza,et al.  The evolution matrix: recovering software evolution using software visualization techniques , 2001, IWPSE '01.

[14]  David Lorge Parnas,et al.  Software aging , 1994, Proceedings of 16th International Conference on Software Engineering.

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

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

[17]  Michele Lanza,et al.  Package patterns for visual architecture recovery , 2006, Conference on Software Maintenance and Reengineering (CSMR'06).

[18]  Dewayne E. Perry,et al.  Metrics and laws of software evolution-the nineties view , 1997, Proceedings Fourth International Software Metrics Symposium.

[19]  Michele Lanza,et al.  Interactive Exploration of Semantic Clusters , 2005, 3rd IEEE International Workshop on Visualizing Software for Understanding and Analysis.

[20]  Alan M. Davis,et al.  201 Principles of Software Development , 1995 .