Skip to main content
QUICK REVIEW

[論文レビュー] Finding Likely Errors with Bayesian Specifications

Vijayaraghavan Murali, Swarat Chaudhuri|arXiv (Cornell University)|Mar 4, 2017
Software Engineering Research参考文献 23被引用数 4
ひとこと要約

本論文は、大規模で多様なコードコーパスから隠れた仕様と文法的特徴の連合分布をモデル化することで、確率的仕様を学習するベイジアンフレームワークを提案する。このモデルを特定のプログラムの特徴で条件づけることで、関連する仕様に関する事後分布を生成し、Androidアプリケーションにおける異常なAPI使用の正確で高精度な検出を可能にする。従来の確率的手法に比べ、再現率と適合率の両面で優れている。

ABSTRACT

We present a Bayesian framework for learning probabilistic specifications from large, unstructured code corpora, and a method to use this framework to statically detect anomalous, hence likely buggy, program behavior. The distinctive insight here is to build a statistical model that correlates all specifications hidden inside a corpus with the syntax and observed behavior of programs that implement these specifications. During the analysis of a particular program, this model is conditioned into a posterior distribution that prioritizes specifications that are relevant to this program. This allows accurate program analysis even if the corpus is highly heterogeneous. The problem of finding anomalies is now framed quantitatively, as a problem of computing a distance between a "reference distribution" over program behaviors that our model expects from the program, and the distribution over behaviors that the program actually produces. We present a concrete embodiment of our framework that combines a topic model and a neural network model to learn specifications, and queries the learned models to compute anomaly scores. We evaluate this implementation on the task of detecting anomalous usage of Android APIs. Our encouraging experimental results show that the method can automatically discover subtle errors in Android applications in the wild, and has high precision and recall compared to competing probabilistic approaches.

研究の動機と目的

  • ノイズが多く多様性のあるコードコーパスから、頑健で一般化可能なプログラム仕様を学習する課題に対処すること。
  • ノイズに弱く、複数の使用パターンを処理できない従来の定性的仕様の限界を克服すること。
  • 学習済みの文脈特化型使用パターンからの確率的逸脱としてプログラム動作をモデル化することで、正確な静的バグ検出を可能にすること。
  • 正しさの性質を手動で指定する必要のないスケーラブルな手法を開発すること。
  • プログラム固有の特徴で統一モデルを条件づけることで、関連する使用パターンを優先し、異常検出を向上させること。

提案手法

  • フレームワークは、Ψ を隠れた仕様、X をコードの文法的特徴として表す、P(Ψ, X) の連合確率モデルを学習する。
  • ベイズの定理を用いて P(Ψ|X_F) —— すなわち、ターゲットプログラム F の特徴 X_F で条件づけられた仕様に関する事後分布 —— を計算し、関連する使用パターンに焦点を当てる。
  • トピックモデルを用いて、コーパス内のAPIコールシーケンスから隠れた仕様クラスタを発見する。
  • 再帰的ニューラルネットワーク(RNN)を用いて、仕様 Ψ が与えられたもとでの観測されたAPIコールシーケンス θ の条件付き確率 P(θ|Ψ) をモデル化する。
  • 異常スコアは、事後分布から得られる期待される動作分布と実際のプログラム動作との間のカルバック・ライバラー距離として計算される。
  • トピックモデリングとRNNの組み合わせにより、プログラム動作の階層的かつ文脈に配慮したモデルを学習する。

実験結果

リサーチクエスチョン

  • RQ11つの確率的モデルが、大規模なコードコーパスにおけるAPIの多様で文脈依存の使用パターンを効果的に表現できるか?
  • RQ2プログラム固有の文法的特徴でモデルを条件づけることで、バグ検出における関連性と正確性をどのように向上させられるか?
  • RQ3ベイジアンフレームワークは、従来の確率的モデルに比べ、微妙で現実世界のAPI誤用を検出できるか?
  • RQ4このフレームワークは、大規模で非構造的なコードコーパスにおけるノイズと多様性に対してどの程度耐性を示せるか?
  • RQ5仕様の多様性に関する事前仮定なしに、この手法は巨大なコードベースにどの程度スケーラブルに拡張できるか?

主な発見

  • フレームワークは、異常なAndroid API使用の検出において高い適合率と再現率を達成し、競合する確率的アプローチを上回っている。
  • この手法は、従来の技術では捉えにくい生産環境のAndroidアプリケーションにおける微細な実際のバグを効果的に特定している。
  • プログラム固有の特徴でモデルを条件づけることで、一般的でないが正当な使用パターンに対して低尤度スコアが発生する問題を回避している。
  • トピックモデリングとRNNの組み合わせにより、1つのコーパス内に複数の明確に異なる使用パターンを効果的に発見できる。
  • 頻度と文脈に基づいた尤度の割り当てにより、このアプローチはノイズに対して頑健である。
  • このフレームワークは、原則として非常に大規模なコードコーパス、ひいては公開可能なすべてのコードを含むものに対してもスケーラブルである。

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

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

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

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