A Comprehensive Study on Large Language Models for Mutation Testing
本文通过一项全面的实证研究表明,虽然大语言模型在生成多样化且行为准确的变体方面显著优于基于规则的方法(其故障检测率高出 111.29%),但同时也导致了更高的不可编译率、重复率和等价变体率。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下你是一名试图在复杂代码中寻找漏洞的软件工程师。为了测试你的安全网(你的测试套件)有多好,你决定玩一个名为“寻找伪装者”的游戏。你故意在代码中引入微小、微妙的错误,看看你的测试是否能发现它们。在软件世界中,这些刻意的错误被称为变异体(mutants)。
多年来,工程师们一直使用一本“规则手册”来创建这些错误。这就像是一个遵循严格清单的机器人:“把每个加号改为减号,”或者“把这个数字换成零。”这种方式快速且可靠,但它制造的错误往往过于明显,不像现实生活中人类犯下的那些混乱、真实的错误。
最近,一位新玩家进入了这场游戏:大语言模型(LLMs)。把它们想象成超级聪明的 AI 助手,它们几乎读过所有写过的代码。它们不仅仅是遵循规则手册;它们理解上下文、逻辑和风格。它们可以观察一段代码并说:“啊,如果我在这里改变这个变量,看起来就像是一个疲惫的开发者会犯的错误。”
这篇论文是一场大规模的“味觉测试”,旨在看看谁更擅长创造这些伪装的错误:是传统的规则手册机器人,还是新的 AI 助手。
宏大的实验
研究人员从流行的 Java 软件项目中收集了 851 个真实的漏洞(bugs)。这些是真实开发者犯下并修复的实际错误。然后,他们要求两组人尝试重现这些漏洞:
- 传统主义者: 使用传统的工具(如 PIT 和 Major),它们遵循严格的规则。
- AI 团队: 使用各种大语言模型(如 GPT-4o 和 DeepSeek)以及不同的“提示词”(指令)。其中一种提示词是作者设计的新方案,称为 LLMut。
他们生成了超过 700,000 个伪造的错误(变异体),以观察它们与真实漏洞的对比情况。
结果:AI 在“真实感”上胜出
研究结果非常明确,但也有一个前提条件。
1. AI 更擅长模仿真实的漏洞
想象一下你正在试图欺骗一名保安。
- 传统主义者放置了一个纸板人扮成的强盗。它是假的,但显然一眼就能看穿。保安(测试套件)能立刻发现它,但这并不能告诉你一个真正的强盗会如何潜入。
- AI 则创造了一个看起来、走起来、说话都和真强盗一模一样的强盗。它甚至还穿着合适的衣服。
研究发现,AI 生成的变异体比传统工具更能成功“欺骗”测试,其效率高出 1.75 倍。具体而言:
- 传统工具捕捉到了大约 44% 的真实漏洞。
- AI 工具捕捉到了大约 76% 的真实漏洞。
AI 变异体的“行为特征更接近”真实漏洞。它们不仅仅是以明显的方式破坏代码,而是以人类那种微妙、令人困惑的方式来破坏代码。这意义重大,因为这意味着 AI 正在帮助工程师发现软件中真正的薄弱环节。
2. AI 更具创造力
传统工具主要进行微小的、简单的改动(比如改变一个数字)。然而,AI 则像是一位创意作家。它进行复杂的改动,重新排列逻辑和结构,其方式是规则手册从未想过的。它引入了更广泛的“错误”,覆盖了更广的领域。
缺陷:AI 很“粗糙”
虽然 AI 在创造现实主义错误方面表现出色,但它也更加“粗糙”。
- 编译错误: 传统工具就像一台完美的打印机;几乎每一张纸出来的都是可读的。然而,AI 就像一个正在写作文的学生:它经常出现拼写错误或忘记闭合括号,导致生成的代码根本无法运行。大约 32% 的 AI 尝试是“不可编译的”(即损坏的代码),而传统工具的这一比例几乎为 0%。
- 重复: AI 有时会感到厌倦或困惑,从而生成完全相同的错误,甚至生成一个看起来与原始代码无异的“重复项”(duplicate)。传统工具很少出现这种情况。
- 成本: 与闪电般快速的传统工具相比,AI 生成单个变异体所需的时间更长,消耗的“Token”(AI 计算的货币单位)也更多。
“幸存”的变异体
变异测试的一个关键部分是观察那些“幸存”(测试未能捕捉到)的变异体。
- 传统工具经常创建一些极其微妙以至于溜掉的变异体,但这些变异体通常出现在已经被测试覆盖的代码区域。
- AI 工具则倾向于在未测试区域创建变异体。这对工程师来说是一个金矿。这就像是 AI 用手电筒照向房间的阴暗角落,并对你说:“嘿,这部分还没人检查。你应该为它编写一个测试。”
结论
论文得出结论,LLM 是一个强大的新工具,用于软件测试。它们创建的变异体比我们以往拥有的任何工具都更具现实感和多样性,有助于工程师发现软件中更深层的缺陷。
然而,它们还没有准备好完全取代旧工具。它们太容易出现“拼写错误”(编译错误),而且速度较慢。根据论文的说法,理想的未来是一个混合方案:利用 AI 来生成具有现实感和创造性的漏洞,但使用传统工具来确保代码的整洁和有效。
简而言之: AI 是那个能提出天才、现实想法的创意天才,但需要一个编辑来修正它的语法。传统工具则是那些从不出错但缺乏创造力的可靠编辑。两者结合,便成了完美的团队。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。