Page 262 - 《软件学报》2026年第4期
P. 262
汪莹 等: 基于大语言模型的故障复现测试用例生成方法 1703
“URLField 报错内容有误”. 为此, 本文首先对 Django 仓库的所有测试文件进行了抽取, 并对每个测试文件的路径
进行了截取处理, 将保留后的路径信息以列表形式嵌入到 prompt 中. 在这个例子中, 测试文件路径列表中包含了
正确的测试文件路径——forms_tests/field_tests/test_urlfield.py. 大语言模型在接收到该 prompt 后, 成功选择了这
一正确答案. 这一结果不仅验证了大语言模型在处理粗粒度文件检索任务时的有效性, 也展示了通过合适的
prompt 设计, 可以显著提高模型的选择准确性.
图 5 测试文件选择 prompt 示意图
3.2.2 import 语句抽取
故障复现测试用例生成任务面临的一个主要挑战在于, 输入的上下文是整个代码仓库, 这往往导致上下文信
息过长, 使得大语言模型在理解整个文件结构时变得困难. 这种情况下, 模型可能无法正确调用仓库中已有的 API
接口, 从而影响生成故障复现测试用例的质量. 为了解决这一问题, 本文在选择出最可能测试给定问题报告的测试
文件后, 特别提取了该测试文件中的 import 语句. 这一做法的双重目的在于: 一方面, 提供给大语言模型可能使用
的 API 信息, 增强其调用的准确性; 另一方面, 通过分析 import 语句中的引用路径, 帮助模型更好地理解代码仓库
的结构和关系. 这样, 模型在生成测试用例时能够更加准确地定位和利用相关的 API 功能, 提高了故障复现测试用
例生成的有效性与质量.
为了有效提取测试文件中的 import 语句, 本文采用了正则表达式匹配技术. 具体流程如下: 首先, 利用大语言
模型选择出的截取后的测试文件路径, 将其还原为完整的文件路径. 接着, 根据问题报告的 base_commit 信息, 将
克隆后的代码仓库恢复到问题报告提出时的版本. 这一过程确保能够准确定位到当时的代码状态. 随后, 根据恢复
的完整文件路径, 找到对应的测试文件, 并将该文件的内容全部读取为一个字符串. 最后, 通过正则表达式匹配技
术, 本文从中抽取出所有的 import 语句.
在图 5 的基础上, 当大语言模型选出了 test_urlfield.py 这个测试文件后, 本文利用正则表达式匹配技术成功抽
取了该测试文件中的所有 import 语句, 如图 6 所示. 抽取出的 import 语句不仅包含了如何正确调用 URLField 类,
还涉及了问题报告标题中提到的 ValidationError 类的调用方法. 这些 import 语句与给定的问题报告高度相关, 为
大语言模型在生成故障复现测试用例时提供了重要的参考信息. 在大语言模型生成故障复现测试用例后, 本文只
需在该测试文件的相同路径下创建一个新的测试文件, 将生成的故障复现测试用例放入其中. 由于已抽取的 import
语句包含了所需的 API, 这样的处理避免了潜在的语法错误. 因此, 本文通过这一方式, 旨在降低大语言模型在生
成故障复现测试用例时出现的 API 调用语法错误, 从而提高故障复现测试用例生成的准确性和有效性.
图 6 import 语句抽取结果示意图
3.3 基于相似度计算的测试用例样本选取
在选出最可能测试给定问题报告的测试文件后, 本文采用基于相似度计算的方法在该测试文件中选取测试用

