As a complex software system evolves, its architecture typically degrades, and thus it becomes progressively harder to understand and maintain. Softwarenaut is an interactive and collaborative tool that helps developers recover and consequently improve the architecture of such systems by offering mechanisms to represent, filter, query and manipulate architectural views of the system under analysis. Softwarenaut is an open and extensible tool that is part of the Moose software analysis platform, which is used for numerous academic and industrial projects related to software evolution.
Architecture recovery is the process of recovering high-level views of a software system by analyzing the source code, the running system, and other available artifacts, such as the version history, bug reports and documentation. Architecture recovery faces two critical challenges: first, large amounts of static and dynamic information must be analyzed and processed, and second, the developers attempting to recover architecture typically have incomplete knowledge of the system they are analyzing. It is thus critical to have good tool support.
Softwarenaut tackles these challenges by offering high-level, graphical means to view software artifacts and their relationships, and mechanisms to navigate, filter, manipulate and share these views.
Figure 1 shows a screenshot of Softwarenaut being used to analyze ArgoUML, an open source UML editor. The Architectural View offers a high-level view of the modules in the system and the key relationships between them. The modules are represented as treemaps, and the size of each module is proportional to its actual size in lines of code; the width of each relationship is proportional to the number of invocations between the corresponding modules. A developer analyzing a system produces such an architectural view by iteratively applying filters to either remove certain types of modules and dependencies or to focus on those of interest. The views produced are interactive, allowing one to inspect details, or expand, collapse and zoom into individual modules and relationships. The views can also be saved and shared through a global architectural view repository such that different users analyzing the same version of a system benefit from previous work.
Figure 1: Using Softwarenaut to explore ArgoUML
Evolutionary analysis is critical in implementing two core features of Softwarenaut: Filters and Inspectors:
Filters for relationships and modules are a mechanism for coping with the complex graphs that large systems entail. They display only those elements in an architectural view that are important for a given task and thus focus the analysis. There are different types of evolutionary filters that can be applied to both modules and relationships. Figure 1 shows only those relationships that were present in the six major releases of the system that we analyzed. This considerably reduced the number of displayed relationships.
The inspectors provide detailed information about a module or relationship. One such example is the Module Evolution Filmstrip, which presents the evolution of a module in time. It is a visualization in which the versions of the module are presented chronologically from top to bottom. Each version is represented as a treemap inside which the contained classes are visible. The classes that are new in that version are highlighted with yellow and the classes that are modified are highlighted with a shade of blue proportional to the amount of changes.
Figure 2 presents the Evolution Filmstrip for the org.argouml.persistence module. In the first analyzed version it only contains two classes and the inspector shows that several classes replace them in the next version. By inspecting the names of the involved classes we discover that the two classes in the initial version that were responsible with interfacing with the database (DBReader and DBWriter) were replaced with classes that are responsible with file serialization (eg XMLInputStream).
Figure 2: The Module Evolution Filmstrip of the org.argouml.persistence module
One of our future research directions is to explore ways in which the recovered views can be integrated in the forward engineering process, support collaboration, and function as a live documentation of an evolving system. A view recovered for a given version of the system can function as a reference point for presenting the future evolution of the system. We also plan to run controlled experiments and user studies to evaluate efficiency and usability.
Softwarenaut was initially developed by Mircea Lungu at the REVEAL group at the University of Lugano, and is now being extended within the Software Composition Group at the University of Bern. The tool is freely available under the MIT license and is integrated in the Moose analysis platform. It has been used extensively for industrial consulting and teaching at both the universities of Bern and Lugano. We are interested in both academic and industry collaborations to further develop and assess Softwarenaut.
University of Bern, Switzerland