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は、意味のあるバグ修正パッチを生成するのにどの程度一般化できるか?
  • RQ4ASTとしてコードをモデル化することで、平坦なシーケンスモデルと比較して、コード変更提案の質が向上するか?

主な発見

  • CODITは、ソースコードの構造的整合性を保持することで、標準的なNMTモデルよりも文法的に正しいコードパッチの生成において顕著に優れている。
  • モデルは、未観測のパッチに対しても高い精度で実世界のコード変更を提案でき、強力な一般化能力を示した。
  • CODITは妥当なバグ修正パッチを効果的に生成でき、自動デバッグ支援の可能性を示している。
  • ツリー構造のアテンションとASTベースの符号化の使用により、複雑なコード構造や希少トークンの処理がより効果的になった。

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

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

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

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