ソフトウェアテスト技法は、思いついた値を並べる代わりに、その値を選ぶ理由を説明するための方法です。入力の範囲を整理したいのか、境目の判定を確かめたいのか、複数の条件を組み合わせたいのかで、使いやすい技法が変わります。
この記事では、同値分割、境界値分析、デシジョンテーブルを、小さな予約機能の架空仕様で使い分けます。テスト全体の計画や、必要なケース数を一律に決める記事ではありません。
テストで答える問いから技法を選ぶ
JSTQBのFoundation Levelシラバスは、これらを仕様からテストを導くブラックボックステスト技法として説明しています。内部のコードを見なくても、期待する振る舞いを材料に考えられます。JSTQBシラバス 4.1・4.2
最初に「何を確認したいか」を一文にします。予約数の上限を確かめたいのに、画面の全項目を無目的に組み合わせると、どの判定を通したか分からなくなります。逆に、承認者と申請状態の関係が問題なら、数値の境界だけでは答えられません。
以下は技法を選ぶための整理例です。
| 確かめる問い | 着目するもの | 最初に作る材料 |
|---|---|---|
| どの種類の入力を受け付けるか | 同じ扱いになる入力のまとまり | 有効・無効な範囲の一覧 |
| どこで結果が切り替わるか | 範囲の端とその近く | 境界と期待結果 |
| 条件が重なると何が起きるか | 条件の組み合わせ | 条件と結果の対応表 |
同値分割で、同じ扱いになる入力を分ける
同値分割は、同じように処理されると想定する入力などをグループに分け、代表値を選ぶ考え方です。有効な値だけでなく、無効な値のまとまりも検討します。JSTQBシラバス 4.2.1
ここでは「予約数は整数の1〜5だけを受け付ける」という架空仕様を置きます。整数を入力した場合の数値判定に範囲を絞ると、次のように整理できます。
| 入力のまとまり | 代表値の例 | 期待結果 |
|---|---|---|
| 0以下 | 0 | 予約数として受け付けない |
| 1〜5 | 3 | 予約数として受け付ける |
| 6以上 | 6 | 予約数として受け付けない |
この表は文字列、小数、空欄の扱いをまだ含みません。それらが入力できる画面なら、別の入力条件として仕様を確認します。「無効値を一つ試したので、どんな誤入力も確認できた」とは扱わないでください。
境界値分析で、扱いが変わる境目を確かめる
境界値分析は、順序のある入力範囲の境界に着目します。上の例なら、受け付ける範囲の手前・端・内側を確認するために、0、1、2と4、5、6を候補にできます。JSTQBシラバス 4.2.2
期待結果は、0と6が拒否、1・2・4・5が受付です。これは上記の架空仕様から導いた例であり、どの機能にも同じ六つを使うわけではありません。
特に「5以下」と「5未満」の違いは、代表値3だけでは確かめられません。テストケースには入力値に加え、なぜそこが境界なのかを示す仕様の一文も添えると、仕様変更時に見直せます。
条件が組み合わさるなら表で整理する
次に「会員で、かつ予約数が有効な場合だけ会員割引を適用する」という架空ルールを加えます。JSTQBが説明するデシジョンテーブルは、こうした条件の組み合わせと結果を整理する技法です。JSTQBシラバス 4.2.3
| 会員である | 予約数が有効 | この仮例の期待結果 |
|---|---|---|
| はい | はい | 予約を受け付け、割引する |
| いいえ | はい | 予約を受け付け、割引しない |
| はい | いいえ | 予約を受け付けない |
| いいえ | いいえ | 予約を受け付けない |
表にすると、「入力エラーの場合にも割引額を表示するのか」といった未決の仕様が見つかることがあります。正解が決まっていない欄を、実装の現在の動作だけで埋めないようにします。
この四行は条件の組み合わせを整理したものです。各行でどの予約数を使うかは、前の同値分割や境界値の検討と組み合わせます。表の行数と、最終的なテストケース数は必ずしも一致しません。
ケースには選んだ理由と期待結果を残す
テストを実行する人が判断できるよう、仕様の参照先、入力、期待結果、選んだ理由を一緒に残しましょう。入力3なら「有効範囲の代表」、入力5なら「上限を含むことの確認」という違いがあります。
画面で拒否されても、API側で同じ条件を確認する必要があるかは別に考えます。また、権限、状態の変化、同時操作などは今回の数値例の対象外です。技法を一つ使ったことを、機能全体の品質保証にはしないでください。
まず一つの入力項目について、有効範囲と境界、その根拠の仕様を書き出してみましょう。テストの水準と要求の対応はV字モデルの解説で整理しています。開発体制に関するご相談はSES事業をご覧ください。