Visualization of evolving structure and dependencies
As software systems change, so does their structure (e.g. package hierarchy) and dependencies (e.g. calls, includes, uses, requires relations). Seeing how structure and dependencies change helps in planning refactoring and development activities, and also the overall task of understanding the life of a complex product.
In general, we aim to visualize changes in a compound graph. Methods such as graph animation or computing a layout of the entire hypergraph containing all graphs of all revisions are of little use for huge datasets containing thousands of nodes and edges per graph and thousands of graphs.
Hierarchical edge bundling for evolution visualization
Our approach uses the hierarchical edge bundling (HEB) layout effectively handles very large compound graphs. Our implementation of the HEB works real-time for graphs of hundreds of thousands of nodes and edges. We integrate the HEB layout engine with a Subversion repository extractor for on-demand fetching of the revisions of interest. Finally, we use a third-party static analyzer to extract dependencies such as references, calls, type uses, and inheritance from the source code.
Comparing different revisions
Dependency evolution can be visualized in two main ways:
- displaying several HEB views for several revisions side-by-side. The views are linked by selection and navigation.
- displaying change events between a focus revision and prior and next revisions in the HEB layout.
The view below displays a screenshot of revision 1201215 of the Subversion repository.
Data extraction
Software structure, dependencies, and metrics are extracted automatically from the Subversion repository. To provide accurate and complete information, we limited ourselves to the analysis of Java repositories. For these, we can extract
- structure (packages, classes, class members)
- dependencies (imports, inheritance, calls, data member and type usage)
Static Java analysis is implemented using the Recoder toolkit.
Implementation
Our dependency evolution visualization tool is available for download. It includes binary installers for Windows, third-party analysis plug-ins, the source code, and documentation. The tool supports
- easy installation and connection with a remote Subversion repository
- automatic hierarchy-and-dependency extraction from Java source code
- integrated HEB visualization
Thanks go to Johan van der Geest and Mark Ettema for the tool development and testing.
An older version of our dependency analyzer is available here. This version handles also C++ code bases, but uses a less complete and correct static analyzer (CCCC).
The HEB implementation, provided by means of the third-party SolidSX tool, is already provided in the bundled installer.