同値クラステスト
ソフトウェアのすべての入力値をテストすることは、工数がかかり過ぎて現実的ではありません。 テスト工数を現実的な範囲に収めるためには、何らかの戦略を使ってテストケース数を削減する必要があります。
同値クラステストは、テストケース数を削減しつつ網羅性を落とさないようにするための手法です。 このレクチャーでは、同値クラステストを取り上げ、メリットや具体的な活用事例を解説します。
同値クラスとは
同値クラステストでは、システムに対する入力を「同値クラス」というグループに分割してテストケースを設計します。
同値クラスとは、テスト対象のシステムで同じように処理される値の集まりです。
18歳以上を成年、17歳以下を未成年と判定するプログラムを考えてみましょう。 このプログラムは、0以上の整数値を入力とし、成年または未成年を出力します。 このとき、入力値は次の2つの同値クラスに分割できます。
- 同値クラス1:0歳〜17歳(未成年)
- 同値クラス2:18歳以上(成年)
同値クラス1に属する値は、どの値を入力しても出力は「未成年」です。 このように、プログラムが同じ挙動となるような入力値をグルーピングした集まりを同値クラスといいます。
同値クラスの分類
同値クラスには、有効同値クラスと無効同値クラスという2つの種類があります:
- 有効同値クラス:システムやアプリケーションが受け入れるべき正しい入力値の範囲を表すクラスです。このクラスの代表値を使ってテストすることで、アプリケーションが正常に動作することを確認します
- 無効同値クラス:システムやアプリケーションが受け入れるべきでない入力値の範囲を表すクラスです。このクラスの代表値を使ってテストすることで、アプリケーションが適切なエラーメッセージを表示するか、予期しない動作をしないことを確認します
年齢を入力するフォームを考えてみましょう。 このフォームでは、0歳から160歳までの年齢を入力できるものとします。 このときは、
- 有効同値クラス:0~160歳
- 無効同値クラス:161歳以上
となります。 161歳以上の年齢はシステムに入力できない仕様のため、無効同値クラスに分類されます。
同値クラステストとは
同値クラステストとは、各同値クラスから少なくとも1つの代表値を選びテスト対象とする技法です。 すべての入力値ではなく代表値だけをテストするのでテストケース数を削減できます。 実施数は削減するものの、それぞれの同値クラスの代表値をテスト対象とするため、テストの網羅性を大きく犠牲にすることはありません。
同値クラステストの例
それでは例題を解いてみましょう。
ある Web サイトにおいてユーザー名の長さについてテストケースを作成せよ。
ユーザー名の制限は3文字以上かつ32文字以下である。
それでは、同値クラステストの考え方を使って解いていきましょう。 まずは、ユーザー名の文字列長を同値クラスに分類します。 今回のケースでは、1つの有効同値クラスと2つの無効同値クラスに分類できます。
- 有効同値クラス1:3文字から32文字
- 無効同値クラス1:0文字から2文字
- 無効同値クラス2:33文字以上
次に、それぞれのクラスからテストケースを選び出しましょう。
- 有効同値クラス1からの代表値
- 3文字(下限)
- 10文字(適当な中間値)
- 32文字(上限)
- 無効同値クラス1からの代表値
- 0文字(下限)
- 1文字(適当な中間値)
- 2文字(上限)
- 無効同値クラス2からの代表値
- 33文字(下限)
- 50文字(適当な中間値)
まとめ
このレクチャーでは、テスト手法の一つである同値クラステストを紹介しました。
- 同値クラステストは、テストケース数を削減しつつ網羅性を失わないようにテスト設計をするための手法です
- 同値クラステストは、システムへの入力値を同値クラスにグルーピングすることから始めます
- 同値クラスの代表値を選んでテストをすることでテストケース数を削減することができます