[Paper] 相似模式注释通过检索知识用于基于LLM的测试代码故障定位
发布: (2026年5月9日 GMT+8 00:20)
7 分钟阅读
原文: arXiv
Source: arXiv - 2605.07957v1
概述
本文介绍了 SPARK,一个新颖的框架,帮助开发者精准定位导致错误的失败测试脚本中的具体行。通过利用 CI 流水线中的历史调试数据和大语言模型(LLMs),SPARK 能自动建议可疑的测试代码位置,减少手动调试所花费的时间。
关键贡献
- 检索增强的 LLM 流程:将先前标记的故障测试用例语料库与 LLM 相结合,引导故障定位,同时避免提示长度爆炸。
- 基于相似性的标注:检索具有相似失败模式的测试用例,并标注与已知故障模式匹配的新失败测试的代码行。
- 面向 CI 的可扩展设计:在黑盒条件下工作(仅使用错误信息和部分日志),且足够高效以适应持续集成工作负载。
- 工业评估:在三个真实世界的 Python 测试套件上进行测试,显示出相较于仅使用 LLM 的基线的一致改进。
- 多故障处理:展示了在单个测试脚本中检测多个故障的更好能力,这是许多现有工具难以应对的场景。
方法论
- Knowledge Corpus Construction – 作者们从过去的 CI 运行中收集一个“调试知识库”,将每个测试用例连同其失败标签(即出错的具体行)一起存储。
- Similarity Retrieval – 当新的测试失败时,SPARK 使用轻量级嵌入模型(例如 Sentence‑Transformers)在语料库中查询最相似的历史失败测试。
- Selective Annotation – 对于每个检索到的案例,SPARK 将检索到的错误行与新测试的源代码对齐。在相似上下文中出现的行会被标记为怀疑标签(例如
/*⚠️*/)。 - LLM Prompt Construction – 将带标注的测试脚本、原始错误信息以及简短指令一起输入大型语言模型(例如 GPT‑4)。模型随后在标注代码上进行推理,返回最可能的错误行。
- Result Aggregation – 若使用多个检索案例,SPARK 会合并它们的建议,并依据相似度与 LLM 置信度的综合对行进行排序。
该流水线刻意保持模块化:检索组件可以替换,LLM 可以是任何接受文本提示的模型,从而使该方法能够适配不同的 CI 生态系统。
结果与发现
| 数据集 (Python 测试套件) | 基线 (仅 LLM) | SPARK | 相对提升 |
|---|---|---|---|
| 产品 A (≈2 k 测试) | 62 % top‑1 准确率 | 71 % | +9 % |
| 产品 B (≈3.5 k 测试) | 58 % top‑1 准确率 | 68 % | +10 % |
| 产品 C (≈1.8 k 测试) | 60 % top‑1 准确率 | 70 % | +10 % |
- Token 使用量 与基线保持在相同预算内(≈ 1.2 k token 每次查询),证实选择性标注避免了提示长度的爆炸。
- 在 多故障场景 中,SPARK 至少定位到一个正确位置的比例为 85 %,而基线为 70 %。
- 推理延迟 平均仅增加约 15 ms,完全在典型 CI 时间预算限制之内。
实际影响
- Faster CI feedback loops – 开发者在测试失败后立即收到精确的故障位置,使“调试‑再‑修复”的周转时间从分钟降至秒级。
- Lower triage cost – QA 团队可以在不手动筛查日志的情况下,对不稳定或高影响的测试失败进行优先处理。
- Knowledge reuse – 组织可以持续丰富调试语料库,使系统随时间变得更精准——本质上将过去的调试工作转化为可复用的资产。
- Tool integration – SPARK 的模块化设计使其可以包装为流行 CI 平台(GitHub Actions、GitLab CI)或 IDE 扩展的插件,在编辑器中直接提供行内建议。
- Language‑agnostic potential – 虽然在 Python 上进行评估,但检索‑标注概念适用于任何测试脚本为文本的语言,打开了对 Java、JavaScript、Go 等语言的支持大门。
限制与未来工作
- 对历史数据的依赖 – SPARK 的有效性取决于拥有足够大、标注良好的过去失败语料库;新项目在初期可能收益有限。
- 黑箱约束 – 该方法仅使用错误信息和部分日志;更丰富的运行时信息(例如堆栈跟踪、覆盖率)可能进一步提升准确性,但需要与测试框架更紧密的集成。
- 大模型成本与隐私 – 使用托管的大模型 API 可能会引发将专有测试代码发送至外部服务的担忧;未来工作可以探索本地部署的开源模型。
- 扩展到生产代码 – 目前的重点是测试代码中的缺陷;作者计划研究类似的检索增强技术是否能帮助定位被测系统本身的故障。
总体而言,SPARK 展示了一种将基于检索的调试知识与现代大模型推理相结合的务实方法,为在快速迭代的 CI 环境中工作的开发者提供了显著的生产力提升。
作者
- Golnaz Gharachorlu
- Mahsa Panahandeh
- Lionel C. Briand
- Ruifeng Gao
- Ruiyuan Wan
论文信息
- arXiv ID: 2605.07957v1
- 分类: cs.SE
- 出版日期: 2026年5月8日
- PDF: 下载 PDF