Skip to main content
QUICK REVIEW

[論文レビュー] Dynamic Neural Program Embeddings for Program Repair

Ke Wang, Zhendong Su|arXiv (Cornell University)|Feb 15, 2018
Software Engineering Research被引用数 35
ひとこと要約

本稿では、実行トレースを通じてプログラムの意味的特徴を捉える動的ニューラルプログラム埋め込みを提案する。ライブ変数状態を順序付きタプルとしてモデル化することで、プログラム修復の性能が向上する。学生が提出するプログラミング課題およびCodeHuntの演習課題において評価された結果、文法ベースの埋め込みよりも顕著に優れた性能を示し、検索ベースの修復の効率性も向上した。

ABSTRACT

Neural program embeddings have shown much promise recently for a variety of program analysis tasks, including program synthesis, program repair, fault localization, etc. However, most existing program embeddings are based on syntactic features of programs, such as raw token sequences or abstract syntax trees. Unlike images and text, a program has an unambiguous semantic meaning that can be difficult to capture by only considering its syntax(i.e. syntactically similar programs can exhibit vastly different run-time behavior), which makes syntax-based program embeddings fundamentally limited. This paper proposes a novel semantic program embedding that is learned from program execution traces. Our key insight is that program states expressed as sequential tuples of live variable values not only captures program semantics more precisely, but also offer a more natural fit for Recurrent Neural Networks to model. We evaluate different syntactic and semantic program embeddings on predicting the types of errors that students make in their submissions to an introductory programming class and two exercises on the CodeHunt education platform. Evaluation results show that our new semantic program embedding significantly outperforms the syntactic program embeddings based on token sequences and abstract syntax trees. In addition, we augment a search-based program repair system with the predictions obtained from our semantic embedding, and show that search efficiency is also significantly improved.

研究の動機と目的

  • 構造が類似しているが意味的に異なるプログラム間の差を文法ベースのプログラム埋め込みが捉えきれないという限界を解消すること。
  • 実行トレース、特にライブ変数値の系列が、プログラム埋め込みの学習により効果的な基盤となるかどうかを検討すること。
  • 意味的埋め込みを活用して検索ベースの修復システムの探索空間を効率的に制御することで、プログラム修復の性能を向上させること。
  • 学生が提出するコードを含む実世界の教育的プログラミング文脈において、意味的埋め込みの有効性を評価すること。

提案手法

  • 実行時のライブ変数値の系列を順序付きタプルとしてモデル化し、プログラム実行トレースを用いてプログラム埋め込みを学習する。
  • 再帰的ニューラルネットワーク(RNN)を用いて、これらの順序付きプログラム状態を密度型の意味的埋め込みに変換する。
  • 実行トレースから得られるデータを用いて、RNNベースの埋め込みモデルを学習させ、動的な意味的挙動を捉える。
  • 提案された意味的埋め込みの性能を、元のトークン列および抽象構文木から得られる文法ベースの埋め込みと比較する。
  • 意味的埋め込みの予測結果を検索ベースのプログラム修復システムに統合し、探索空間を制御し、効率性を向上させる。
  • 実際の学生のプログラミング提出物およびCodeHuntの演習課題を用いたエラー種別予測タスクを通じて、埋め込みの品質を評価する。

実験結果

リサーチクエスチョン

  • RQ1実行トレースに基づくプログラム埋め込みは、文法ベースの埋め込みよりも、プログラムの意味的特徴をより効果的に捉えられるか?
  • RQ2提案された意味的埋め込みは、学生のプログラミング課題における一般的なエラー種別の予測にどの程度有効か?
  • RQ3意味的埋め込みは、検索ベースのプログラム修復システムの効率性をどの程度向上させるか?
  • RQ4異なる種類のプログラミング課題やエラーパターンにおいて、意味的埋め込みの性能向上はどのように異なるか?

主な発見

  • 提案された意味的プログラム埋め込みは、トークン列および抽象構文木に基づく文法ベースの埋め込みよりも、学生のプログラミング提出物におけるエラー種別の予測において顕著に優れた性能を示した。
  • 意味的埋め込みはエラー予測の精度を向上させ、文法的特徴だけでは捉えきれない意味的差を効果的に捉えていることを示した。
  • 検索ベースのプログラム修復システムに統合された意味的埋め込みは、探索空間を縮小し、修復の効率性を向上させた。
  • モデルの性能は、CodeHunt教育プラットフォームや入門的プログラミング課題を含む多様なプログラミング課題において一貫していた。
  • ライブ変数状態の系列としての実行トレースは、静的な文法構造よりもRNNにとってより自然で効果的な入力であった。
  • 結果から、意味的認識を持つプログラム埋め込みは、純粋に文法的な表現よりも、プログラム修復においてより頑健で情報量が多いことが示された。

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

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

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

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