Skip to main content
QUICK REVIEW

[論文レビュー] Tree2Tree Neural Translation Model for Learning Source Code Changes.

Saikat Chakraborty, Miltiadis Allamanis|arXiv (Cornell University)|Sep 30, 2018
Software Engineering Research参考文献 54被引用数 21
ひとこと要約

本稿では、実世界のパッチからコード変更パターンを学習する木構造ベースのニューラル機械翻訳モデルであるCODITを提案する。コードを抽象構文木(AST)としてモデル化することで、構文的に正しい再利用可能なコード変換を学習する。24,000件の変更で学習し、5,000件のパッチで評価した結果、正確なコード変更の提案に優れた性能を示し、Defects4Jの80件のバグのうち25件を修正した。これは、構文的に正しい再利用可能なコード変換を学習する有効性を示している。

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 deep neural networks and the availability of vast open-source evolutionary data opens up the possibility of automatically learning those templates from the wild. However, deep neural network based modeling for code changes and code in general introduces some specific problems that needs specific attention from research community. 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 neural network models without adapting the methods to the source code domain yields sub-optimal results. To this end, we propose a novel tree-based neural network system to model source code changes and learn code change patterns from the wild. Specifically, we propose a tree-based neural machine translation model to learn the probability distribution of changes in code. We realize our model with a change suggestion engine, CODIT, and train the model with more than 24k real-world changes and evaluate it on 5k patches. Our evaluation shows the effectiveness of CODITin learning and suggesting patches. CODIT can also learn specific bug fix pattern from bug fixing patches and can fix 25 bugs out of 80 bugs in Defects4J.

研究の動機と目的

  • 繰り返し発生するコード変更を自動化する挑戦に、実世界のコード進化データからパターンを学習することで対処すること。
  • 標準的なニューラルネットワークの制限を克服するため、コードを木構造としてモデル化することで構文構造を保持すること。
  • 事前に定義されたテンプレートに依存せずに、意味的にも構文的にも有効なコード変更を学習し、提案するシステムの開発。
  • 標準ベンチマークを用いて、モデルの未知のバグ修正シナリオへの一般化能力を評価すること。

提案手法

  • モデルは、元のコードASTを変更済みASTにマッピングする木構造ベースのニューラル機械翻訳フレームワークを用い、構文構造を保持する。
  • 木構造LSTM(Tree-LSTM)ネットワークを用いたエンコーダ・デコーダアーキテクチャを採用し、ASTをエンコードおよびデコードする。
  • オープンソースリポジトリから抽出した24,000件の実世界のコード変更データを、エンドツーエンドで学習する。
  • 変更提案エンジンであるCODITは、コード編集中に学習済みモデルを適用し、パッチ提案を生成する。
  • 進化データから学習することで、ハードコードされたテンプレートを必要とせず、一般的なリファクタリングやバグ修正パターンを捉える。
  • 5,000件の実際のパッチ(80件のDefects4Jバグ修正例を含む)を用いて評価を行う。

実験結果

リサーチクエスチョン

  • RQ1ニューラルモデルは、実世界のコード進化データから意味的で構文的に正しいコード変更パターンを直接学習できるか?
  • RQ2木構造ベースのニューラル翻訳モデルは、テンプレートベースやシーケンスベースのモデルと比較して、未観測のコード変更にどの程度一般化できるか?
  • RQ3標準ベンチマークのパッチから、特定のバグ修正パターンをどの程度学習し、適用できるか?
  • RQ4実世界の開発シナリオにおいて、正確で構文的に正しいコード変更を提案できるか?

主な発見

  • CODITは、コードを抽象構文木としてモデル化することで、高い構文的整合性を保ったままコード変更を学習・提案する。
  • 5,000件のホールドアウトテストセットで優れた性能を示し、未観測の変更への一般化能力を実証した。
  • CODITはDefects4Jベンチマークの80件のバグのうち25件を修正し、実世界のバグ修正シナリオにおける有効性を示した。
  • 木構造アーキテクチャにより、標準的なシーケンスベースのニューラルモデルと比較して、コード構造の保持がより良好である。
  • 手動でのテンプレート整備を必要とせず、生のコード進化データから再利用可能な変更パターンを学習した。

より良い研究を、今すぐ始めましょう

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。