MultiMend: Multilingual Program Repair with Context Augmentation and Multi-Hunk Patch Generation
本文提出了 MultiMend,一种多语言自动化程序修复方法,该方法利用检索增强上下文增强和多块补丁生成技术,有效修复四种编程语言中的缺陷,在成功修复包括复杂多位置问题在内的 2,227 个缺陷方面超越了现有最先进方法。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你是一位资深编辑,负责修复用不同语言(如 Python、Java、C 和 JavaScript)撰写的数千本书籍中的拼写错误和语法错误。通常,找到正确的修复方案就像在黑暗中解谜:你只能看到包含错误的那句话,必须仅凭这一小段片段来猜测作者的意图。
本文介绍了MultiMend,一种旨在自动化此过程的新型“超级编辑”。它不仅仅依靠猜测,而是运用两个巧妙的策略,使代码修复更加快速和准确。
问题所在:“隧道视野”式编辑
传统的自动修复工具就像只盯着有错别字的那句话的编辑。它们不知道三段落之前角色说了什么,也不知道另一章中定义的变量是什么。由于缺乏这种“全局视野”,它们经常提出的修复方案在局部看似正确,却会在故事的其他地方造成破坏。此外,如果一个漏洞需要修改三个不同章节中的三句话,旧工具往往会放弃,或者试图逐个修复,这既缓慢又低效。
解决方案:MultiMend 的两大超能力
1. “智能图书管理员”(上下文增强)
MultiMend 不像只盯着出错句子那样,而是像一位智能图书管理员。
- 工作原理:当它发现错误时,不会只盯着周围的局部区域。它会利用“检索系统”扫描发生错误的整个文件。它会寻找在含义或结构上与错误相似的其他代码行。
- 类比:想象你正在修复一句“猫对着月亮喵喵叫"。如果你只看到这句话,你可能会觉得猫疯了。但如果图书管理员递给你书中 earlier 的一张便条,上面写着“这只猫其实是一只伪装的狼人”,你突然就理解了上下文!
- 结果:MultiMend 从同一文件中提取这些“有用的便条”(相关行),并将它们与错误一起提供给 AI。这有助于 AI 更好地理解代码的“故事”,从而在没有外部错误数据库的情况下实现更智能的修复。
2. “团队队长”(多块补丁生成)
有些漏洞就像跨越三个不同章节的情节漏洞。你必须修改开头、中间和结尾才能修复这个故事。
- 挑战:如果你有 3 个地方需要修复,而 AI 为每个地方生成了 100 种可能的修复方案,那么你就有 1,000,000 种组合需要检查。这不可能快速完成。
- 策略:MultiMend 像一位团队队长一样组织工作。
- “一劳永逸”检查:首先,它会问:“我们能否用完全相同的修改修复这三个章节?”如果是,它会立即将该修改应用到所有地方。
- “部分胜利”方法:如果修复方案不同,它不会尝试检查每一种组合。相反,它先修复一个章节,看看故事是否变好(通过测试),保留该改进,然后转向下一个章节。它一步步构建最终解决方案,并在过程中保留“部分胜利”。
- 结果:这将一座庞大且不可能逾越的组合大山,变成了一级级可管理的台阶,使该工具能够修复其他工具错过的复杂、多部分漏洞。
结果:效果如何?
作者在四种编程语言中的5,501 个真实世界漏洞上测试了 MultiMend。这就像在庞大的书籍库中测试这位编辑。
- 总修复数:它成功修复了2,227 个漏洞。
- 完美匹配:其中,1,545 个的修复方式与人类开发者完全一致(补丁完全相同)。
- 复杂漏洞:它成功修复了121 个那些需要在多处进行修改的棘手“多章节”漏洞。
论文表明,MultiMend 与现有最佳工具具有竞争力,通常能修复更多漏洞且效率更高。它证明了赋予 AI 一张“借书证”以查找相关上下文,并配备一位“团队队长”来组织复杂修复,对自动化软件修复产生了巨大影响。
它不做些什么(严格基于论文)
- 它不声称完全取代人类开发者;它是辅助开发者的工具。
- 它不声称能解决存在的每一个漏洞,仅针对他们在特定数据集中测试的那些。
- 它不声称是无需测试的“魔杖”;修复方案仍需针对软件的测试套件进行验证,以确保其确实有效。
简而言之,MultiMend 是一位更聪明、更有条理的编辑,它在做出修改前会通读整个文件,并知道如何一步步解决庞大而复杂的问题。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。