Selecting Refining and Evaluating Properties for Program Analysis
This research proposes and evaluates techniques for selectingpredicates for conditional program properties thatis, implications such as p ) q whose consequent must betrue whenever the predicate is true. Conditional propertiesare prevalent in recursive data structures, which behave differentlyin their base and recursive cases, in programs thatcontain branches, in programs that fail only on some inputs,and in many other situations. The experimental context ofthe research is dynamic detection of likely program invariants,but the ideas are applicable to other domains.Trying every possible predicate for conditional propertiesis computationally infeasible and yields too many undesirableproperties. This paper compares four policies forselecting predicates: procedure return analysis, code conditionals,clustering, and random selection. It also showshow to improve predicates via iterated analysis. An experimentalevaluation demonstrates that the techniques improveperformance on two tasks: statically proving the absence ofrun-time errors with a theorem-prover, and separating faultyfrom correct executions of erroneous programs.