今回はシステムテストを行うに辺り、基本的な技法となる『同値分割』について解説します。
テスト対象は、下図のように顧客情報を登録する為の画面です。
そこには「年齢」という項目の欄があり、2桁までの数値の入力が許容されています。
そして登録された年齢からシステム側で成人か未成年か判別をして、登録完了メールの内容を送り分けするという仕組みです。
さて、この入力欄の動作をテストする為に、入力する値を洗い出していきましょう。
許容する二桁の値は0歳から99歳という事で100個あります。
それに加えて、エラーケースも検証しなくてはいけませんので、
全てのパターンを網羅しようとなると100回以上の入力を繰り返さなくてはなりません。
これでは時間が掛かって仕方がありません。
そこで、便利なのが同値分割です。
この考え方では、入力値のグループを整理して同値クラスというものを定義していきます。
0から99まである数字については、"未成年"と"成人"の二つの「有効同値クラス」に分ける事が可能です。
つまり、いちいち100回も入力しなくても、未成年の0~19までの値をどれか、成人の20~99までの値をどれか入力すれば、
システム的には同じ事なので後は省略してOKという事になります。
対して「無効同値クラス」というものも存在します。
今度はエラーになる値を、グループごとに分類していきます。
これも20歳であろうが99歳であろうが"成人"の有効同値クラスであり、入力検証は一度だけで充分という考え方と同じように、
100歳であろうが、300歳であろうが、"3桁以上の数値が入力された"時は同じ種類のエラー、無効同値クラスです。
他には-1などの0以下の値である"負数"と、1以上ではあるものの0.5などの"小数"の値がエラーとして返される無効となるクラスとしては代表的です。
このように考え得るエラーの種類を洗い出していきます。
もしかするとここで疑問が湧く方もいるかも知れません。
それは「100歳以上」「小数」「負数」は、すべてひっくるめて無効同値クラスとして、省略出来るのでは?という事です。
例えば↑のように「-10」と入力しても、「0.5」と入力しても、
返ってくるエラーメッセージは一様に「2桁以下の整数を入力してください」となるからです。
しかし、くれぐれも忘れてはならないのは、同値クラスとは「同じ原因で・同じ結果になる」という事です。
エラーメッセージという結果の部分は同じですが、原因はそれぞれ異なります。
この原因と結果という部分が同じか否かを考えて分類する事が、同値分割の肝となります。
また、上図の場合では文字種制限のバリデーションも掛けて「半角数字のみ入力してください」というエラーメッセージを表示させた方が親切かも知れません。
更に余談になりますが、
↑ のケースでは利用者の視点では一見、どうしてエラーになってるかが分かりにくいと思います。
これは全角数字で入力した為にエラーになったというケースです。
利用者からすれば、2桁の整数を入力した事には間違いないのですから、このエラーメッセージはやはり不親切に感じるでしょう。
このように同値分割的な考え方を習慣化していると、テスト仕様書にも落とし込みやすく打鍵時の抜け漏れ防止となります。
以下は同値分割を用いたテスト仕様書作成の一例です。(画像を拡大してご覧下さい)
また、上述のように必然的に入力値パターンの定石を把握する事になる為、
仕様自体の過不足・不適切な点にあらかじめ気付き、探索的テストの際にも不具合の検知力向上に繋がります。