A Tale of 1001 LoC: Potential Runtime Error-Guided Specification Synthesis for Verifying Large-Scale Programs

本文提出了名为 Preguss 的模块化细粒度框架,通过结合静态分析与大语言模型,利用潜在运行时错误引导验证单元构建与优先级排序,成功实现了对千行代码级大规模程序的高度自动化形式化验证,显著降低了人工验证成本。

Zhongyi Wang, Tengjie Lin, Mingshuai Chen, Haokun Li, Mingqi Yang, Xiao Yi, Shengchao Qin, Yixing Luo, Xiaofeng Li, Bin Gu, Liqiang Lu, Jianwei Yin

发布于 Wed, 11 Ma
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文讲述了一个关于如何让电脑自动检查大型软件代码是否安全的“新故事”。为了让你轻松理解,我们可以把编写和检查大型软件想象成管理一家拥有上千名员工的大型跨国公司

🏢 背景:巨大的挑战

想象一下,你是一家大公司的安全总监。公司有一本厚厚的操作手册(代码),里面有几万行指令。你的任务是确保没有任何员工会犯下致命的错误(比如除以零、内存溢出、空指针引用等,这些在编程里叫“运行时错误”或 RTE)。

  • 传统方法(老式安检机): 以前,我们使用一种叫“静态分析”的机器来扫描手册。但这台机器太敏感了,它经常把正常的操作也当成危险报警(这叫“误报”)。人工去一个个排查这些误报,就像在沙滩上找针,累死人也找不完。
  • 新方法(AI 助手): 最近,大家尝试用大语言模型(LLM,也就是现在的 AI)来帮忙写“安全承诺书”(形式化规范)。AI 很聪明,能读懂代码。但是,如果直接把整本几万页的手册扔给 AI,它会“脑子过载”(上下文限制),或者因为代码太复杂、函数之间调用关系太乱,根本写不出准确的承诺书。

🚀 主角登场:Preguss(“分而治之”的超级管家)

这篇论文提出了一个名为 Preguss 的新框架。它的核心思想可以用一个生动的比喻来解释:“分而治之” + “精准导航”

1. 第一步:把大任务切碎(Divide)

想象你要检查整个公司的安全,直接看全公司太乱了。Preguss 先派出一位“侦察兵”(静态分析工具),它不直接找最终答案,而是专门负责标记出所有可能出错的“危险点”(比如:这里可能会除以零,那里可能会内存溢出)。

然后,Preguss 把这些危险点变成一个个独立的“小任务包”(Verification Units)

  • 比喻: 就像把检查整个大楼的任务,拆分成“检查 1 楼的电梯”、“检查 2 楼的消防栓”、“检查 3 楼的电路”等一个个小任务。
  • 排序: 它还会给这些小任务排个队。比如,必须先检查“底层供应商”(被调用的函数),才能检查“顶层经理”(主函数)。这就像盖房子,得先打好地基,才能砌墙。

2. 第二步:AI 精准填坑(Conquer)

现在,AI 不需要再看整本几万页的手册了。它只需要看着当前这个小任务包,以及侦察兵标记的危险点,来写一份“安全承诺书”。

  • 精准导航: 如果侦察兵说“这里可能会除以零”,AI 就会专门针对这个点,去问:“是谁传进来的数据?是不是需要加个限制,比如‘输入不能是 0'?”
  • 跨部门协作(过程间规范): 很多错误是因为 A 部门(函数)把坏数据传给了 B 部门。Preguss 会指挥 AI 去写 A 部门的“输出承诺”(后条件)和 B 部门的“输入要求”(前条件),确保数据在传递过程中是安全的。
  • 纠错机制: 如果 AI 写的承诺书太离谱(比如要求输入必须是“红色的数字”,这显然不对),Preguss 会拿着验证器的反馈(“你写错了,因为变量没定义”)让 AI 修改,直到它写出一个既符合逻辑又能通过验证的承诺书。

🌟 为什么它这么厉害?(核心创新)

  1. 不再“盲人摸象”: 以前的 AI 方法像是在黑暗中摸索,试图一次性猜出所有规则。Preguss 则是拿着手电筒(危险警报),哪里亮了查哪里,哪里有问题补哪里。
  2. 化整为零: 它把几千行代码的大工程,拆解成几百个几百行的小工程。这让 AI 的“大脑”(上下文窗口)能轻松处理,不会过载。
  3. 人机协作的极致: 以前,人类专家需要写几百条规则来证明代码安全。现在,Preguss 自动生成了大部分规则,人类专家只需要检查最后剩下的极少数“存疑项”。
    • 成果: 在测试中,它把人类的工作量减少了 80% 到 89%

🛠️ 实际效果:真的有用吗?

作者们把这个系统用在了真实的航天器控制系统(SAMCODE)和其他大型开源项目上。

  • 发现真凶: 它不仅自动验证了大部分代码是安全的,还成功揪出了 6 个真实的、潜伏的严重 Bug(比如未初始化的变量),这些 Bug 如果爆发,可能导致航天器失控。
  • 效率惊人: 对于几千行代码的项目,以前可能需要专家花几个月手动写规则,现在 Preguss 能在几小时内搞定大部分工作。

📝 总结

Preguss 就像是一个拥有“透视眼”和“超级逻辑”的 AI 管家
它不再试图一口吃成个胖子,而是把庞大的代码库拆解成一个个小任务。它利用“危险警报”作为导航,指挥 AI 精准地写出安全规则,并不断自我修正。最终,它让原本需要人类专家耗时数月、甚至数年才能完成的“代码安全大考”,变成了大部分自动完成、人类只需最后把关的高效流程。

这不仅是技术的进步,更是让大型软件(如航天、金融、医疗系统)变得更安全、更可靠的“圣杯”之路上的重要一步。