icst 2015 まるわかりday! "symbolic execution track"
TRANSCRIPT
ICST 2015Symbolic Execution Track
SIGSTJ_ICST2015 まるわかり Day
1
2015.7.4紹介者:村上 仁
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution Track
紹介する論文
Symbolic Execution Track
1. Conceptualization and Evaluation of Component-based Testing Unified with Visual GUI Testing: an Empirical Study
2. Postconditioned Symbolic Execution
3. Generating Succinct Test Cases using Don’t Care Analysis
2SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution Track
著者:Emil Alégroth, Zebao Gao, Rafael A.P. Oliveira and Atif Memon
紹介者:村上 仁
3
Conceptualization and Evaluation of Component-based Testing Unified with Visual GUI Testing: an Emprical Study
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackConceptualization and Evaluation of Component-based Testing Unified with Visual GUI Testing
概要
■Component-based Graphical User Interface testing : ・特定のプログラミング言語 ・ Applications Under Test(AUT) での使用に制限 ・ VGT より 3 倍速く、ロバスト ・ AUT をユーザー操作に依らず、アプローチする ので、受け入れテストではなく、システムテスト に向いている。
4SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackConceptualization and Evaluation of Component-based Testing Unified with Visual GUI Testing
概要
■Visual GUI testing(VGT) : ・画像認識など視覚的なアサーションを実施し、 component-based に比べて柔軟性がある。 ・実行が遅い。 ・ユーザー操作と同じように AUT にアプローチする ので、受け入れテストにも、システムテストにも 向いている。
どちらも一長一短。二つの手法のコンビネーションが最適なプラクティス
5SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackConceptualization and Evaluation of Component-based Testing Unified with Visual GUI Testing
VGT GUITAR の概要
・ GUITAR( モデルベースの自動テスト ) と Python,Sikuli API( 画像認識 ) を組み合わせた プロトタイプツール GUITAR : Component-based approach VGT GUITAR :VGT approach
6SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackConceptualization and Evaluation of Component-based Testing Unified with Visual GUI Testing
論文: Fig1 引用
所感
・ GUI を自動テストのアプローチとして、 Component-based approach と VGT approrchの 良いとこどりをするのが良いということはわかった が、どうやって実現しているかまでは読み取れま せんでした。
・この論文は GUI Testing Track の内容のような 気がしました。
7SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackConceptualization and Evaluation of Component-based Testing Unified with Visual GUI Testing
著者:Qiuping Yi, Zijiang Yang, Shengjian Guo, Chao Wang, Jian Liu and Chen Zhao
紹介者:村上 仁
8
Postconditioned Symbolic Execution
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackPostconditioned Symbolic Execution
概要
Symbolic Execution は有界の深さの徹底的なパスカバレッジを達成するために、体系的にテスト入力を生成するための強力な技術 ↓実用化には、多くの場合、パスの爆発 ( 分岐条件の数が指数関数的になる ) によって制限される ↓パス爆発の問題を軽減するために、 Postconditioned Symbolic Execution と呼ばれる新しい冗長除去方法を提案
9SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackPostconditioned Symbolic Execution
Postconditioned Symbolic Execution とは
・複数の実行で共有するパスサフィックスを 特定し、テスト生成中に重複を排除
・ KLEE の Symbolic Execution エンジンに実装
・動的に計算された事後条件により探索空間 を減少させることなく、冗長パスを排除 *Preconditioned symbolic execution は 事前に条件を慎重に定義する必要がある
・標準的な Symbolic Execution に相当する パスカバレッジを保持
10SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackPostconditioned Symbolic Execution
Postconditioned Symbolic Execution の例
11
1: if (a<=0) res = res+1;2: else res = res-1;...3: if (b<=0) res = res+2;4: else res = res-2;...5: if (c<=0) res = res+3;6: else res = res-3;
P1 P2 P3 P4 P5 P6 P7 P8----------------------------------1 1 1 1 2 2 2 2 | | | | | | | |3 3 4 4 3 3 4 4 | | | | | | | |5 6 5 6 5 6 5 6 | | | | | | | |----------------------------------
Fig. 1. A program with three branches and eight paths.
共有されている
Postconditioned Symbolic Execution では、一度実行したパスは再び実行しない
一般的な探索例
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackPostconditioned Symbolic Execution
論文: Fig1 引用
まとめ
・ Postconditioned Symbolic Execution : 複数のテストの実行で共有される共通パス サフィックスを識別し、排除することが できる新たな冗長性除去方法
・今後は、より効果的な冗長性の検出、 冗長性除去と、計算コストのトレードオフを検討 する予定
・高速並列アルゴリズムを開発する予定
12SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackPostconditioned Symbolic Execution
所感
・ Symbolic Execution のパス爆発に対応する手法 実行時間の短縮になるだけでなく、 ツール側で必要のないパスを排除してくれれば、 確認項目も少なくなることが期待できる。
・ただし、 Symbolic Execution のツールを使うには、 アルゴリズムを理解したりする必要があり、 検証が必要だと思われる。
13SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackPostconditioned Symbolic Execution
著者:Cuong Nguyen, Hiroaki Yoshida, Mukul Prasad, Indradeep Ghosh and Koushik Sen
紹介者:村上 仁
14
Generating Succinct Test Casesusing Don’t Care Analysis
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackGenerating Succinct Test Cases using Don’t Care Analysis
Symbolic Execution の研究では、バグを見つける能力について注目されているが、生成されるテストケースの品質とユーザビリティは置き去りにされていることが多い。 ↓生成されたテストケースを解釈するのは容易でない ↓Don’t Care Analysis というテストケース低減法を提案 特徴)テストケースのサイズが小さい 元のテストケースと同じコードカバレッジ
15
概要
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackGenerating Succinct Test Cases using Don’t Care Analysis
・テストケースを生成する手法・抽象的にパスの制約を収集しながら、 プログラム内のすべてのパスを探索する・制約ソルバーを用いて制約を満たす 入力値を生成する 制約ソルバー:変数の適合する範囲値を求める機能
16
Symbolic Execution(記号実行 ) の概要
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackGenerating Succinct Test Cases using Don’t Care Analysis
論文: Fig2 引用
■テストケース生成例
17
テストケース生成例
1 // PC: c[i] == i2 char c[100];3 unsigned char i = 0;4 c[0] = 0;5 c[1] = 0; // don’t care6 ... // don’t care7 c[99] = 0; // don’t care8 foo(i, c);
Listing 2: Generated Test Case 01.
1 // PC: c[i] != i && c[i] == i+12 char c[100];3 unsigned char i = 1;4 c[0] = 0; // don’t care5 c[1] = 2;6 ... // don’t care7 c[99] = 0; // don’t care8 foo(i, c);
Listing 3: Generated Test Case 02.
1 // PC: c[i] != i && c[i] != i+12 char c[100];3 unsigned char i = 0;4 c[0] = 2;5 c[1] = 0; // don’t care6 ... // don’t care7 c[99] = 0; // don’t care8 foo(i, c);
Listing 4: Generated Test Case 03.
1234
102103
1234
102103
1234
102103
それぞれのテストケースで、 99/103 行がパス条件等は無関係→無視できる
Don’t Care Analysis では、この変数を無視する→無駄な代入文を除去できる
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackGenerating Succinct Test Cases using Don’t Care Analysis
18
Don’t Care Analysis の概要
Don’t Care Analysis をビットベクトルとSMTソルバーへ統合
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackGenerating Succinct Test Cases using Don’t Care Analysis
論文: Fig3 引用
論文: Fig5 引用
①変換された簡略化式に影響しないどうでも良い変数 を探す ↓② boolean リテラルの CNF式に変換された簡略化式 から、どうでも良いセットを検索する(DCCSEACH) ↓③局所的な最大セットを検索する L(MSEARCH)
19
Don’t Care Analysis の概要
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackGenerating Succinct Test Cases using Don’t Care Analysis
・ Don’t Care Analysis を KLEE symbolic executor のプラグインとして実装 - STP や KLEE の SMTソルバーの一部として統合・ DCCSearch と LMSearch は SAT エンジンに実装
・素のテストケース生成アルゴリズムに比べて、 1/50 のテストケースが生成できた
20
まとめ
SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackGenerating Succinct Test Cases using Don’t Care Analysis