This paper studies how to verify the conformity of a program with its specification and proposes a novel constraint-programming
framework for bounded program verification (CPBPV). The CPBPV framework uses constraint stores to represent both the specification
and the program and explores execution paths of bounded length nondeterministically. The CPBPV framework detects non-conformities
and provides counter examples when a path of bounded length that refutes some properties exists. The input program is partially
correct under the boundness restrictions, if each constraint store so produced implies the post-condition. CPBPV does not
explore spurious execution paths, as it incrementally prunes execution paths early by detecting that the constraint store
is not consistent. CPBPV uses the rich language of constraint programming to express the constraint store. Finally, CPBPV
is parameterized with a list of solvers which are tried in sequence, starting with the least expensive and less general. Experimental
results often produce orders of magnitude improvements over earlier approaches, running times being often independent of the
size of the variable domains. Moreover, CPBPV was able to detect subtle errors in some programs for which other frameworks
based on bounded model checking have failed.
Keywords Bounded program verification - Constraint-based symbolic execution - Detection of nonconformities - Test cases generation
This work has been partially supported by the “CAVERN” ANR-07-SESUR-003 project and by the “TESTEC” ANR-07-TLOG 022-05 project.