A06 - qwik.jp

Download Report

Transcript A06 - qwik.jp

Heap Cloning:
Enabling Dynamic Symbolic
Execution of Java Programs
担当: 吉田@南山大学
S. Anand and M.J. Harrold, “Heap Cloning: Enabling Dynamic Symbolic
Execution of Java Programs”, ASE 2011, Lawrence, KS, USA.
背景
• Symbolic exection
– プログラム解析の技術
– 記号を入力して解釈実行し path constraints を算出
– 実行できないプログラム
• native methods や library classes の存在
• DSE: Dynamic symbolic execution
– Concolic exection
– 具体的な値を用いた実行と記号実行の併用
• 記号実行できない箇所を補う
DSEの問題
• 記号実行できないプログラム
– native methods, standard library classes
– 副作用により具体的な実行結果と記号実行の
結果に差異が生じる
– 手動で解析用モデルを補うことで対処
• 記号実行系の実現の難しさ
– 記号実行用インタプリタとJVMとの不親和
– 命令の置換え実行をするアプローチでもライ
ブラリがうまく扱えず、精度が落ちる
Heap Cloning
• 目的:
– 解析用のモデルを追加する手間を減らしたい
– 既存の手法の限界を打ち破る
• 提案:
– ヒープの二重化
• 本来の具体的な計算に用いるヒープ
• 記号計算用のヒープ
– 副作用がある native methods を特定
• native method を呼び出したあとにヒープ間に差異が
生じたら副作用あり
– Standard library classes を使わない
実現方法
• プログラムを書換える
– ヒープの二重化
• 直感的には、すべてのオブジェクトのラッパーを作る
– Standard library classes を使わないようにする
S. Anand and M.J. Harrold, “Heap Cloning: Enabling Dynamic Symbolic
Execution of Java Programs”, ASE 2011, Lawrence, KS, USA.
評価実験
• 実装: CINGER (Concolic INput GEneratoR)
• 実験:
– 対象: NanoXML, JLex, Sat4J(2 versions), BCEL,
Lucene (約 12千〜57千行)
– テストケースを実行して path constraints を算出
– ライブラリクラス内の実行で生じる制約を確認
• BCEL の場合、約 90%
• 命令を置き換える方法で精度の向上に貢献できる
– モデル化すべき native method の特定
• 56 個中 1 個 (arraycopy in java.lang.system)
Automatic Generation of
Load Tests
担当: 蜂巣@南山大学
P. Zhang, S. Elbaum, and M. B. Dwyer, “Automatic Generation of Load Tests”,
ASE 2011, Lawrence, KS, USA.
背景
• Load Test: 極端な負荷の下で,システムの
性能が許容できるかどうか検証する
• 既存のLoad Test生成方法の限界
– 特定の値に依存
– 入力サイズを増やすとコスト増
– 入力サイズを増やしても同じ計算ばかり増える
– 応答時間やスループット以外の評価基準を扱え
ない
• メモリや消費電力
提案方法
• 単に入力サイズを増やすのではなく,
注意深くデータを選ぶ
• プログラムの振舞いの多様性(diversity)を
カバー
• 複数の評価基準に対応
• 記号実行を用いてプログラムパスを探索
してテスト生成
direct and incremental SE
direct: 基準に従って,負荷の高
そうなパスに向かって探す
incremental: 各フェイズでパス
をクラスタリングし,有望そう
なパスを選ぶ
テスタのすること
(1) 記号として扱う変数を指定
(2) 生成するテスト数を指定
(testSuitSize)
(3) 基準を選択(measure)
応答時間,消費メモリ
さらに,1フェイズの分岐の数を
指定 (lookAhead)
testSuitSize=2, lookAhead=6
共通のノードの距離が
lookAhead/testSuitSize以上
評価
1. 応答時間 (左の図)
JZlibを使って比較(ランダムデータ)
2倍の差
記号実行の最大分岐数を100に
すれば100MBまで生成可能
2. 消費メモリ
SAT4Jを使って比較(ベンチマーク)
1.2倍から3.7倍の増加
3. 複数(応答時間と消費メモリ)
(左の表)
TinySQLを使って比較
応答時間も消費メモリも約2倍増加
テストケースの多様性も十分
Symbolic Search-Based
Testing
担当: 吉田@南山大学
A. Baars, M. Harman and et al. , “Symbolic Search-Based Testing”, ASE 2011,
Lawrence, KS, USA.
背景と提案
• Search Based Software Testing
– テストデータの自動生成
– 生成時の基準: Branch coverage
– テストデータの探索アルゴリズムは研究され
ているが、fitness function は古いまま
• Symbolic Search-Based Testing
– Fitness function の改善
– Partial symbolic execution による静的解析
– 精度に関する尺度の導入
Symbolically Enhanced
Fitness Function
• 目的の経路からそれた分岐で評価
• 従来:
– 2 つのパラメタの和
– branch distance (分岐条件と距離)
• 例: x > 0 ⇒ |x – 0| + K (K is a failure constant. K=1)
– approach level (目標分岐条件までの距離)
• 提案:
– 目的の分岐までの各経路で2つのパラメタの和を求
め、その最小値
– path distance (branch distance の総和)
– approximation level (ループの存在による記号実
行の不正確さ)
Approximation Level
• 分岐 2 から 8 まで
– ループの存在
– s, i の値は正しく計算
できない
• Path condition:
– < n>0∧0<n∧a=n >
• approximation level: 3
– 1 ≧ n, s = 10, b = s
評価実験
• 前提:
– 探索方法:
• [local search] Alternating Variable Method (AVM)
• [global search] Generic Algorithm (GA)
– 対象: 複数のC言語のプログラム, 分岐数 338
• RQ1: branch coverage に負の影響がない?
– 結果: 同じか coverage を上げる
• 探索の成功率も高める傾向
• ただし、オーバーフロー等の検査があると成功率が下がる
• RQ2: 効率が向上する?
– AVM: 最大で約 90% の評価回数を削減
– GA:最大で約 30% の評価回数を削減