"GAMMA: Revisiting Template-based Automated Program Repair via Mask Prediction" 论文笔记
介绍
(1) 发表
2023-09 ASE'23
(2) 背景
基于模版的 APR 采用了由人类专家手工制作的维修模式将错误代码片段转变为正确代码片段,被认为是最先进的,大量研究专门用于模版提取方案。然而以前的工作显示出相当数量的错误无法修复,因为相关的错误代码在本地文件中不可用
基于深度学习的技术将程序修复问题作为神经机器翻译(NMT)任务处理,该任务将代码序列从源语言(即错误的代码段)转换为目标语言(即正确的代码片段)
(3) 贡献
-
不同于现有基于模板的 APR 从本地错误文件中检索供体代码并且从头开始生成修补的代码片段,我们可以利用预训练的模型以在给定的修复模式中生成正确的代码
-
我们提出了 GAMMA,并以定义了一组填充格式的修复模式,利用了预训练模型的原始预训练目标来预测 Mask Token
-
广泛的实验和研究以及开源了代码
方法

APR 的 Pipeline 中故障定位是单独的模块,所以这里 GAMMA 实际上不包括故障定位
(1) 流程
-
在设定模版中将关键语句用掩码代替,具体模版定义见论文
-
模版的选择与 TBAR 类似,采用深度优先的策略采用基于ASTB的匹配方法。我们首先为输入生成一个 AST,然后对 AST 中的所有节点进行遍历。如果 AST 包含特定模板中需要的节点类型,则将模板应用于错误
-
选择到模版后,将模版中对应位置的 buggy code 部分替换成 Mask,然后再下一阶段预测
-
然后使用 UniXcoder 进行 MLM 任务,提取 buggy 行的 function 并将整个 function 与 buggy 行一起输入到 UniXcoder 中,同时在输入的第一行以注释的形式添加原始的 buggy 行,形成了最终输入
(2) 验证方式
在 Gamma 生成给定错误的候选补丁后,我们执行相应的更改并得到修复程序。遵循 APR 社区的设定,我们首先重新编译了修复程序,并过滤了所有未编译的修复程序。然后,我们针对可用的测试套件执行修复程序,以确定成功通过所有测试套件的合理补丁。对于这些合理的补丁,我们手动检查它们,以确保程序正确修复
总结
主要贡献在于通过 Mask 模版然后 MLM 解决了 TBAR 的一些问题,对 Template-Driven APR 做出了改进

浙公网安备 33010602011771号