A successful automated program proof is, in software verification, the ultimate triumph. In practice, however, the road to such success is paved with many failed proof attempts. Unlike a failed test, which provides concrete evidence of an actual bug in the program, a failed proof leaves the programmer in the dark. Can we instead learn something useful from it? The work reported here takes advantage of the rich internal information that some automatic provers collect about the program when attempting a proof. If the proof fails, the Proof2Test tool presented in this article uses the counterexample generated by the prover (specifically, the SMT solver underlying the proof environment Boogie, used in the AutoProof system to perform correctness proofs of contract-equipped Eiffel programs) to produce a failed test, which provides the programmer with immediately exploitable information to correct the program. The discussion presents the Proof2Test tool and demonstrates the application of the ideas and tool to a collection of representative examples.
翻译:成功的自动程序验证在软件验证中是最终的胜利。 然而,在实践中, 成功的道路会铺设成许多失败的验证尝试。 与提供程序中实际错误的具体证据的失败测试不同, 失败的验证会让程序员在黑暗中消失。 我们能否从中学习有用的东西? 此处报告的工作利用了一些自动验证者在尝试验证时收集的关于程序的大量内部信息。 如果证明失败, 本条中提供的SUp2Test工具会使用验证人生成的反示例( 具体来说, AutoProof 系统中用来对合同装备的Eiffel 程序进行校正性证明的SMT解答程序) 来制作一个失败的测试, 向程序员提供可立即利用的信息来纠正程序。 讨论展示了校验测试工具, 并演示了对具有代表性的实例集的想法和工具的应用 。