Keep the Conversation Going: Fixing 162 out of 337 bugs for $0.42 each using ChatGPT
Info
- Pub: Arxiv
- Authors: Chunqiu Steven Xia, Lingming Zhang
- Institutions: University of Illinois Urbana-Champaign
- Repo: Not yet
Abstract
- 自动程序修复技术APR
- 使用LLM做APR
- 传统G&V方式从同一prompt生成大量patch逐一测试,效果不好
- 提出:
- 对话驱动的APR
- 提供测试故障信息
- 收集错误的补丁作为下一轮的prompy
- 效果:
- 实现了正确的修复
- 成本较低
Intro
Traditional works
传统的APR技术
- 基于模板
- 基于启发式
- 基于约束
基于学习的APR技术 - 基于神经机器翻译:使用历史补丁修复数据集训练模型
- 缺陷:包含无效数据、没有推广
- 基于LLM
- 填空式给出补丁
- LLM的APR应用完成单个正确行或者固定函数
- 缺陷:
- 忽视了测试失败的信息(e.g. Expect … But was: …)
- 重复抽样:多轮修复是独立的,LLM可能会重复生成同样错误的补丁
- 忽略了有价值的patch:部分patch包含了部分合理的信息
Contributions
- ChatRepair
- 使用报错信息作为初始prompt,提供更多上下文
- 对于未通过的patch,结合错误的patch和报错,为LLM构建一个新prompt
- 对于通过的(似是而非的)patch,要求llm生成替代变体
- 目标生成更合理的补丁
- 结果:成本更低
我们提出ChatRepair——第一个全自动对话驱动的APR工具,它利用新开发的ChatGPT模型来执行修复。ChatRepair从之前不正确和合理的补丁中学习,并利用测试失败信息向模型提供即时和动态的反馈,以生成新的补丁。通过我们的会话修复范例,ChatRepair能够分别在缺陷4j 1.2和2.0上实现114和48个bug的最新性能(比最佳性能基线多15和17个)。
Design
- 提供了有价值的测试报错信息
- 基于连续对话,而不是单一prompt反复发送(context包含对话上下文)
- 使用GPT
- You are an Automated Program Repair tool
- Construct initial prompt
- Conversation
- 评估能否通过之前的测试
- 如果不能-创建一个响应(包括故障信息)重新生成
- 直到产生初步可用的补丁或者token excceed
- Plausible
- 使用生成似是而非的补丁prompt
- 以生成更多的合理补丁,增加正确补丁的机会
Initial
- 关注代码行级填空修复
- 在prompt前添加之前的修复记录(这里能否将成功的patch放在这里用于下一个修复任务)
Conversation
- 固定的context window-有限的重试次数
Not finished yet