Crash-free Deductive Verifiers
本文主张利用模糊测试(Fuzzing)作为提升演绎验证器可靠性与健壮性的实用手段,并通过集成于 VerCors 验证器的原型工具 AValAnCHE 的实验验证了该方法在发现漏洞及适用于其他验证器方面的有效性。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
这篇论文讲述了一个关于如何让“软件检查员”变得更结实、更不容易崩溃的故事。
想象一下,你是一位建筑大师,你雇佣了一群超级聪明的“检查员”(也就是论文里提到的演绎验证器,比如 VerCors)。这些检查员的工作不是去盖房子,而是拿着放大镜,在你还没动工之前,就通过逻辑推理来检查你的设计图纸(代码):
- “这面墙会不会塌?”(内存安全)
- “如果两个工人同时推这扇门,会不会撞车?”(数据竞争)
- “这扇门真的能通向你想去的地方吗?”(功能正确性)
这些检查员非常聪明,但它们也是由人写的软件,所以它们自己也会生病、犯糊涂,甚至突然“晕倒”(崩溃)。
1. 问题:检查员自己也会“晕倒”
过去,这些检查员主要是在大学实验室里由教授和研究生开发的。大家更关注它们“能不能算对”,而忽略了它们“能不能扛得住”。
这就好比,你请了一个超级算力的数学家来算账,但他自己却是个路痴,只要你在输入时稍微写错一个奇怪的符号,或者问了一个他从未见过的怪问题,他不仅不会告诉你“这题超纲了”,反而会直接晕倒在地(程序崩溃),让你连个解释都得不到。
对于普通用户来说,如果工具动不动就崩溃,谁还敢用呢?
2. 解决方案:给检查员来一场“压力测试”
为了解决这个问题,作者们提出了一种叫**“模糊测试”(Fuzzing)**的方法。
什么是模糊测试?
想象一下,你不想让检查员只面对标准的、完美的图纸。你想看看它在面对乱七八糟、甚至有点荒谬的输入时,会不会崩溃。
于是,作者们开发了一个叫 AValAnCHE 的“捣蛋机器人”。
- 这个机器人会像机关枪一样,以极快的速度生成成千上万个随机的、语法正确但逻辑奇怪的代码片段。
- 它把这些“怪题”扔给检查员(VerCors)做。
- 如果检查员因为某个怪题晕倒了,机器人就记录下来:“嘿!刚才那个输入导致它崩溃了!”
3. 他们是怎么做的?(AValAnCHE 工具)
作者们把这个“捣蛋机器人”(AValAnCHE)和 VerCors 连在了一起。为了让机器人更聪明,他们用了三种不同的“捣蛋策略”:
- 策略一:乱枪打鸟(覆盖率引导)
机器人随机生成代码,不管它像不像人话,只要能让检查员多跑几步代码就行。结果发现,这种方法生成的代码太乱,检查员直接拒绝,根本跑不起来。 - 策略二:照着语法书乱写(基于语法的生成)
机器人手里拿着 VerCors 的“语法字典”(Grammar),确保生成的代码在语法上是正确的(比如括号都配对,单词没拼错)。这样检查员就能读进去了。结果发现,虽然语法对了,但有些逻辑很怪,检查员读到一半就晕了。 - 策略三:只出“可验证”的怪题(可验证子集)
这是最厉害的一招。机器人不仅保证语法对,还保证这些代码在逻辑上是“可被检查”的(比如变量类型是对的)。这就像给检查员出了一套虽然很难、但理论上能解的题。结果发现,这种方法最能挖出深藏的 bug。
4. 战果如何?
这个“捣蛋机器人”非常成功!
- 它在 VerCors 里挖出了几十个以前没人发现的崩溃点。
- 有些 bug 非常隐蔽,比如:
- 如果你写了一个空的“枚举”(Enum),检查员就晕了。
- 如果你用了一堆下划线(
___)做名字,检查员就晕了。 - 甚至在 C++ 代码里,如果名字全是由字母
u和l组成的,检查员也会晕。
- 这些 bug 以前很难被发现,因为人工写代码很少会故意去写这种奇怪的组合。但机器人不管,它专门找这种死角。
5. 总结与启示
这篇论文的核心思想是:在让工具变得更聪明之前,先让它变得更结实。
作者们证明了,用这种“故意找茬”的模糊测试方法,可以极大地提高这些高级验证工具的鲁棒性(Robustness)。
- 以前:工具一遇到怪输入就崩溃,用户很困惑。
- 现在:工具在发布前就被“折磨”过无数遍,遇到怪输入会优雅地报错,而不是直接晕倒。
这就好比在正式比赛前,先让运动员在泥地里、暴雨中、甚至穿着高跟鞋跑几圈。虽然看起来很疯狂,但这能确保他们在真正的赛场上,无论遇到什么突发状况,都能稳稳地跑完全程。
一句话总结:
作者们造了一个专门给“软件检查员”出怪题的机器人,通过这种“压力测试”,把检查员身上的各种小毛病都揪了出来,让它们以后能更可靠地帮人类检查代码。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。