[論文レビュー] Towards Bounded Infeasible Code Detection
本稿では、到達可能性検証条件を用いて実行可能なプログラム実行を論理式に符号化することで、実行不可能なコードを境界付きで検出するアプローチを提示する。本稿では、繰り返し回数に上限を設けた範囲内で、すべての実行可能なパス/ステートメントをカバーするテストケースを生成する2つの完全なアルゴリズム—パスカバレッジとステートメントカバレッジ—を導入し、カバーされていないコードが境界内では実際に実行不可能であることを保証する。
A first step towards more reliable software is to execute each statement and each control-flow path in a method once. In this paper, we present a formal method to automatically compute test cases for this purpose based on the idea of a bounded infeasible code detection. The method first unwinds all loops in a program finitely often and then encodes all feasible executions of the loop-free programs in a logical formula. Helper variables are introduced such that a theorem prover can reconstruct the control-flow path of a feasible execution from a satisfying valuation of this formula. Based on this formula, we present one algorithm that computes a feasible path cover and one algorithm that computes a feasible statement cover. We show that the algorithms are complete for loop-free programs and that they can be implemented efficiently. We further provide a sound algorithm to compute procedure summaries which makes the method scalable to larger programs.
研究の動機と目的
- 従来の静的解析が到達不能なコードと実行不可能なコードを区別できない場合に、プログラム内の実行不可能なコードを検出する課題に対処すること。
- 繰り返し回数に上限を設けた範囲内で、すべての生成されたテストケースが実際に終了するプログラム実行に対応することを保証することで、テストケース生成を改善すること。
- 与えられた境界までに実行不可能なコードが存在しないことを、健全かつ完全に検証する手法を提供することにより、信頼性の高いコードカバレッジ分析を可能にすること。
- 実行可能な実行から得られる手続きサマリーを用いることで、より大きなプログラムへのスケーラビリティを向上させること。
- ソースコード以外に専門家の入力が不要で、出力が実際に実行可能なプログラムパスである、使いやすく完全自動な手法を提供すること。
提案手法
- ループのないプログラムのすべての実行可能な実行を符号化する論理式(到達可能性検証条件)として、制御フローカンパスを追跡する補助変数を用いて、プログラム実行を形式化する。
- ループを有限回の展開(unwinding)により、ループを含まない形に変換することで、すべての実行可能な実行を有限に符号化可能にする。
- 定理証明を用いて到達可能性検証条件の充足割り当てを特定し、それが直接的に具体的なプログラム実行に対応することを保証する。
- 2つのアルゴリズムを導入:1つは同じパスを再訪問しないためのブロッキング節を用い、もう1つは未訪問のプログラムブロックを優先するための有効化節を用いる。
- 生成されたテストケースから入力出力ペアを抽出することで、実行可能な実行の下近似(under-approximation)として手続きサマリーを計算する。
- 既存のサマリーが呼び出しコンテキストでの実行可能な実行を捕捉できない場合に、オンデマンドでサマリーを再計算することで、スケーラビリティを向上させる。
実験結果
リサーチクエスチョン
- RQ1すべての生成されたテストケースが実際に終了する実行に対応するような、境界付きの実行不可能コード検出アプローチを設計できるか?
- RQ2充足割り当てが実際にプログラムパスに対応するように、すべての実行可能なプログラム実行を表現する論理式をどのように構築できるか?
- RQ3健全かつ完全に、境界付きのループを含まないプログラムに対して、実行可能なパスカバレッジおよびステートメントカバレッジを計算する2つの異なるアルゴリズムを開発できるか?
- RQ4実行可能な実行から得られる手続きサマリーは、より大きなプログラムに対してスケーラビリティをどの程度向上させられるか?
- RQ5本手法の性能は、カバレッジの完全性および実行効率の観点で、既存の手法と比較してどの程度優れているか?
主な発見
- 提案された実行可能なパスカバレッジおよびステートメントカバレッジのためのアルゴリズムは、ループを含まないプログラムに対して完全であり、標準の定理証明ツールを用いて効率的に実装可能である。
- 生成されたテストケースによってカバーされていないプログラムステートメントは、与えられたループ展開境界内では実際に実行不可能であることが保証される。
- 予備評価では、境界付き実行における実行不可能コードの検出において、既存のツールを上回る性能を示した。
- 300行程度の手続きに対しても、実行可能なパスカバレッジの計算は、実行可能なステートメントカバレッジの計算とほぼ同等の効率で実行可能である。
- 手続きサマリーの使用により、実行可能な実行の健全な下近似が可能となり、スケーラビリティが向上したが、現在の翻訳およびオラクルサポートの制限により、完全な実用的導入には至っていない。
- 定理証明ツールが充足割り当てを発見できない場合(特に非線形算術を含む場合)、本手法は健全ではあるが完全ではない。実際の応用では、動的解析との統合が求められる。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。