← 最新论文
💻 computer science

Investigating the application of differential fuzzing to support the identification and suppression of equivalent mutants: An experimental study

这项实验性研究表明,差异化模糊测试是一种实用的、与语言无关的方法,能够高效地识别并抑制不同现实世界软件项目中的等价变异体,在实现近乎完美的变异得分的同时,生成可用于加强传统测试套件的有价值输入。

原作者: Bruno Ely Reis Garcia, Simone do Rocio Senger de Souza

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

原作者: Bruno Ely Reis Garcia, Simone do Rocio Senger de Souza

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

软件测试是检查计算机程序是否能正确运行的过程,但由于程序非常复杂且输入是无穷无尽的,要发现所有可能的错误几乎是不可能的。为了解决这个问题,研究人员使用了一种称为变异测试(mutation testing)的技术,其原理是通过故意在代码中引入微小且真实的错误,以观察现有的测试能否捕捉到这些错误。如果测试未能发现错误,则意味着测试套件不够强大。然而,这种方法面临着一个顽固的障碍:其中一些虚假错误非常微妙,以至于它们根本不会改变程序的行为,从而导致无法被检测到。这些被称为“等价变异”(equivalent mutants),识别它们通常需要人类专家花费大量时间逐行阅读代码,这种缓慢且昂贵的过程长期以来阻碍了这种测试方法的广泛应用。

与此同时,另一种名为模糊测试(fuzzing)的方法已成为寻找安全漏洞的标准工具。模糊测试通过向程序输入大量的随机或畸形数据,以观察程序是否会崩溃。虽然模糊测试在发现导致程序停止工作的错误方面非常有效,但传统的模糊测试往往会错过那些改变程序计算方式或行为、却不导致崩溃的微妙错误。圣保罗大学的研究人员开展的一项新研究探索了将这两个领域结合起来的方法。他们研究了一种称为差异化模糊测试(differential fuzzing)的技术,该技术将原始程序与带有微小错误的程序并排运行,向它们喂入完全相同的数据并比较结果。如果两个版本产生了不同的输出,则错误被捕捉到。研究人员想要观察这种方法是否可以自动识别那些难以捉摸的等价变异,并且是否能比人类更快地完成。

为了测试这个想法,团队从四个不同编程语言编写的四个知名开源软件项目中,选择了六个特定的函数。这些项目包括比特币核心(Bitcoin Core,一种加密货币协议)、OpenSSL(一个密码学库)、LND(一个支付通道网络)以及 Arrow(一个日期和时间库)。利用一个可以为任何编程语言生成错误的工具,他们创建了 1,090 个这些函数的有效变体。在自动化测试开始之前,研究人员手动检查了这些错误,以剔除那些明显是等价的错误,从而留下具有挑战性的案例,以测试自动化系统是否能区分剩余的部分。随后,他们针对这些错误运行了五种不同的测试场景,范围从标准的单元测试到每个错误运行五分钟的限时模糊测试会话。

结果显示,仅关注崩溃的传统模糊测试是最不有效的,捕捉到的错误极少。相比之下,差异化模糊测试方法证明了其强大的威力。在为每个错误设定五分钟测试限制的情况下,该方法成功识别并确认了其中五个函数的错误行为,成功率达到了 98% 到 100%。对于最初遇到困难的一个函数,研究人员发现添加一个简单的预期关键词列表有助于系统更好地理解输入,最终使其达到了完美的得分。研究还表明,寻找这些错误所需的时间出奇地短;平均而言,系统在大约 30 秒内就找到了差异,这比人类手动分析单个案例通常所需的 15 分钟要快得多。

除了发现错误之外,研究人员还发现模糊测试过程中使用的数据具有隐藏价值。模糊测试工具生成的输入集合(称为种子语料库,seed corpus)包含了标准单元测试所遗漏的特定测试用例。这些输入能够“杀死”传统测试套件无法检测到的变异体。这表明安全团队正在生成的现有数据可以被重复利用来加强常规测试套件,将安全测试的副产品转化为通用软件质量的资源。研究还分析了寻找最难检测错误所需的时间,发现虽然大多数错误被快速找到,但有少数错误需要显著更多的时间,并呈现出一种难度变化巨大的模式,就像有些任务只需稍长一点时间,而另一些任务则需要非常长的时间一样。

研究人员得出结论,差异化模糊测试提供了一种实用且与语言无关的方法,用于支持这些困难错误的分类。它不需要复杂的各种新工具或特定于语言的设置,因为它仅仅是将原始代码与修改后的版本进行比较。通过将生存下来的错误视为人工审查的候选对象,而不是试图对每一个都进行分类,该方法大幅减少了所需的人力投入。研究表明,这种方法可以集成到现有工作流中,以高效地过滤掉那些真正属于等价的错误,从而让专家能够专注于仅剩的、仍不确定的少量案例。这一发现表明,一种简单的、基于程序行为对比的自动化方法,可以解决一个长期以来被认为成本过高且耗时过长,从而难以在工业界广泛采用的问题。

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

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

试用 Digest →