[Paper] SiblingRepair:基于Sibling的多块修复与大语言模型
发布: (2026年5月7日 GMT+8 21:14)
6 分钟阅读
原文: arXiv
Source: arXiv - 2605.06209v1
概述
本文介绍了 SiblingRepair,一种新的自动程序修复(APR)技术,利用大型语言模型(LLMs)来修复代码库中多个相关的缺陷(multi‑hunk bugs)。通过检测“sibling”代码片段——实现相似功能且往往共享相同缺陷的代码块——系统能够在一次处理过程中生成一致的补丁,显著提升了相较于之前最先进工具(如 Hercules)的修复成功率。
关键贡献
- LLM 驱动的兄弟发现 – 使用基于 token 级别和嵌入的相似度,而非严格的 AST 匹配或提交历史启发式。
- 两种互补的修复策略 – 同步修复(同时修补所有兄弟)和 迭代修复(随着检查更多兄弟,逐步细化补丁)。
- 跨位置的补丁泛化 – 保留早期可疑位置的有前景补丁,并将其合并为统一的多块修复。
- 实证优势 – 在 Defects4J 和 GHRB 基准上优于现有的多块 APR 工具,修复率更高且运行时间相当。
- 对数据泄漏的鲁棒性 – 表明 LLM 的训练数据并未实质性地夸大报告的修复成功率。
方法论
- Fault Localization – 从传统的基于光谱的技术开始,标记出可疑行(seed)。
- Sibling Candidate Retrieval
- Token‑based matching:查找与 seed 在词法 token 上高度相似的代码片段。
- Embedding‑based matching:使用代码嵌入模型(例如 CodeBERT)捕获语义相似性,发现语法上可能不同但行为相似的 sibling。
- LLM‑guided Filtering – 大语言模型(例如 GPT‑4)评估每个候选,剔除那些不太可能与故障相关的。
- Patch Generation
- Simultaneous Repair:LLM 同时接收 seed 和所有过滤后的 siblings,要求生成一个统一的编辑,使其适用于每个位置。
- Iterative Repair:LLM 逐个处理 siblings,更新共享的“patch context”,以保证后续编辑与之前的兼容。
- Patch Consolidation – 将不同 seed 的成功编辑合并,形成一个可以一次提交的多块补丁。
- Validation – 编译生成的补丁并在测试套件上运行;仅保留使所有测试通过的补丁。
结果与发现
| 基准 | SiblingRepair | Hercules (SOTA) | 其他 Multi‑hunk APR |
|---|---|---|---|
| Defects4J | 41 % 的缺陷被修复 | 28 % | ≤22 % |
| GHRB | 38 % | 24 % | ≤19 % |
- 修复效率:每个缺陷的平均实际耗时约为 3.2 分钟,尽管多了 sibling 检索步骤,仍与 Hercules 相当。
- Sibling 检测准确率:超过 85 % 检索到的 sibling 确实与故障相关,验证了 token + embedding 过滤的有效性。
- 泄漏检查:从 LLM 的上下文中移除任何针对特定测试用例的代码,使成功率下降 < 2 %,表明对记忆的训练数据依赖极小。
总体而言,SiblingRepair 提升了自动化多块修复的上限,尤其在逻辑在不同模块间重复的项目中表现突出。
Practical Implications
- 更快的缺陷分拣 – 开发者可以在 CI 流水线中运行 SiblingRepair;当测试失败时,工具能够提出一个 单一 补丁,解决所有出现的错误,减少手动复制粘贴导致的错误。
- 一致的重构 – 由于兄弟代码是通过语义识别的,即使代码已被重构,该方法仍然有效,适用于大型、不断演进的代码库。
- 降低技术债务 – 自动化的多块修复帮助消除隐藏的重复缺陷,这类缺陷常在单点修复后仍然残留。
- LLM 集成蓝图 – 两阶段(过滤 + 生成)工作流为其他开发者辅助工具提供可复用的模式(例如自动代码审查、安全规则强制执行)。
限制与未来工作
- 对 LLM 质量的依赖 – 当前实现依赖于专有 LLM;使用开源替代品时性能可能有所不同。
- 嵌入搜索的可扩展性 – 对于非常大的代码库,兄弟检索步骤可能成为瓶颈;需要进行索引优化。
- 仅限于测试驱动的缺陷 – 基于光谱的定位仍然需要失败的测试,因此没有测试覆盖的缺陷超出范围。
- 未来方向:(1) 引入静态分析以扩大故障定位范围,(2) 探索少样本提示以降低 LLM 推理成本,(3) 将方法扩展到跨语言的兄弟检测(例如 Java ↔ Kotlin)。
作者
- Xinyu Liu
- Jiayu Ren
- Yusen Wang
- Qi Xin
- Xiaoyuan Xie
- Jifeng Xuan
论文信息
- arXiv ID: 2605.06209v1
- 分类: cs.SE
- 出版日期: 2026年5月7日
- PDF: 下载 PDF