Page 270 - 《软件学报》2026年第4期
P. 270
汪莹 等: 基于大语言模型的故障复现测试用例生成方法 1711
任意一个在 FAIL_TO_PASS 或 PASS_TO_PASS 测试用例列表中的问题报告数量记为 E_N, 比例记为 E_P.
表 5 展示了本文在 SWE-bench Lite 数据集中检索测试文件和测试用例样本的准确性结果. 从整个 SWE-
bench Lite 数据集来看, 在 300 个 GitHub 问题报告中, 本文为 110 个问题报告成功检索出了相关的测试文件, 占
比 36.67%; 为 105 个问题报告检索出了和问题报告相关的测试用例样本, 占比 35%. 从 12 个代码仓库数据来看,
在 8 个代码仓库中, 成功检索出相关的测试文件的问题报告占比达到了 50% 以上; 在 7 个代码仓库中, 成功检索
出相关的测试用例样本的问题报告占比同样达到 50% 以上. 这些结果反映出本文检索方法的有效性, 能够为给定
问题报告提供相关的代码上下文信息, 从而提升大语言模型对问题报告的理解能力, 进而增强故障复现测试用例
的生成效果.
表 5 检索到的测试文件和测试用例样本准确性结果
代码仓库名 问题报告数量 F_N F_P (%) E_N E_P (%)
astropy/astropy 6 3 50.00 3 50.00
Django/Django 114 34 29.82 33 28.95
pallets/Flask 3 2 66.67 1 33.33
matplotlib/matplotlib 23 13 56.52 13 56.52
pylint-dev/pylint 6 3 50.00 3 50.00
pytest-dev/pytest 17 7 41.18 6 35.29
psf/requests 6 6 100 6 100
scikit-learn/scikit-learn 23 15 65.22 15 65.22
mwaskom/seaborn 4 3 75.00 3 75.00
sphinx-doc/sphinx 16 3 18.75 2 12.50
sympy/sympy 77 17 22.08 16 20.78
pydata/xarray 5 4 80.00 4 80.00
总计 300 110 36.67 105 35.00
5 有效性威胁
本文提出的基于大语言模型和检索增强生成的故障复现测试用例生成方法, 旨在自动化生成 GitHub 问题报
告的故障复现测试用例. 该方法通过检索与给定问题报告相关的多元信息, 并结合提示工程技术构建 prompt, 以
引导大语言模型生成故障复现测试用例. 经过分析, 本文的工作可能面临以下 3 个有效性威胁.
首先, 本文使用 SWE-bench Lite 数据集来验证方法的有效性, 该数据集中的 300 个 GitHub 问题报告均来自
一些比较热门的 Python 仓库. 在使用大语言模型为这些问题报告生成测试用例时, 存在数据泄露的风险, 这可能
会影响方法的泛化能力. 为减轻这一威胁, 未来本文的研究可以考虑使用更广泛的代码仓库和不同来源的数据集,
以增强本文方法在多样化场景下的适应性.
其次, SWE-bench Lite 数据集是 SWE-bench 数据集的子集, 其筛选标准包括选择代码补丁只涉及一个文件的
问题报告. 然而, 实际的 GitHub 问题报告在生成代码补丁时可能涉及多个文件. 这一筛选标准可能在一定程度上
降低了数据集中问题报告的难度, 从而影响了本文方法在真实环境中的表现. 为此, 本文未来将尝试使用更真实
的 GitHub 问题报告数据, 以提高本文方法的挑战性和实用性.
最后, 本文方法依赖于大语言模型生成测试用例, 但由于大语言模型的黑盒特性, 生成的故障复现测试用例可
解释性较低. 此外, 模型在不同的问答过程中可能生成不完全相同的测试用例, 这降低了研究的可复现性. 为降低
该有效性威胁, 本文在构建生成测试用例的 prompt 后, 让大语言模型生成了 5 次测试用例, 并记录多个生成结果,
以提供更全面的分析.
6 总结与展望
本文通过实证研究发现, 当前 GitHub 问题报告中普遍存在故障复现测试用例不足的问题, 导致开发者在提交

