Page 251 - 《软件学报》2026年第4期
P. 251
1692 软件学报 2026 年第 37 卷第 4 期
这一结果表明, 本文方法显著提升了故障复现测试用例生成的效果, 证明了其有效性. 此外, 为了进一步分析本文
检索增强生成部分中 3 类信息的各自作用, 本文还设计了消融实验, 在 prompt 中分别去除 3 类检索信息, 以验证
各自的影响. 为降低实验过程中大模型的经济成本, 消融实验在 SWE-bench Lite 数据集的 300 个 GitHub 问题报
告中随机挑选了 100 个问题报告作为数据集. 实验结果表明, 当 3 类检索信息都使用时, 成功生成故障复现测试用
例的问题报告占比为 27%; 去除问题报告的报错根函数后, 占比降至 24%; 去除与问题报告相关的 import 语句后,
占比降至 21%; 去除与问题报告相关的测试用例样本后, 占比显著降至 14%. 这些结果表明, 本文提出的检索增强
生成方法中最为有效的信息来源是与问题报告相关的测试用例样本. 该测试用例样本不仅为大语言模型提供了与
问题报告相关的测试函数样例, 还更好地反映了问题报告所在仓库的代码结构和 API 调用方法. 这使得大语言模
型能够更好地学习特定代码仓库中测试函数的写法, 从而提高为新问题报告生成故障复现测试用例的效果.
本文主要贡献总结如下.
(1) 通过在 SWE-bench Lite 数据集上进行实证研究, 发现该数据集 300 个 GitHub 问题报告中, 有 268 个在报
告时缺少故障复现测试用例, 占比高达 89.33%, 这一现象反映出 GitHub 问题报告在故障复现测试用例方面存在
显著的不足问题.
(2) 提出了一种结合大语言模型、检索增强生成和提示工程技术的面向 GitHub 问题报告的故障复现测试用
例生成方法, 以自动化生成 GitHub 问题报告的故障复现测试用例.
(3) 在 SWE-bench Lite 数据集上开展了对比实验、消融实验和准确性分析实验, 以证明本文方法的有效性.
本文第 1 节介绍研究背景及相关工作. 第 2 节描述在 SWE-bench Lite 数据集上针对 GitHub 问题报告故障复
现测试用例不足问题的实证研究, 揭示本文的研究动机. 第 3 节阐述本文所提出的结合大模型、检索增强生成和
提示工程技术的创新方法. 第 4 节展示对比实验、消融实验及准确性分析实验的结果, 验证本文方法的有效性.
第 5 节讨论本文方法的局限性及未来发展方向, 并在最后对全文进行总结.
1 研究背景与相关工作
本节首先介绍面向 GitHub 问题报告的故障复现测试用例生成的研究背景, 探讨该研究在软件开发中的实际
价值和意义. 随后, 本节将详细阐述测试用例生成、大语言模型在代码方面的应用、检索增强生成以及提示工程
领域的相关工作, 并分析这些技术方向与本文提出的方法之间的关系. 其中, 测试用例生成部分将介绍当前测试用
例生成方法及其在故障复现测试用例生成任务中的不足, 引出本文的研究动机. 大语言模型在代码方面的应用部
分将探讨大语言模型在代码生成、程序修复任务中的最新进展, 分析其在理解和处理复杂代码逻辑方面的优势与
局限. 检索增强生成部分将探讨如何通过检索相关上下文信息提高大语言模型生成内容的准确性和相关性. 提示
工程部分则介绍优化提示的关键技术, 结合不同的提示策略提升大语言模型的生成效果. 这些研究方向为本文提
出的基于大语言模型的故障复现测试用例生成方法提供了理论基础和技术支持.
1.1 研究背景
GitHub 是全球知名的代码托管平台, 用户可以在该平台上托管项目代码, 并借助其丰富的工具提升协作开发
体验. 为了集中化地管理开源项目中的问题和功能请求, GitHub 引入了问题报告跟踪机制. 通过这一机制, 开发者
能够在项目中提出遇到的代码问题或新的功能需求, 并由 GitHub 社区中的成员共同协作解决. 这种方式不仅提高
了问题解决的效率, 也促进了社区内的知识共享和技术交流.
近年来, 已有研究人员对 GitHub 问题报告中的代码问题展开研究, 研究工作主要集中在自动化地解决 GitHub
问题报告上. Jimenez 等人 [8] 收集了 GitHub 上 12 个备受欢迎的 Python 代码仓库及其问题报告信息, 包括问题报
告的描述、正确代码补丁及问题报告相关故障复现测试用例, 并以此构建了 SWE-bench 数据集. SWE-bench 数据
集在筛选 GitHub 问题报告数据时, 采用了一个重要规则: 选择那些 Pull Request 中对代码仓库中的测试文件进行
了修改的问题报告. 这意味着, 开发者在提交代码补丁解决问题报告的同时, 还提交了相应的测试用例补丁, 以复
现问题报告中的问题并验证问题报告是否得到解决. 通过这种筛选方式, SWE-bench 数据集中的每一个问题报告

