Skip to main content
QUICK REVIEW

[论文解读] Comparison between CPBPV, ESC/Java, CBMC, Blast, EUREKA and Why for Bounded Program Verification

Hélène Collavizza, Michel Rueher|ArXiv.org|Aug 11, 2008
Formal Methods in Verification参考文献 5被引用 4
一句话总结

该论文将基于约束编程的框架 CPBPV 与六种成熟工具——ESC/Java、CBMC、Blast、EUREKA 和 Why——在一组 C 和 Java 基准测试上进行了对比,评估其在有限程序验证中的表现。结果表明,CPBPV 在处理复杂约束(如 alldifferent 和 element 约束)方面表现更优,并在验证具有组合逻辑和非线性算术的程序时,相较于模型检测工具在验证时间和表达能力方面具有显著优势,尤其在特定问题类别中表现突出。

ABSTRACT

This report describes experimental results for a set of benchmarks on program verification. It compares the capabilities of CPBVP "Constraint Programming framework for Bounded Program Verification" [4] with the following frameworks: ESC/Java, CBMC, Blast, EUREKA and Why.

研究动机与目标

  • 评估 CPBPV(一种用于有限程序验证的约束编程框架)相对于现有成熟验证工具的有效性与效率。
  • 评估 CPBPV 在处理复杂程序约束(包括组合约束与非线性约束)时的表达能力与可扩展性。
  • 识别现有工具(如 ESC/Java、CBMC、Blast、EUREKA 和 Why)在验证具有复杂条件逻辑和带符号表达式的数组索引程序时的局限性。
  • 展示约束编程技术(尤其是 element 约束与 alldifferent 约束)在模块化且精确地验证命令式程序方面的优势。
  • 在相同硬件与输入条件下提供全面的基准对比,以确保对验证性能与正确性的公平评估。

提出的方法

  • CPBPV 使用约束编程技术通过符号化建模程序状态与约束来验证程序正确性,并利用 SAT/SMT 求解器解决约束问题。
  • 该框架集成形式化规范(如 JML 注解),并将其转换为约束存储,以检查其一致性和有效性。
  • 在基准测试中,CPBPV 处理由符号变量和约束构成的程序,包括使用表达式进行数组索引(element 约束)以及 alldifferent 等全局约束。
  • 通过检查后置条件是否在前置条件与控制流约束下被蕴含,结合约束传播与过滤机制完成验证。
  • 所有输入程序均被转换为对应工具的输入格式:JML 格式用于 CPBPV、ESC/Java 和 Why;C 语言带断言格式用于 CBMC 和 Blast;Blast 使用修改后的 C 版本以支持算术表达式。
  • 所有实验均在相同配置的 Intel Pentium M 1.86GHz 机器上运行,配备 1.5GB 内存,使用各工具的官方发布版本,执行时间与正确性结果均已记录。

实验结果

研究问题

  • RQ1在有限程序验证任务中,CPBPV 与 ESC/Java、CBMC、Blast、EUREKA 和 Why 相比,在性能与正确性方面表现如何?
  • RQ2CPBPV 是否能够有效验证具有复杂条件逻辑与组合约束的程序,例如三角形分类与平方和基准测试?
  • RQ3与传统模型检测方法相比,约束编程在验证数组操作与符号索引(如 element 约束)方面具有哪些优势?
  • RQ4CPBPV 在处理非线性算术与全局约束(如 alldifferent)方面的能力如何?这些约束对基于 SMT 或模型检测的工具而言具有挑战性。
  • RQ5在可扩展性与验证时间方面,CPBPV 的模块化验证能力与单体验证相比表现如何?

主要发现

  • CPBPV 在三角形分类基准测试中成功验证了 10 条可行路径,正确识别出所有三角形类型并拒绝无效输入,而 ESC/Java 和 Why 因表达式处理限制而失败。
  • 在平方和基准测试中,CPBPV 在 2 秒内完成对大小达 128 的数组的验证,而 ESC/Java 对所有大小均报告错误,表明其在处理复杂算术时存在工具局限性。
  • CPBPV 在 66.179 秒内完成对大小为 10 的排列平方和组合基准的求解,而 EUREKA 和 CBMC 在相同设置下无法完成该任务。
  • 在选择排序的模块化验证中,CPBPV 对大小为 40 的数组在 0.01 秒内完成验证,利用 element 约束实现对符号变量索引的数组访问;而 EUREKA 在更快的机器上仍需 104 秒。
  • CBMC 和 Blast 在处理非线性和复杂算术表达式时表现不佳,CBMC 在较大输入下出现超时或报告错误,Blast 无法验证涉及算术推理的断言。
  • Why 和 ESC/Java 在处理复杂条件逻辑与非线性约束方面存在局限,ESC/Java 即使在小数组规模下也对平方和基准测试报告错误。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。