21
ICST 2015 Symbolic Execution Track SIGSTJ_ICST2015 ままままま Day 1 2015.7.4 ままま まま ま SIGSTJ_ICST2015 ままままま Day!_Symbolic Execution Track

ICST 2015 まるわかりDay! "Symbolic Execution Track"

  • Upload
    sigstj

  • View
    347

  • Download
    1

Embed Size (px)

Citation preview

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

・生成されたテストケースやテスト結果を 扱いやすくする、見やすくするということに 焦点を当てているのが興味深い。・今後汎用的に使えるようになるのを期待する。

21

所感

SIGSTJ_ICST2015 まるわかり Day!_Symbolic Execution TrackGenerating Succinct Test Cases using Don’t Care Analysis