Page 256 - 《软件学报》2026年第4期
P. 256
汪莹 等: 基于大语言模型的故障复现测试用例生成方法 1697
确定 FAIL_TO_PASS 字段中新增加的故障复现测试用例. 随后, 通过分析 patch 中对测试文件的修改, 并比对 FAIL_
TO_PASS 中新增的故障复现测试用例, 判断这些新增的测试用例是完全新编写的, 还是基于现有测试用例进行修
改得到的. 最后, 本文统计所有新增故障复现测试用例的构建方式比例, 以分析 GitHub 问题报告贡献者在修复缺
失的故障复现测试用例时, 更倾向于采用全新编写还是修改现有测试用例的方式. 通过这一统计结果, 本文将深入
探讨开发者在实际开发过程中如何生成故障复现测试用例, 从而为优化故障复现测试用例的生成方法提供理论
依据.
2.2 实证研究的数据来源
本文实证研究数据来源于 SWE-bench Lite 数据集, 后续的实验方法也是基于该数据集进行的. SWE-bench 数
据集包含来自 12 个流行 Python 仓库的 2 294 个问题报告-commit 对. SWE-bench Lite 数据集是 SWE-bench 数据
集的构建者对其 2 294 条数据进行筛选优化后得到的精简子集, 专注于评估独立的功能性错误修复. 该数据集在筛
选过程中严格控制数据质量, 确保所保留的实例具有代表性和可靠性. 最终, SWE-bench Lite 数据集涵盖了来自
12 个流行 Python 开源仓库的 300 个问题报告数据实例, 涉及不同类型的故障及其对应的修复信息, 在一定程度上
可以反映真实的 GitHub 仓库情况, 其在 Hugging Face 网站上的下载量达 59.8k (SWE-bench 数据集的下载量为
55.4k), 反映出了 SWE-bench Lite 数据集具有一定的可靠性, 进而让本文实证研究得到可靠的结果. SWE-bench
Lite 数据集中各个仓库的数据分布如图 1 所示.
xarray (5)
astropy (6)
sympy (77)
Django (114)
sphinx (16)
seaborn (4)
scikit-learn (23) Flask (3)
requests (6)
matplotlib (23)
pylint (6)
pytest (17)
图 1 SWE-bench Lite 数据集中各仓库数据分布
SWE-bench Lite 数据集中的每一条数据均来源于 GitHub 中的一个问题报告及其相关的 commit, 并且该
commit 成功解决了该问题报告. 每条数据由多个部分组成, 包括: instance_id、repo、created_at、version、
base_commit、hints_text、patch、test_patch、problem_statement、FAIL_TO_PASS 和 PASS_TO_PASS、
environment_setup_commit.
各个部分的具体含义如表 1 所示. 其中, base_commit、FAIL_TO_PASS 和 patch 这 3 个字段是本文实证研究
的核心依据. base_commit 记录了代码仓库在问题报告提交时的状态, 可用于回溯代码版本, 进而判断问题报告在
提交时是否已包含故障复现测试用例. FAIL_TO_PASS 字段包含该问题报告关联的 commit 提交后, 所有相关的
故障复现测试用例集合, 并列出所有故障复现测试用例的函数名, 可作为衡量问题报告是否具备故障复现测试用
例的比对基准. patch 字段记录了该问题报告关联 commit 的修复代码补丁, 涵盖对源代码文件及测试文件的修改
信息. 通过分析 patch 字段在测试文件中的修改位置, 可以判断故障复现测试用例是问题报告贡献者在修复问题

