Concepedia

Abstract

Software programs, especially legacy programs, are often large, complex and poorly documented. To maintain these programs software engineers require a variety of efficient analytical tools. Some software maintenance tools use visualizations (i.e. graphical views) to communicate information about software systems. Although many software visualization tools exist, the majority of them are not very effective in practice. Part of the problem is that they are designed in an ad hoc manner, with little empirical evaluation. They are often criticized because they try to force programmers to use a specific approach to understanding software rather than supporting their own approaches. The result is that current software visualization tools do not play as big a role in industry as was anticipated by some researchers. The tools that are used are very basic, consisting of mainly text editors and searching features. With increasingly fast computing platforms, there is great potential for the use of visualization tools to significantly improve the efficiency of software maintenance. This thesis presents an iterative approach for building software exploration tools. Software exploration tools provide graphical representations of software structures linked to textual views of the program source code and documentation. The methodology consists of several iterative phases of design, development and evaluation. The cycle starts with a framework of cognitive design elements to highlight those activities which require tool support. A prototype tool called SHriMP (Simple Hierarchical Multi-Perspective) views has been designed using this framework as a guide. SHriMP combines several visualization methods and static analysis techniques to enable a programmer to understand and document legacy software systems. It has been evaluated and compared to other options in two user studies. Observations from these studies were used to improve the cognitive framework of design elements, which in turn were used to improve the design of this and other software exploration tools. Many of the lessons learned through this adaptive approach to design are relevant for other categories of software engineering tools.