Skip to main content
QUICK REVIEW

[論文レビュー] MCPA: Program Analysis as Machine Learning

Marcel Böhme|arXiv (Cornell University)|Nov 12, 2019
Software Reliability and Analysis Research被引用数 2
ひとこと要約

この論文は、統計的サンプリングを用いてプログラム解析をおそらく近似的に正しい(PAC)学習問題として定式化する、Monte Carlo プログラム解析(MCPA)という新しい手法を紹介する。プログラム実行をモンテカルロ試行とみなすことにより、ユーザーが定義した誤差境界(ϵ)と信頼水準(δ)に基づき、精度に関する確率的保証を提供する。これにより、大規模なソフトウェアシステムにおいても、原理的かつスケーラブルに誤差が制限された解析が可能になる。

ABSTRACT

Static program analysis today takes an analytical approach which is quite suitable for a well-scoped system. Data- and control-flow is taken into account. Special cases such as pointers, procedures, and undefined behavior must be handled. A program is analyzed precisely on the statement level. However, the analytical approach is ill-equiped to handle implementations of complex, large-scale, heterogeneous software systems we see in the real world. Existing static analysis techniques that scale, trade correctness (i.e., soundness or completeness) for scalability and build on strong assumptions (e.g., language-specificity). Scalable static analysis are well-known to report errors that do *not* exist (false positives) or fail to report errors that *do* exist (false negatives). Then, how do we know the degree to which the analysis outcome is correct? In this paper, we propose an approach to scale-oblivious greybox program analysis with bounded error which applies efficient approximation schemes (FPRAS) from the foundations of machine learning: PAC learnability. Given two parameters $\delta$ and $\epsilon$, with probability at least $(1-\delta)$, our Monte Carlo Program Analysis (MCPA) approach produces an outcome that has an average error at most $\epsilon$. The parameters $\delta>0$ and $\epsilon>0$ can be chosen arbitrarily close to zero (0) such that the program analysis outcome is said to be probably-approximately correct (PAC). We demonstrate the pertinent concepts of MCPA using three applications: $(\epsilon,\delta)$-approximate quantitative analysis, $(\epsilon,\delta)$-approximate software verification, and $(\epsilon,\delta)$-approximate patch verification.

研究の動機と目的

  • 大規模で複雑なソフトウェアシステムにおける静的プログラム解析のスケーラビリティと精度のトレードオフを解決すること。
  • 従来の健全性や完全性を越えて、プログラム解析の出力の正しさを形式的かつ定量的に測定するフレームワークを提供すること。
  • 第三者のライブラリ、未定義動作、リフレクションなどの動的機能といった現実世界の複雑さに対して、本質的に耐性を持つスケーラブルなプログラム解析を可能にすること。
  • 健全性や完全性を犠牲にしているが、そのトレードオフを定量的に測定しない既存のスケーラブルなツールに対する原理的で代替可能な手法を提供すること。
  • MCPAを定量的解析、ソフトウェア検証、パッチ検証に応用し、厳密な統計的保証を提供することを示すこと。

提案手法

  • MCPAは、仮説を解析結果とし、モンテカルロ試行を個別のプログラム実行とみなすPAC学習問題としてプログラム解析をモデル化する。
  • FPRAS(完全多項式ランダム化近似スキーム)を用いて、高い確率と誤差が制限された状態でプログラムの性質を推定する。
  • 解析結果は、ユーザーが定義した ϵ>0 および δ>0 に対して、真の値から ϵ 以内にある確率が (1−δ) 以上であることが保証される。
  • モンテカルロ試行は実際のユーザー実行から抽出されるため、解析は分布的に根拠を持ち、スケーラブルである。
  • このフレームワークは、バグの有無といったバイナリ属性と、メモリ使用量やエネルギー消費量といった定量的属性の両方をサポートする。
  • 統計的仮説検定を用いてパッチ検証やソフトウェアバージョンの比較を (ϵ,δ) 保証のもとで実施し、シミュレーションにおいて標準的なA/Bテスト手法を上回る性能を示した。

実験結果

リサーチクエスチョン

  • RQ1プログラム解析をPAC学習問題として形式化することで、正しさに関する境界付きの確率的保証を提供できるか?
  • RQ2健全性や完全性に依存せずに、スケーラビリティと精度のトレードオフをどのように定量的に測定できるか?
  • RQ3実際のユーザー実行のモンテカルロサンプリングが、大規模システムにおける従来の静的解析を置き換えたり補完したりできるか?
  • RQ4パッチ検証において、MCPAはフィッシャーの正確確率検定やマン・ホイットニーU検定といった標準的な統計的テスト手法と比べてどのように異なるか?
  • RQ5MCPAは、同一の理論的基盤のもとでバイナリ属性と定量的属性の両方のプログラム属性に適用可能か?

主な発見

  • MCPAは、解析結果が平均誤差が最大 ϵ 以内である確率が (1−δ) 以上である保証を提供し、おそらく近似的に正しい(PAC)プログラム解析を実現する。
  • シミュレーションにおいて、(ϵ,δ)-近似パッチ検証は、フィッシャーの正確確率検定やマン・ホイットニーU検定を上回り、ソフトウェア動作の有意差を検出する能力に優れている。
  • 限られた実行サンプルでも高い精度を達成でき、1日1000億件以上の実行を記録するシステムでは、誤差境界が ϵ=3.6×10−11 まで低下することが実証された。
  • OSS-Fuzz や Netflix、YouTube などのシステムでは、誤差境界が 10−10 未満の信頼区間(99%-CIs)が得られ、高い信頼性を示している。
  • このアプローチはスケールに依存せず、合成的または理想化された入力ではなく、実際のユーザーワークロードに依存しているため、分布的に根拠を持つ。
  • このフレームワークは、(ϵ,δ)-近似定量的解析、ソフトウェア検証、パッチ検証という複数の応用に一般化可能であり、統一された統計的基盤の下で統合されている。

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

論文設計から論文執筆まで、研究時間を劇的に削減しましょう。

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

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