スキルアップ
「同値分割法」テスト技法解説
同値分割法とは?
同値分割法とは、処理が同等になると想定される入力値などのグループ(同値クラスや同値パーティションと呼びます)を識別し、各グループに対するテストケースを最低1つずつ作成するテスト技法です。入力値の他に時間や出力結果なども同値分割法の対象になります。この技法を使うことで、テストケースのカバレッジを示した上で、テストケースの件数を削減できます。
<同値パーティションとは?>
同値パーティションとは、処理が同等になると想定される入力値などをまとめたグループを指します。
同値パーティションは、「有効同値パーティション」と「無効同値パーティション」に分類されます。
例えば、生年月日などの月の入力を考えてみましょう。「1から12」は正しい月の入力値であるため、有効同値パーティションとなります。一方、「0以下」、「13以上」、「文字や記号などの数字以外」は月の入力値として正しくない値であるため、無効同値パーティションとなります。
同値パーティションは、同値クラスとも呼ばれています。同様に、有効同値パーティションと無効同値パーティションも有効同値クラスと無効同値クラスと呼ばれますが、それぞれの意味は変わりません。
テスト設計全般については、こちらのページもご覧ください。
同値分割法のメリット
ソフトウェアやシステムには、入力値や条件の数、およびその組み合わせの数が膨大になることがあります。考えられるパターン全てをテストすることは、ほとんどの場合は不可能です。そのため、テスト担当者はテストケースを削減しなければなりませんが、むやみに削減することはできないため、慎重にテストケースの削減を検討しなければなりません。
同値分割法では、出力が同等になると想定される入力値などを同値パーティションとして識別し、識別した同値パーティションから最低1つ代表値を決めてテストします。これは、代表値でテストした結果、欠陥が見つかれば、同値パーティション内の他の値でも同じ欠陥が見つかると予想ができ、欠陥が見つからなければ、同値パーティション内の他の値でも欠陥が見つからないと予想できる、という考え方に基づいています。そのため、テストケースのカバレッジを示した上で、テストケースの件数を削減でき、テストの工数を効率的に削減することが可能となります。
同値分割法によるテストケースの作成手順
ここからは、以下の仕様を例として、同値分割法によるテストケースの作成手順を説明します。
<ECサイトの送料判定システム>
あるECサイトでは、商品の購入時に送料が発生します。送料はお届け先の地域によって異なり、購入手続き時にお届け先の地域をプルダウンメニュー(1つのみ選択可で複数選択不可)から選択することで、その地域の送料を表示します。プルダウンメニューには47都道府県が選択肢として表示されます。地域ごとの送料は以下のとおりです。
●300円:首都圏(東京、埼玉、千葉、神奈川)
●700円:北海道、沖縄
●500円:首都圏、北海道、沖縄以外の国内地域
お届け先の地域が未選択の場合は「お届け先の地域を選択してください」というエラーメッセージが表示されます。
この仕様に基づき、各地域に応じた送料が正しく設定されているかを確認します。
ステップ1:同値パーティションを識別する
仕様から有効同値パーティションと無効同値パーティションをそれぞれ識別します。
まず、お届け先地域が未選択の場合はエラーメッセージが表示されるため、選択肢にある47都道府県が有効な値であることが分かります。さらに処理(送料)が同等になるグループを分類すると、首都圏(東京、埼玉、千葉、神奈川)が300円、北海道、沖縄が700円、首都圏、北海道、沖縄以外の国内地域が500円と3つのグループに分けることができるため、「首都圏(東京、埼玉、千葉、神奈川)」、「北海道、沖縄」、「首都圏、北海道、沖縄以外の国内地域」の3つのグループが有効同値パーティションとなります。また、お届け先の地域が未選択の場合はエラーメッセージが表示されるため、無効な値であることが分かります。そのため、「未選択」は無効同値パーティションとなります。
よって、「首都圏(東京、埼玉、千葉、神奈川)」、「北海道、沖縄」、「首都圏、北海道、沖縄以外の国内地域」の3つの有効同値パーティションと、「未選択」の1つの無効同値パーティションで、合計4つの同値パーティションを識別することができました。
今回は簡単な例だったため、頭の中で考えて同値パーティションを導き出しましたが、図などで同値パーティションを整理することもあります。そうすることで視覚的に分かりやすく表現することができます。
ステップ2:それぞれの同値パーティションに対して、テストケースを作成する
ステップ1で識別した4つの同値パーティションに対して、テストケースを作成します。それぞれの同値パーティションに対して、代表値を最低1つ決めます。代表値は同値パーティションの範囲内の値であれば、どの値にしても問題ありません。
同値分割法を適用しないと、48件(有効な値47件と無効な値1件)ものテストケースが必要になりますが、同値分割法を適用することで、テストケースを4件(有効な値3件と無効な値1件)に削減することができます。
同値分割法の注意点
要件定義書や基本設計仕様書などの文章から読み取れる同値パーティションと実際のコードから読み取れる同値パーティションは一致しないことがあります。
こちらは極端な例ですが、上述したECサイトの送料判定システムがこのように1つの都道府県ごとに判定処理を行う実装になっていた場合、仕様から読み取れる同値パーティションに基づいて同値パーティションカバレッジ100%を達成しても、抜け漏れが発生し、検出できない欠陥が存在する可能性があるため注意が必要です。そのため、正確を期すには、仕様書などの文章から読み取れる同値パーティションと実際のコードから読み取れる同値パーティションが一致しているかどうかを確認すると良いでしょう。
また、このような例で同値分割法を適用しても、お届け先地域が「北海道」の同値パーティション、お届け先地域が「青森」の同値パーティション……という、値が1つのみの各同値パーティションをテストしなければならないため、テストケースを削減できません。このように効率的にテストケースを削減できない場合があることにも注意が必要です。設計や実装を見直し、よりシンプルなものに修正すると良いでしょう。
まとめ
処理が同等になると想定される入力値などを同値パーティションとして識別し、同値パーティションに対してテストケースを作成するテスト技法「同値分割法」についてご紹介しました。同値分割法は、処理が同等になると想定される入力・時間・出力などのグループが識別できる場合に有効です。このような場合に、テストカバレッジを維持しながら、効率的にテストケースを削減することができます。
対象が数値で、値の増減に順序性がある場合は、同値分割法をベースとした境界値分析の適用が有効です。GIHOZを使うと、数直線型のモデルを作成して直感的に同値パーティションを整理し、境界値分析を行うことができます。また、GIHOZでテストケースを自動生成することで、漏れなくテストケースを洗い出すことができます。テストのカバレッジを維持しながら、効率的にテストケースを削減できる同値分割法をぜひ活用してみてください。
なお境界値分析の解説記事については、こちらのページもご覧ください。
この記事は面白かったですか?
今後の改善の参考にさせていただきます!