⻑崎IT技術者会 第11回勉強会
ドメイン分析勉強会
2016/2/20 リリカル@藤沢耕助
1
➤ ⾃⼰紹介
➤ ドメイン分析の前に
➤ 同値分割
➤ 境界値分析
➤ ドメイン分析概要説明
➤ ドメイン分析演習
➤ ディスカッション
2
ドメイン分析勉強会 2016/2/20
⾃⼰紹介
➤ 某SIerにて品質保証部⾨のお仕事をしています。
➤ 今の仕事は設計レビューが中⼼です。
➤ ドメインは最近、⾦融系に変わりました。
➤ 勉強会の告知は主にTwitter、レポートは個⼈ブログで書いて
います。
3
ドメイン分析勉強会 2016/2/20
⾃⼰紹介
4
ドメイン分析勉強会 2016/2/20
⾃⼰紹介
5
ドメイン分析勉強会 2016/2/20
ドメイン分析の前に
➤ ドメイン分析はテスト技法の中でも難しい技法です。
➤ その基礎として、同値分割と境界値分析が必要になります。
➤ まずは簡単にそのおさらいをします。
➤ ご利⽤上の注意
➤ この内容は⾃分が調べてまとめただけなので、間違ってい
る可能性があります。
➤ 間違っていたら、「違うよ」と教えてください。
➤ 詳しい説明は書籍を参照してください。
6
ドメイン分析勉強会 2016/2/20
同値分割の簡単な説明
➤ 「同値だと思われるまとまりで分けて、そのまとまりから
⼀つの代表値を選んでテストする⼿法」のことです。
➤ そもそもどういうときに、同値分割が必要になるのでしょ
うか?
7
ドメイン分析勉強会 2016/2/20
同値分割の簡単な説明
➤ RPGゲームでのレベルアップ進化システム
➤ 進化前モンスターのレベルがレベルアップによりLv.10以上
になったとき、進化イベントが発⽣する。(初期Lv:1)
➤ 「Lv.2になった時は、進化イベントが発⽣しない」
➤ 「Lv.3になった時は、進化イベントが発⽣しない」
➤ 「Lv.4では…」
➤ 「これ全部テストする必要あるんだっけ?」
8
ドメイン分析勉強会 2016/2/20
同値分割の簡単な説明
➤ 「Lv.2になった時に進化しない」ことが確認できれば、Lv.3
とかLv.4になった時も進化しないって⾔えるんじゃない?」
➤ 「Lv.2」「Lv.3」「Lv.4」は同値である
9
ドメイン分析勉強会 2016/2/20
同値分割の簡単な説明
10
Lv:2Lv:0 Lv:11Lv:3 Lv:4
無効同値クラス
(エラー)
有効同値クラス
(進化前)
有効同値クラス
(進化)
ドメイン分析勉強会 2016/2/20
同値分割の簡単な説明
11
Lv:2Lv:0 Lv:11Lv:3 Lv:4
無効同値クラス
(エラー)
有効同値クラス
(進化前)
有効同値クラス
(進化)
ドメイン分析勉強会 2016/2/20
境界値分析の簡単な説明
➤ 「同値だと思われるまとまりで分けて、そのまとまりの境界
値と、その隣の値を選んでテストする⼿法」のことです。
➤ そもそもなぜ、境界値分析が必要になるのでしょうか?
12
ドメイン分析勉強会 2016/2/20
境界値分析の簡単な説明
➤ RPGゲームでのレベルアップ進化システム
➤ 進化前モンスターのレベルがレベルアップによりLv.10以上
になったとき、進化イベントが発⽣する。(初期Lv:1)
➤ 実際のコードがこんな感じだったら(あくまでも例です)
if(evl_lv_tbl[mon_id] < current_lv)
evl_flag = 1;
➤ このコードにはバグがあります
➤ こういったバグは経験的に多いと⾔われています
13
ドメイン分析勉強会 2016/2/20
境界値分析の簡単な説明
➤ 「さっきみたいなバグを⾒つけるには、進化するレベルピッ
タリの場合と、その直前のレベルの場合をテストしておけば
いいんじゃないか?」
➤ 「Lv.9になった時、進化イベントは発⽣しない」
➤ 「Lv.10になった時、進化イベントが発⽣する」
➤ 「Lv.10」という境界に着⽬した境界値分析
➤ ここで、10をOnポイント、9をOffポイントと呼びます
(後述)
14
ドメイン分析勉強会 2016/2/20
境界値分析の簡単な説明
15
Lv:1Lv:0 Lv:10Lv:9
ドメイン分析勉強会 2016/2/20
境界値分析の簡単な説明
16
Lv:1Lv:0 Lv:10Lv:9
Onポイント Onポイント
Offポイント Offポイント
ドメイン分析勉強会 2016/2/20
ドメイン分析概要説明
➤ 先のRPGの例では、モンスターの進化に関わるパラメータは
「レベル」だけであった
➤ これが、「なつき度」など別のパラメータも含む場合、ど
うやってテストするか?
➤ 複数のパラメータを同時にテストしなければならない
➤ ドメイン分析テストをしよう!
17
ドメイン分析勉強会 2016/2/20
ドメイン分析概要説明
➤ ドメイン分析テストにおける基本的な概念
➤ Onポイント
➤ 仕様上、定義されている境界値
➤ Offポイント
➤ Onポイントから⾒て、境界を挟んだ向こう側かつ、境界に
隣接した値
➤ Inポイント
➤ 定義域(ドメイン)内部の値
18
ドメイン分析勉強会 2016/2/20
ドメイン分析 サンプル問題
➤ 具体例:RPGゲームでのレベルアップ進化システム
➤ 進化前モンスターのレベルがレベルアップによりLv.10以
上になったとき、進化イベントが発⽣する。
➤ 初期Lv:1、最⼤Lv:100
➤ ただし、主⼈公が所持しているジムバッチが3個未満の場
合、進化イベントは発⽣しない。
➤ 初期所持数:0、最⼤所持数:8
➤ 以下、レベルを変数X、ジムバッチの所持数をYとします
19
ドメイン分析勉強会 2016/2/20
1 同値クラス、境界値を⾒つける
➤ モンスターのレベルについて
➤ X ≧ 1(Lv.0以下はエラー)
➤ X ≧ 10(レベルアップによりレベルが10以上になった
時、進化イベントが発⽣)
➤ X ≦ 100(レベル最⼤値:100)
➤ ジムバッチの所持数について
➤ Y ≧ 3(主⼈公が所持しているジムバッチが3個未満の場
合、進化イベントは発⽣しない。)
➤ Y ≦ 8(バッチ所持数の最⼤値:8)
20
ドメイン分析勉強会 2016/2/20
2 グラフにしてみる
21
ドメイン分析勉強会 2016/2/20
3 ONポイント、OFFポイントを探す
➤ Onポイント(仕様上、定義されている境界値)
➤ X: 1(レベル初期値), 10(進化イベント発⽣レベル)、100(最⼤
値)
➤ Y: 3(進化イベント発⽣のバッチ所持数), 8(最⼤値)
➤ Offポイント(Onポイントから⾒て、境界を挟んだ向こう側かつ、境界に
隣接した値)
➤ X: 0(エラー), 9(進化しない), 101(エラー)
➤ Y: 2(進化しない), 9(エラー)
➤ Inポイント(定義域(ドメイン)内部の値)
➤ X: 12(有効かつ、進化イベント発⽣レベル)
➤ Y: 5(有効かつ、進化イベント発⽣のバッチ所持数)
22
ドメイン分析勉強会 2016/2/20
3 ONポイント、OFFポイントを探す
23
ドメイン分析勉強会 2016/2/20
4 組み合わせる(BINDERのドメインテストマトリックス)
24
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10
項目1
条件1
ON
OFF
条件2
ON
OFF
条件3
ON
OFF
IN
項目2
条件4
ON
OFF
条件5
ON
OFF
IN
期待結果
ドメイン分析勉強会 2016/2/20
4 組み合わせる(BINDERのドメインテストマトリックス)
25
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10
X
(レベル)
条件1
ON
OFF
条件2
ON
OFF
条件3
ON
OFF
IN
Y
(バッチ数)
条件4
ON
OFF
条件5
ON
OFF
IN
期待結果
パラメータを埋める
ドメイン分析勉強会 2016/2/20
4 組み合わせる(BINDERのドメインテストマトリックス)
26
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10
X
(レベル)
X ≧ 1
ON
OFF
X ≧ 10
ON
OFF
X ≦ 100
ON
OFF
IN
Y
(バッチ数)
Y ≧ 3
ON
OFF
Y ≦ 8
ON
OFF
IN
期待結果
条件式を埋める
ドメイン分析勉強会 2016/2/20
4 組み合わせる(BINDERのドメインテストマトリックス)
27
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10
X
(レベル)
X ≧ 1
ON 1
OFF 0
X ≧ 10
ON 10
OFF 9
X ≦ 100
ON 100
OFF 101
IN
Y
(バッチ数)
Y ≧ 3
ON 3
OFF 2
Y ≦ 8
ON 8
OFF 9
IN
期待結果
ON/OFF
ポイント
を埋める
ドメイン分析勉強会 2016/2/20
4 組み合わせる(BINDERのドメインテストマトリックス)
28
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10
X
(レベル)
X ≧ 1
ON 1
OFF 0
X ≧ 10
ON 10
OFF 9
X ≦ 100
ON 100
OFF 101
IN 12 11 10 9
Y
(バッチ数)
Y ≧ 3
ON 3
OFF 2
Y ≦ 8
ON 8
OFF 9
IN 7 6 5 4 5 6
期待結果
IN
ポイント
を埋める
ドメイン分析勉強会 2016/2/20
4 組み合わせる(BINDERのドメインテストマトリックス)
29
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10
X
(レベル)
X ≧ 1
ON 1
OFF 0
X ≧ 10
ON 10
OFF 9
X ≦ 100
ON 100
OFF 101
IN 12 12 12 12
Y
(バッチ数)
Y ≧ 3
ON 3
OFF 2
Y ≦ 8
ON 8
OFF 9
IN 5 5 5 5 5 5
期待結果
進化
しない
エラー
進化
する
進化
しない
進化
する
エラー
進化
する
進化
しない
進化
する
エラー
期待結果を埋める
ドメイン分析勉強会 2016/2/20
4 組み合わせる(BINDERのドメインテストマトリックス)
30
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10
X
(レベル)
X ≧ 1
ON 1
OFF 0
X ≧ 10
ON 10
OFF 9
X ≦ 100
ON 100
OFF 101
IN 12 12 12 12
Y
(バッチ数)
Y ≧ 3
ON 3
OFF 2
Y ≦ 8
ON 8
OFF 9
IN 5 5 5 5 5 5
期待結果
進化
しない
エラー
進化
する
進化
しない
進化
する
エラー
進化
する
進化
しない
進化
する
エラー
ドメイン分析勉強会 2016/2/20
4 組み合わせる(BINDERのドメインテストマトリックス)
31
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10
X
(レベル)
X ≧ 1
ON 1
OFF 0
X ≧ 10
ON 10
OFF 9
X ≦ 100
ON 100
OFF 101
IN 12 12 12 12
Y
(バッチ数)
Y ≧ 3
ON 3
OFF 2
Y ≦ 8
ON 8
OFF 9
IN 5 5 5 5 5 5
期待結果
進化
しない
エラー
進化
する
進化
しない
進化
する
エラー
進化
する
進化
しない
進化
する
エラー
ごめんなさい。
実はこれ、間違ってます。
ドメイン分析勉強会 2016/2/20
4 組み合わせる(BINDERのドメインテストマトリックス)
32
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12
X
(レベル)
X ≧ 1 ON 1
OFF 0
X ≧ 10 ON 10
OFF 9
X ≦ 100 ON 100
OFF 101
IN 12 12 12 12 12 12
Y
(バッチ数)
Y ≧ 0 ON 0
OFF -1
Y ≧ 3 ON 3
OFF 2
Y ≦ 8 ON 8
OFF 9
IN 5 5 5 5 5 5
期待結果
進化
しない
エラー
進化
する
進化
しない
進化
する
エラー
進化
しない
エラー
進化
する
進化
しない
進化
する
エラー
ドメイン分析勉強会 2016/2/20
4 組み合わせる(BINDERのドメインテストマトリックス)
33
#1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12
X
(レベル)
X ≧ 1 ON 1
OFF 0
X ≧ 10 ON 10
OFF 9
X ≦ 100 ON 100
OFF 101
IN 12 12 12 12 12 12
Y
(バッチ数)
Y ≧ 0 ON 0
OFF -1
Y ≧ 3 ON 3
OFF 2
Y ≦ 8 ON 8
OFF 9
IN 5 5 5 5 5 5
期待結果
進化
しない
エラー
進化
する
進化
しない
進化
する
エラー
進化
しない
エラー
進化
する
進化
しない
進化
する
エラー
⾃明な仕様値を
⾒逃さないように!
ドメイン分析勉強会 2016/2/20
⾒落としやすいポイント
➤ 先のバッチ所持数の最⼩値のように、⾃明な仕様値は⾒落と
しやすいので注意が必要
➤ 仕様に出てきた値をマークするなどして、Onポイント、Off
ポイントを漏れなく抽出すること
34
ドメイン分析勉強会 2016/2/20
⾒落としやすいポイント
➤ Inポイントは同じ値を⼊れるのではなく、少しずつずらす
➤ 値をずらすことで、“傾き”が正しいかの判断ができる
35
Inポイントをずらした場合 Inポイントを同じ値にした場合
ドメイン分析勉強会 2016/2/20
⾒落としやすいポイント
➤ Inポイントは同じ値を⼊れるのではなく、少しずつずらす
➤ 値をずらすことで、“傾き”が正しいかの判断ができる
36
Inポイントをずらした場合 Inポイントを同じ値にした場合
傾きが誤っていた場合に、
誤りを検出できる
傾きが誤っていても、
誤りを検出できない
ドメイン分析勉強会 2016/2/20
ONポイント、OFFポイント、INポイントを導⼊する理由
➤ ⼀気に全部の変数をテストしようとすると、もし不良を発⾒
しても何の不良なのかわからない
➤ 結果に関わる変数を⼀つずつテストしていきたい
➤ そのための概念がOnポイント、Offポイント、Inポイント
37
ドメイン分析勉強会 2016/2/20
ドメイン分析テストの具体的⼿順まとめ
1. 同値クラス、境界値を⾒つける(式で表してみる)
2. グラフにしてみる
3. Onポイント、Offポイントを探す
4. 組み合わせる(Binderのドメインテストマトリクス)
➤ 参考:わりとディープ?同値分割↔境界値分析
➤ http://www.slideshare.net/scarletplover/
ss-56911349
38
ドメイン分析勉強会 2016/2/20
ドメイン分析演習
➤ この勉強会では、講師による解説は⾏いません。
➤ 解答後、グループでのディスカッションタイムを設けます。
➤ そこで、他の⼈の解答と⾃分の解答を⾒⽐べたり、議論した
りすることで理解を深めます。
39
ドメイン分析勉強会 2016/2/20
ドメイン分析演習1
40
➤ RPGゲームでのレベルアップ進化システム
➤ モンスターのレベル(X)がLv.20以上に到達したとき、
進化する。
➤ 初期Lv:1、最⼤Lv:100
➤ ただし、モンスターのなつき度(Y)が200未満の場合、
レベルがLv.20以上になっても進化しない。
➤ 初期なつき度:0、最⼤なつき度:255
➤ レベル、なつき度は整数に制限されるものとする。
➤ ドメイン分析を実施しなさい。
ドメイン分析勉強会 2016/2/20
ドメイン分析ディスカッション1
➤ 周りの⼈と、解答を⾒⽐べてみましょう。
➤ 間違えたかな?と思うところがあったら聞いてみてください。
41
ドメイン分析勉強会 2016/2/20
ドメイン分析演習2
➤ 婚活サイト利⽤者Aさんが、サイトを利⽤して結婚相⼿候補者
を検索する。以下の条件に合格するものが検索結果に現れる
ことをテストしたい。なお、⼊⼒値は整数に制限されるもの
とする。
➤ 年齢(X):20以上、30未満
➤ ⾝⻑(Y):175以上
➤ 年収(Z):600万円以上
➤ ドメイン分析を実施しなさい。
42
ドメイン分析勉強会 2016/2/20
ドメイン分析ディスカッション2
➤ ディスカッション2回⽬です。
➤ 問題の解答についての議論、1問⽬の問題との違いについて
話してみましょう。
43
ドメイン分析勉強会 2016/2/20
参考⽂献
➤ JaSST ʼ11 Shikoku 実践!同値分割と境界値分析とドメイン
分析 秋⼭ 浩⼀
➤ http://www.jasst.jp/archives/jasst11t/pdf/
s2-1.pdf
➤ わりとディープ?同値分割↔境界値分析
➤ http://www.slideshare.net/scarletplover/
ss-56911349
➤ ポケモンWiki(サンプル問題作成のために参考にしました)
➤ http://wiki.ポケモン.com/wiki/メインページ
44

ドメイン分析勉強会