テストケースを作るときに使う「テスト技法」を、例を使って説明します。例の題材は架空の映画館「シネマてすと」です。各技法の最後に、おてすと亭の予約フォームでどこに使えるかのヒントを置いています。
テストケースを考えるときは、「何を確かめるか」と「どんな値や操作で確かめるか」を分けて考えます。前者がテスト観点、後者がテスト技法です。
何を確かめるか。画面表示、入力チェック、計算、画面遷移など。
確かめるための値や操作をどう選ぶか。同値分割、境界値分析など。
たとえば「年齢の入力欄で、正しい値だけが通るか」を確かめたいとき、観点は「入力チェック」です。そのとき「どの年齢を入れて試すか」を決めるのが技法です。全部の年齢を試すことはできないので、技法を使って少ない件数で、バグが見つかりやすい値を選びます。
技法は大きく2種類あります。仕様書をもとに機械的に値を選ぶブラックボックステスト技法と、経験や勘をもとに狙いを決める経験ベースのテスト技法です。分類は JSTQB Foundation Level シラバス(v4.0)に沿っています。名前は短くしています(例:デシジョンテーブル=デシジョンテーブルテスト、チェックリストベース=チェックリストベースドテスト)。
結果が同じになる入力をひとつのグループ(同値クラス)にまとめ、各グループから代表の値を1つずつ選んで試す技法です。
「3歳も5歳も10歳も、どれも子ども料金になる」なら、その中のどれを試しても結果は同じはずです。だから代表を1つ試せば十分、という考え方です。正しい値のグループ(有効同値クラス)だけでなく、弾かれるべき値のグループ(無効同値クラス)も必ず作ります。
| グループ | 種類 | 代表値 | 期待結果 |
|---|---|---|---|
| マイナス | 無効 | -5 | エラー |
| 0〜2歳 | 有効 | 1 | 無料 |
| 3〜12歳 | 有効 | 8 | 1,000円 |
| 13〜59歳 | 有効 | 30 | 1,900円 |
| 60〜120歳 | 有効 | 75 | 1,300円 |
| 121以上 | 無効 | 150 | エラー |
| 数字以外 | 無効 | abc | エラー |
同値クラスの境目と、そのすぐ外側の値を試す技法です。同値分割とセットで使います。
プログラムは「12以下」を「12未満」と書き間違えるような、境目での間違いが特に起きやすいです。グループの真ん中(8歳など)を試しても、この間違いは見つかりません。だから境目そのものを狙います。
2値境界値分析は、境目の値とその隣(グループの外側)の2つを試します。上の図の10個の値です。3値境界値分析は、境目の両隣も加えて3つずつ試します(例:11・12・13)。3値の方が件数は増えますが、「12だけ特別扱いしている」ような間違いにも強くなります。まずは2値から始めれば十分です。
複数の条件の組み合わせで結果が変わるとき、すべての組み合わせを表にして、漏れなく試す技法です。
「会員なら割引」「水曜なら均一料金」のように条件が2つ以上重なると、頭の中だけで考えると「両方当てはまる場合」を忘れがちです。表にすると、仕様に書かれていない組み合わせも一目でわかります。
| ルール1 | ルール2 | ルール3 | ルール4 | |
|---|---|---|---|---|
| 条件:会員 | Y | Y | N | N |
| 条件:水曜日 | Y | N | Y | N |
| 結果:料金 | 1,200円 | 1,700円 | 1,200円 | 1,900円 |
ルール1は「会員割引とは併用しない」という一文がなければ、1,000円なのか1,200円なのか決まりません。表を作ることで、こうした仕様の抜けにも気づけます。また、ルール1とルール3は会員かどうかに関係なく同じ結果なので、「水曜日なら会員かどうかは問わない」と1列にまとめることもできます。
画面やデータの「状態」が操作によって切り替わるとき、すべての切り替わり(遷移)を通るようにテストする技法です。
「作り手がここで間違えやすい」という経験や知識をもとに、狙いを決めてテストする技法です。
仕様書には「全角数字を入れたらどうなるか」までは書いていないことが多いです。でも、現場ではそこでバグがよく出ます。過去に見たバグや、よくある実装ミスのパターンをリストにしておき、それを当てていきます。
| 狙い | 試す値・操作 |
|---|---|
| 未入力・空白 | 何も入れない、スペースだけ入れる、前後に空白を付ける |
| 文字の種類 | 全角と半角、ひらがなとカタカナ、記号、絵文字 |
| 数値の端 | 0、マイナス、小数、とても大きい数 |
| 日付の端 | 月末、月またぎ、年またぎ、うるう年 |
| 操作のくせ | ボタンの連打、ブラウザの戻る、入力途中での画面切り替え |
手順を事前に決めきらず、実際に触って学びながら、次に何を試すかをその場で決めていくテスト技法です。
テストケースどおりに上から流すと、「いつもと違う順番で操作したとき」のバグは見つかりません。探索的テストは、その隙間を埋めます。ただし「適当に触る」とは違います。何を探るかの目的(テストチャーター)と時間を決めて行い、やったことを記録します。
よくある確認項目をまとめたチェックリストを使い、漏れを防ぐテスト技法です。
入力フォームのように、どの画面でも同じような確認が必要になるものは、毎回ゼロから考えるより、チェックリストを使った方が速く、漏れも減ります。
仕様に書かれた内容を、そのまま1つずつ確認するテストです。値を選ぶ工夫がいらないので、技法は使いません。
画面に営業時間が表示されているか、注意書きの文言が正しいか、といった確認がこれにあたります。地味ですが、利用者が最初に目にする部分なので大事です。テスト設計ワークでは、技法の欄で「技法なし」を選びます。
シネマてすとの別のルールで、技法を使ってみましょう。自分で考えてから「答えの例を見る」を開いてください。
会員番号は「6桁の数字」で入力します。同値クラス(有効・無効)を挙げてください。
無効のクラスは「短すぎる」「長すぎる」「種類が違う」「空」に分けると、漏れにくくなります。
1回の購入で選べる座席は「1〜6席」です。2値境界値分析で試す値と、それぞれの期待結果を挙げてください。
3値境界値分析なら、さらに2席と5席も試します。
一般料金(1,900円)の人に、次のルールが加わりました。「学生証を見せると300円引き。ただし水曜日は全員1,200円で、学生割引とは併用しない」。条件と結果の表を作ってください。
| ルール1 | ルール2 | ルール3 | ルール4 | |
|---|---|---|---|---|
| 条件:学生 | Y | Y | N | N |
| 条件:水曜日 | Y | N | Y | N |
| 結果:料金 | 1,200円 | 1,600円 | 1,200円 | 1,900円 |
「学生で、しかも水曜日」のルール1が、組み合わせのバグが出やすい所です。会員割引(200円引き)も加えると条件が3つになり、8通りに増えます。
上の座席の状態遷移図で、「起きてはいけない遷移」を2つ以上挙げてください。
図にない矢印を「本当に起きないか」試すのが、状態遷移テストのもう半分です。
シネマてすとの「料金の計算」を15分で探索的テストします。テストチャーター(対象・手段・目的・時間)を書いてみてください。
「手段」にどう揺さぶるかを書くと、ただ触るだけで終わらなくなります。
仕様の書き方を見ると、どの技法が合うかがだいたいわかります。
| 仕様にこう書いてあったら | 合う技法 |
|---|---|
| 「〜の場合は〇〇、それ以外は△△」 | 同値分割 |
| 「〜以上」「〜まで」「〜文字以内」「〜桁」 | 境界値分析 |
| 「AかつBの場合」「Aの場合は、ただしBなら」 | デシジョンテーブル |
| 「〜すると〇〇画面へ」「〜の状態では〜できない」 | 状態遷移 |
| 仕様には書いていないが、間違えやすそう | エラー推測 |
| 操作の組み合わせや順番が多く、ケースにしきれない | 探索的テスト |
| どの画面にも共通する確認 | チェックリストベース |
| 表示内容や文言をそのまま確認する | 技法なし |
1つの機能に1つの技法、ではありません。たとえば人数の入力なら、同値分割でグループを作り、境界値分析で境目を試し、エラー推測で全角数字を入れてみる、というように組み合わせて使います。
このサイトで扱っている内容が、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(日本語版) の目次にもとづいています。