← 最新论文
💻 computer science

Improving LLM-Driven Test Generation by Learning from Mocking Information

本文提出了名为 MOCKMILL 的基于大语言模型的技术,通过利用现有测试套件中的开发者定义模拟(Mocking)信息来指导测试生成,实验表明该方法能有效提升单元测试的代码覆盖率和变异检测能力。

原作者: Jamie Lee, Flynn Teh, Hengcheng Zhu, Mengzhen Li, Mattia Fazzini, Valerio Terragni

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

原作者: Jamie Lee, Flynn Teh, Hengcheng Zhu, Mengzhen Li, Mattia Fazzini, Valerio Terragni

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

这篇论文介绍了一个名为 MOCKMILL 的新工具,它的核心任务是利用大语言模型(LLM)来自动生成软件测试代码

为了让你更容易理解,我们可以把软件开发和测试的过程想象成**“排演一出戏剧”**。

1. 背景:为什么我们需要“排演”?

在软件开发中,程序员写好了代码(剧本),但为了确保这出戏不出错(没有 Bug),必须进行“彩排”(测试)。

  • 传统彩排:以前,程序员手动写测试代码,或者用一些随机生成的工具(像扔飞镖一样,碰运气)。这很耗时,而且容易漏掉一些复杂的场景。
  • AI 彩排:现在,我们有了大语言模型(LLM),它读过海量的代码,像一位博学的“导演”,可以帮我们要写测试剧本。

但是,有个问题: 如果只给这位“导演”看主角的剧本(被测代码),它可能不知道配角(依赖的组件)在戏里是怎么互动的。比如,主角打电话给配角,配角是接电话还是挂断?是回答“是”还是“否”?如果导演不知道这些细节,它生成的测试剧本可能就不够真实,甚至无法运行。

2. 核心创新:MOCKMILL 是什么?

MOCKMILL 就是为了解决这个问题而生的。它的名字可以理解为“模拟(Mock)磨坊(Mill)”。

  • 它的独特之处:它不仅仅看主角的剧本,还会去翻找以前的排练记录(现有的测试代码)
  • 它发现了什么? 在以前的排练中,程序员为了隔离主角,经常使用一种叫**“替身演员”(Test Doubles/Mocks)**的东西。
    • 比喻:想象主角要和一个“国王”对话,但“国王”太忙了,或者还没写好。程序员就找了一个替身演员来扮演国王。在排练记录里,详细写着:“当主角问‘你好吗’时,替身演员必须回答‘很好’;如果主角问‘天气’,替身演员必须假装没听见。”
  • MOCKMILL 的做法:它把这些“替身演员”的**排练笔记(Mocking Information)**提取出来,喂给 AI 导演。
    • 它告诉 AI:“嘿,在这个场景里,那个‘国王’(依赖组件)是被替换过的,而且我们规定它必须这样反应。请根据这个规则,给主角写一个新的、更精彩的测试剧本。”

3. 它是如何工作的?(四步走)

  1. 找线索(项目分析):MOCKMILL 像侦探一样,扫描整个项目,找出哪些代码在之前的测试里被“替身演员”替换过。
  2. 记笔记(模拟提取):它把那些“替身演员”的具体行为规则(比如:输入 A 必须输出 B)提取出来,整理成一份清晰的“行动指南”。
  3. 写剧本(测试生成):AI 导演拿着“主角剧本” + “替身演员行动指南”,开始创作新的测试代码。因为它知道配角该怎么演,所以生成的测试更真实、更复杂。
  4. 改错(修复循环):如果新写的剧本有语法错误或者跑不通,MOCKMILL 会自动把错误反馈给 AI,让它修改,直到剧本能完美运行。

4. 效果怎么样?(实验结果)

作者找了 6 个真实的开源 Java 项目(就像 6 个不同的剧团),用了 4 种不同的 AI 模型(包括 GPT-4O, GPT-5, Claude 等)来测试 MOCKMILL。

  • 更全面的覆盖:MOCKMILL 生成的测试,发现了很多以前被忽略的“舞台死角”(代码行)和“潜在穿帮镜头”(Bug/变异体)。
  • 互补性:它不是要取代人类写的测试,也不是要取代随机测试。它像是一个**“查漏补缺”的专家**。
    • 比喻:如果人类导演写了 100 分,随机测试写了 60 分,普通的 AI 写了 80 分。MOCKMILL 虽然总分可能也是 80 分左右,但它专门抓住了那 20 分里别人没抓到的细节
  • 成本可控:虽然因为多看了点“排练笔记”,成本稍微增加了一点点(大约 5%-15%),但换来的是更高的测试质量,非常划算。

5. 总结与启示

这篇论文告诉我们:在让 AI 写测试代码时,不要只给它看“主角”,还要给它看“配角”是怎么被对待的。

  • 以前的做法:AI 看着主角说:“你试着做点事吧。”(结果可能很泛泛)。
  • MOCKMILL 的做法:AI 看着主角,手里还拿着以前的笔记说:“根据记录,当你做这件事时,那个‘国王’会这样反应,所以你要这样测试,才能发现真正的漏洞。”

一句话总结:MOCKMILL 就像一位聪明的**“排练导演助理”**,它通过研究过去的“替身演员”如何配合,指导 AI 写出更逼真、更能发现 Bug 的测试剧本,让软件更健壮。

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

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

试用 Digest →