用語集 · テスト設計
同値分割
英語: Equivalence partitioning
別名: 同値分割法, 同値クラス, 同値クラステスト, 同値分析
定義
システムが同じように扱うべき入力をグループ(同値クラス)に分け、各グループから代表値を 1 つずつ選んでテストするテスト設計技法です。
同値分割(同値クラス分割とも呼ばれます)は、取り得る入力を、どの値でも同じ振る舞いになるはずのパーティションに分ける技法です。パーティション内の 1 つの値が正しく動けば他の値も動くとみなし、1 つが失敗すれば他もおそらく同じように失敗すると考えます。そのため、すべての値をテストする代わりに、パーティションごとに代表値を 1 つテストします。
具体例:18 歳から 60 歳まで受け付ける
フォームが 18 以上 60 以下の年齢を整数で受け付けるとします。
| パーティション | 有効? | 代表値 | 期待結果 |
|---|---|---|---|
| 18 未満 | 無効 | 10 | 拒否:「18 歳以上である必要があります」 |
| 18〜60 | 有効 | 35 | 受け付け |
| 60 より大きい | 無効 | 75 | 拒否 |
| 数値以外 | 無効 | abc |
拒否:「数値を入力してください」 |
| 空 | 無効 | (空欄) | 拒否:「年齢は必須です」 |
| 小数 | 無効 | 25.5 | 拒否 |
| 負の数 | 無効 | -5 | 拒否 |
概念上は 7 つのテストで入力空間全体をカバーできます。さらに境界値分析で、欠陥が最も起こりやすい数値パーティションの端にある 17、18、60、61 を追加します。この 2 つの技法はほぼ常にセットで使われます。
出力やその他の入力の分割
パーティションは数値に限りません。
- カテゴリ: 配送先の国フィールドは、国内、EU、その他の地域、禁輸対象国に分けられ、それぞれルールが異なるかもしれません。
- 出力: 税計算機に 3 つの税率区分があるなら、各区分に入る入力を選びます。
- 形式: メールアドレスは、有効、
@なし、ドメインなし、長すぎる、に分けられます。
無効パーティションは 1 つずつテストする
フォームに複数のフィールドがある場合、有効パーティションは自由に組み合わせてかまいませんが、無効パーティションは他のフィールドをすべて有効にしたうえで 1 つずつテストします。無効な年齢と無効なメールアドレスを同時に送信すると、最初のバリデーションエラーが 2 つ目を隠してしまい、両方のチェックが機能しているかどうか判断できません。
よくある間違い
- パーティションの誤り。 パーティションは仕様と、システムの実際の振る舞いから導きます。フォームがすべて受け付けるとしても、コードが 18〜25 歳を別扱いしている(たとえば保険料が異なる)なら、それは別のパーティションです。
- 有効パーティションだけ。 入力処理の欠陥の大半は無効パーティションに潜んでいます。
- パーティションで止める。 パーティションごとに 1 つの値では、端での off-by-one エラーは捉えられません。境界値を追加します。