Hasso-Plattner-Institut, University of Potsdam
Maintaining complex software systems tends to be costly because developers spend a significant part of their time with trying to understand the system’s structure and behavior. Among many reasons, program understanding is time consuming because the system’s structure and its internal behavior are not intuitively realizable and can only be partially inspected. The visualization of execution traces represents an approach to help developers to understand complex systems. Practically, execution trace visualization captures the sequence of function calls over time during system execution, analyzes and abstracts that data, and derives visual representations that permit developers to analyze the system’s structure and behavior. The goal of this thesis is to develop a trace visualization concept and tool that can handle the computational and cognitive scalability issues that trace visualization encounters due to the large amount of data that is typically produced when logging runtime processes. The thesis’ concept includes the following building blocks: (1) A concept for generating traces of C/C++ software systems in a scalable way, (2) a concept for trace reduction that automatically identifies recursive boundaries within the trace and, by this, supports developers in exploring a trace using a top-down approach, (3) a framework for trace visualization techniques that provides solutions to the question as to how core techniques for viewing trace data can be implemented such that developers are supported in performing top-down and bottom-up comprehension strategies, and (4) a concept for combining trace visualization with 3rd party tools and systems for reverse engineering. As a further contribution, this thesis validates the proposed concept by means of an implementation, performance measurements, and case studies. The implementation of the concept is provided as a framework for creating trace visualization tools. To ensure scalability of the concept, performance measurements were taken while applying the tool to large C/C++ software systems. Furthermore, the concept and tool has been experimentally applied to industrially developed software systems to solve particular maintenance problems in real-world scenarios.