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

一、从软件测试视角的应用分析
研究人员首先从软件测试的生命周期出发,将收集到的研究工作按照具体的测试任务进行了分类组织。分析显示,大模型的应用主要集中在软件测试生命周期的后段,而在早期阶段的应用尚显不足。
1. 主要应用场景
目前大模型主要应用于以下任务:
- 测试用例准备:包括单元测试用例生成、系统级测试输入生成。
- 测试预言生成:辅助判断程序输出是否正确。
- 测试报告分析:自动化解读测试结果。
- 程序调试和修复:定位缺陷原因并生成修复代码。
相比之下,在测试需求分析、测试计划制定等早期任务上,由于涉及较多主观判断和缺乏结构化数据,目前尚未见大规模应用大语言模型的相关工作。

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







