SlideShare a Scribd company logo
+ 
モデル検査入門 
〜自動設計検証技術の世界〜 
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

More Related Content

What's hot

継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
Yahoo!デベロッパーネットワーク
 
推薦アルゴリズムの今までとこれから
推薦アルゴリズムの今までとこれから推薦アルゴリズムの今までとこれから
推薦アルゴリズムの今までとこれから
cyberagent
 
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
Yoshiki Hayama
 
Deep Learning Lab 異常検知入門
Deep Learning Lab 異常検知入門Deep Learning Lab 異常検知入門
Deep Learning Lab 異常検知入門
Shohei Hido
 
CV分野におけるサーベイ方法
CV分野におけるサーベイ方法CV分野におけるサーベイ方法
CV分野におけるサーベイ方法
Hirokatsu Kataoka
 
ナレッジグラフ入門
ナレッジグラフ入門ナレッジグラフ入門
ナレッジグラフ入門
KnowledgeGraph
 
研究分野をサーベイする
研究分野をサーベイする研究分野をサーベイする
研究分野をサーベイする
Takayuki Itoh
 
Statistical Semantic入門 ~分布仮説からword2vecまで~
Statistical Semantic入門 ~分布仮説からword2vecまで~Statistical Semantic入門 ~分布仮説からword2vecまで~
Statistical Semantic入門 ~分布仮説からword2vecまで~
Yuya Unno
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
Ken'ichi Matsui
 
SMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装するSMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装する
sleepy_yoshi
 
確率的推論と行動選択
確率的推論と行動選択確率的推論と行動選択
確率的推論と行動選択
Masahiro Suzuki
 
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
tnoho
 
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
Deep Learning JP
 
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
Yosuke Shinya
 
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
Surveyから始まる研究者への道 - Stand on the shoulders of giants -Surveyから始まる研究者への道 - Stand on the shoulders of giants -
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
諒介 荒木
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
joisino
 
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII
 
[DL輪読会]Disentangling by Factorising
[DL輪読会]Disentangling by Factorising[DL輪読会]Disentangling by Factorising
[DL輪読会]Disentangling by Factorising
Deep Learning JP
 
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
MITSUNARI Shigeo
 

What's hot (20)

継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
推薦アルゴリズムの今までとこれから
推薦アルゴリズムの今までとこれから推薦アルゴリズムの今までとこれから
推薦アルゴリズムの今までとこれから
 
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
 
Deep Learning Lab 異常検知入門
Deep Learning Lab 異常検知入門Deep Learning Lab 異常検知入門
Deep Learning Lab 異常検知入門
 
CV分野におけるサーベイ方法
CV分野におけるサーベイ方法CV分野におけるサーベイ方法
CV分野におけるサーベイ方法
 
ナレッジグラフ入門
ナレッジグラフ入門ナレッジグラフ入門
ナレッジグラフ入門
 
研究分野をサーベイする
研究分野をサーベイする研究分野をサーベイする
研究分野をサーベイする
 
Statistical Semantic入門 ~分布仮説からword2vecまで~
Statistical Semantic入門 ~分布仮説からword2vecまで~Statistical Semantic入門 ~分布仮説からword2vecまで~
Statistical Semantic入門 ~分布仮説からword2vecまで~
 
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
数学カフェ 確率・統計・機械学習回 「速習 確率・統計」
 
SMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装するSMO徹底入門 - SVMをちゃんと実装する
SMO徹底入門 - SVMをちゃんと実装する
 
確率的推論と行動選択
確率的推論と行動選択確率的推論と行動選択
確率的推論と行動選択
 
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
 
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
[DL輪読会]近年のオフライン強化学習のまとめ —Offline Reinforcement Learning: Tutorial, Review, an...
 
ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争ディープラーニングのフレームワークと特許戦争
ディープラーニングのフレームワークと特許戦争
 
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
Surveyから始まる研究者への道 - Stand on the shoulders of giants -Surveyから始まる研究者への道 - Stand on the shoulders of giants -
Surveyから始まる研究者への道 - Stand on the shoulders of giants -
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
SSII2019企画: 画像および LiDAR を用いた自動走行に関する動向
 
[DL輪読会]Disentangling by Factorising
[DL輪読会]Disentangling by Factorising[DL輪読会]Disentangling by Factorising
[DL輪読会]Disentangling by Factorising
 
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
SSII2022 [SS2] 少ないデータやラベルを効率的に活用する機械学習技術 〜 足りない情報をどのように補うか?〜
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 

Viewers also liked

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

Viewers also liked (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時間で学ぶ、効率的な自動テストスクリプトのメンテナンス
 

Similar to モデル検査入門 #wacate

C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?C# から java へのプログラム移植で体験したtddの効果は?
C# から java へのプログラム移植で体験したtddの効果は?
Shinichi Hirauchi
 
Spock's world
Spock's worldSpock's world
Spock's world
Takuma Watabiki
 
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 MakeGood
Atsuhiro Kubo
 
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacateテスト分析入門 -「ゆもつよメソッド」を例に- #wacate
テスト分析入門 -「ゆもつよメソッド」を例に- #wacate
Kinji Akemine
 
ワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeployワンクリックデプロイ101 #ocdeploy
ワンクリックデプロイ101 #ocdeploy
Ryutaro YOSHIBA
 
JaSST16tokyo tm_koyama
JaSST16tokyo tm_koyamaJaSST16tokyo tm_koyama
JaSST16tokyo tm_koyama
ryuji 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 PHPUnit
Atsuhiro Kubo
 
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
モデルベースドテスト入門 -テスト詳細設計を自動化しよう- #stac2013
Kinji Akemine
 
Automation test.ssf alpha
Automation test.ssf alphaAutomation test.ssf alpha
Automation test.ssf alpha
ryuji koyama
 
111008 silverlight square_datavalidation
111008 silverlight square_datavalidation111008 silverlight square_datavalidation
111008 silverlight square_datavalidation
Takayoshi Tanaka
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto
 
60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacate60分でわかった気になるISO29119 #wacate
60分でわかった気になるISO29119 #wacate
Kinji 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) #stac2014
Kazuhiro Suzuki
 
Continuous delivery chapter4
Continuous delivery chapter4Continuous delivery chapter4
Continuous delivery chapter4
favril1
 

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

More from Kinji Akemine

WACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacate
WACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacateWACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacate
WACATE2019冬 ソフトウェアテスト業界でのステップアップを考えよう #wacate
Kinji Akemine
 
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacateWACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
WACATE2018冬 45分で講師になれそうな気になるASTERセミナー標準テキスト #wacate
Kinji Akemine
 
テストの視点からのモデリング(公開用) #wacate
テストの視点からのモデリング(公開用) #wacateテストの視点からのモデリング(公開用) #wacate
テストの視点からのモデリング(公開用) #wacate
Kinji 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! -Model
Kinji 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_study
Kinji Akemine
 

More from 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