Skip to main content
QUICK REVIEW

[论文解读] Verifying Eiffel Programs with Boogie

Julian Tschannen, Carlo A. Furia|arXiv (Cornell University)|Jun 23, 2011
Logic, programming, and type systems参考文献 18被引用 13
一句话总结

本文提出 AutoProof,一个静态验证工具,可将带有契约设计注解的 Eiffel 程序转换为 Boogie 以实现自动化验证。该工具支持继承、多态、异常和函数对象(代理)等高级面向对象特性,通过自动生成框架条件减少注解开销,并以极少的手动干预成功验证了一系列 Eiffel 案例研究。

ABSTRACT

Static program verifiers such as Spec#, Dafny, jStar, and VeriFast define the state of the art in automated functional verification techniques. The next open challenges are to make verification tools usable even by programmers not fluent in formal techniques. This paper presents AutoProof, a verification tool that translates Eiffel programs to Boogie and uses the Boogie verifier to prove them. In an effort to be usable with real programs, AutoProof fully supports several advanced object-oriented features including polymorphism, inheritance, and function objects. AutoProof also adopts simple strategies to reduce the amount of annotations needed when verifying programs (e.g., frame conditions). The paper illustrates the main features of AutoProof's translation, including some whose implementation is underway, and demonstrates them with examples and a case study.

研究动机与目标

  • 实现对 Eiffel 程序的实用、可使用的正式验证,而无需深入掌握形式化方法知识。
  • 减少程序验证中的手动注解负担,特别是针对框架条件和异常处理。
  • 在经过验证的转换管道中支持 Eiffel 语言的复杂特性,如继承、多态、函数对象(代理)和异常处理。
  • 与 Eiffel 验证环境(EVE)集成,实现统一的验证工作流。
  • 证明使用基于中间验证语言(如 Boogie)的自动化工具验证实际 Eiffel 程序的可行性。

提出的方法

  • 将带有前置条件、后置条件、不变量和断言注解的 Eiffel 程序转换为等价的 Boogie 程序。
  • 实现了对 Eiffel 独特异常机制(包括救援子句和重试逻辑)到 Boogie 验证框架的映射。
  • 应用语法启发式方法,从后置条件推断默认框架条件,最大限度减少显式框架注解。
  • 支持高级 Eiffel 特性,包括多态继承、函数对象(代理)和动态类型解析。
  • 利用 Boogie 的验证后端自动证明正确性属性,包括循环不变量和类不变量。
  • 与 EVE 环境集成,结合 AutoProof 与其他验证技术(包括分离逻辑和交互式定理证明器)使用。

实验结果

研究问题

  • RQ1能否使用基于中间验证语言(如 Boogie)的自动化工具有效验证具有复杂面向对象特性的 Eiffel 程序?
  • RQ2如何在保持验证正确性的前提下,最小化注解开销(特别是针对框架条件和异常处理)?
  • RQ3在不牺牲验证能力的前提下,自动推断框架条件和中间断言在多大程度上能提升可用性?
  • RQ4该转换在支持继承、代理和异常处理等特性的真实 Eiffel 程序上扩展性如何?
  • RQ5将 AutoProof 集成到统一的验证环境(如 EVE)中,能否增强整体验证体验并促进工具间的协同?

主要发现

  • AutoProof 顺利转换并验证了 11 个 Eiffel 案例研究,包括包含异常、继承、代理和复杂数据结构的示例。
  • 所有示例的平均验证时间为每程序 2.76 秒,最长案例(Calculator)耗时 9.73 秒。
  • 在大多数情况下,框架条件被自动推断,显著减少了手动注解需求,仅复杂案例需要显式框架规范。
  • 该转换正确建模了 Eiffel 独特的异常机制,包括重试逻辑和救援子句中的状态恢复,尽管在撰写本文时仍处于完整支持的实现过程中。
  • 该工具在真实 Eiffel 代码上展示了良好的可扩展性和可用性,包括使用代理实现命令模式和观察者模式的程序。
  • 与 EVE 的集成使得多种验证技术得以协同使用,为 Eiffel 的全面验证栈铺平了道路。

更好的研究,从现在开始

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

无需绑定信用卡

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