  We introduce Causal Program Dependence Analysis (CPDA), a dynamic dependence
analysis that applies causal inference to model the strength of program
dependence relations in a continuous space. CPDA observes the association
between program elements by constructing and executing modified versions of a
program. One advantage of CPDA is that this construction requires only
light-weight parsing rather than sophisticated static analysis. The result is a
collection of observations based on how often a change in the value produced by
a mutated program element affects the behavior of other elements. From this set
of observations, CPDA discovers a causal structure capturing the causal (i.e.,
dependence) relation between program elements. Qualitative evaluation finds
that CPDA concisely expresses key dependence relationships between program
elements. As an example application, we apply CPDA to the problem of fault
localization. Using minimal test suites, our approach can rank twice as many
faults compared to SBFL.
