论文

PracRepair:LLM 受类人调试实践启发的自动化程序修复

PracRepair: LLM-Empowered Automated Program Repair Inspired by Human-Like Debugging Practices

上下文与知识上下文工程

摘要

随着软件系统规模和复杂性的增长,调试和修复仍然昂贵且耗时。 大语言模型 (LLM) 具有先进的自动化程序修复 (APR),但现有的基于 LLM 的 APR 方法仍然在很大程度上依赖于静态或检索的上下文、错误消息和粗粒度验证结果。因此,他们没有充分利用动态信息来理解和修复故障,包括故障执行动态和补丁验证动态。然而,有效利用这些信息具有挑战性:失败执行痕迹很大且嘈杂,原始的静态-动态上下文不是不言自明的,并且补丁验证动态通常被简化为粗略的反馈。为了应对这些挑战,我们提出了 \textsc{PracRepair},这是一个完全自动化的基于 LLM 的 APR 框架,其灵感来自类人调试实践。 \textsc{PracRepair} 根据有缺陷的程序和故障执行构建按需静态动态上下文,执行问题驱动的故障诊断以制定明确的修复假设,并使用验证诊断和跟踪级行为变化迭代地细化候选补丁。 Defects4J V1.2 和 V2.0 的实验结果表明 \textsc{PracRepair} 始终优于最先进的基线。具体来说,在 GPT-3.5 下,\textsc{PracRepair} 正确修复了 Defects4J V1.2/V2.0 上的 139/136 个错误,而在 GPT-4o 下它进一步改进到 162/171。此外,\textsc{PracRepair} 有效地​​推广到 RWB(真实世界错误),在多个基础模型中实现最佳性能。