ワークショップ1
同値分割法・境界値分析

目次
1. 同値分割法・境界値分析の説明– 全数テストを考える– 同値分割法– 境界値分析
2. ワークショップ– 値以外の分類– 政宗銀行ATM

2

1. 同値分割法・境界値分析の説明

3

１．全数テストを考える（１）【問題】
Web画面に年齢入力欄があります。
年齢入力欄は 0～120 までが入力できます。
0～120以外が入力されるとエラーメッセージが表示されます。
確認が必要なすべての入力データを考えてください。

（時間:２分）4

回答フォーマット
テストデータ

期待結果

メモ

5

解答例
入力データを考える
・文字種
整数、小数点、マイナス、文字、記号、全角・桁数
マイナス無限大〜プラス無限大

6

解答例
全ての文字種の2文字の組み合わせを考えた場合

UNICODE v11(2018/6):137,374文字（制御文字除く）• 13万×13万 = 169億ケース• 1ケース1秒＝169億秒＝535年
桁数が増えるとさらにテストケースが増えていく！

7１．全数テストを考える（２）テストの 7 原則（※JSTQBテスト技術者資格制度 Foundation Level シラバス）『全数テストは不可能』• すべてをテストすることは、ごく単純なソフトウェア以外では非現実的である。全数テストの代わりに、テスト技法、テストケースの優先順位付け、リスクベースドテストを用いて、テストにかける労力を集中すべきである。
※ http://jstqb.jp/syllabus.html
8

２．同値分割法（1）【同値分割法】• 同値分割法(EP)は、ある特定のパーティションのすべての要素がテスト対•象によって同等に処理されることを想定して、データをパーティション（これを同値パーティションと呼ぶ）に分割する。
この技法の背景にある理論は、同値パーティションから 1 つの値をテストするテストケースが欠陥を検出した場合、この欠陥は同じパーティションから他の値をテストするテストケースでも検出されるはずだというものである。したがって、各パーティションに対して 1 つのテストがあれば十分である。 （※ JSTQB FL シラバス）※ http://jstqb.jp/syllabus.html9２．同値分割法（2）【同値分割法】• 同値パーティションは、入力、出力、構成アイテム、内部値、時間関連の•値、インターフェースパラメーターなど、テスト対象に関連するあらゆるデータ要素について識別できる。
パーティションは、連続 または離散、順序性ありまたは順序性なし、有限または無限のいずれでもよい。パーティションは、重複してはならず、空でない集合でなければならない。 （※ JSTQB FL シラバス）※ http://jstqb.jp/syllabus.html•同値分割法では、「その範囲はどの値でも同等に処理されることが合理的に予想される」ことに基づいて同値分割をすることで現実的なテストケース数にします。
10

２．同値分割法（3）• パーティションの種類• 有効パーティション– 有効な入力値のグループ• 無効パーティション– 無効な（エラーになる）入力値のグループ• 各パーティションからテストで使用する任意に選んだ値を代表値といいます。
11

例
出力によって分割する場合
有効パーティション

有効パーティション

無効パーティション

出力がAとなる入力群

出力がBとなる入力群

エラーとなる入力群12例：ジェットコースターの身長制限
ジェットコースターの身長制限は120cm以上、190cm以下の場合
無効パーティション

有効パーティション

無効パーティション

身長が120cm未満

身長が120cmから190cm

身長が190cmより大きい

13例：ジェットコースターの身長制限の代表値
ジェットコースターの身長制限は120cm以上、190cm以下の場合
無効パーティション

有効パーティション

無効パーティション

身長が120cm未満

身長が120cmから190cm

身長が190cmより大きい

100cm

150cm

200cm
14

２．同値分割法（4）【問題】
Web画面に年齢入力欄があります。
年齢入力欄は 0～120 までの整数が入力できます。
※入力可能な文字列は整数のみです。
0～17が入力されると『未成年です』が表示されます。
18～120が入力されると『成年です』が表示されます。
0～120以外が入力されるとエラーメッセージが表示されます。
有効パーティション・無効パーティションを考えてください。
時間があれば、代表値を選びテストケースを作成しててください。
20（時間:３分）15

２．同値分割法（5）同値図• 出力（期待結果）が同様になる入力（テストデータ）をグルーピングします。
入力121以上

出力
121~

120
18~120170~17０-1以下

エラーメッセージ

無効

成年です

有効未成年です有効

エラーメッセージ

無効~-116

２．同値分割法（6）•同値パーティションの分割結果
No

有効／無効

１

無効（エラーメッセージ） 121以上

２有効（成年です）

18以上 120以下

３

有効（未成年です）

0以上 17以下

４

無効（エラーメッセージ） -1以下

入力値の範囲17

２．同値分割法（7）代表値•

代表値によるテストケース– 各同値パーティションから代表する値（任意）を選びテストケースとします。
No

テストデータ

期待結果（表示メッセージ）

１130

エラーメッセージ

２40

成年です

３10

未成年です

４-10

エラーメッセージ
18

３．境界値分析（１）【境界値】• 境界値分析（BVA）は、同値パーティションの境界を確認することに基づいた技法である。したがって、BVA は順序性のあるパーティションにのみ使用できる。1つのパーティションの最小値と最大値はその境界値となる。
（※ JSTQB FL シラバス）•

同値パーティションの端が境界値です。

•

境界値は入力値が連続の時に有効です。
※ http://jstqb.jp/syllabus.html
19

３．境界値分析（２）• なぜ境界値を使うか？
– 実装上、境界は不具合が多く発生します。
（例）成年（18～120）を判別するプログラム
正：if ( 18 <= 入力値 ) && ( 入力値 <= 120 )誤：if ( 18 <= 入力値 ) && ( 入力値 < 120 )→ 入力値が120の時に正しく処理されません。

– 仕様書に出てきた数字とその隣に注目です。
「18～120が入力されると『成年です』が表示されます。」

20

３．境界値分析（３）• 同値パーティションと境界値無効

有効

エラー
メッセージ

未成年です

-1 ０

有効

無効

成年です

エラー
メッセージ

17 18120 121

境界値21

３．境界値分析（４）• 境界値分析によるテストケース
No

１

テストデータ121 （下限）

期待結果（表示メッセージ）
エラーメッセージ

２120 （上限）

成年です

３18 （下限）

成年です

４17 （上限）

未成年です

５0 （下限）未成年です

６-1 （上限）

エラーメッセージ
22

３．境界値分析（５）• 境界値だけでいい？代表値は要らない？
– 境界値のテストデータだけでは不具合を発見できない事があります。
（例）121以上を判別するプログラム
正：if ( 121 <= 入力値 )誤：if ( 121 ＝＝ 入力値 )→ 入力値が121の時は正しいが、122では正しく処理されません。

– 境界値の他に代表値もテストすれば、上記不具合を見つけることができます。

23

３．境界値分析（６）• 代表値と境界値によるテストケース
No

テストデータ

期待結果（表示メッセージ）

１130 （代表値）

エラーメッセージ

２121 （下限）

エラーメッセージ

３120 （上限）

成年です

４40 （代表値）

成年です５18 （下限）成年です

６17 （上限）

未成年です

７10 （代表値）

未成年です

８0 （下限）未成年です

９-1 （上限）

エラーメッセージ

１０ -10 （代表値）

エラーメッセージ24注意点• 同値分割法、境界値分析を行う場合には、「不足なく」「重複なく」行う必要があります。

• 同値パーティションに不足や重複があるとテスト漏れにつながります。
過不足なし∧重複なし

同値パーティショ
ンA

同値パーティショ
ンB

不足あり

同値パーテ
ィションA

重複あり

同値パーティ
ションB

同値
同値パーティションB
パーティションA

不足
Aのみ, Bのみ, A∧Bのテストの3つが必要
25

2.ワークショップ
26

ワークショップ－1

値以外の分類27

値以外の分類
同値分割では、先ほどの出力結果のように、ある全体をいくつかの部分に切り分けました。
入力

121以上

出力
121~120
18~120170~17０-1以下~-1

エラーメッセージ

無効

成年です

有効未成年です有効

エラーメッセージ

無効28値以外の分類
以下のような場合、どのように分けるか考えてみましょう• 今年はオリンピックイヤーです。以下のスポーツを最低２つに分類してみましょう。
– サッカー、野球、水泳、テニス、バレーボール、バスケット
ボール、スケート、スキー、ラグビー、ビーチバレー、マラソン、ブレイキン• 個人ワーク１分。共有４分（分けた理由など共有）– ①の紙を使用
29

値以外の分類• 以下の問題に変更となった場合はどうなるでしょうか。

• 今年はオリンピックイヤーです。以下のスポーツをボー
ルを使う競技・使わない競技で分けたらどうなりますか。
– サッカー、野球、水泳、テニス、バレーボール、バスケット
ボール、スケート、スキー、ラグビー、ビーチバレー、マラソン、ブレイキン30

値以外の分類基準があると同じ形で分けられます
ボールを使う競技
サッカー、野球、テニス、バレーボール、バスケットボー
ル、ラグビー、ビーチバレー

ボールを使わない競技

水泳、スケート、スキー、マラソン、ブレイキン• 分類は、ある特定の基準や規則に基づき、物事をいくつかのグループまたはカテゴリに振り分けることです。
31

値以外の分類分類したグループをさらに分割することができます
ボールを使う競技

ボールの大きさ直径8㎝未満

野球

テニス

ボールの大きさ
直径8㎝以上22㎝未満

サッカー

バレーボ
ール

ビーチ
バレー

ボールの大きさ
直径22㎝以上
バスケッ
トボール

ラグビー

32

値以外の分類• 以下の問題に変更となった場合はどうなるでしょうか。

• 今年はオリンピックイヤーです。以下のスポーツを夏季オリンピック・冬季オリンピックに分けさらに夏季オリンピックを室内競技・室外競技で分けてみましょう。
– サッカー、野球、水泳、テニス、バレーボール、バスケット
ボール、スケート、スキー、ラグビー、ビーチバレー、マラソン、ブレイキン• 個人ワーク１分。
– ②の紙を使用
33

値以外の分類• 分類したグループを分割してみましょう。

• 先ほど分けた室外競技を競技時間（平均想定）で分割してみましょう。
– サッカー、野球、水泳、テニス、バレーボール、バスケット
ボール、スケート、スキー、ラグビー、ビーチバレー、マラソン、ブレイキン• チームワーク５分– チーム用のA3の紙を使って木構造にしてみましょう34値以外の分類• 室外競技を競技時間（平均想定）で分割してみましょう。
スポーツ
夏季オリンピック

冬季オリンピック

スケート、スキー
室内競技

室外競技

水泳、バレーボール、バスケットボール、ブレイキン
2時間以上2時間未満

サッカー

ラグビー

ビーチバレー

野球

テニス

マラソン
35

値以外の分類• 並列に並べられたスポーツが、ある基準を設けることで、見通しよく階層構造に分類できました。
• 右図も分類してみましょう

121
以上

121~

120
18~120180~17０-1以下

エラーメッセージ

無効

成年です

有効未成年です有効エラーメッセージ

無効~-1
36

値以外の分類• 分類を利用することで、全体が見やすくなり、テストを設計する際に役に立ちます。
有効値

無効値

－1以下

121以上

未成年

成年

0~1718~12037

ワークショップ－２

政宗銀行ATM38

ワーク２

では、実際の製品のテストを行うと仮定し、どのようなテストをするかを考えてみましょう

39

練習問題１
あなたは「政宗銀行」ATMのテスト担当者です。
政宗銀行に口座を持っているお客様の利用手数料は、取引を行った時間、平日か土日祝日か、ATMの種類によって変わります。
同値分割法を用いて、利用手数料に着目したテストケースを作成してください。 (個人ワーク5分)
40

練習問題1 同値分割法を用いよ
同値分割を行い、利用手数料に着目したテストケースを作成してください。

政宗銀行のATM利用手数料の条件
・平日
0:00～08:44 ・・・110円
・平日
8:45～20:59 ・・・無料
・平日
21:00～23:59・・・110円
・土日祝日 終日・・・220円
但し、提携しているエイトイレブン銀行から利用した場合は、平日/土日祝日、及び利用時間帯に限らず、利用手数料は330円とする(個人ワーク5分)

41解説
まず、条件を整理してみます。
問題文から、「どのATMを使ったか」「平日か土日祝日か」「何時に使ったのか」で手数料が変わる事が読み取れます。
まずは、基準の一つである、ATMの種類で分類してみます。
政宗銀行ATM

エイトイレブン銀行ATM

・平日(8:45～20:59) …無料
・平日(8:45～20:59以外)… 110円

・終日330円

・土日祝日(終日) … 220円

42

解説
さらに、分類したグループをさらに分割することができます
利用手数料

平日
(8:45～20:59)
無料

政宗銀行ＡＴＭ

エイトイレブン銀行ATM(終日)330円

平日(8:45～20:59以外)

土日祝日
(終日)

110円

220円
43

解説
利用手数料に着目すると、赤枠が同値パーティションだと考えることができます。
利用手数料

平日
(8:45～20:59)
無料

政宗銀行ＡＴＭ

エイトイレブン銀行ATM(終日)330円

平日(8:45～20:59以外)

土日祝日
(終日)

110円

220円
44

解答例
同値分割法のテストケースを考えていきます。
代表値は同値パーティションの任意の値を選択すればよく、以下のようになります。
No

テストデータ

期待結果(利用手数料) テストデータを選んだ理由

1

政宗銀行 平日 15:00

無料

利用手数料が「無料」の代表値

2

政宗銀行 平日 23:00

110円

利用手数料が「110円」の代表値

3

政宗銀行 土日祝日 15:00 220円

利用手数料が「220円」の代表値

4

エイトイレブン銀行
平日 15:00

利用手数料が「330円」の代表値330円※データは一例です45

練習問題２ 境界値分析を用いよ
今度は、境界値分析を用いてみましょう。
境界値分析では同値パーティションの端を狙いますが、以下のように数直線にすることで仕様の整理をしやすくなります。
無効

有効

有効

無効

エラー
メッセージ

未成年です

成年です

エラー
メッセージ

-1

０1718

120 121

境界値46

練習問題２ 境界値分析を用いよ
では、政宗銀行の平日の利用手数料に着目した境界値を整理するために、数直線を書いて下さい。
※土日祝日は対象外とする。
政宗銀行のATM利用手数料の条件
・平日
0:00～08:44 ・・・110円
・平日
8:45～20:59 ・・・無料
・平日
21:00～23:59・・・110円
・土日終日
・・・220円(チームワーク2分)
47

解説
どのような数直線になりましたか。

◇平日(月曜～金曜)

0:00

20:59 21:00

8:44 8:45110円

無料

23:59110円

48

練習問題３ 境界値分析を用いよ
では、土日も加味した上で、境界値分析を行い、テストケースを作成してみましょう。
※祝日は対象外とする。
政宗銀行のATM利用手数料の条件
・平日
0:00～08:44 ・・・110円
・平日
8:45～20:59 ・・・無料
・平日
21:00～23:59・・・110円
・土日終日・・・220円(個人ワーク4分)
49

解説
平日の時間帯による利用手数料の変化は数直線にしていますが、平日と土日が切り替わる際の境界値を確認するための数直線を考えてみましょう。

◇政宗銀行 平日＜-＞土日
日曜
23:59
220円

月曜
0:00

金曜
23:59

110円
※無料を挟む

日曜
23:59

土曜
0:00
220円

月曜
0:00
110円
50

解答例
No

テストデータ

期待結果(利用手数料)

テストデータを選んだ理由1

平日 00:00

110円

利用料が110円の境界値2

平日 08:44

110円

利用料が110円の境界値

3

平日 08:450円

利用料が0円の境界値

4

平日 20:590円

利用料が0円の境界値

5

平日 21:00110円

利用料が110円の境界値

6

月曜 00:00110円

利用料が110円の境界値

7

金曜 23:59110円

利用料が110円の境界値

8

土曜 00:00220円

利用料が220円の境界値

9

日曜 23:59220円

利用料が220円の境界値
51

解説
今回除外しましたが、祝日を考慮する場合、前後がどのような日になるかのパターンは様々あります。
また、祝日自体が平日の場合や、日曜と重複する場合（振替休日が発生)など、祝日それ自体にも様々なパターンが考えられます。
仕様やテストのスコープも考慮し、テストのパターンを検討しましょう。
52

さいごに

同値分割法では、同値パーティションに分類し、そこから代表値を選出してテストをしますが、その代表値を選出するとき同値パーティションの境界を狙うのが境界値分析です。
同値分割と境界値分析は、併せて覚えておくと良いでしょう。

53