Visualization of Software Architecture Graphs of Java Systems

Abstract

The availability of up-to-date documentation of the architecture is crucial for software maintenance tasks, but it is often missing or differs from the implemented architecture. An increasingly popular and feasible way to get a clear picture of the architecture is to reconstruct it from the source code. The result of the reconstruction procedure is a graph with special, architecture-specific properties. Nowadays software systems are typically very large, so the reconstructed architecture contains a lot of details and is really difficult to interpret. It is important therefore to have efficient methods that help in understanding and managing the architecture graph. The purpose of these methods is to try to present the information so that it is comprehensible to the users. Two important methods are selective subtree collapsion and lifting low level dependencies of the system into higher, visible levels. These enable an architect to investigate the dependencies of system components at higher levels, without the need to deal with an enormous quantity of low-level details.

In this paper, first we overview the concepts related to lifting and present a conceptual framework that combines subtree collapsion with lifting to enable users to interactively explore and manipulate a software architecture graph. Then we define a set of algorithms that can be used to efficiently propagate dependency edges of a graph to higher levels. We also describe how the results can be integrated into SourceInventory, a software quality monitoring and visualization framework.

Publication
Proceedings of the 8th ACM International Conference on the Principles and Practice of Programming in Java (PPPJ 2010), Vienna, Austria, Pages 148–157

BibTeX:

@InProceedings{SFF10,
    author    = {Schrettner, Lajos and F{\"u}l{\"o}p, Lajos Jen{\H{o}} and Ferenc, Rudolf and Gyim{\'o}thy, Tibor},
    title     = {Visualization of Software Architecture Graphs of {J}ava Systems},
    booktitle = {Proceedings of the 8th ACM International Conference on the Principles and Practice of Programming in Java (PPPJ 2010)},
    year      = {2010},
    pages     = {148--157},
    address   = {Vienna, Austria},
    month     = sep,
    publisher = {ACM},
    doi       = {10.1145/1852761.1852783},
    url       = {https://dl.acm.org/citation.cfm?id=1852783},
}