モデル検査入門 #wacate

Kinji Akemine
Kinji AkemineSoftware Test Engineer, Software Test Architect and Software Test Automater.
+ 
モデル検査入門 
〜自動設計検証技術の世界〜 
WACATE実行委員朱峰錦司@kjstylepp
+ 自己紹介 
 所属 
 某豊洲のSIer勤務 
 〜2014.3 
 テストプロセスおよびツールの研究開発 
 2014.4〜 
 アジャイルプロセスおよびツールの研究開発 
 WACATE実行委員会 
 テスト自動化研究会 
 Nippon Enterprise Agile Transformation 
 専門 
 テスト分析・設計方法論 
 スクラム 
2 
WACATE 2014 Winter 2014/12/06
+ 【宣伝1】テスト自動化研究会 
隔月でオフライン研究会を実施中 
 https://sites.google.com/site/testautomationresearch/ 
活動内容 
 本読み/翻訳 
 ツール紹介 
 カンファレンス運営 
 スキル標準整備…etc 
3 
WACATE 2014 Winter 2014/12/06
+ 【宣伝2】チョットデキルTシャツ 
ワタシハソフトウェアテストチョットデキル 
 https://suzuri.jp/miwa719/96277/t-shirt/s/white 
4 
ダイエットに失敗しても 
問題なし! 
WACATE 2014 Winter 2014/12/06
+ 【宣伝3】チョットデキルTシャツ2 
ほんの1時間前に新作が 
 https://suzuri.jp/miwa719/130755/t-shirt/m/lightpink 
5 
女性にもオススメ 
WACATE 2014 Winter 2014/12/06
+ 本講義の目的 
モデル検査技術について以下を理解する 
 動的テストの違い 
 できること&できないこと 
 使い所 
 検査の粒度とツールの種類 
オプション目標 
 ツールデモの再現 
6 
WACATE 2014 Winter 2014/12/06
+ 目次 
1. 設計に対する「テスト」 
2. モデル 
3. モデル検査 
4. モデル検査の実施例 
5. 活用ポイント 
6. 様々なモデル検査ツール 
7. まとめ 
7 
WACATE 2014 Winter 2014/12/06
+ 
1. 設計に対する「テスト」 
WACATE 2014 Winter 2014/12/06 
8
+ 1.1. 開発プロセスにおけるテスト 
テスト(testing)の定義by JSTQB 
9 
 全てのライフサイクルを通じて実施する静的、動的なプ 
ロセスにおいて、成果物が特定の要件を満足するかを判 
定し、目的に合致することを実証し、欠陥を見つけるた 
め、ソフトウェアプロダクトや関連成果物に対し、計画、 
準備、評価をすること。 
WACATE 2014 Winter 2014/12/06
+ 
1.2. 狭義/広義のテスト 
要件 
定義 
レビューレビューレビュー 
ソース 
コード 
設計実装テスト 
要件 
定義書 
狭義のテスト 
設計書 
静的解析 
 実装後の「テスト」工程を指すことが多い 
広義のテスト 
ソース 
コード 
(修正) 
 実装以前工程の「レビュー」や「静的解析」も含む 
10 
テスト 
結果 
モデル検査もここ 
WACATE 2014 Winter 2014/12/06
+ 1.3. レビューの種類 
様々な種類が存在 
 インスペクション 
 テクニカルレビュー 
 ウォークスルー 
レビューにおける指摘 
 表現不備 
 設計不備…etc 
11 
詳しくは明日の 
レビューセッションで!! 
WACATE 2014 Winter 2014/12/06
+ 1.4. レビューの自動化 
表現不備の発見 
 文法 
 ゆらぎ 
Microsoft Wordによるチェック 
設計(実装)不備発見 
 漏れ 
 誤り 
12 
Eclipseによるチェック 
WACATE 2014 Winter 2014/12/06
+ 1.5. モデル検査 
レビューの自動化技術の一種 
 レビュー対象は「モデル」 
2章で解説 
 モデルが「仕様」を満たすかどうかを「検査」 
13 
3章で解説 
WACATE 2014 Winter 2014/12/06
+ 
2. モデル 
WACATE 2014 Winter 2014/12/06 
14
+ 2.1. モデルとは 
15 
開発対象のシステム(=テスト対象)の振る舞い 
や性質を特定の観点で抽象化して表現したもの 
状態遷移モデル 
アクティビティモデル 
WACATE 2014 Winter 2014/12/06
+ 2.2. モデルの種類 
様々な観点によるモデリング手法が存在 
 状態遷移モデル 
 論理モデル 
 組合せモデル 
 フローモデル 
 代数モデル 
 統計モデル…etc 
16 
WACATE 2014 Winter 2014/12/06
+ 2.3. モデルを扱う際の注意点 
17 
ひとつのモデルで全て仕様を表現するのは不可能 
 無理に様々な情報を込めようとすると肥大化 
 可読性の低下 
 変更容易性の低下 
観点を絞ったシンプルな抽象化が重要 
 データモデルの状態変化に着目 
 性能の変化に着目…etc 
WACATE 2014 Winter 2014/12/06
+ 2.4. 状態遷移モデル(1/3) 
18 
システムの状態変化に着目してシステムの振る舞 
いをモデリング 
 モデル検査は状態遷移を検査対象とすることが多い 
構成要素 
 様々な書き方が存在 
 基本的な構成要素は以下の通り 
事前状態 
変数:x,y 
事後状態 
変数:x,y 
イベント[遷移条件] 
/アクション 
WACATE 2014 Winter 2014/12/06
+ 2.4. 状態遷移モデル(2/3) 
構成要素 
19 
構成要素説明 
状態ある時点でのシステムの状態を表現。 
初期状態特殊な状態。モデルで表現したい状態遷移の 
開始時点を表現。 
終了状態特殊な状態。モデルで表現したい状態遷移の 
終了時点を表現。なくてもよい。 
状態変数状態の細かなバリエーションを表現するため 
の変数。アクションによって変化する。 
イベント状態遷移が発生するきっかけ。 
遷移条件状態遷移の分岐条件。 
アクション状態遷移の結果、システムに発生する状態遷 
移以外の変化。なくてもよい。 
WACATE 2014 Winter 2014/12/06
+ 2.4. 状態遷移モデル(3/3) 
会員システムの例 
20 
WACATE 2014 Winter 2014/12/06
+ 
3. モデル検査 
WACATE 2014 Winter 2014/12/06 
21
+ 3.1. モデル検査とは 
22 
モデルが「仕様」を満たしているかどうかを検査 
満たさない場合、具体的な満たさない振る舞いの 
パターン=反例を示す 
WACATE 2014 Winter 2014/12/06
+ 3.2. モデル検査のイメージ 
会員システムの例(再掲) 
23 
WACATE 2014 Winter 2014/12/06
+ 3.2.1. 検査したい仕様 
24 
「会員はアカウントロックのままにはならない」 
 アカウントロック状態になったらそのうち別状態になる 
この仕様は満たされない 
 アカウントロック状態から抜け出すには明示的にロック 
解除イベントが必要 
 ロック解除イベントが実施されない場合、アカウント 
ロック状態のまま 
WACATE 2014 Winter 2014/12/06
+ 3.2.2. 検査の仕方 
25 
イベント(会員の行動)を発生する状態遷移モデ 
ルを作成 
「ロック解除をする」か 
「何もしない」をランダムに実行 
WACATE 2014 Winter 2014/12/06
+ 3.2.3. 2つの状態遷移モデルが連動 
26 
互いにイベントを 
通知しあって状態遷移 
WACATE 2014 Winter 2014/12/06
+ 3.2.4. ロックが解除されるフロー 
27 
WACATE 2014 Winter 2014/12/06
+ 3.2.5. ロックが解除されないフロー(反例) 
28 
11で10と同じアクションを実行 
した結果状態変化なし 
→ロック解除しないループが存在 
WACATE 2014 Winter 2014/12/06
+ 3.2.6. モデル検査ツールがやること 
29 
3.2.4.や3.2.5.のような遷移パターンを自動で網 
羅的に探索 
網羅した結果、3.2.5のような反例があれば提示 
 反例がない場合は仕様を満たす 
WACATE 2014 Winter 2014/12/06
+ 3.3. ところで「仕様」とは? 
なんでも検査できるわけではない 
時相論理で表現可能なものを扱うことが多い 
 時間の概念を取り入れた論理表現 
 基本的には以下の3種類 
 常にxxxだ 
 常にラーメンが食べたい 
 いつかxxxになる 
 いつかラーメンが食べたくなる 
 xxxになるまでyyyだ 
 ラーメンを食べるまではラーメンが食べたい 
30 
WACATE 2014 Winter 2014/12/06
+ 小演習:プチモデル検査をしてみよう 
31 
一度ラーメンを食べたくなったら永久にラーメン 
を食べたい 
塩ラーメン 
が食べたい 
醤油ラーメン 
が食べたい 
何も食べた 
くない 
WACATE 2014 Winter 2014/12/06
+ 小演習:プチモデル検査をしてみよう 
いつかラーメンを食べたくなる 
32 
何も食べた 
くない 
醤油ラーメン 
が食べたい 
チャーハン 
が食べたい 
WACATE 2014 Winter 2014/12/06
+ 小演習:プチモデル検査をしてみよう 
塩ラーメンを食べたくなったら必ずいつか醤油 
ラーメンを食べたくなる 
33 
何も食べた 
くない 
醤油ラーメン 
が食べたい 
塩ラーメン 
食べたい 
WACATE 2014 Winter 2014/12/06
+ 小演習:プチモデル検査をしてみよう 
塩ラーメンを食べたくなったら必ずいつか醤油 
ラーメンを食べたくなる 
34 
何も食べた 
くない 
醤油ラーメン 
が食べたい 
塩ラーメン 
食べたい 
WACATE 2014 Winter 2014/12/06
+ 
3.4. 動的テストとの比較 
互いにメリット/デメリットがある 
モデル検査動的テスト 
網羅性網羅的部分的 
厳密性厳密不確実 
容易性難易 
検査対象の規模小規模大規模 
利用実績少多 
35 
モデル検査の優位な点が要求される局面が使い所 
となる 
WACATE 2014 Winter 2014/12/06
+ 3.5. モデル検査の種類 
設計モデル検査 
36 
 主に先述の例のような相互作用する状態遷移モデルに対 
して検査を実施 
実装モデル検査 
 主にマルチスレッドなソースコードの実行パターンに対 
して検査を実施 
WACATE 2014 Winter 2014/12/06
+ 
4. モデル検査の実践例 
WACATE 2014 Winter 2014/12/06 
37
+ 4.1. 設計モデル検査の例 
Spin 
 もっとも古典的で有名なモデル検査ツールのひとつ 
 日本語で得られるモデル検査ツールの情報の大半はSpin 
 状態遷移モデルをPromelaという 
C Likeな独自言語で記述 
 文法が少し似ているだけ 
 パラダイムは全く別 
38 
WACATE 2014 Winter 2014/12/06
+ 4.1.1. 例題 
競合を起こす簡単な並行システム 
39 
mtype = {LOCKED, UNLOCKED}; 
mtype mutex = UNLOCKED; 
int cnt = 0; 
inline lock() { 
ロックを管理する共有変数 
mutex == UNLOCKED -> mutex = LOCKED 
} 
inline unlock() { 
ロック判定と状態遷移の間の 
mutex = UNLOCKED 
タ} 
イミングで競合が起こる 
active[3] proctype LockUnlock() { 
again: 
lock(); 
cnt ++; 
assert(cnt == 1); 
cnt --; 
unlock(); 
goto again 
} 
ロックされてなければロックする 
ロックしている場合はブロック 
インクリメントを確認 
WACATE 2014 Winter 2014/12/06
+ 4.1.2. モデル検査の実施 
プロセス間競合を起こすパターンを検出 
40 
0: proc - (:root:) creates proc 0 (LockUnlock) 
0: proc - (:root:) creates proc 1 (LockUnlock) 
0: proc - (:root:) creates proc 2 (LockUnlock) 
1: proc 2 (LockUnlock:1) sample.pml:6 (state 1)[((mutex==UNLOCKED))] 
2: proc 0 (LockUnlock:1) sample.pml:6 (state 1)[((mutex==UNLOCKED))] 
3: proc 2 (LockUnlock:1) sample.pml:6 (state 2)[mutex = LOCKED] 
4: proc 0 (LockUnlock:1) sample.pml:6 (state 2)[mutex = LOCKED] 
5: proc 2 (LockUnlock:1) sample.pml:17 (state 4) [cnt = (cnt+1)] 
6: proc 0 (LockUnlock:1) sample.pml:17 (state 4) [cnt = (cnt+1)] 
spin: sample.pml:18, Error: assertion violated 
spin: text of failed assertion: assert((cnt==1)) 
#processes: 3 
7: proc 2 (LockUnlock:1) sample.pml:18 (state 5) 
7: proc 1 (LockUnlock:1) sample.pml:5 (state 3) 
7: proc 0 (LockUnlock:1) sample.pml:18 (state 5) 
3 processes created 
mutexの状態変化の前に連続して 
UNLOCKED判定が行われるとダ 
メ! 
WACATE 2014 Winter 2014/12/06
+ 4.2. 実装モデル検査の例 
Java Path Finder 
41 
 NASAが宇宙探索機ソフトウェアの検証のために開発し 
たJavaプログラムの検査ツール 
 statement実行ごとに状態を記録/仕様の充足を確認 
 OKなら次に起こり得る状態の一覧を作成したうえで、深さ優先探 
索で次の実行パターンを検査 
 NGならそこに至る実行過程を反例として示す 
WACATE 2014 Winter 2014/12/06
+ 4.2.1. 例題 
スレッド競合を起こす簡単なプログラム 
42 
public class Sample implements Runnable { 
static int sharedData = 0; 
public void run() { 
int tmp = sharedData; 
sharedData += 1; 
assert(tmp + 1 == sharedData); 
} 
public static void main(String args[]) { 
このタイミングで他のスレッドで 
インクリメントされると例外発生! 
int size = Integer.parseInt(args[0]); 
Sample instance = new Sample(); 
for(int i = 0; i < size; i++) { 
共有変数をインクリメント 
Thread thread = new Thread(instance); 
thread.start(); 
} 
} 
} 
共有変数 
インクリメントを確認 
WACATE 2014 Winter 2014/12/06
+ 4.2.2. モデル検査の実施 
スレッド競合を起こすパターンを検出 
43 
====================================================== error 1 
gov.nasa.jpf.vm.NoUncaughtExceptionsProperty 
java.lang.AssertionError 
at Sample.run(Sample.java:7) 
====================================================== snapshot #1 
thread java.lang.Thread:{id:2,name:Thread-2,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0} 
call stack: 
at Sample.run(Sample.java:7) 
thread java.lang.Thread:{id:3,name:Thread-3,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0} 
call stack: 
at Sample.run(Sample.java:7) 
2つのスレッドが同時に7行目 
(assert)を実行するとダメ! 
====================================================== results 
error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.AssertionError at Sample.run(Sample.jav...“ 
WACATE 2014 Winter 2014/12/06
+ 
5. 活用のポイント 
WACATE 2014 Winter 2014/12/06 
44
+ 5.1. 使い所 
モデル検査の優位性 
 網羅性 
 厳密性 
網羅性が求められる局面 
45 
 複雑な非同期/並行システムにおいて、レアケースを特 
定するような検査 
厳密性が求められる局面 
 障害によって人命や巨額な資産を損なうようなシステム 
の検査 
WACATE 2014 Winter 2014/12/06
+ 5.2. 注意点 
計算量の爆発 
46 
 遷移パターンが発散するようなモデルを書くとすぐに状 
態爆発をして検査が終わらなくなる 
 関心ごとを絞ったシンプルなモデリングを行う 
モデルおよび仕様の実装誤り 
 設計を忠実に再現した(検査可能な)モデルや仕様を書 
くのがそもそも困難 
 Try & Errorを繰り返しながら洗練させていくしかない 
WACATE 2014 Winter 2014/12/06
+ (参考)JavaPathFinderの計算量 
3スレッド 
31状態作って10個探索して終了 
====================================================== statistics 
elapsed time: 00:00:00 
states: new=31,visited=10,backtracked=21,end=6 
search: maxDepth=20,constraints=0 
choice generators: thread=30 (signal=0,lock=3,sharedRef=12,threadApi=3,reschedule=12), data=0 
heap: new=394,released=139,maxLive=367,gcCycles=28 
instructions: 4022 
max memory: 123MB 
15スレッド 
32,875状態作って213,010個探索してやっと終了 
====================================================== statistics 
elapsed time: 00:00:18 
states: new=32875,visited=213010,backtracked=245781,end=18 
search: maxDepth=104,constraints=0 
choice generators: thread=32874 (signal=0,lock=15,sharedRef=60,threadApi=15,reschedule=32784), data=0 
heap: new=478,released=983323,maxLive=415,gcCycles=245824 
instructions: 4183958 
max memory: 353MB 
100スレッド 
 まぁムリムリ\(^o^)/ 
47 
WACATE 2014 Winter 2014/12/06
+ 
6. 様々なモデル検査ツール 
WACATE 2014 Winter 2014/12/06 
48
+ 6.1. Alloy 
この頃流行りのモデル検査ツール 
集合と制約によってモデルを記述 
 文法が(比較的)直感的 
反例の表示もグラフィカルでわかりやすい 
49 
WACATE 2014 Winter 2014/12/06
+ 6.2. CBMC 
C/C++のモデル検査 
 gccおよびVisualStudioで動作 
コードに対して以下を検査可能 
 配列溢れ 
 ポインタの安全性 
 例外の発生やユーザ定義のアサーション 
50 
WACATE 2014 Winter 2014/12/06
+ 6.3. ESC/Java 
Javaのモデル検査 
51 
JMLによってアノテーションとして定義された仕 
様を検査可能 
 JML:Java Modeling Language 
 Java向けの契約プログラミングツール 
 各メソッドの事前/事後条件や普遍条件を記述 
 実行時に条件違反を検知 
 ESC/JavaはJML違反をプログラムの実行時ではなく静 
的解析によって検査 
WACATE 2014 Winter 2014/12/06
+ (参考)JMLの例 
52 
public class BankingExample { 
public static final int MAX_BALANCE = 1000; 
private /*@ spec_public @*/ int balance; 
//@ public invariant balance >= 0 && balance <= MAX_BALANCE; 
//@ assignable balance; 
//@ ensures balance == 0; 
public BankingExample() { 
this.balance = 0; 
} 
普遍条件 
事後条件 
//@ requires 0 < amount && amount + balance < MAX_BALANCE; 
//@ assignable balance; 
//@ ensures balance == ¥old(balance) + amount; 
public void credit(final int amount) { 
this.balance += amount; 
} 
} 
事前条件 
WACATE 2014 Winter 2014/12/06
+ 
7. まとめ 
WACATE 2014 Winter 2014/12/06 
53
+ 7.1. モデル検査 
レビューの自動化技術の一種 
 振る舞いの妥当性を検査 
検査対象は主に状態遷移モデル 
 相互作用する状態遷移モデル 
 マルチスレッドプログラムの実行状態パターン 
検査仕様は主に時相論理 
 常にxxxだ 
 いつかxxxになる 
 xxxになるまでyyyだ 
54 
WACATE 2014 Winter 2014/12/06
+ 7.2. モデル検査の活用 
動的テストとの違い 
モデル検査動的テスト 
網羅性網羅的部分的 
厳密性厳密不確実 
容易性難易 
検査対象の規模小規模大規模 
利用実績少多 
網羅性や厳密性が求められる局面で活用 
55 
活用の際は状態爆発に気をつけながら段階的にモ 
デルを洗練させていく 
WACATE 2014 Winter 2014/12/06
+Let’s Modeling! 
2014/12/06 WACATE 2014 Winter
1 of 56

Recommended

分散システムの限界について知ろう by
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろうShingo Omura
33.7K views60 slides
SAT/SMTソルバの仕組み by
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
36.7K views51 slides
トランザクションの設計と進化 by
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化Kumazaki Hiroki
71.4K views61 slides
PlaySQLAlchemy: SQLAlchemy入門 by
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門泰 増田
21.4K views91 slides
クラスタリングとレコメンデーション資料 by
クラスタリングとレコメンデーション資料クラスタリングとレコメンデーション資料
クラスタリングとレコメンデーション資料洋資 堅田
10.2K views85 slides
CRDT in 15 minutes by
CRDT in 15 minutesCRDT in 15 minutes
CRDT in 15 minutesShingo Omura
3.4K views16 slides

More Related Content

What's hot

PHPからgoへの移行で分かったこと by
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったことgree_tech
6.4K views39 slides
自動定理証明の紹介 by
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介Masahiro Sakai
8.3K views23 slides
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S... by
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...joisino
232 views24 slides
Python 3.9からの新定番zoneinfoを使いこなそう by
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
6.9K views42 slides
Linux女子部 systemd徹底入門 by
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Etsuji Nakai
137.9K views50 slides
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮 by
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮Hibino Hisashi
13.6K views40 slides

What's hot(20)

PHPからgoへの移行で分かったこと by gree_tech
PHPからgoへの移行で分かったことPHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech6.4K views
自動定理証明の紹介 by Masahiro Sakai
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
Masahiro Sakai8.3K views
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S... by joisino
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...
Private Recommender Systems: How Can Users Build Their Own Fair Recommender S...
joisino232 views
Python 3.9からの新定番zoneinfoを使いこなそう by Ryuji Tsutsui
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui6.9K views
Linux女子部 systemd徹底入門 by Etsuji Nakai
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai137.9K views
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮 by Hibino Hisashi
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
Hibino Hisashi13.6K views
30分で分かる!OSの作り方 by uchan_nos
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
uchan_nos40.3K views
Docker入門 - 基礎編 いまから始めるDocker管理 by Masahito Zembutsu
Docker入門 - 基礎編 いまから始めるDocker管理Docker入門 - 基礎編 いまから始めるDocker管理
Docker入門 - 基礎編 いまから始めるDocker管理
Masahito Zembutsu76.4K views
分散システムについて語らせてくれ by Kumazaki Hiroki
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
Kumazaki Hiroki119.4K views
本当は恐ろしい分散システムの話 by Kumazaki Hiroki
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
Kumazaki Hiroki686.1K views
エンジニアの個人ブランディングと技術組織 by Takafumi ONAKA
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA23.3K views
統計的因果推論への招待 -因果構造探索を中心に- by Shiga University, RIKEN
統計的因果推論への招待 -因果構造探索を中心に-統計的因果推論への招待 -因果構造探索を中心に-
統計的因果推論への招待 -因果構造探索を中心に-
例外設計における大罪 by Takuto Wada
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada68.5K views
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~ by Miki Shimogai
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
Miki Shimogai118.6K views
[DL輪読会]機械学習におけるカオス現象について by Deep Learning JP
[DL輪読会]機械学習におけるカオス現象について[DL輪読会]機械学習におけるカオス現象について
[DL輪読会]機械学習におけるカオス現象について
Deep Learning JP3K views
初心者向けCTFのWeb分野の強化法 by kazkiti
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti 15.8K views
世界一わかりやすいClean Architecture by Atsushi Nakamura
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura47.1K views
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 by Preferred Networks
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜
PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜

Viewers also liked

ボクらのプロセスにきづこう #wacate by
ボクらのプロセスにきづこう #wacateボクらのプロセスにきづこう #wacate
ボクらのプロセスにきづこう #wacateToshiyuki Kawanishi
3.7K views45 slides
レビュー方法を勉強してみよう by
レビュー方法を勉強してみようレビュー方法を勉強してみよう
レビュー方法を勉強してみようMasaki Nakahara
4.2K views37 slides
クラシフィケーション・ツリー法入門 by
クラシフィケーション・ツリー法入門クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門H Iseri
21.9K views44 slides
はじめよう!レビューのいろは by
はじめよう!レビューのいろははじめよう!レビューのいろは
はじめよう!レビューのいろはscarletplover
4.2K views81 slides
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta by
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfestay_taka_23
9.8K views60 slides
Alloy ではじめる簡単モデル検査 by
Alloy ではじめる簡単モデル検査Alloy ではじめる簡単モデル検査
Alloy ではじめる簡単モデル検査y_taka_23
2.9K views10 slides

Viewers also liked(7)

ボクらのプロセスにきづこう #wacate by Toshiyuki Kawanishi
ボクらのプロセスにきづこう #wacateボクらのプロセスにきづこう #wacate
ボクらのプロセスにきづこう #wacate
Toshiyuki Kawanishi3.7K views
レビュー方法を勉強してみよう by Masaki Nakahara
レビュー方法を勉強してみようレビュー方法を勉強してみよう
レビュー方法を勉強してみよう
Masaki Nakahara4.2K views
クラシフィケーション・ツリー法入門 by H Iseri
クラシフィケーション・ツリー法入門クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門
H Iseri21.9K views
はじめよう!レビューのいろは by scarletplover
はじめよう!レビューのいろははじめよう!レビューのいろは
はじめよう!レビューのいろは
scarletplover4.2K views
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta by y_taka_23
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
y_taka_239.8K views
Alloy ではじめる簡単モデル検査 by y_taka_23
Alloy ではじめる簡単モデル検査Alloy ではじめる簡単モデル検査
Alloy ではじめる簡単モデル検査
y_taka_232.9K views
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス by Nozomi Ito
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
Nozomi Ito22.4K views

Similar to モデル検査入門 #wacate

C# から java へのプログラム移植で体験したtddの効果は? by
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?Shinichi Hirauchi
4.9K views89 slides
Spock's world by
Spock's worldSpock's world
Spock's worldTakuma Watabiki
4.4K views41 slides
Hilを使った形式リアルタイム検証 by
Hilを使った形式リアルタイム検証Hilを使った形式リアルタイム検証
Hilを使った形式リアルタイム検証Toshiyuki Fujikura
1.3K views25 slides
Introduction to Continuous Test Runner MakeGood by
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodAtsuhiro Kubo
1.2K views39 slides
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate by
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateテスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateKinji Akemine
20.2K views53 slides
ワンクリックデプロイ101 #ocdeploy by
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployRyutaro YOSHIBA
12.9K views123 slides

Similar to モデル検査入門 #wacate(20)

C# から java へのプログラム移植で体験したtddの効果は? by Shinichi Hirauchi
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
Shinichi Hirauchi4.9K views
Hilを使った形式リアルタイム検証 by Toshiyuki Fujikura
Hilを使った形式リアルタイム検証Hilを使った形式リアルタイム検証
Hilを使った形式リアルタイム検証
Toshiyuki Fujikura1.3K views
Introduction to Continuous Test Runner MakeGood by Atsuhiro Kubo
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
Atsuhiro Kubo1.2K views
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate by Kinji Akemine
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateテスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
Kinji Akemine20.2K views
ワンクリックデプロイ101 #ocdeploy by Ryutaro YOSHIBA
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
Ryutaro YOSHIBA12.9K views
JaSST16tokyo tm_koyama by ryuji koyama
JaSST16tokyo tm_koyamaJaSST16tokyo tm_koyama
JaSST16tokyo tm_koyama
ryuji koyama360 views
関西Php勉強会のlimeの話 by Hisateru Tanaka
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
Hisateru Tanaka1.4K views
Getting Started with Testing using PHPUnit by Atsuhiro Kubo
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
Atsuhiro Kubo1.2K views
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013 by Kinji Akemine
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
Kinji Akemine41.8K views
Automation test.ssf alpha by ryuji koyama
Automation test.ssf alphaAutomation test.ssf alpha
Automation test.ssf alpha
ryuji koyama23K views
111008 silverlight square_datavalidation by Takayoshi Tanaka
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
Takayoshi Tanaka792 views
タダで始めるテストファースト入門 ~ C# Express + NUnit by Yasuhiko Yamamoto
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto3.3K views
60分でわかった気になるISO29119 #wacate by Kinji Akemine
60分でわかった気になるISO29119 #wacate60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacate
Kinji Akemine19.5K views
システムテスト自動化標準ガイド 5章発表資料 by Masatoshi Itoh
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
Masatoshi Itoh2.7K views
ビジネス的に高価値なアジャイルテスト by Tsutomu Chikuba
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
Tsutomu Chikuba2.1K views
開発もQAも自動テスト!「LOST JUDGMENT:裁かれざる記憶」のQAテスター参加で進化した「テスト自動化チーム(仮)」の取り組みについて by SEGADevTech
開発もQAも自動テスト!「LOST JUDGMENT:裁かれざる記憶」のQAテスター参加で進化した「テスト自動化チーム(仮)」の取り組みについて開発もQAも自動テスト!「LOST JUDGMENT:裁かれざる記憶」のQAテスター参加で進化した「テスト自動化チーム(仮)」の取り組みについて
開発もQAも自動テスト!「LOST JUDGMENT:裁かれざる記憶」のQAテスター参加で進化した「テスト自動化チーム(仮)」の取り組みについて
SEGADevTech713 views
1時間で分かるSTA (Software Test Automation) #stac2014 by Kazuhiro Suzuki
1時間で分かるSTA (Software Test Automation) #stac20141時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac2014
Kazuhiro Suzuki175.7K views
Continuous delivery chapter4 by favril1
Continuous delivery chapter4Continuous delivery chapter4
Continuous delivery chapter4
favril1536 views

More from Kinji Akemine

WACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacate by
WACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacateWACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacate
WACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacateKinji Akemine
3.9K views66 slides
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate by
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacateWACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacateKinji Akemine
3.4K views48 slides
テストの視点からのモデリング(公開用) #wacate by
テストの視点からのモデリング(公開用) #wacateテストの視点からのモデリング(公開用) #wacate
テストの視点からのモデリング(公開用) #wacateKinji Akemine
4.6K views52 slides
#wacate 2017 冬 ISONO:REBOOT -評価することにこだわろう- by
#wacate 2017 冬 ISONO:REBOOT -評価することにこだわろう-#wacate 2017 冬 ISONO:REBOOT -評価することにこだわろう-
#wacate 2017 冬 ISONO:REBOOT -評価することにこだわろう-Kinji Akemine
1.6K views36 slides
ICST 2015 まるわかりDay! -Model by
ICST 2015 まるわかりDay! -ModelICST 2015 まるわかりDay! -Model
ICST 2015 まるわかりDay! -ModelKinji Akemine
1.8K views28 slides
第1回キーワード駆動テスト勉強会 by
第1回キーワード駆動テスト勉強会第1回キーワード駆動テスト勉強会
第1回キーワード駆動テスト勉強会Kinji Akemine
6.6K views21 slides

More from Kinji Akemine(9)

WACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacate by Kinji Akemine
WACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacateWACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacate
WACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacate
Kinji Akemine3.9K views
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate by Kinji Akemine
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacateWACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
Kinji Akemine3.4K views
テストの視点からのモデリング(公開用) #wacate by Kinji Akemine
テストの視点からのモデリング(公開用) #wacateテストの視点からのモデリング(公開用) #wacate
テストの視点からのモデリング(公開用) #wacate
Kinji Akemine4.6K views
#wacate 2017 冬 ISONO:REBOOT -評価することにこだわろう- by Kinji Akemine
#wacate 2017 冬 ISONO:REBOOT -評価することにこだわろう-#wacate 2017 冬 ISONO:REBOOT -評価することにこだわろう-
#wacate 2017 冬 ISONO:REBOOT -評価することにこだわろう-
Kinji Akemine1.6K views
ICST 2015 まるわかりDay! -Model by Kinji Akemine
ICST 2015 まるわかりDay! -ModelICST 2015 まるわかりDay! -Model
ICST 2015 まるわかりDay! -Model
Kinji Akemine1.8K views
第1回キーワード駆動テスト勉強会 by Kinji Akemine
第1回キーワード駆動テスト勉強会第1回キーワード駆動テスト勉強会
第1回キーワード駆動テスト勉強会
Kinji Akemine6.6K views
Astahプラグイン開発勉強会 by Kinji Akemine
Astahプラグイン開発勉強会Astahプラグイン開発勉強会
Astahプラグイン開発勉強会
Kinji Akemine8.3K views
TABOK Skill Category2解説 by Kinji Akemine
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
Kinji Akemine1.2K views
Beginning Java EE 6 勉強会(2) #bje_study by Kinji Akemine
Beginning Java EE 6 勉強会(2) #bje_studyBeginning Java EE 6 勉強会(2) #bje_study
Beginning Java EE 6 勉強会(2) #bje_study
Kinji Akemine8K views

モデル検査入門 #wacate

  • 1. + モデル検査入門 〜自動設計検証技術の世界〜 WACATE実行委員朱峰錦司@kjstylepp
  • 2. + 自己紹介  所属  某豊洲のSIer勤務  〜2014.3  テストプロセスおよびツールの研究開発  2014.4〜  アジャイルプロセスおよびツールの研究開発  WACATE実行委員会  テスト自動化研究会  Nippon Enterprise Agile Transformation  専門  テスト分析・設計方法論  スクラム 2 WACATE 2014 Winter 2014/12/06
  • 3. + 【宣伝1】テスト自動化研究会 隔月でオフライン研究会を実施中  https://sites.google.com/site/testautomationresearch/ 活動内容  本読み/翻訳  ツール紹介  カンファレンス運営  スキル標準整備…etc 3 WACATE 2014 Winter 2014/12/06
  • 4. + 【宣伝2】チョットデキルTシャツ ワタシハソフトウェアテストチョットデキル  https://suzuri.jp/miwa719/96277/t-shirt/s/white 4 ダイエットに失敗しても 問題なし! WACATE 2014 Winter 2014/12/06
  • 5. + 【宣伝3】チョットデキルTシャツ2 ほんの1時間前に新作が  https://suzuri.jp/miwa719/130755/t-shirt/m/lightpink 5 女性にもオススメ WACATE 2014 Winter 2014/12/06
  • 6. + 本講義の目的 モデル検査技術について以下を理解する  動的テストの違い  できること&できないこと  使い所  検査の粒度とツールの種類 オプション目標  ツールデモの再現 6 WACATE 2014 Winter 2014/12/06
  • 7. + 目次 1. 設計に対する「テスト」 2. モデル 3. モデル検査 4. モデル検査の実施例 5. 活用ポイント 6. 様々なモデル検査ツール 7. まとめ 7 WACATE 2014 Winter 2014/12/06
  • 8. + 1. 設計に対する「テスト」 WACATE 2014 Winter 2014/12/06 8
  • 9. + 1.1. 開発プロセスにおけるテスト テスト(testing)の定義by JSTQB 9  全てのライフサイクルを通じて実施する静的、動的なプ ロセスにおいて、成果物が特定の要件を満足するかを判 定し、目的に合致することを実証し、欠陥を見つけるた め、ソフトウェアプロダクトや関連成果物に対し、計画、 準備、評価をすること。 WACATE 2014 Winter 2014/12/06
  • 10. + 1.2. 狭義/広義のテスト 要件 定義 レビューレビューレビュー ソース コード 設計実装テスト 要件 定義書 狭義のテスト 設計書 静的解析  実装後の「テスト」工程を指すことが多い 広義のテスト ソース コード (修正)  実装以前工程の「レビュー」や「静的解析」も含む 10 テスト 結果 モデル検査もここ WACATE 2014 Winter 2014/12/06
  • 11. + 1.3. レビューの種類 様々な種類が存在  インスペクション  テクニカルレビュー  ウォークスルー レビューにおける指摘  表現不備  設計不備…etc 11 詳しくは明日の レビューセッションで!! WACATE 2014 Winter 2014/12/06
  • 12. + 1.4. レビューの自動化 表現不備の発見  文法  ゆらぎ Microsoft Wordによるチェック 設計(実装)不備発見  漏れ  誤り 12 Eclipseによるチェック WACATE 2014 Winter 2014/12/06
  • 13. + 1.5. モデル検査 レビューの自動化技術の一種  レビュー対象は「モデル」 2章で解説  モデルが「仕様」を満たすかどうかを「検査」 13 3章で解説 WACATE 2014 Winter 2014/12/06
  • 14. + 2. モデル WACATE 2014 Winter 2014/12/06 14
  • 15. + 2.1. モデルとは 15 開発対象のシステム(=テスト対象)の振る舞い や性質を特定の観点で抽象化して表現したもの 状態遷移モデル アクティビティモデル WACATE 2014 Winter 2014/12/06
  • 16. + 2.2. モデルの種類 様々な観点によるモデリング手法が存在  状態遷移モデル  論理モデル  組合せモデル  フローモデル  代数モデル  統計モデル…etc 16 WACATE 2014 Winter 2014/12/06
  • 17. + 2.3. モデルを扱う際の注意点 17 ひとつのモデルで全て仕様を表現するのは不可能  無理に様々な情報を込めようとすると肥大化  可読性の低下  変更容易性の低下 観点を絞ったシンプルな抽象化が重要  データモデルの状態変化に着目  性能の変化に着目…etc WACATE 2014 Winter 2014/12/06
  • 18. + 2.4. 状態遷移モデル(1/3) 18 システムの状態変化に着目してシステムの振る舞 いをモデリング  モデル検査は状態遷移を検査対象とすることが多い 構成要素  様々な書き方が存在  基本的な構成要素は以下の通り 事前状態 変数:x,y 事後状態 変数:x,y イベント[遷移条件] /アクション WACATE 2014 Winter 2014/12/06
  • 19. + 2.4. 状態遷移モデル(2/3) 構成要素 19 構成要素説明 状態ある時点でのシステムの状態を表現。 初期状態特殊な状態。モデルで表現したい状態遷移の 開始時点を表現。 終了状態特殊な状態。モデルで表現したい状態遷移の 終了時点を表現。なくてもよい。 状態変数状態の細かなバリエーションを表現するため の変数。アクションによって変化する。 イベント状態遷移が発生するきっかけ。 遷移条件状態遷移の分岐条件。 アクション状態遷移の結果、システムに発生する状態遷 移以外の変化。なくてもよい。 WACATE 2014 Winter 2014/12/06
  • 20. + 2.4. 状態遷移モデル(3/3) 会員システムの例 20 WACATE 2014 Winter 2014/12/06
  • 21. + 3. モデル検査 WACATE 2014 Winter 2014/12/06 21
  • 22. + 3.1. モデル検査とは 22 モデルが「仕様」を満たしているかどうかを検査 満たさない場合、具体的な満たさない振る舞いの パターン=反例を示す WACATE 2014 Winter 2014/12/06
  • 23. + 3.2. モデル検査のイメージ 会員システムの例(再掲) 23 WACATE 2014 Winter 2014/12/06
  • 24. + 3.2.1. 検査したい仕様 24 「会員はアカウントロックのままにはならない」  アカウントロック状態になったらそのうち別状態になる この仕様は満たされない  アカウントロック状態から抜け出すには明示的にロック 解除イベントが必要  ロック解除イベントが実施されない場合、アカウント ロック状態のまま WACATE 2014 Winter 2014/12/06
  • 25. + 3.2.2. 検査の仕方 25 イベント(会員の行動)を発生する状態遷移モデ ルを作成 「ロック解除をする」か 「何もしない」をランダムに実行 WACATE 2014 Winter 2014/12/06
  • 26. + 3.2.3. 2つの状態遷移モデルが連動 26 互いにイベントを 通知しあって状態遷移 WACATE 2014 Winter 2014/12/06
  • 27. + 3.2.4. ロックが解除されるフロー 27 WACATE 2014 Winter 2014/12/06
  • 28. + 3.2.5. ロックが解除されないフロー(反例) 28 11で10と同じアクションを実行 した結果状態変化なし →ロック解除しないループが存在 WACATE 2014 Winter 2014/12/06
  • 29. + 3.2.6. モデル検査ツールがやること 29 3.2.4.や3.2.5.のような遷移パターンを自動で網 羅的に探索 網羅した結果、3.2.5のような反例があれば提示  反例がない場合は仕様を満たす WACATE 2014 Winter 2014/12/06
  • 30. + 3.3. ところで「仕様」とは? なんでも検査できるわけではない 時相論理で表現可能なものを扱うことが多い  時間の概念を取り入れた論理表現  基本的には以下の3種類  常にxxxだ  常にラーメンが食べたい  いつかxxxになる  いつかラーメンが食べたくなる  xxxになるまでyyyだ  ラーメンを食べるまではラーメンが食べたい 30 WACATE 2014 Winter 2014/12/06
  • 31. + 小演習:プチモデル検査をしてみよう 31 一度ラーメンを食べたくなったら永久にラーメン を食べたい 塩ラーメン が食べたい 醤油ラーメン が食べたい 何も食べた くない WACATE 2014 Winter 2014/12/06
  • 32. + 小演習:プチモデル検査をしてみよう いつかラーメンを食べたくなる 32 何も食べた くない 醤油ラーメン が食べたい チャーハン が食べたい WACATE 2014 Winter 2014/12/06
  • 33. + 小演習:プチモデル検査をしてみよう 塩ラーメンを食べたくなったら必ずいつか醤油 ラーメンを食べたくなる 33 何も食べた くない 醤油ラーメン が食べたい 塩ラーメン 食べたい WACATE 2014 Winter 2014/12/06
  • 34. + 小演習:プチモデル検査をしてみよう 塩ラーメンを食べたくなったら必ずいつか醤油 ラーメンを食べたくなる 34 何も食べた くない 醤油ラーメン が食べたい 塩ラーメン 食べたい WACATE 2014 Winter 2014/12/06
  • 35. + 3.4. 動的テストとの比較 互いにメリット/デメリットがある モデル検査動的テスト 網羅性網羅的部分的 厳密性厳密不確実 容易性難易 検査対象の規模小規模大規模 利用実績少多 35 モデル検査の優位な点が要求される局面が使い所 となる WACATE 2014 Winter 2014/12/06
  • 36. + 3.5. モデル検査の種類 設計モデル検査 36  主に先述の例のような相互作用する状態遷移モデルに対 して検査を実施 実装モデル検査  主にマルチスレッドなソースコードの実行パターンに対 して検査を実施 WACATE 2014 Winter 2014/12/06
  • 37. + 4. モデル検査の実践例 WACATE 2014 Winter 2014/12/06 37
  • 38. + 4.1. 設計モデル検査の例 Spin  もっとも古典的で有名なモデル検査ツールのひとつ  日本語で得られるモデル検査ツールの情報の大半はSpin  状態遷移モデルをPromelaという C Likeな独自言語で記述  文法が少し似ているだけ  パラダイムは全く別 38 WACATE 2014 Winter 2014/12/06
  • 39. + 4.1.1. 例題 競合を起こす簡単な並行システム 39 mtype = {LOCKED, UNLOCKED}; mtype mutex = UNLOCKED; int cnt = 0; inline lock() { ロックを管理する共有変数 mutex == UNLOCKED -> mutex = LOCKED } inline unlock() { ロック判定と状態遷移の間の mutex = UNLOCKED タ} イミングで競合が起こる active[3] proctype LockUnlock() { again: lock(); cnt ++; assert(cnt == 1); cnt --; unlock(); goto again } ロックされてなければロックする ロックしている場合はブロック インクリメントを確認 WACATE 2014 Winter 2014/12/06
  • 40. + 4.1.2. モデル検査の実施 プロセス間競合を起こすパターンを検出 40 0: proc - (:root:) creates proc 0 (LockUnlock) 0: proc - (:root:) creates proc 1 (LockUnlock) 0: proc - (:root:) creates proc 2 (LockUnlock) 1: proc 2 (LockUnlock:1) sample.pml:6 (state 1)[((mutex==UNLOCKED))] 2: proc 0 (LockUnlock:1) sample.pml:6 (state 1)[((mutex==UNLOCKED))] 3: proc 2 (LockUnlock:1) sample.pml:6 (state 2)[mutex = LOCKED] 4: proc 0 (LockUnlock:1) sample.pml:6 (state 2)[mutex = LOCKED] 5: proc 2 (LockUnlock:1) sample.pml:17 (state 4) [cnt = (cnt+1)] 6: proc 0 (LockUnlock:1) sample.pml:17 (state 4) [cnt = (cnt+1)] spin: sample.pml:18, Error: assertion violated spin: text of failed assertion: assert((cnt==1)) #processes: 3 7: proc 2 (LockUnlock:1) sample.pml:18 (state 5) 7: proc 1 (LockUnlock:1) sample.pml:5 (state 3) 7: proc 0 (LockUnlock:1) sample.pml:18 (state 5) 3 processes created mutexの状態変化の前に連続して UNLOCKED判定が行われるとダ メ! WACATE 2014 Winter 2014/12/06
  • 41. + 4.2. 実装モデル検査の例 Java Path Finder 41  NASAが宇宙探索機ソフトウェアの検証のために開発し たJavaプログラムの検査ツール  statement実行ごとに状態を記録/仕様の充足を確認  OKなら次に起こり得る状態の一覧を作成したうえで、深さ優先探 索で次の実行パターンを検査  NGならそこに至る実行過程を反例として示す WACATE 2014 Winter 2014/12/06
  • 42. + 4.2.1. 例題 スレッド競合を起こす簡単なプログラム 42 public class Sample implements Runnable { static int sharedData = 0; public void run() { int tmp = sharedData; sharedData += 1; assert(tmp + 1 == sharedData); } public static void main(String args[]) { このタイミングで他のスレッドで インクリメントされると例外発生! int size = Integer.parseInt(args[0]); Sample instance = new Sample(); for(int i = 0; i < size; i++) { 共有変数をインクリメント Thread thread = new Thread(instance); thread.start(); } } } 共有変数 インクリメントを確認 WACATE 2014 Winter 2014/12/06
  • 43. + 4.2.2. モデル検査の実施 スレッド競合を起こすパターンを検出 43 ====================================================== error 1 gov.nasa.jpf.vm.NoUncaughtExceptionsProperty java.lang.AssertionError at Sample.run(Sample.java:7) ====================================================== snapshot #1 thread java.lang.Thread:{id:2,name:Thread-2,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0} call stack: at Sample.run(Sample.java:7) thread java.lang.Thread:{id:3,name:Thread-3,status:RUNNING,priority:5,isDaemon:false,lockCount:0,suspendCount:0} call stack: at Sample.run(Sample.java:7) 2つのスレッドが同時に7行目 (assert)を実行するとダメ! ====================================================== results error #1: gov.nasa.jpf.vm.NoUncaughtExceptionsProperty "java.lang.AssertionError at Sample.run(Sample.jav...“ WACATE 2014 Winter 2014/12/06
  • 44. + 5. 活用のポイント WACATE 2014 Winter 2014/12/06 44
  • 45. + 5.1. 使い所 モデル検査の優位性  網羅性  厳密性 網羅性が求められる局面 45  複雑な非同期/並行システムにおいて、レアケースを特 定するような検査 厳密性が求められる局面  障害によって人命や巨額な資産を損なうようなシステム の検査 WACATE 2014 Winter 2014/12/06
  • 46. + 5.2. 注意点 計算量の爆発 46  遷移パターンが発散するようなモデルを書くとすぐに状 態爆発をして検査が終わらなくなる  関心ごとを絞ったシンプルなモデリングを行う モデルおよび仕様の実装誤り  設計を忠実に再現した(検査可能な)モデルや仕様を書 くのがそもそも困難  Try & Errorを繰り返しながら洗練させていくしかない WACATE 2014 Winter 2014/12/06
  • 47. + (参考)JavaPathFinderの計算量 3スレッド 31状態作って10個探索して終了 ====================================================== statistics elapsed time: 00:00:00 states: new=31,visited=10,backtracked=21,end=6 search: maxDepth=20,constraints=0 choice generators: thread=30 (signal=0,lock=3,sharedRef=12,threadApi=3,reschedule=12), data=0 heap: new=394,released=139,maxLive=367,gcCycles=28 instructions: 4022 max memory: 123MB 15スレッド 32,875状態作って213,010個探索してやっと終了 ====================================================== statistics elapsed time: 00:00:18 states: new=32875,visited=213010,backtracked=245781,end=18 search: maxDepth=104,constraints=0 choice generators: thread=32874 (signal=0,lock=15,sharedRef=60,threadApi=15,reschedule=32784), data=0 heap: new=478,released=983323,maxLive=415,gcCycles=245824 instructions: 4183958 max memory: 353MB 100スレッド  まぁムリムリ\(^o^)/ 47 WACATE 2014 Winter 2014/12/06
  • 48. + 6. 様々なモデル検査ツール WACATE 2014 Winter 2014/12/06 48
  • 49. + 6.1. Alloy この頃流行りのモデル検査ツール 集合と制約によってモデルを記述  文法が(比較的)直感的 反例の表示もグラフィカルでわかりやすい 49 WACATE 2014 Winter 2014/12/06
  • 50. + 6.2. CBMC C/C++のモデル検査  gccおよびVisualStudioで動作 コードに対して以下を検査可能  配列溢れ  ポインタの安全性  例外の発生やユーザ定義のアサーション 50 WACATE 2014 Winter 2014/12/06
  • 51. + 6.3. ESC/Java Javaのモデル検査 51 JMLによってアノテーションとして定義された仕 様を検査可能  JML:Java Modeling Language  Java向けの契約プログラミングツール  各メソッドの事前/事後条件や普遍条件を記述  実行時に条件違反を検知  ESC/JavaはJML違反をプログラムの実行時ではなく静 的解析によって検査 WACATE 2014 Winter 2014/12/06
  • 52. + (参考)JMLの例 52 public class BankingExample { public static final int MAX_BALANCE = 1000; private /*@ spec_public @*/ int balance; //@ public invariant balance >= 0 && balance <= MAX_BALANCE; //@ assignable balance; //@ ensures balance == 0; public BankingExample() { this.balance = 0; } 普遍条件 事後条件 //@ requires 0 < amount && amount + balance < MAX_BALANCE; //@ assignable balance; //@ ensures balance == ¥old(balance) + amount; public void credit(final int amount) { this.balance += amount; } } 事前条件 WACATE 2014 Winter 2014/12/06
  • 53. + 7. まとめ WACATE 2014 Winter 2014/12/06 53
  • 54. + 7.1. モデル検査 レビューの自動化技術の一種  振る舞いの妥当性を検査 検査対象は主に状態遷移モデル  相互作用する状態遷移モデル  マルチスレッドプログラムの実行状態パターン 検査仕様は主に時相論理  常にxxxだ  いつかxxxになる  xxxになるまでyyyだ 54 WACATE 2014 Winter 2014/12/06
  • 55. + 7.2. モデル検査の活用 動的テストとの違い モデル検査動的テスト 網羅性網羅的部分的 厳密性厳密不確実 容易性難易 検査対象の規模小規模大規模 利用実績少多 網羅性や厳密性が求められる局面で活用 55 活用の際は状態爆発に気をつけながら段階的にモ デルを洗練させていく WACATE 2014 Winter 2014/12/06
  • 56. +Let’s Modeling! 2014/12/06 WACATE 2014 Winter