Skip to main content
QUICK REVIEW

[论文解读] CODIT: Code Editing with Tree-Based NeuralMachine Translation

Saikat Chakraborty, Miltiadis Allamanis|arXiv (Cornell University)|Sep 30, 2018
Software Engineering Research被引用 9
一句话总结

CODIT 提出了一种基于树结构的神经机器翻译模型,通过利用真实世界补丁中的源代码语法结构和大规模开源代码演化数据,学习并建议代码更改。在 30,000 个代码更改上进行训练,并在 6,000 个补丁上进行评估,其在保持代码语法正确性方面优于标准 NMT 模型,能够有效生成错误修复和重构建议。

ABSTRACT

The way developers edit day-to-day code tends to be repetitive, often using existing code elements. Many researchers have tried to automate repetitive code changes by learning from specific change templates which are applied to limited scope. The advancement of Neural Machine Translation (NMT) and the availability of vast open-source evolutionary data opens up the possibility of automatically learning those templates from the wild. However, unlike natural languages, for which NMT techniques were originally devised, source code and its changes have certain properties. For instance, compared to natural language, source code vocabulary can be significantly larger. Further, good changes in code do not break its syntactic structure. Thus, deploying state-of-the-art NMT models without adapting the methods to the source code domain yields sub-optimal results. To this end, we propose a novel Tree based NMT system to model source code changes and learn code change patterns from the wild. We realize our model with a change suggestion engine: CODIT and train the model with more than 30k real-world changes and evaluate it on 6k patches. Our evaluation shows the effectiveness of CODIT in learning and suggesting patches.CODIT also shows promise generating bug fix patches.

研究动机与目标

  • 为解决通过预定义模板而非真实世界代码更改学习来自动化重复性代码编辑的挑战。
  • 将神经机器翻译技术适配到源代码上,因为源代码的词汇量更大且语法约束比自然语言更严格。
  • 开发一种在编辑过程中保持代码结构的模型,以确保生成补丁的语法正确性。
  • 在真实世界代码更改建议和错误修复生成上评估模型的有效性。

提出的方法

  • CODIT 使用基于树的神经机器翻译架构,将源代码建模为抽象语法树(AST),以捕捉其层次结构。
  • 通过 AST 遍历编码源代码更改,并使用具有树结构注意力机制的序列到序列框架解码为新代码。
  • 在从开源代码库中提取的超过 30,000 个真实世界代码更改上端到端训练该模型。
  • 采用复制机制在翻译过程中保留罕见或复杂的代码标记,以提升泛化能力。
  • 该系统实现为一个更改建议引擎,在代码编辑过程中推荐补丁。
  • 在保留的 6,000 个补丁测试集上进行评估,以衡量准确率和语法正确性。

实验结果

研究问题

  • RQ1基于树的 NMT 模型能否有效从真实世界演化数据中学习并生成语法正确的代码更改?
  • RQ2CODIT 在建议准确且结构有效的代码补丁方面与标准 NMT 模型相比表现如何?
  • RQ3CODIT 在生成有意义的错误修复补丁方面具备多大程度的泛化能力?
  • RQ4与平面序列模型相比,将代码建模为 AST 是否能提升代码更改建议的质量?

主要发现

  • CODIT 通过保持源代码的结构完整性,在生成语法正确的代码补丁方面显著优于标准 NMT 模型。
  • 该模型在建议真实世界代码更改方面表现出高准确率,显示出对未见补丁的强大泛化能力。
  • CODIT 能够成功生成合理的错误修复补丁,表明其在自动化调试辅助方面具有潜力。
  • 使用树结构注意力机制和基于 AST 的编码方式,使模型能更好地处理复杂代码结构和罕见标记。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。