← 最新论文
🤖 AI

Evaluating LLM-Based Regression Test Generation

本文介绍了 Cleverest,这是一个基于反馈的零样本大语言模型(LLM)框架,它将回归测试生成构建为机器翻译问题,从而通过提交信息快速生成有效的测试用例,其发现 Bug 的效率在不到两分钟内即可达到最先进模糊测试工具(fuzzers)运行 24 小时后的水平,并且当作为种子语料库使用时,能显著提升后续模糊测试的有效性。

原作者: Jing Liu, Seongmin Lee, Eleonora Losiouk, Marcel Böhme

发布于 2026-07-07
📖 1 分钟阅读☕ 轻松阅读

原作者: Jing Liu, Seongmin Lee, Eleonora Losiouk, Marcel Böhme

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下你拥有一台巨大且复杂的机器,比如汽车发动机或功能强大的游戏机。每当机械师(软件开发人员)微调机器的一个小零件来修复问题或添加功能时,他们都需要确保机器的其他部分仍然能够正常工作。这被称为回归测试(regression testing)

通常,这是一项缓慢的手动工作。你必须编写具体的指令(测试用例)来观察这个新的微调是否破坏了其他地方。但如果能有一个超级聪明的机器人为你编写这些指令呢?

这正是这篇论文所探讨的内容。研究人员构建了一个名为 Cleverest 的工具,它使用“大语言模型”(LLM)——也就是驱动聊天机器人的那种 AI ——来充当测试编写者。

以下是其工作原理的拆解,使用了简单的类比:

1. 职责: “翻译官”

把一次软件更新想象成机械师留在仪表盘上的一张便条:“我拧紧了左轮的螺栓。”

  • 问题: 计算机并不知道“拧紧螺栓”在现实世界中是什么样子的。它需要一个物理测试来证明这确实起作用了。
  • Cleverest 的解决方案: Cleverest 扮演的是一个翻译官的角色。它获取机械师的便条(“提交信息/commit message”)和变更列表(“代码差异/code diff”),并将它们翻译成一个物理测试。它会说:“好吧,机械师拧紧了螺栓。现在我要开车开过一个减速带,看看轮子会不会掉下来。”

2. 过程: “反馈循环”

Cleverest 不仅仅是猜一次然后听天由命。它使用了一个反馈循环,就像学生参加练习测验并立即得到评分一样。

  1. 草拟: Cleverest 编写一个测试(例如,一个特定的 JavaScript 程序或 XML 文件)。
  2. 运行: 它在变更前后对软件运行该测试。
  3. 评分: 一个“执行分析器(Execution Analyzer)”会检查结果。测试是否导致程序崩溃?输出是否发生了变化?它是否触及了被修改的那部分代码?
  4. 改进: 如果测试未能发现 Bug 或没有触及正确的代码,Cleverest 会收到“评分”(反馈),然后再次尝试,不断完善其测试,直到达到目标。

3. 结果: 速度 vs. 力量

研究人员在 8 个流行程序(如 PDF 阅读器、JavaScript 解析器和 XML 解析器)的 72 个不同软件更新上测试了 Cleverest。

  • 速度达人: Cleverest 的速度惊人。它在不到 2 分钟内发现的 Bug 数量,与一个最先进的竞争对手(称为 WAFLGo)在 24 小时内发现的数量相当。
    • 类比: 这就像 Cleverest 是一个短跑运动员,能在几秒钟内找到路面上的坑洼;而 WAFLGo 则像是一个马拉松选手,最终也能找到同一个坑洼,但需要花上一整天的时间。
  • “种子”的力量: 即使 Cleverest 没有立即发现 Bug,它编写的测试也往往是“成功了一半”的。当研究人员将 Cleverest 的测试交给传统的模糊测试工具(fuzzer,一种向软件投喂随机数据以使其崩溃的工具)时,该工具发现的 Bug 比它单独运行时多出了两倍
    • 类比: Cleverest 并没有找到宝箱,但它在宝箱旁边挖了一个坑。当模糊测试工具过来时,它只需要再挖深几英寸就能找到黄金。

4. 秘密武器: “便条”很重要

其中一个最有趣的发现是,Cleverest 高度依赖于开发者在便条中写了什么

  • 好的便条: 如果开发者写道:“我修复了一个会导致系统崩溃的浮点数 Bug,” Cleverest 就能理解,并创建一个包含浮点数的测试。
  • 坏的便条: 如果开发者写道:“修复了 #123,” Cleverest 就会感到困惑。它不知道“123”代表什么,因此无法编写出好的测试。
  • 实验: 研究人员拿走了这些糟糕的便条,并仅添加了几个词使其具有描述性。突然间,Cleverest 的表现大幅飙升。
    • 类比: 如果你告诉厨师,“给我做点好吃的”,他可能会做一份沙拉。如果你说,“请给我做一份香辣的、无麸质的意面”,他就会做出你想要的东西。指令越具体,效果就越好。

5. 结论

论文得出结论:

  1. LLM 在这方面表现出色: 它们可以将人类对代码变更的描述转化为一个可运行的测试用例,速度非常快。
  2. 它在可读格式上表现最好: 它非常擅长测试文本文件、代码和 XML 等内容。但在处理复杂的二进制格式(如 PDF)时会遇到一些困难,因为这些格式对 AI 来说更难“可视化”。
  3. 它是完美的搭档: Cleverest 的目的并不是要完全取代人类测试员或复杂的模糊测试工具。相反,它是一个超快速的助手,负责把事情带入正轨。它编写测试的初稿,随后人类可以对其进行调整,或者将其用于增强其他测试工具的功能。

简而言之,Cleverest 证明了,如果你给 AI 一个清晰的软件变更描述,它几乎可以瞬间编写出测试,以观察该变更是否破坏了任何东西,从而为开发者节省数小时的工作时间。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →