
【初心者向け】同値分割法について
本記事ではテスト技法の一つの「同値分割法」について解説していきます。
1. 同値分割法とは

同値分割法はブラックボックステスト(プログラムのソースコードを見ないで行うテスト)の技法のひとつで、同じ出力結果が得られる入力値をグループに分類し、それぞれのグループから代表となる入力値をピックアップしてテストします。
同値分割法では、同じ出力結果が得られる入力値のグループのことを「同値クラス」と呼びます。
さらに同値クラスは、正常値のグループである「有効同値クラス」と異常値のグループである「無効同値クラス」の2種類に分類されます。
例えば「入力された半角文字が数字かどうか」の判定を行う処理の場合、有効同値クラスには「0」~「9」の数字10個が含まれ、無効同値クラスには「A」、「a」、「*」といった数字以外の文字すべてが含まれます。
2. 同値分割法のメリットとデメリット

同値分割法はブラックボックステスト(プログラムのソースコードを見ないで行うテスト)の技法のひとつで、同じ出力結果が得られる入力値をグループに分類し、それぞれのグループから代表となる入力値をピックアップしてテストします。
同値分割法では、同じ出力結果が得られる入力値のグループのことを「同値クラス」と呼びます。
さらに同値クラスは、正常値のグループである「有効同値クラス」と異常値のグループである「無効同値クラス」の2種類に分類されます。
例えば「入力された半角文字が数字かどうか」の判定を行う処理の場合、有効同値クラスには「0」~「9」の数字10個が含まれ、無効同値クラスには「A」、「a」、「*」といった数字以外の文字すべてが含まれます。
1.メリット
同値分割テストのメリットはテスト工数を削減できることです。本来、入力可能なすべての値を確認するのが理想ですが、値の数が膨大すぎることを考えると現実的ではありません。
そのため、同値分割法を活用します。
出力確認をする値をテスト可能な数に絞り込めるため、テストにかかる工数を大幅に削減することができます。
また、無作為ではなく、同値パーティションで区分したところから絞り込むので、より効率的に不具合を検出することが可能です。
2.デメリット
テスト工数が縮小できる一方で、イレギュラーな不具合を見逃してしまいやすいという注意点もあります。同値分割法でテストする値はあくまでも「※代表値」なので、すべての値をテストしたということにはなりません。
※同値パーティションの「代表値」は境界値や中間値などが選ばれることが多いです。
万が一、同値パーティションの中に不具合が出る値があった場合、見逃してしまうリスクはあることは覚えておきましょう。
3. 同値分割法の使い所

1.出力が異なる「範囲」が存在する場合
出力が異なる「範囲」が存在する場合は同値分割法テストが活用できます。
例えば、オンライン商品販売システムの場合、以下のようなテスト対象があります。
・購入者の氏名を入力する際の入力可能文字種
・運営者の商品登録可能件数
・商品分類ごとの値段設定確認
同値分割法では、数値以外の区分けも可能なので、設定可能な値と設定不可の値をそれぞれ有効同値パーティション・無効同値パーティションとしてテストすることができます。
このような入力した値によって出力が異なる「範囲」が存在する場合は同値分割テストを実施しましょう。
2.仕様に有効値しか記載されていない場合
システムの仕様に有効値しか記載されていない場合も同値分割法の使いどころです。
仕様にない「無効同値パーティション」を識別・区分けすることで、開発では想定していなかった不具合を検出できる場合もあります。
より品質の高いソフトウェアを構築していくためにも、仕様に書かれていない部分にも着目してテストをすることが重要です。
4. 例題

ECサイトで会員の年齢に応じてお酒をカートに追加する際の制御に関するテストケースを設計しています。仕様の概要は次のとおりです。
会員の生年月日を元に算出された年齢がn歳のとき、
① 20≦n≦130の場合、成年なのでお酒をカートに追加できる
② 0≦n<20の場合、未成年なのでお酒をカートに追加できない
③ n>130の場合は生年月日の登録不備と判断し、お酒をカートに追加できない
1.同値クラスに分割
まずは有効同値クラスから考えましょう。20~130が有効同値クラスに分類されます。
0~19は「未成年なのでお酒をカートに追加できない」という無効同値クラス、131以上は「生年月日の登録不備と判断し、お酒をカートに追加できない」という無効同値クラスです。
追加できない理由が異なるため、別々にテストする必要があります。
成人(有効同値クラス)
20,21,22‥‥64,65,66‥‥128,129,130
未成人(無効同値クラス)
0,1,2‥‥9,10,11‥‥17,18,19
登録不備(無効同値クラス)
131,132,‥‥149,150‥‥
※上限値なし
2.代表値の選定
有効同値クラスの代表値ですが、20~130の整数であれば何でもかまいません。
真ん中の65を選んでもいいですし、50や100のようにキリがよい数を選んでも大丈夫です。
今回は65にしておきます。
0~19の無効同値クラスからは真ん中でキリがよい数が10なので、10を代表値にしましょう。
131以上の無効同値クラスには値の上限がないため、真ん中の値はありません。
ここではキリがよい150を代表値とします。
3.テストケースに落とし込む
各同値クラスの代表値が決まったので、各代表値をテストするためのテストケース(テスト項目)を作成してみましょう。
さきほど選定した3つの代表値の65、10、150についてテストケースを記述します。
実務で使うテストケースよりだいぶ簡略化していますが、下の表のようなイメージです。
番号 条件 操作 期待値
1 会員の年齢=65 お酒をカートに追加する カートに追加できること
2 会員の年齢=10 お酒をカートに追加する カートに追加できないこと
3 会員の年齢=150 お酒をカートに追加する カートに追加できないこと
5. 最後に
今回はブラックボックステストのテスト技法、「同値分割法」を解説しました。
さえておくべきポイントとしては、
・入力値を同じ出力結果が得られる「同値クラス」に分割する
・同値クラスには「有効同値クラス」と「無効同値クラス」がある
・「有効同値クラス」と「無効同値クラス」は複数存在する場合がある
・各同値クラスから代表値を最低1つ選ぶ
といったものがあります。
同値分割法は少ないテスト回数でより広い範囲をカバーするために有効なテスト手法ですが、システムによっては障害を見逃す可能性もあります。
このため、実際の現場では境界値分析と呼ばれるもう1つ別のテスト技法を併用しながら、テスト工程を実行することが一般的です。
次回は境界値分析について解説していきます。
最後まで読んでいただきありがとうございました。