Date of this Version
Developing methods for validating that a program works as intended is one of the key research areas in software engineering. Ideally a program P must exhibit its expected be- havior, or property, φ on all of its inputs, i.e., P |= φ. The software engineering community has developed various program analysis approaches to assess whether P |= φ. In general, these approaches can be partitioned into dynamic and static program analysis. The former execute P on a particular input and checks that the execution conforms to φ. The latter in- terprets the code of P and check that on all possible executions of P the property φ holds. Unfortunately, in general neither dynamic nor static analysis can independently determine P |= φ.
The idea of combining information computed by different analyses has been circulating in the research community since the mid 1960’s and has shown the benefits of analyses uni- fication. Several approaches have been developed for combining multiple static analyses, and combining static and dynamic analyses. These approaches mainly deal with combining the intermediate result of one analysis to help another analysis with deciding P |= φ. This dissertation takes an alternative approach by allowing each analysis to determine P |= φ under some conditions. Then, combining the final results of such analyses causes P |= φ to hold under a weaker condition until, ultimately, an unconditional final result is produced.
This dissertation formalizes and implements a unification framework that combines computed information from analyses and disseminates that information among other anal- yses. This framework is extensible since the only requirement that an analysis shouldsatisfy is to have querying and reporting capabilities. Conducted in this context of the uni- fication framework, our experiments have shown that combining results from a diverse set of analyses produces weaker conditions for P |= φ than analyses can achieve operating in isolation.
Adviser: Matthew B. Dwyer