icst 2015 まるわかりday 論文紹介:perspectives on white box testing

Post on 13-Aug-2015

312 Views

Category:

Engineering

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Perspectives on White-Box Testing: Coverage,Concurrency, and Concolic Execution

著者 Azadeh Farzan, Andreas Holzer, Helmut Veith

紹介者: うえつきけいじICST 2015 まるわかり Day 論文紹介

背景近年 Concolic Testing 技術によるホワイトボックステストが盛り上がっている

ツールもいっぱいある– http://mit.bme.hu/~

micskeiz/pages/code_based_test_generation.html

2

Concolic Testing の活用A. バグ検出B. 全数探索C. 部分探索

B ができるのが理想であるが、ソフトウェア規模が大きくなると非現実的よって A の活用がすすんでいるC には課題あり

3

部分探索の課題• 探索の網羅性と実行リソース・時間のト

レードオフを制御する手段が必要

• 探索アルゴリズムは網羅結果を報告し、ユーザが探索戦略を調整できること

4

2つの取組みテスト仕様(=探索したい対象)を厳密に記述できるクエリ言語を開発し、探索する空間を制御できる仕組みを構築

並行(マルチスレッド)プログラムにたいする Concolic Testing の拡張技術を開発。探索戦略の柔軟な調整が可能

5

クエリによるテストケースの選択

http://forsyte.at/download/ase-slides.pdf より抜粋

データベースから SQL によってデータを取り出すように、

ソースコードからクエリ(※)によってテストケースを取り出す

※ FQL: FShell Query Language

6

テスト仕様としてのクエリテストしたい関心ごとを記載する

すべてのブランチを実行する

関数 foo のすべてのステートメントを実行する

10 行目を実行した後 j > 0 を満足するすべてのステートメントを実行する

抽象的

具体的

7

FQL の文法単純な文法、正規表現による拡張性

cover @CONDITIONEDGE

cover @BASICBLOCKENTRY & @FUNC(foo)

cover @BASICBLOCKENTRY passing ˆ(@LINE(10).{j>0}+NOT(@LINE(10))) $∗

すべてのブランチを実行する

関数 foo のすべてのステートメントを実行する

10 行目を実行した後 j > 0 を満足するすべてのステートメントを実行する

8

FQA 実行のしくみ2つの実行環境を開発した

FShell

CPA/Tiger

9

CPA/Tiger述語抽象化法( Predicate Abstraction )を利用したモデル検査にもとづくアーキテクチャ

FShell有界モデル検査( Bounded Model Checking)にもとづくアーキテクチャ

10

(Con)2 Colic Testing造語です。

Symbolic + Concrete Testing → Concolic Testing

Concolic + Concurrent Testing → (Con)2 colic Testing

11

(Con)2 Colic Testing並列実行プログラムにたいするConcolic Testing の拡張

http://forsyte.at/wp-content/uploads/fse13-presentation.pdf より抜粋 12

実行の流れ

1.スレッド個別に Concolic Testing を実行2.スレッド間の干渉を発見したら、探索パス空間に組み込み

1,2を繰り返すことで段階的に探索パス空間を拡張する

http://forsyte.at/wp-content/uploads/fse13-presentation.pdf より抜粋 13

3スレッドプログラムの例グローバル変数: x,yローカル変数: z

http://forsyte.at/wp-content/uploads/fse13-presentation.pdf より抜粋 14

各スレッドへの Concolic Testing 実行

グローバル変数: x,yローカル変数: z

未達パス未達パスhttp://forsyte.at/wp-content/uploads/fse13-presentation.pdf より抜粋

15

干渉の検出グローバル変数: x,yローカル変数: z

干渉を発見!

http://forsyte.at/wp-content/uploads/fse13-presentation.pdf より抜粋

16

探索パスへの組み込み

http://forsyte.at/wp-content/uploads/fse13-presentation.pdf より抜粋

17

再び Concolic Testing 実行

http://forsyte.at/wp-content/uploads/fse13-presentation.pdf より抜粋

さっき未達だったところが通った!そしてスレッ

ド A との干渉を検出した!

18

2回の干渉を組み込んだ結果

http://forsyte.at/wp-content/uploads/fse13-presentation.pdf より抜粋

19

ツール• FShell– http://forsyte.at/software/fshell/

• CPA/Tiger– http://forsyte.at/software/cpatiger/

• CONCREST– C 言語向け Concolic Testing Tool である CREST を

(Con)2 Colic に拡張– http://forsyte.at/software/concrest/

20

top related