Skip to main content
QUICK REVIEW

[論文レビュー] Using Distributed Representation of Code for Bug Detection

Jón Arnar Briem, Jordi Smit|arXiv (Cornell University)|Nov 28, 2019
Software Engineering Research参考文献 15被引用数 5
ひとこと要約

この論文は、元々メソッド名予測を目的として設計されたCode2Vecモデルを再利用し、再訓練された最終層を二値分類用にすることで、Javaコードにおけるオフ・バイ・ワンエラーを検出するものである。ASTパス埋め込みと注目メカニズムを用い、変更されたコードのコーパス上で学習することで、オフ・バイ・ワンバグに対して有望な一般化性能を達成しているが、データセットバイアスと非標準的なコードパターンにおける誤検出の問題を抱えている。

ABSTRACT

Recent advances in neural modeling for bug detection have been very promising. More specifically, using snippets of code to create continuous vectors or extit{embeddings} has been shown to be very good at method name prediction and claimed to be efficient at other tasks, such as bug detection. However, to this end, the method has not been empirically tested for the latter. In this work, we use the Code2Vec model of Alon et al. to evaluate it for detecting off-by-one errors in Java source code. We define bug detection as a binary classification problem and train our model on a large Java file corpus containing likely correct code. In order to properly classify incorrect code, the model needs to be trained on false examples as well. To achieve this, we create likely incorrect code by making simple mutations to the original corpus. Our quantitative and qualitative evaluations show that an attention-based model that uses a structural representation of code can be indeed successfully used for other tasks than method naming.

研究の動機と目的

  • Code2Vec、最先端のコード埋め込みモデルが、元々のメソッド名予測タスクを超えて、オフ・バイ・ワンバグ検出に効果的に再利用可能かどうかを評価すること。
  • 注目ベースのASTパス表現が、コード内の意味的バグを同定するために有効かどうかを調査すること。
  • 実世界のバグ検出タスクにおけるコード埋め込みモデルの実証的評価の不足を解消すること。
  • コード変異によるデータ拡張が、モデルの一般化性能と耐性に与える影響を調査すること。
  • データセットバイアス、コードスタイルの逸脱、スコープ制限に関連するモデル性能の制限要因を特定すること。

提案手法

  • Code2Vecモデルの最終層を二値分類ヘッドに置き換えることで、オフ・バイ・ワンエラー検出用に微調整する。
  • モデルは、Javaコード内の抽象構文木(AST)パスからベクトル表現を学習するために、パスベースの注目メカニズムを用いる。
  • 元の正しく動作すると想定されるJavaコードの大量コーパスをベースとし、< を<= に置き換えるなどの構文的変異を用いてオフ・バイ・ワンエラーを生成し、ネガティブ例とする。
  • 元の(正しく動作する)コードと変異した(誤りを含む)コードの混合データセットを用いてモデルを学習させ、二値分類を可能にする。
  • 標準的な指標を用いた定量的評価と、検出されたバグの事例研究による定性的評価を通じて、モデルの性能を評価する。
  • 事前学習済みのCode2Vecタスクからの重みを初期値として用いることで、トランスファー学習を検討したが、ランダム初期化と比較して性能向上は限定的であった。

実験結果

リサーチクエスチョン

  • RQ1元々メソッド名予測を目的として学習されたCode2Vecモデルが、オフ・バイ・ワンバグ検出に効果的に再利用可能か。
  • RQ2注目ベースのASTパス表現は、名前付けタスクを超えて論理エラーの検出に一般化できる程度に効果的か。
  • RQ3コード変異によるデータ拡張が、モデルの検出性能と一般化能力にどの程度向上効果をもたらすか。
  • RQ4モデルの主な失敗モードは何か、特にコードスタイルバイアスと文脈制限に関するものである。
  • RQ5事前学習済みのCode2Vecモデルからのトランスファー学習が、オフ・バイ・ワンエラー検出性能を顕著に向上させるか。

主な発見

  • ASTパス埋め込みと注目メカニズムを組み合わせたモデルは、メソッド名予測を超えてバグ検出に一般化できることを示しており、有望な検出性能を達成している。
  • 事前学習済みのCode2Vecモデルからのトランスファー学習は、ランダム初期化と比較してわずかに性能向上をもたらすにとどまり、学習の加速効果も顕著でない。
  • モデルは標準的なコーディングパターンに強くバイアスを示しており、特に'<'や'>'とは異なる'<'='を含むforループでは、非標準的なコードスタイルに対して誤検出が発生している。
  • データセットの不均衡がモデル性能に悪影響を及えており、'>'や'>='の例が'<'や'<='の例と比べて著しく少ない。
  • モデルのスコープは1つのメソッドのASTに限定されており、呼び出されたメソッドの文脈を欠いている可能性があり、複雑なコードでは信頼性の低い予測を生じるおそれがある。
  • モデルの誤検出の多くは、一般的なコーディング慣習からの逸脱に起因しており、スタイル一般化が依然として主要な課題であることが示唆されている。

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

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

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

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