Page 258 - 《软件学报》2026年第4期
P. 258
汪莹 等: 基于大语言模型的故障复现测试用例生成方法 1699
故障复现测试用例. 具体来说, 现有测试用例中的 import 语句为测试环境提供了必要的上下文 API 信息, 而测试
用例本身则构建了与特定故障相关的验证逻辑. 因此, 在生成新的故障复现测试用例时, 只需在现有基础上进行适
当的调整或扩展, 就可以快速生成适用于新问题报告的故障复现测试用例. 这一现象表明, 现有的测试用例对于复
现一些常见故障具有较强的适用性, 开发人员可以通过修改和优化现有测试函数来减少编写新测试用例的工
作量.
因此, 本文提出了一种将检索增强生成与大语言模型相结合的方法. 在设计时, 充分考虑了可以复用现有测试
用例的特点, 提出通过检索与给定问题报告相关的 import 语句以及测试用例样本, 并将其作为参考信息, 辅助大
语言模型生成更准确的故障复现测试用例. 这种方法能够有效地加快新故障复现测试用例的生成速度, 并提高其
准确性, 从而帮助开发人员更高效地解决问题. 对于 59.32% 的开发人员新编写的故障复现测试用例的问题报告实
例, 本文方法也可通过检索与问题报告相关性较高的代码上下文, 辅助大语言模型生成故障复现测试用例, 因此本
文方法可应用于所有的问题报告实例.
3 基于大语言模型和多元检索增强生成的故障复现测试用例生成方法
基于实证研究中发现的 GitHub 问题报告故障复现测试用例不足问题, 以及开发人员在为问题报告编写故障
复现测试用例时, 有 40.68% 的情况是基于现有测试函数进行修改, 本文提出了一种基于大语言模型和多元检索增
强生成的故障复现测试用例生成方法, 旨在为 GitHub 问题报告等类似的软件开发问题生成故障复现测试用例. 该
方法的核心思想是基于给定的问题报告内容和代码仓库, 挖掘多元的上下文信息, 包括报错根函数、import 语句
和测试用例样本等, 通过使用提示工程技术, 构建 prompt 来引导大语言模型生成故障复现测试用例.
本文方法的框架如图 2 所示, 输入为一个 GitHub 问题报告及其所在代码仓库, 输出为复现问题报告内容并验
证问题报告是否解决的故障复现测试用例. 具体而言, 本文方法主要分为 4 个步骤: 报错根函数定位、测试文件选
择与 import 语句抽取、基于相似度计算的测试用例样本选取, 以及最终的故障复现测试用例生成. 通过这些步骤,
本文方法有效获取了与问题报告相关的上下文信息, 并将其整合在 prompt 中, 增强了大语言模型在故障复现测试
用例生成中的表现.
Issue 测试文件 Prompt
标题 测试文件选择 import语句 import语句
已知测试用例 描述 测试用例生成
描述 代码仓库 标题
相似度计算 测试用例样例
测试用例
报错栈 根函数定位 报错根函数
图 2 基于大语言模型和多元检索增强生成的故障复现测试用例生成方法框架图
下面是对上述 4 个步骤的方法概述.
(1) 报错根函数定位方法概述: GitHub 问题报告在某些情况下会包含报错栈信息, 这些信息在一定程度上能
够揭示故障发生的原因. 因此, 本文通过分析 GitHub 问题报告中的报错栈内容, 定位出错的函数. 具体方法为: 对
于给定的 GitHub 问题报告, 首先利用正则表达式规则抽取问题报告描述中的错误栈信息, 然后解析错误栈中的调
用链, 识别出最终在代码仓库中出错的函数所在位置. 根据该函数路径信息, 进一步抽取出对应的函数代码内容.
这些抽取出的函数代码可能揭示故障发生的关键区域, 有助于定位故障发生的根本原因, 并为后续的故障复现测
试用例生成提供重要的上下文信息.

