|
Selected publications by date
Selected publications by category
|
|   |
Classifying Data Dependences in the Presence of Pointers for Program Comprehension, Testing, and Debugging
ACM Transactions on Software Engineering and Methodology (TOSEM)
Vol. 13, No. 2, pp. 199-239
Alessandro Orso, Saurabh, Sinha, and Mary Jean Harrold
Abstract
Understanding data dependences in programs is important for many software-engineering
activities, such as program understanding, impact analysis, reverse engineering, and debugging.
The presence of pointers can cause subtle and complex data dependences that can be difficult to
understand. For example, in languages such as C, an assignment made through a pointer dereference
can assign a value to one of several variables, none of which may appear syntactically in that
statement. In the first part of this paper, we describe two techniques for classifying data dependences
in the presence of pointer dereferences. The first technique classifies data dependences based on definition
type, use type, and path type. The second technique classifies data dependences based on span.
We present empirical results to illustrate the distribution of data-dependence types and spans for
a set of real C programs. In the second part of the paper, we discuss two applications of the
classification techniques. First, we investigate different ways in which the classification can be
used to facilitate data-flow testing and verification. We outline an approach that uses types and
spans of data dependences to determine the appropriate verification technique for different data
dependences; we present empirical results to illustrate the approach. Second, we present a new
slicing approach that computes slices based on types of data dependences. Based on the new
approach, we define an incremental slicing technique that computes a slice in multiple steps.
We present empirical results to illustrate the sizes of incremental slices and the potential
usefulness of incremental slicing for debugging
|