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  字段在测试文件中的修改位置, 可以判断故障复现测试用例是问题报告贡献者在修复问题
   251   252   253   254   255   256   257   258   259   260   261