← 最新论文
💻 computer science

MR-Adopt: Automatic Deduction of Input Transformation Function for Metamorphic Testing

本文提出了 MR-Adopt 方法,利用大语言模型结合数据流分析从硬编码的测试用例中自动推导通用的输入变换函数,从而将不可复用的元关系测试转化为可复用的形式,显著提升了测试覆盖率和变异得分。

原作者: Congying Xu, Songqiang Chen, Jiarong Wu, Shing-Chi Cheung, Valerio Terragni, Hengcheng Zhu, Jialun Cao

发布于 2026-04-14
📖 2 分钟阅读☕ 轻松阅读

原作者: Congying Xu, Songqiang Chen, Jiarong Wu, Shing-Chi Cheung, Valerio Terragni, Hengcheng Zhu, Jialun Cao

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

这篇论文介绍了一个名为 MR-Adopt 的新工具,它的核心任务是教计算机如何“举一反三”地测试软件

为了让你轻松理解,我们可以把软件测试想象成**“教学生做数学题”**的过程。

1. 背景:现在的测试遇到了什么麻烦?

想象一下,你是一位数学老师(软件开发者),你想检查学生(软件程序)是否真的学会了“加法”。

  • 传统的做法(硬编码): 你给学生出了一道题:1 + 2 = 3。学生做对了,你打个勾。然后你又出了一道:5 + 8 = 13
    • 问题在于: 你只给了学生具体的数字(硬编码的输入)。如果学生只是背下了"1+2 等于 3"这个答案,而不是学会了“加法”这个规则,那么当你给他出 99 + 100 时,他可能就懵了。
    • 现状: 论文发现,程序员写的很多测试代码里,就像上面那样,只写了具体的数字(比如日期 A 是 1 月 1 日,日期 B 是 1 月 2 日),却没有写出“加一天”这个通用的规则。这就导致这些测试只能用来检查那特定的两个日期,换个日期就废了。

2. 核心概念:什么是“蜕变关系”(Metamorphic Relation)?

在软件测试里,有一个高级概念叫“蜕变关系”(MR)。

  • 通俗解释: 它不是问“这个答案对不对”,而是问"如果输入变了,输出应该怎么跟着变"。
  • 例子: 比如“如果输入的时间往后推一天,那么输出的时间也应该往后推一天"。
  • 痛点: 程序员虽然心里知道这个规则,并在代码里写死了两个具体的日期来验证,但没有把“往后推一天”这个逻辑写成通用的函数。所以,计算机没法自动拿这个规则去测试成千上万个新日期。

3. MR-Adopt 做了什么?(它的魔法)

MR-Adopt 就像是一个超级聪明的“推理教练”,它利用大语言模型(LLM,比如现在的 AI 聊天机器人)来帮程序员把那个“没写出来的通用规则”给补全。

它的工作流程分三步走,我们可以用**“猜谜游戏”**来比喻:

第一步:猜谜热身(生成更多例子)

  • 现状: 程序员只给了 AI 一个例子:1 月 1 日 -> 1 月 2 日
  • AI 的困境: 如果只给这一个例子,AI 可能会瞎猜,以为规则是“把年份加 1"或者“把月份加 1",因为它没见过其他情况。
  • MR-Adopt 的做法: 它先让 AI 自己出另外 5 个类似的例子。
    • 比如 AI 猜:12 月 31 日 -> 1 月 1 日 2 月 28 日 -> 3 月 1 日
    • 目的: 通过给 AI 看更多例子,让它明白:“哦!原来规则是‘加一天’,而不是‘加一年’或‘加一月’"。这就像老师给学生多讲几道题,防止学生死记硬背。

第二步:提炼规则(生成转换函数)

  • 任务: 现在 AI 有了很多例子(1 月 1 日变 1 月 2 日,12 月 31 日变 1 月 1 日...)。
  • MR-Adopt 的做法: 让 AI 根据这些例子,写出一段通用的代码(函数),这段代码能处理任何日期,自动算出“明天”是哪天。
  • 去伪存真: AI 有时候会写错代码(比如引用了不存在的函数,或者写了无关的废话)。MR-Adopt 会像编辑一样,用“数据流分析”把那些没用的、错误的代码删掉,只留下真正能算出“明天”的核心逻辑。

第三步:考试验证(评估与选择)

  • 任务: AI 可能生成了好几个版本的“加一天”代码。哪个最好?
  • MR-Adopt 的做法: 它拿一堆新的、没见过的日期(比如 2024 年 2 月 29 日这种特殊日子)去测试这些代码。
    • 如果代码能正确算出所有日期的“明天”,那就是满分通过
    • 如果代码遇到 2 月 29 日就崩了,那它就被淘汰。
    • 最后,选出那个最通用、最靠谱的代码作为最终结果。

4. 效果如何?(成绩单)

论文通过实验证明,MR-Adopt 非常厉害:

  1. 更懂变通: 相比直接让 AI 写代码(没有前面的猜谜和筛选步骤),MR-Adopt 生成的代码通用性提高了 33%。也就是说,它生成的规则能应用到更多不同的输入上,而不是只针对那一个例子。
  2. 发现更多 Bug: 当把这些新规则应用到软件测试中时,软件被测试得更彻底了:
    • 代码覆盖率(测试了多少行代码)提高了 10.62%
    • 变异测试得分(发现潜在错误的能力)提高了 18.91%
    • 比喻: 就像以前只检查了学生做对了一道题,现在用 MR-Adopt 生成的规则,能检查学生是否真的掌握了整个“加法”体系,从而发现了以前漏掉的“粗心大意”(Bug)。

5. 总结

MR-Adopt 的核心价值在于:
它把程序员写在代码里的“死例子”(硬编码的输入),自动翻译成了“活规则”(通用的转换函数)。

  • 以前: 测试就像“背答案”,换个题目就不会了。
  • 现在: 测试变成了“掌握公式”,无论题目怎么变,都能自动算出正确答案并检查对错。

这让软件测试变得更自动化、更智能,能发现更多以前发现不了的隐藏错误。这就好比给软件测试装上了一个“举一反三”的大脑。

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

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

试用 Digest →