Skip to main content
QUICK REVIEW

[論文レビュー] Beep: Fine-grained Fix Localization by Learning to Predict Buggy Code Elements

Shangwen Wang, Kui Liu|arXiv (Cornell University)|Nov 15, 2021
Software Engineering Research参考文献 100被引用数 5
ひとこと要約

この論文では、バグのあるコードトークンを局所化し、細かく精度の高い修復操作を予測する深層学習モデルBeepを提案する。ASTパスを用いてCoCoNutデータセットで訓練されたBeepは、複数のベンチマークで平均首位順位が7–12、Recall@1が30–45%を達成し、過学習を軽減し効率を向上させることで、2つの修復パイプラインにおいて100%の正しく生成されたパッチを実現する。

ABSTRACT

Software Fault Localization refers to the activity of finding code elements (e.g., statements) that are related to a software failure. The state-of-the-art fault localization techniques, however, produce coarse-grained results that can deter manual debugging or mislead automated repair tools. In this work, we focus specifically on the fine-grained identification of code elements (i.e., tokens) that must be changed to fix a buggy program: we refer to it as fix localization. This paper introduces a neural network architecture (named Beep) that builds on AST paths to predict the buggy code element as well as the change action that must be applied to repair a program. Leveraging massive data of bugs and patches within the CoCoNut dataset, we trained a model that was (1) effective in localizing the buggy tokens with the Mean First Rank significantly higher than a statistics based baseline and a machine learning-based baseline, and (2) effective in predicting the repair operators (with the associated buggy code elements) with a Recall@1= 30-45% and the Mean First Rank=7-12 (evaluated by CoCoNut, ManySStuBs4J, and Defects4J datasets). To showcase how fine-grained fix localization can help program repair, we employ it in two repair pipelines where we use either a code completion engine to predict the correct token or a set of heuristics to search for the suitable donor code. A key strength of accurate fix localization for program repair is that it reduces the chance of patch overfitting, a challenge in generate-and-validate automated program repair: both two repair pipelines achieve a correctness ratio of 100%, i.e., all generated patches are found to be correct. Moreover, accurate fix localization helps enhance the efficiency of program repair.

研究の動機と目的

  • 手動および自動デバッグにおける粗い粒度の故障局所化の限界を解消し、効率的かつ正確なバグ修正を可能にする。
  • 生成・検証型自動プログラム修復(APR)における過学習を軽減するため、バグのあるコード要素の正確な局所化を可能にする。
  • 修正すべき正確なトークンと変更オペレータを特定することで、APRパイプラインの効率性と正確性を向上させる。
  • ASTパスと大量のバグ/パッチデータを活用して、細かく精度の高いコード変更を予測するニューラルネットワークモデルを開発する。
  • 細かい粒度の修正局所化が、コード補完またはヒューリスティックベースの修復パイプラインを用いて100%の正しく生成されたパッチを実現できることを示す。

提案手法

  • Beepは、コード要素の周囲の構造的・意味的文脈を符号化するために、抽象構文木(AST)パスを処理するニューラルネットワークアーキテクチャを用いる。
  • モデルは、実世界のソフトウェアプロジェクトから得た数百万件のバグ-修正ペアを含むCoCoNutデータセットで訓練される。
  • モデルは、系列から系列への学習アプローチを用いて、バグのあるトークンとそれに対応する修復オペレータ(例:UPDATE、INSERT、DELETE)を同時に予測する。
  • バグのあるコードの周囲の関連する構文的・意味的特徴に注目するために、ASTパス上のアテンションメカニズムを活用する。
  • 2つの修復パイプラインが評価された:1つは正しいトークンを予測するコード補完エンジンを用い、もう1つはドナー・コードを探索するヒューリスティクスを用いる。
  • アプローチは、標準的な指標(平均首位順位、Recall@1)を用いて、CoCoNut、ManySStuBs4J、Defects4Jのデータセットで評価された。

実験結果

リサーチクエスチョン

  • RQ1深層学習モデルは、粗い粒度の行単位やメソッド単位の局所化を超えて、メソッド内での正確なバグのあるトークンを局所化できるか?
  • RQ2バグのあるトークンに関連する正しい修復オペレータ(例:UPDATE、INSERT)をモデルは正しく予測できるか?
  • RQ3細かい粒度の修正局所化は、非バグコード要素への変更を最小限に抑えることで、自動プログラム修復における過学習を軽減できるか?
  • RQ4Beepの予測を統合した修復パイプラインは、パッチ生成において100%の正しさを達成できるか?
  • RQ5局所化の正確性と修復効果性という観点から、Beepのパフォーマンスは、ベースラインの故障局所化技術と比べてどのように異なるか?

主な発見

  • Beepは、CoCoNut、ManySStuBs4J、Defects4Jの全ベンチマークで、バグのあるトークンの局所化において平均首位順位が7–12を達成し、統計的および機械学習ベースのベースラインを顕著に上回る。
  • モデルは、正しい修復オペレータを予測するRecall@1が30–45%を達成しており、必要な変更を特定する精度の高さが示されている。
  • 2つの修復パイプラインに統合された際、Beepは100%の正答率を達成し、生成されたすべてのパッチがすべてのテストケースを通過することを意味する。
  • 細かい粒度の修正局所化の使用により、実際にバグのある要素にのみ変更が適用されるため、過学習のリスクが低減される。
  • 非バグコード要素への無意味な変更の探索を回避するため、修復パイプラインは非効率な探索空間を著しく縮小し、効率的である。
  • Beepは、Defects4Jの実世界の産業プロジェクトやManySStuBs4Jの大規模なテストスイートを含む多様なベンチマークにわたって、良好な一般化性能を示す。

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

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

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

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