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  问题报告中普遍存在故障复现测试用例不足的问题, 导致开发者在提交
   265   266   267   268   269   270   271   272   273   274   275