スキルアップ

「同値分割法」テスト技法解説

「同値分割法」テスト技法解説

同値分割法とは?

同値分割法とは、処理が同等になると想定される入力値などのグループ(同値クラスや同値パーティションと呼びます)を識別し、各グループに対するテストケースを最低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でテストケースを自動生成することで、漏れなくテストケースを洗い出すことができます。テストのカバレッジを維持しながら、効率的にテストケースを削減できる同値分割法をぜひ活用してみてください。

なお境界値分析の解説記事については、こちらのページもご覧ください。

SNSシェア

この記事は面白かったですか?

今後の改善の参考にさせていただきます!

Search Articles By The Cast出演者/執筆者から記事を探す

Search Articless By The Categoryカテゴリから記事を探す

Ranking

ランキング

もっと見る