← おてすと亭 テスト練習帳

テスト技法ガイド

テストケースを作るときに使う「テスト技法」を、例を使って説明します。例の題材は架空の映画館「シネマてすと」です。各技法の最後に、おてすと亭の予約フォームでどこに使えるかのヒントを置いています。

どこから読む?技法を「なんとなく」使っている人は、上から順に読み、最後の腕試しで手を動かしてみてください。体系的に学び直したい人は、先にJSTQBとの対応で全体の中での位置を確かめると、知識を整理しやすくなります。

はじめに観点と技法は別のもの

テストケースを考えるときは、「何を確かめるか」と「どんな値や操作で確かめるか」を分けて考えます。前者がテスト観点、後者がテスト技法です。

テスト観点

何を確かめるか。画面表示、入力チェック、計算、画面遷移など。

テスト技法

確かめるための値や操作をどう選ぶか。同値分割、境界値分析など。

たとえば「年齢の入力欄で、正しい値だけが通るか」を確かめたいとき、観点は「入力チェック」です。そのとき「どの年齢を入れて試すか」を決めるのが技法です。全部の年齢を試すことはできないので、技法を使って少ない件数で、バグが見つかりやすい値を選びます。

技法は大きく2種類あります。仕様書をもとに機械的に値を選ぶブラックボックステスト技法と、経験や勘をもとに狙いを決める経験ベースのテスト技法です。分類は JSTQB Foundation Level シラバス(v4.0)に沿っています。名前は短くしています(例:デシジョンテーブル=デシジョンテーブルテスト、チェックリストベース=チェックリストベースドテスト)。

このページで使う例:シネマてすと の料金ルール
・年齢は 0〜120 の整数で入力する
・3歳未満:無料 / 3〜12歳:子ども 1,000円 / 13〜59歳:一般 1,900円 / 60歳以上:シニア 1,300円
・一般料金の人は、会員なら200円引き
・水曜日は一般料金の人が全員 1,200円(会員割引とは併用しない)
・座席は「空席 → 選択中 → 購入済み」と状態が変わる。選択中のまま10分たつと空席に戻る

ブラックボックステスト技法同値分割

結果が同じになる入力をひとつのグループ(同値クラス)にまとめ、各グループから代表の値を1つずつ選んで試す技法です。

「3歳も5歳も10歳も、どれも子ども料金になる」なら、その中のどれを試しても結果は同じはずです。だから代表を1つ試せば十分、という考え方です。正しい値のグループ(有効同値クラス)だけでなく、弾かれるべき値のグループ(無効同値クラス)も必ず作ります。

手順

  1. 仕様から、入力ごとに「結果が変わる区切り」を探す
  2. 区切りごとにグループを作る。弾かれるべき値のグループも作る
  3. 各グループから代表値を1つ選び、期待結果を書く

例:年齢の入力

グループ種類代表値期待結果
マイナス無効-5エラー
0〜2歳有効1無料
3〜12歳有効81,000円
13〜59歳有効301,900円
60〜120歳有効751,300円
121以上無効150エラー
数字以外無効abcエラー
よくある間違い有効なグループだけ作って、無効なグループ(マイナス、上限超え、数字以外、未入力)を忘れる。実際のバグは無効側に多くあります。
おてすと亭では大人・子どもの人数、フリガナの文字種、プランの種類など、「入れてよい値」と「弾かれる値」がある入力ならどこでも使えます。

ブラックボックステスト技法境界値分析

同値クラスの境目と、そのすぐ外側の値を試す技法です。同値分割とセットで使います。

プログラムは「12以下」を「12未満」と書き間違えるような、境目での間違いが特に起きやすいです。グループの真ん中(8歳など)を試しても、この間違いは見つかりません。だから境目そのものを狙います。

無効(〜-1) 無料 0〜2 子ども 3〜12 一般 13〜59 シニア 60〜120 無効(121〜) -10 23 1213 5960 120121 金色の線が境目。試すのは各境目の両側の値(目盛りは等間隔ではありません)
年齢の同値クラスと、2値境界値分析で選ぶ値

2値と3値

2値境界値分析は、境目の値とその隣(グループの外側)の2つを試します。上の図の10個の値です。3値境界値分析は、境目の両隣も加えて3つずつ試します(例:11・12・13)。3値の方が件数は増えますが、「12だけ特別扱いしている」ような間違いにも強くなります。まずは2値から始めれば十分です。

よくある間違い上限だけ試して下限を忘れる。または境目の内側(12)だけ試して外側(13)を試さない。境目は必ず「両側」をセットで試します。
おてすと亭では予約できる日付の範囲、人数の上限と下限、お名前やご要望欄の文字数、電話番号の桁数。仕様に「〜以上」「〜まで」「〜文字以内」と書いてある所が狙い目です。範囲の端を「含むかどうか」が仕様から読み取れない場合は、仕様の曖昧さとして指摘できます。

ブラックボックステスト技法デシジョンテーブル

複数の条件の組み合わせで結果が変わるとき、すべての組み合わせを表にして、漏れなく試す技法です。

「会員なら割引」「水曜なら均一料金」のように条件が2つ以上重なると、頭の中だけで考えると「両方当てはまる場合」を忘れがちです。表にすると、仕様に書かれていない組み合わせも一目でわかります。

手順

  1. 結果に影響する条件を洗い出す(はい/いいえで答えられる形にする)
  2. 条件の組み合わせを全部並べる(条件が2つなら4通り、3つなら8通り)
  3. 組み合わせごとに、仕様から期待結果を決める。決められないものは仕様の質問にする
  4. 結果が同じで、ある条件が結果に影響しない列はまとめてよい

例:一般料金の人の割引

ルール1ルール2ルール3ルール4
条件:会員YYNN
条件:水曜日YNYN
結果:料金1,200円1,700円1,200円1,900円

ルール1は「会員割引とは併用しない」という一文がなければ、1,000円なのか1,200円なのか決まりません。表を作ることで、こうした仕様の抜けにも気づけます。また、ルール1とルール3は会員かどうかに関係なく同じ結果なので、「水曜日なら会員かどうかは問わない」と1列にまとめることもできます。

よくある間違い条件を1つずつしか試さない(会員だけ、水曜だけ)。「両方当てはまる」「両方当てはまらない」の列が抜けると、組み合わせのバグが残ります。
おてすと亭では時間帯とプランの組み合わせ、特選コースの条件(人数と予約日)、記念日プレートを付けられるかどうか。仕様の4章が特に使いどころです。

ブラックボックステスト技法状態遷移

画面やデータの「状態」が操作によって切り替わるとき、すべての切り替わり(遷移)を通るようにテストする技法です。

空席 選択中 購入済み 座席を選ぶ 取り消す/10分経過 支払い完了 払い戻し(上映前のみ)
シネマてすと の座席の状態遷移図。4つの遷移がある

手順

  1. 状態と、状態を変えるきっかけ(操作や時間経過)を洗い出し、図にする
  2. すべての遷移を最低1回通るテストを作る(0スイッチカバレッジ)
  3. 起きてはいけない遷移も試す。例:購入済みの座席を、他の人が選択できないか
  4. 余裕があれば、遷移を2回続けたパターンも試す(1スイッチカバレッジ)。例:選択中 → 空席 → 選択中
よくある間違い「普通の流れ」(空席 → 選択中 → 購入済み)だけ試す。戻る遷移や、時間経過のようなユーザー操作以外のきっかけを忘れやすいです。
おてすと亭では入力・確認・完了の3画面の行き来。特に「戻る」で入力内容が残るか、「新しい予約をする」で初期化されるか、のように、遷移のあとに値がどうなっているかまで確かめます。

経験ベースのテスト技法エラー推測

「作り手がここで間違えやすい」という経験や知識をもとに、狙いを決めてテストする技法です。

仕様書には「全角数字を入れたらどうなるか」までは書いていないことが多いです。でも、現場ではそこでバグがよく出ます。過去に見たバグや、よくある実装ミスのパターンをリストにしておき、それを当てていきます。

狙い目の例

狙い試す値・操作
未入力・空白何も入れない、スペースだけ入れる、前後に空白を付ける
文字の種類全角と半角、ひらがなとカタカナ、記号、絵文字
数値の端0、マイナス、小数、とても大きい数
日付の端月末、月またぎ、年またぎ、うるう年
操作のくせボタンの連打、ブラウザの戻る、入力途中での画面切り替え
よくある間違い思いつきで試して記録を残さない。何を試したかを書いておくと、レビューで「その狙いは良い」「これが抜けている」と議論できます。
おてすと亭ではお客様情報の入力欄、日付の選び方、確認画面とのボタン操作。「普通の人ならこう入力しそう」という書き方を試すのも有効です。

経験ベースのテスト技法探索的テスト

手順を事前に決めきらず、実際に触って学びながら、次に何を試すかをその場で決めていくテスト技法です。

テストケースどおりに上から流すと、「いつもと違う順番で操作したとき」のバグは見つかりません。探索的テストは、その隙間を埋めます。ただし「適当に触る」とは違います。何を探るかの目的(テストチャーター)と時間を決めて行い、やったことを記録します。

テストチャーターの書き方

対象:座席の選択画面 手段:選択・取り消し・別の座席への変更を、いろいろな順番で組み合わせて 目的:表示されている座席の状態と、実際の状態のずれを探る 時間:20分

進め方のコツ

よくある間違い目的を決めずに触り始め、何をテストしたか後から説明できない。チャーターと記録があれば、立派なテスト結果になります。
おてすと亭では設計したテストケースを一通り実施したあとに、15分ほど探索的テストを足してみてください。日付・時間・人数・プランを「どの順番で選ぶか」は、テストケースだけでは試しきれない部分です。

経験ベースのテスト技法チェックリストベース

よくある確認項目をまとめたチェックリストを使い、漏れを防ぐテスト技法です。

入力フォームのように、どの画面でも同じような確認が必要になるものは、毎回ゼロから考えるより、チェックリストを使った方が速く、漏れも減ります。

入力欄のチェックリスト例

よくある間違いチェックリストを埋めることが目的になり、その画面ならではの仕様(料金計算など)を見落とす。チェックリストは土台で、他の技法と組み合わせて使います。
おてすと亭では仕様の5章の入力項目すべてに、上のチェックリストを当ててみてください。

技法を使わないもの技法なし(仕様確認)

仕様に書かれた内容を、そのまま1つずつ確認するテストです。値を選ぶ工夫がいらないので、技法は使いません。

画面に営業時間が表示されているか、注意書きの文言が正しいか、といった確認がこれにあたります。地味ですが、利用者が最初に目にする部分なので大事です。テスト設計ワークでは、技法の欄で「技法なし」を選びます。

おてすと亭では営業時間・定休日の表示、プランの料金表示、キャンセルポリシーの文言、完了画面の表示内容。
※「技法なし」はこのサイト独自の区分で、JSTQBの技法名ではありません。

練習腕試し

シネマてすとの別のルールで、技法を使ってみましょう。自分で考えてから「答えの例を見る」を開いてください。

同値分割

会員番号は「6桁の数字」で入力します。同値クラス(有効・無効)を挙げてください。

答えの例を見る
  • 有効:6桁の数字(例:123456)
  • 無効:5桁以下の数字(例:12345)
  • 無効:7桁以上の数字(例:1234567)
  • 無効:数字以外が混ざっている(例:12345a)
  • 無効:未入力

無効のクラスは「短すぎる」「長すぎる」「種類が違う」「空」に分けると、漏れにくくなります。

境界値分析

1回の購入で選べる座席は「1〜6席」です。2値境界値分析で試す値と、それぞれの期待結果を挙げてください。

答えの例を見る
  • 0席:購入できない(下限のすぐ外)
  • 1席:購入できる(下限)
  • 6席:購入できる(上限)
  • 7席:購入できない(上限のすぐ外)

3値境界値分析なら、さらに2席と5席も試します。

デシジョンテーブル

一般料金(1,900円)の人に、次のルールが加わりました。「学生証を見せると300円引き。ただし水曜日は全員1,200円で、学生割引とは併用しない」。条件と結果の表を作ってください。

答えの例を見る
ルール1ルール2ルール3ルール4
条件:学生YYNN
条件:水曜日YNYN
結果:料金1,200円1,600円1,200円1,900円

「学生で、しかも水曜日」のルール1が、組み合わせのバグが出やすい所です。会員割引(200円引き)も加えると条件が3つになり、8通りに増えます。

状態遷移

上の座席の状態遷移図で、「起きてはいけない遷移」を2つ以上挙げてください。

答えの例を見る
  • 購入済み → 選択中:買われた座席を、他の人が選べてしまう
  • 空席 → 購入済み:選択の手順を飛ばして購入できてしまう
  • 購入済み → 空席(上映後):払い戻しは上映前のみなので、上映後には起きてはいけない

図にない矢印を「本当に起きないか」試すのが、状態遷移テストのもう半分です。

探索的テスト

シネマてすとの「料金の計算」を15分で探索的テストします。テストチャーター(対象・手段・目的・時間)を書いてみてください。

答えの例を見る
対象:チケット購入画面の料金表示 手段:年齢・会員かどうか・曜日を、入れる順番を変えながら組み合わせる 目的:途中で条件を変えたときに、料金が正しく計算し直されるかを探る 時間:15分

「手段」にどう揺さぶるかを書くと、ただ触るだけで終わらなくなります。


まとめ技法の選び方

仕様の書き方を見ると、どの技法が合うかがだいたいわかります。

仕様にこう書いてあったら合う技法
「〜の場合は〇〇、それ以外は△△」同値分割
「〜以上」「〜まで」「〜文字以内」「〜桁」境界値分析
「AかつBの場合」「Aの場合は、ただしBなら」デシジョンテーブル
「〜すると〇〇画面へ」「〜の状態では〜できない」状態遷移
仕様には書いていないが、間違えやすそうエラー推測
操作の組み合わせや順番が多く、ケースにしきれない探索的テスト
どの画面にも共通する確認チェックリストベース
表示内容や文言をそのまま確認する技法なし

1つの機能に1つの技法、ではありません。たとえば人数の入力なら、同値分割でグループを作り、境界値分析で境目を試し、エラー推測で全角数字を入れてみる、というように組み合わせて使います。


学び直しJSTQBとの対応と、次に学ぶこと

このサイトで扱っている内容が、JSTQB Foundation Level シラバス(v4.0)のどこに当たるかの対応表です。体系的に学び直すときの地図として使ってください。

シラバスの節シラバスでの名前このサイトで練習できる場所
2.2.3確認テストとリグレッションテスト初心者コース STEP 1「テストの流れ」
3章静的テスト(レビュー)経験者コース:仕様書のあいまいな点を探す(設計ワークの答え合わせ「2」)
4.2.1同値分割法このページ、設計ワーク
4.2.2境界値分析このページ、初心者 STEP 1 問題1、設計ワーク
4.2.3デシジョンテーブルテストこのページ、設計ワーク(時間帯とプラン)
4.2.4状態遷移テストこのページ、設計ワーク(画面の行き来)
4.4.1〜4.4.3エラー推測、探索的テスト、チェックリストベースドテストこのページ、設計ワーク
5.5欠陥マネジメント初心者コース:バグ報告の書き方と練習

このサイトでは扱っていないこと

次のテーマは、テストを体系的に理解するうえで大事ですが、このサイトではまだ扱っていません。シラバスや書籍で学ぶときの目印にしてください。

節番号は JSTQB Foundation Level シラバス v4.0(日本語版) の目次にもとづいています。