同値分割法・境界値分析~ 勇者テス政宗の旅立ち ~はじめる前に• 次に開催するワークショップ２では、①組合せテスト、②状態遷移、③デシジョンテーブ
ルの３チームに分かれて実施します。
• 各ワークショップの参加人数を確認したいので、挙手をお願いします。
①組合せテスト：②状態遷移：③デシジョンテーブル：2

0．おやつを分ける【問題】
おやつをグループ分けしてみましょう。
あんな分け方やこんな分け方があるかもしれません。（個人演習１分、意見交換５分）
パイン飴

ミントチョコウメ飴ハッカ飴 イチゴ飴

5円チョコ レモンチョコ

イチゴチョコ

レモン飴

ミントガム

五円
3

<意見交換のグループ> 以下のグループで意見交換をして下さい。（5分）
講演者

受付

目次
1. 全数テストを考える
2. 同値分割法
3. 境界値分析
4. ワーク１：おやつ同値分割
5. ワーク２：勇者テス政宗の必殺の一撃
6. ワーク３：勇者テス政宗の武器

5

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

（時間:１分）6

１．全数テストを考える（２）テストの 7 原則（※JSTQBテスト技術者資格制度 Foundation Level シラバス）『全数テストは不可能』• すべてをテストすること（入力と事前条件の全組み合わせ）は、ごく単純なソフトウェア以外では非現実的である。全数テストの代わりに、リスク分析、テスト技法、および優先度によりテストにかける労力を集中すべきである。
※ http://jstqb.jp/syllabus.html

7

２．同値分割法（１）【同値分割法】• 同値分割法は、同等に処理されると想定したデータすべてを同じパーティション（これを同値クラスとも呼ぶ）に振り分ける技法である。有効な値と無効な値の両方に対して同値パーティションがある。（※1 JSTQB FL シラバス）•

入力される可能性があるデータをすべてテストするのは大変なので、入力をグルーピングして、それぞれのグループから代表となる値を選び、それだけをテストする方法。同値分割した各々のグループのことを「同値クラス」と呼ぶ。
（※2 ソフトウェアテスト技法ドリル）※1 http://jstqb.jp/syllabus.html
8※2 http://www.juse-p.co.jp/cgi-bin/html.pl5?i=ISBN978-4-8171-9360-5

２．同値分割法（２）• 同値分割法は、「その範囲はどの値でも同等に処理されることが合理的に予想される」ことに基づいて同値分割をすることで現実的なテストケース数にします。

• 有効同値クラス（有効同値パーティション）– 有効な入力値のグループ• 無効同値クラス（無効同値パーティション）– 無効な（エラーになる）入力値のグループ
9２．同値分割法（３）【問題】
Web画面に年齢入力欄があります。
年齢入力欄は 0～120 までの整数が入力できます。
0～17が入力されると『未成年です』が表示されます。
20～120が入力されると『成年です』が表示されます。
0～120以外が入力されるとエラーメッセージが表示されます。有効同値クラス・無効同値クラスを考えてください。
※英字・マイナス符号を除く記号文字・小数点付き数字等は除外して、整数のみで考えてください。
20（時間:１分）

10

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

出力

121~

120
20~12019
０-1以下

0~19~-1

エラーメッセージ

無効

成年です

有効未成年です有効

エラーメッセージ

無効
11

２．同値分割法（５）•同値クラスの分割結果

No

有効／無効

入力値の範囲１

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

２

有効（成年です）

20以上 120以下

３

有効（未成年です）

0以上 19以下

４

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

12

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

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

テストデータ

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

１130

エラーメッセージ２40成年です

３10未成年です

４-10エラーメッセージ13

３．境界値分析（１）【境界値】• 境界値分析（BVA）は同値分割法の拡張であるが、パーティションが数値または順序付け可能な値で構成される場合だけ使用できる。パーティションの最小値および最大値（または最初の値と最後の値）が、境界値である。
（※ JSTQB FL シラバス）•

同値クラス（同値パーティション）の端が境界値です。

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

14

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

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

15

３．境界値分析（３）• 同値クラスと境界値
無効同値クラス 有効同値クラス
エラー
メッセージ

未成年です

-1 ０

有効同値クラス

無効同値クラス

成年です

エラー
メッセージ

19 20

120 121境界値
16

３．境界値分析（４）•

境界値分析によるテストケース
No テストデータ
期待結果（表示メッセージ）
１ 121 （下限）
エラーメッセージ
２120 （上限）

成年です

３20 （下限）

成年です

４19 （上限）未成年です

５0 （下限）未成年です

６-1 （上限）

エラーメッセージ
17

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

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

18

３．境界値分析（６）•

代表値と境界値によるテストケース
No
テストデータ
期待結果（表示メッセージ）
１130 （代表値）

エラーメッセージ

２121 （下限）

エラーメッセージ

３120 （上限）

成年です

４40 （代表値）

成年です

５20 （下限）

成年です

６19 （上限）

未成年です

７10 （代表値）

未成年です

８0 （下限）未成年です

９-1 （上限）

エラーメッセージ

１０ -10 （代表値）

エラーメッセージ

問題タイム20

４．おやつの同値分割（１）【問題①】
24時間で10°Cの水に溶けるかテストします。
このとき以下のおやつの同値分割をしてください。
パイン飴

ミントチョコウメ飴ハッカ飴 イチゴ飴

5円チョコ レモンチョコ

イチゴチョコ

レモン飴

ミントガム

五円

（個人演習:2分、意見交換：8分）

21

４．おやつの同値分割（３）【解説①】水に溶けるテスト
あめ系 溶けるパイン飴、ウメ飴、ハッカ飴、イチゴ飴、レモン飴

チョコ系 溶けない
ミントチョコ、五円チョコ、レモンチョコ、イチゴチョコ

ガム系 外側だけ溶ける
ミントガム

22

４．おやつの同値分割（２）【問題②】
懐中電灯等で、おやつの真ん中に光を当てて光が透過するかしないかをテストします。このとき以下のおやつの同値分割をしてください。
パイン飴

ミントチョコウメ飴ハッカ飴 イチゴ飴

5円チョコ レモンチョコ

イチゴチョコ

レモン飴

ミントガム

五円（個人演習:2分、意見交換：8分）

23

４．おやつの同値分割（４）【解説②】光の透過テスト
あな空いてる系
パイン飴、五円チョコ

透明系
ウメ飴、ハッカ飴、イチゴ飴、レモン飴

光通さない系
ミントチョコ、レモンチョコ、イチゴチョコ、ミントガム

24

今、新しいテスターが生まれようとしている

25

５．勇者テス政宗の必殺の一撃（１）• 勇者テス政宗は攻撃時に、ある確率で必殺の一撃がでます。
• 必殺の一撃の場合は、敵へのダメージが2倍になり、大ダメージを与えることができます。

26

５．勇者テス政宗の必殺の一撃（２）【問題③】• 勇者テス政宗はレベルに応じて「必殺の一撃」がでる確率が上がります。このとき同値分割を行い、境界値分析をしてテストケースを作成してください。
• レベルの最大値は99です– Lv 1～20 ：5%– Lv 21 ～ 50 : 10%– Lv51 ～ 98：20%– Lv99 ：30%
（個人演習:5分、意見交換：5分）

27

５．勇者テス政宗の必殺の一撃（３）【③解答例】
入力(境界値)(代表値※)

出力100 ~110エラー

99

9951~98

70

20%

21~50

30

10%

1~20~0

10-10

無効

30%

有効5%
エラー

無効
28

※代表値は他の数字でも構いません５．勇者テス政宗の必殺の一撃（４）•

代表値と境界値によるテストケース

No

テストデータ期待結果（必殺の一撃のでる確率）１110（代表値）

エラー

２100（下限）

エラー

３99（境界値/代表値）

30%

４98（上限）20%５70（代表値）

20%

６51（下限）20%７50（上限）10%８30（代表値）

10%９21（下限）10%1020（上限）

5%1110（代表値）

5%121（下限）5%130（上限）エラー

14-10（代表値）

エラー

６．勇者テス政宗の武器（１）• 勇者テス政宗では様々な武器があります。
アイテム

けやきのぼうニンジンの短剣
きこりの大斧龍の槍
草薙の剣

攻撃力タイプ強化

5 片手持ち20 片手持ち25 両手持ち50 両手持ち90 片手持ち

不可能
不可能
不可能
可能
可能

30

６．勇者テス政宗の武器（２）【問題④】• 盾を装備しているときに、両手持ちの武器を装備しようとすると「装備できません」というエラーメッセージがでます。
• このメッセージの表示有無をテストするとき、同値分割法を用いて同値クラスを作成し、テストデータを選択してください。

（個人演習:2分、意見交換：8分）

31

６．勇者テス政宗の武器（３）【問題④】盾を装備中に、エラーメッセージ「装備できません」の表示有無をテストする。
アイテム

攻撃力タイプ強化

けやきのぼう5 片手持ち不可能

ニンジンの短剣
きこりの大斧龍の槍
草薙の剣

20 片手持ち25 両手持ち50 両手持ち90 片手持ち

不可能
不可能
可能
可能

（個人演習:2分、意見交換：8分）

32

６．勇者テス政宗の武器（４）【④解答例】盾と武器の装備
入力

出力

片手持ち：
・けやきのぼう・ニンジンの短剣
・草薙の剣
両手持ち：
・きこりの大斧・龍の槍「装備できません」のエラーメッセージなし「装備できません」のエラーメッセージあり※赤字がテストデータ。
同値クラス内から一つ選択できていれば良い。

33

６．勇者テス政宗の武器（５）【問題⑤】• 武器屋ではお金を払うことで武器を強化できます。強化した武器は攻撃力が10増えます。
ただし、強化できない武器を選択したときは必ず失敗します。もちろんお金は返ってきません。
• 武器強化が成功か失敗かのテストをするとき、同値分割法を用いて同値クラスを作成し、テストデータを選択してください。
（個人演習:2分、意見交換：8分）

34

６．勇者テス政宗の武器（６）【問題⑤】
武器強化の成功・失敗をテストするアイテム
けやきのぼうニンジンの短剣
きこりの大斧龍の槍
草薙の剣

攻撃力タイプ
5 片手持ち20 片手持ち25 両手持ち

強化
不可能
不可能
不可能

50 両手持ち90 片手持ち可能
可能（個人演習:2分、意見交換：8分）

35

６．勇者テス政宗の武器（７）【⑤解答例】武器強化
入力

出力

強化不可能：
・けやきのぼう・ニンジンの短剣
・きこりの大斧
強化可能：・龍の槍
・草薙の剣

強化失敗
強化成功

※赤字がテストデータ。
同値クラス内から一つ選択できていれば良い。

36