Temporal model for program debugging and scalable visualizations
MetadataShow full item record
The goal of this research is to create a better dynamic analysis framework for object-oriented languages. Current debugging paradigms are fundamentally 'procedural' in that a programmer has to manually explore the cause of the error, and existing tools provide access only to the current program state or the stack-trace of outstanding method calls. In order to address these problems, this dissertation presents a novel program debugging and comprehension methodology centered around two main techniques: (i) a temporal data model to represent execution histories and declarative temporal queries to explore program states; and (ii) run-time visualizations to render program states and execution histories so as to enhance program comprehension. Our thesis is that declarative temporal queries and run-time visualizations work in a synergistic manner to provide an effective dynamic analysis framework for object-oriented programs. At a technical level, our temporal data model exposes a point-based view of executions while the underlying data is represented using intervals, for space efficiency. Query evaluation relies on a translation of point-based into interval-based queries. Temporal semantics of the translated queries is preserved through a normalization operation, and recursive queries further require a specialized immediate consequence operator for their evaluation. For efficient query evaluation, we provide specialized join algorithms that improve equijoin selectivity and eliminate inequality joins from normalized queries. Experimental results indicate that optimized queries perform well for many expected debugging and comprehension use cases. A fundamental problem with run-time visualizations is that they become unwieldy and do not scale well for large executions. Our proposed visualizations consist of novel extensions of UML’s object and sequence diagrams. We achieve scalable visualizations through selective tracing of diagrams in both data and temporal dimensions; vertical and horizontal compression of sequence diagrams and computation of compact labels; and diagram slicing so that only those sub-diagrams relevant to explain the value of interest are displayed. The above concepts are incorporated in a system called JIVE, for Java Interactive Visualization Environment. JIVE has been extensively tested in the classroom, and has also been used to identify bugs in a real-time benchmark application and an open source library for Safety Critical Java.