大模型辅助软件测试:中科院综述 102 篇论文核心方案
中国科学院软件研究所联合多所高校分析了 102 篇关于大模型在软件测试领域应用的论文。研究发现大模型主要应用于测试生命周期后段,如用例生成和调试。常用模型包括 ChatGPT、Codex 和 CodeT5。技术路径涵盖微调与提示工程。当前面临覆盖率低、测试预言难、评估基准泄露及现实项目适配等挑战。未来机遇在于扩展测试阶段、结合传统技术及高级提示工程。

中国科学院软件研究所联合多所高校分析了 102 篇关于大模型在软件测试领域应用的论文。研究发现大模型主要应用于测试生命周期后段,如用例生成和调试。常用模型包括 ChatGPT、Codex 和 CodeT5。技术路径涵盖微调与提示工程。当前面临覆盖率低、测试预言难、评估基准泄露及现实项目适配等挑战。未来机遇在于扩展测试阶段、结合传统技术及高级提示工程。

随着人工智能技术的飞速发展,大语言模型(Large Language Models, LLMs)凭借其卓越的自然语言理解、逻辑推理及代码生成能力,正在深刻改变软件工程领域。在软件测试这一关键环节,大模型展现出巨大的潜力,能够生成逼真且多样化的测试输入,模拟各种异常场景,从而加速缺陷的发现并提升软件质量。
中国科学院软件研究所联合澳大利亚 Monash 大学、加拿大 York 大学的研究团队,收集了截止到 2023 年 10 月 30 日发表的 102 篇相关论文,从软件测试和大模型双重视角进行了全面分析,总结出一篇关于大模型在软件测试领域应用的权威综述。本文基于该综述的核心发现,深入剖析大模型如何辅助程序员找 Bug,以及当前面临的技术挑战与未来机遇。

研究人员首先从软件测试的生命周期出发,将收集到的研究工作按照具体的测试任务进行了分类组织。分析显示,大模型的应用主要集中在软件测试生命周期的后段,而在早期阶段的应用尚显不足。
目前大模型主要应用于以下任务:
相比之下,在测试需求分析、测试计划制定等早期任务上,由于涉及较多主观判断和缺乏结构化数据,目前尚未见大规模应用大语言模型的相关工作。

传统的基于搜索、约束或随机的生成技术往往存在覆盖率弱或可读性差的问题。引入大模型后,其优势在于能够理解更广泛的领域知识,结合软件项目和代码的上下文信息,生成更全面、准确的测试用例。例如,模型可以识别代码中的边界条件,生成针对特定分支的测试输入。
模糊测试(Fuzzing)是系统级测试的常用技术,旨在通过生成无效、意外或随机的测试输入来触发错误。大模型的加入改进了传统模糊测试的效率。现有研究提出了通用模糊测试框架如 Fuzz4All、ChatFuzz 等,也有专注于特定领域的技术,涵盖深度学习库、编译器、求解器、移动应用及信息物理系统等。
这些研究主要关注两个方向:
除了关注测试任务本身,研究人员还分析了在软件测试任务中选用的大模型类型及其适配方法。
在所选用的大模型方面,最常用的前三种分别是 ChatGPT、Codex 和 CodeT5。其中,Codex 和 CodeT5 是专门在多种编程语言的代码语料库上训练得到的大模型,能够根据自然语言描述生成完整的代码片段,因此非常适合涉及源代码的测试任务,如测试用例生成和缺陷修复。
值得注意的是,虽然已有 14 项研究使用了 GPT-4(排名第四),但作为一种多模态大模型,目前尚未发现相关研究充分探索其在软件测试中利用图像相关功能(例如 UI 截图分析、编程演示视频理解)。这为未来的多模态软件测试研究提供了广阔空间。

为了让大模型更好地适应软件测试任务,主要有两种技术手段:预训练或微调,以及提示工程。

此外,研究发现 35 项研究在大模型之上结合了传统测试技术,如变异测试、差分测试、程序分析和统计分析。这种混合策略旨在取得更好的测试有效性和覆盖率,因为单一的大模型可能难以处理复杂的程序结构。
尽管大模型在软件测试中表现出巨大潜力,但研究人员指出其仍处于早期发展阶段,面临四大核心挑战。
探索被测试软件的多样行为以实现高覆盖率始终是软件测试的重要目标。然而,大模型直接实现所需的多样性仍具很大挑战。例如在单元测试用例生成中,在 SF110 数据集上,行覆盖率仅为 2%,分支覆盖率仅为 1%。在系统测试输入生成方面,面向深度学习库的模糊测试中,TensorFlow 的 API 覆盖率也仅为 66%。
解决这一问题需要利用测试相关的数据来训练或微调专用大模型,使其能理解测试要求,自主地生成多样化的输出。
测试预言(Test Oracle)问题指如何判断程序输出是否正确,这是各类测试应用面临的难题。已有工作常将其转化为更容易获取的形式,如通过差分测试实现,或仅关注容易自动识别的错误(如崩溃类错误)。但这仅适用于少数情况。
利用大模型解决其他类型的测试预言问题非常有价值。例如,蜕变测试(Metamorphic Testing)是缓解该问题的常用技术,可探索结合人机交互或领域知识自动生成蜕变关系,或利用大模型自动生成基于蜕变关系的测试用例。此外,GPT-4 等多模态大模型也为检测用户界面相关缺陷并辅助推导测试预言提供了新可能。
缺乏基准数据集和潜在的数据泄漏问题给严格评估带来了困难。研究人员检查了训练大模型的数据源(CodeSearchNet 和 BigQuery),发现 Defects4J 基准数据集中使用的四个代码库同时包含在 CodeSearchNet 中,整个 Defects4J 代码库都包含在 BigQuery 中。
这意味着大模型在预训练过程中已经见过现有的程序修复基准数据集,存在严重的数据泄露风险。因此,构建更专门和多样化的基准数据集,并采取措施防止数据泄漏,是确保评估结果可信的关键。

在实际应用中,出于数据隐私考虑,大多数软件组织倾向于避免使用商用大模型,更愿意采用开源模型并使用组织特定数据进行微调。此外,计算能力的限制和能源消耗也是考量因素,许多公司倾向于采用中等规模的模型。
在这样的现实条件下,要达到已有研究中报告的类似性能非常具有挑战性。例如,在广泛使用的 QuixBugs 数据集中,Python 和 Java 错误有较高的自动修复率;但当涉及到从 Stack Overflow 收集的深度学习程序(代表实际编码实践)时,修复率显著下降。如何更关注现实需求研发相应技术,促进技术落地,是亟待解决的问题。
利用大模型进行软件测试也带来了许多新的研究机遇,有助于推动软件测试领域的发展。
目前大模型在测试初期阶段(如需求分析)未得到有效应用,主要原因是早期任务的主观性及缺乏开放数据资源。此外,在集成测试和验收测试方面的应用也相对较少。未来可探索如何利用大模型进行更多样化的测试任务,例如在验收测试中,大模型可与人类测试人员协同工作,自动生成测试用例并评估覆盖率。

虽然大模型在功能测试方面应用广泛,但在性能测试和可用性测试等方面应用较少。将大模型与这些工具相结合是一个潜在方向,例如利用大模型整合性能测试工具,模拟真实用户行为产生不同类型的工作负载。同时,现有技术已成功应用于移动应用、深度学习库、自动驾驶系统等,未来可针对特定软件特性研发针对性技术。

现有研究尚未充分挖掘大模型潜力,仅使用了五种最常见的提示工程技术。未来应探索更高级的技术,如图中的思维树(Tree of Thoughts)、多模态思维链等,以更充分地发挥大模型的理解和推理能力。

目前关于大模型解决软件测试问题的能力尚无明确共识。将大模型与传统软件测试技术相结合已取得良好效果,这表明大模型并非唯一灵丹妙药。考虑到已有许多成熟的软件工程技术和工具,未来可探索将大模型与传统技术(如形式化验证)相结合,或与工具集成以发掘已有工具的潜力。
注:本文内容基于中国科学院软件研究所及相关合作机构发布的综述论文整理,旨在分享技术前沿动态,不涉及任何商业推广。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online