Page 266 - 《软件学报》2026年第4期
P. 266

汪莹 等: 基于大语言模型的故障复现测试用例生成方法                                                      1707


                    此外, 本文进一步分析发现, 图         8  中大语言模型生成的两个测试用例与图            7  中展示的第   1  个测试用例样本高
                 度相似. 这表明, 在    prompt 中添加与问题报告相关的有效测试用例样本可以为大语言模型提供有价值的参考信
                 息, 从而提升其生成效果. 这一发现也充分证明了本文方法的合理性与有效性.
                  4   实验结果与分析

                    为了验证本文提出的基于大语言模型的故障复现测试用例生成方法的有效性, 本文设计了对比实验和消融实
                 验. 对比实验主要通过将本文方法与           Kang  等人  [6] 提出的  Libro  方法在相同的数据集上进行比较, 以验证本文方法
                 的有效性. 同时, 消融实验则逐步去除本文检索增强生成的                  3  部分内容  (报错根函数、import 语句和测试用例样
                 本), 以观察其对生成效果的影响, 从而进一步明确各个内容的作用. 此外, 本文还采用数据分析与统计方法来验证
                 检索内容的准确性. 基于此, 本文将围绕以下            3  个问题展开实验验证.
                    RQ3: 本文提出的方法是否优于现有方法?
                    RQ4: 本文方法中检索增强生成的          3  部分内容各自的作用如何?
                    RQ5: 本文检索增强生成的内容准确性如何?
                  4.1   实验设置
                  4.1.1    环境配置
                    由于本文所解决的任务是面向           GitHub  问题报告的故障复现测试用例生成, 每一个问题报告都属于不同的代
                 码仓库, 因此本文为每个问题报告搭建了一个虚拟的                 conda 环境, 以便在该环境中执行生成的故障复现测试用例.
                 如表  1  所示, SWE-bench Lite 数据集中每个问题报告都有对应的          repo  和  version, 其中  repo  表示该问题报告所在
                 的代码仓库, 而    version  则指用于运行和评估该问题报告时的代码仓库安装版本. 根据每个问题报告的                          repo  和
                 version, 本文为其创建了满足特定配置要求的           conda 环境. 图  9  展示了  Django  仓库和  Flask  仓库的部分版本的环
                 境配置要求. 通过选择相应的         version  版本, 本文能够确定   conda 环境中的各项配置和安 装包内容. 其中, Python
                 字段表示安装的      Python  版本, packages 字段表示所需的依赖文件, install 字段表示在      conda 环境中安装代码仓库
                 的指令, pip_packages 字段表示对  Python 包的版本要求. 基于这些信息, 本文可以为每个问题报告创建可运行的                  conda
                 虚拟环境, 并在其中执行测试用例.














                                   (a) Django仓库                                  (b) Flask仓库
                                            图 9 代码仓库    conda 环境配置要求示意图

                  4.1.2    模型和数据集
                    本文使用的大语言模型主要包括             OpenAI 提供的  GPT-4  模型和  GPT-3.5-Turbo  模型. 在测试文件选择阶段,
                 由于输入中包含每个代码仓库中所有测试文件的截取路径, 这些路径通常较长, 考虑到成本因素, 本文在此阶段使
                 用了  GPT-3.5-Turbo  模型. 相对而言, 在故障复现测试用例生成阶段, 为了提高生成效果, 本文选择使用                    GPT-4  模
                 型. 整个模型运行环境为       x86-64  位的  Linux  操作系统. 这一组合的选择旨在充分利用不同模型的优势, 以实现最
                 佳的故障复现测试用例生成效果.
                    在数据集方面, 考虑到故障复现测试用例生成任务中每个数据实例的运行都需要消耗大量时间和计算资源,
   261   262   263   264   265   266   267   268   269   270   271