Ranking Plausible Patches by Historic Feature Frequencies
本文介绍了 PrevaRank,这是一种可扩展的技术,它通过根据正确自动程序修复补丁与历史程序员编写的修复之间的特征相似性对其进行优先级排序,从而提升正确补丁的排名,显著增加了正确解决方案出现在前列位置的可能性。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象你是一名侦探,试图侦破一起案件,但嫌疑人不是一个人,而是一间屋子里的 20,000 人,他们都声称自己拥有完美的解决方案。他们都通过了你的初步“测谎仪测试”(即软件测试),因此在纸面上看起来都无辜。然而,你知道他们中大多数实际上在撒谎,只有少数人在说真话。你的任务是从这些说谎者中找到那个真正的英雄。
这正是软件开发者在使用**自动程序修复(APR)**时面临的精确问题。计算机现在可以为损坏的代码自动生成数千个“修复方案”。这些修复方案通过了所有自动化测试,因此计算机认为它们完美无缺。但通常,它们只是“看似合理”(看起来不错),实际上却是错误的。找到那个真正的修复方案,就像大海捞针。
这就是PrevaRank登场之处,它是本文介绍的新工具。请将 PrevaRank 想象成一位资深图书管理员,他阅读过数百万份旧案卷,而不是调查犯罪现场的侦探。
PrevaRank 的工作原理:“历史书”类比
想象你正在尝试修复一种特定类型的故障机器(一个 bug)。
- 旧方法:计算机生成了 100 种不同的修复方式。它只是按发现的顺序列出它们。你必须逐一检查,直到找到正确的那个。
- PrevaRank 方法:PrevaRank 查看这 100 个修复方案,并问道:“嘿,我以前见过这种类型的问题!”它打开自己的“历史书”(一个包含数百万个由人类程序员在过去编写的真实修复方案的数据库)。
它查阅这本书并发现了一个模式:
- “哦,每当人类修复这种特定的‘空指针’错误(即机器试图获取不存在的东西)时,他们几乎总是先添加一个‘安全检查’。”
- “但当他们修复这种‘溢出’错误(即桶装满了水溢出)时,他们通常只是把桶做得更大。”
随后,PrevaRank 查看你生成的 100 个计算机修复方案。它忽略那些不符合人类模式的方案,并将那些符合人类模式的方案排在最前面。
结果:更快地找到那根针
研究人员使用8 种不同的计算机修复工具,在168 个不同的软件 bug上测试了这种方法。他们总共需要筛选23,032 个看似合理(但大多错误)的修复方案。
以下是他们使用 PrevaRank 后发生的情况:
- 提升:在使用 PrevaRank 之前,计算机工具通常将正确的修复方案隐藏在列表深处。使用 PrevaRank 后,正确的修复方案显著跃升至列表上方。
- 统计数据:在27% 以上的案例中,正确的修复方案被移到了前 3 名的位置。这意味着人类开发者在找到真正解决方案之前,需要查看的选项要少得多。
- 安全网:它很少使情况变得更糟。即使它确实将某个正确的修复方案向下移动,通常也是那些原本就排在列表底部的方案。
为什么不直接使用 AI(大语言模型)?
你可能会问:“为什么不用超级智能的 AI(比如那些写故事或写代码的 AI)来做这件事呢?”论文解释说,虽然这些 AI 很强大,但它们存在一些重大缺点:
- 成本:运行最智能的 AI 就像每次想修复一个 bug 时都要支付私人飞机的费用。而 PrevaRank 就像乘坐公交车;它极其便宜,并且可以在基本计算机上运行。
- 隐私:将公司的机密代码发送给云端 AI,就像把银行金库的钥匙寄给陌生人。PrevaRank 则保留在你的本地计算机上。
- “一次一个”的问题:许多现代 AI 工具一次只能生成一个修复方案。如果那个修复方案是错误的,你就束手无策了。PrevaRank 旨在同时筛选多个修复方案,这对于那些仍然生成候选列表的旧式传统修复工具来说非常完美。
总结
PrevaRank 是一个轻量级、智能的过滤器。它不试图发明新的修复方案;它只是利用过去的智慧(人类实际上如何修复类似问题),来告诉你计算机的猜测中哪些最可能是真正有效的。这是一种简单、快速且免费的方法,可使自动修复工具对现实世界中的开发者更加有用。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。