论文

部分合约就足够了:健全,LLM-推断回归验证

Partial Contracts Suffice: Sound, LLM-Inferred Regression Verification

摘要

软件不断发展,但确保补丁保留预期行为而不重新验证整个代码库仍然很困难。回归验证解决了这个问题,但现有技术需要昂贵的全程序推理或依赖于实践中很少可用的手动编写的规范。我们提出了第一个基于合约的回归验证工具。通过证明所有函数版本都与行为匹配来确保合约的健全性。然后合约通过假设保证来验证程序流程。我们询问,部分的、调用者充足的合约,而不是完整的行为规范,是否就足够了。在 Frama-C-Problems 上,我们将每个推断的合约强化到调用者需要的范围之外,并衡量它变得更紧了多少。它几乎没有移动:对于每个模型中的大多数目标,调用者充足的合约已经是循环达到的最紧密的,并且我们的紧密度比较器对它可以比较的大多数目标的部分和强化合约进行了等效评级。因此,部分规范合约几乎涵盖了所有可达到的严格性,因此停止调用者充足性几乎不需要任何成本。下面的回归检查是健全的:在第三方 EqBench-C 套件上,它从不制造等价性,返回零错误证明并报告无法证明的差异。它还显示了 EqBench 错误标记为等效的 9 对,比并发工具报告的数量还要多。合约本身是从检查者自己的反例中自动推断出来的,没有单独的规范步骤;在 Frama-C-Problems 和 ANSSI X509 解析器上,这达到了与 AutoSpec 和 Preguss 工具相当的验证率,而通过的结果至少证明了同样强大的属性,我们称之为 \emph{安全保护条件等价}:强制执行加上调用者充足性。