SlideShare ist ein Scribd-Unternehmen logo
1 von 56
+ 
モデル検査入門 
〜自動設計検証技術の世界〜 
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

Weitere ähnliche Inhalte

Was ist angesagt?

[DL輪読会]Pay Attention to MLPs (gMLP)
[DL輪読会]Pay Attention to MLPs	(gMLP)[DL輪読会]Pay Attention to MLPs	(gMLP)
[DL輪読会]Pay Attention to MLPs (gMLP)Deep Learning JP
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けモノビット エンジン
 
定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系CoqについてYoshihiro Mizoguchi
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類Shintaro Fukushima
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpsonickun
 
Sift特徴量について
Sift特徴量についてSift特徴量について
Sift特徴量についてla_flance
 
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜SSII
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかAtsushi Nakada
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜Masahito Zembutsu
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIShota Imai
 
型安全性入門
型安全性入門型安全性入門
型安全性入門Akinori Abe
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Yuki Morishita
 
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?Yoshitaka Kawashima
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化Kumazaki Hiroki
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方Yoshiyasu SAEKI
 
異常音検知に対する深層学習適用事例
異常音検知に対する深層学習適用事例異常音検知に対する深層学習適用事例
異常音検知に対する深層学習適用事例NU_I_TODALAB
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 

Was ist angesagt? (20)

[DL輪読会]Pay Attention to MLPs (gMLP)
[DL輪読会]Pay Attention to MLPs	(gMLP)[DL輪読会]Pay Attention to MLPs	(gMLP)
[DL輪読会]Pay Attention to MLPs (gMLP)
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
定理証明支援系Coqについて
定理証明支援系Coqについて定理証明支援系Coqについて
定理証明支援系Coqについて
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
Sift特徴量について
Sift特徴量についてSift特徴量について
Sift特徴量について
 
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
SSII2022 [TS1] Transformerの最前線〜 畳込みニューラルネットワークの先へ 〜
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
忙しい人のための Rocky Linux 入門〜Rocky LinuxはCentOSの後継者たり得るか?〜
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
 
型安全性入門
型安全性入門型安全性入門
型安全性入門
 
Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編Cassandraのしくみ データの読み書き編
Cassandraのしくみ データの読み書き編
 
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​SSII2020SS:  微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
SSII2020SS: 微分可能レンダリングの最新動向 〜「見比べる」ことによる3次元理解 〜​
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
 
ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方ストリーム処理を支えるキューイングシステムの選び方
ストリーム処理を支えるキューイングシステムの選び方
 
異常音検知に対する深層学習適用事例
異常音検知に対する深層学習適用事例異常音検知に対する深層学習適用事例
異常音検知に対する深層学習適用事例
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 

Andere mochten auch

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

Andere mochten auch (7)

ボクらのプロセスにきづこう #wacate
ボクらのプロセスにきづこう #wacateボクらのプロセスにきづこう #wacate
ボクらのプロセスにきづこう #wacate
 
レビュー方法を勉強してみよう
レビュー方法を勉強してみようレビュー方法を勉強してみよう
レビュー方法を勉強してみよう
 
クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門クラシフィケーション・ツリー法入門
クラシフィケーション・ツリー法入門
 
はじめよう!レビューのいろは
はじめよう!レビューのいろははじめよう!レビューのいろは
はじめよう!レビューのいろは
 
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
形式手法と AWS のおいしい関係。- モデル検査器 Alloy によるインフラ設計技法 #jawsfesta
 
Alloy ではじめる簡単モデル検査
Alloy ではじめる簡単モデル検査Alloy ではじめる簡単モデル検査
Alloy ではじめる簡単モデル検査
 
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
4時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
 

Ähnlich wie モデル検査入門 #wacate

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

Ähnlich wie モデル検査入門 #wacate (20)

C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
 
Spock's world
Spock's worldSpock's world
Spock's world
 
Hilを使った形式リアルタイム検証
Hilを使った形式リアルタイム検証Hilを使った形式リアルタイム検証
Hilを使った形式リアルタイム検証
 
Introduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
 
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateテスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
 
JaSST16tokyo tm_koyama
JaSST16tokyo tm_koyamaJaSST16tokyo tm_koyama
JaSST16tokyo tm_koyama
 
テストコードの定型化
テストコードの定型化テストコードの定型化
テストコードの定型化
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
Getting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
 
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
 
Automation test.ssf alpha
Automation test.ssf alphaAutomation test.ssf alpha
Automation test.ssf alpha
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
 
60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacate60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacate
 
システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
 
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテストビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
 
開発もQAも自動テスト!「LOST JUDGMENT:裁かれざる記憶」のQAテスター参加で進化した「テスト自動化チーム(仮)」の取り組みについて
開発もQAも自動テスト!「LOST JUDGMENT:裁かれざる記憶」のQAテスター参加で進化した「テスト自動化チーム(仮)」の取り組みについて開発もQAも自動テスト!「LOST JUDGMENT:裁かれざる記憶」のQAテスター参加で進化した「テスト自動化チーム(仮)」の取り組みについて
開発もQAも自動テスト!「LOST JUDGMENT:裁かれざる記憶」のQAテスター参加で進化した「テスト自動化チーム(仮)」の取り組みについて
 
1時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac20141時間で分かるSTA (Software Test Automation) #stac2014
1時間で分かるSTA (Software Test Automation) #stac2014
 
Continuous delivery chapter4
Continuous delivery chapter4Continuous delivery chapter4
Continuous delivery chapter4
 

Mehr von Kinji Akemine

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

Mehr von Kinji Akemine (9)

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

モデル検査入門 #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