论文信息

主要问题

神经机器翻译(NMT)技术有两个主要的局限性。它们的搜索空间通常不包含正确的修复,而且它们的搜索策略忽略了诸如严格的代码语法之类的软件知识,例如上下文信息。由于这些限制,现有的基于nmt的技术不如基于模板的最佳方法。

CURE


包含三个阶段,训练、推理和验证。训练阶段,CURE从开源项目中提取函数集代码,并对它们进行子词tokienize。CURE使用这些标记化的方法来训练一个新的编程语言模型,该模型学习具有正确语法的开发人员源代码,还将从开源项目的提交历史中提取的错误行、上下文和正确的修复(称为补丁训练数据)标记为标记序列,使用它们对APR模型进行微调。推断阶段,用户向CURE提供有bug的项目以及有bug行的位置。CURE对有bug的行和上下文行进行标记(步骤1c),然后分析源代码以提取在有bug行范围内的有效标识符列表(步骤4)。补丁生成模块使用新的代码感知波束搜索策略(第5步)生成候选补丁列表。这个新算法在运行中丢弃许多不相关的补丁(即,一旦生成无效的令牌),并惩罚不太可能正确的补丁(例如,与错误行非常不同的补丁)。验证阶段,CURE通过编译和执行补丁项目的测试套件来验证候选补丁。CURE输出一个合理的补丁列表(步骤6 ~ 9)供开发人员检查