キーワード
» 2011年11月07日 00時00分 公開

情報マネジメント用語辞典:同値分割(どうちぶんかつ)

equivalence partitioning / equivalence class partitioning

[@IT情報マネジメント編集部,@IT]

 ソフトウェアテストテストケースを設計する代表的なテクニックの1つ。システム機能における入力?出力関係の集合をいくつかの同値クラスに分け、各クラスから代表値を選んでテストデータとする方法をいう。

 同値分割は、主にシステムやプログラムの仕様に基づいて行われる機能テストに用いられる。システムの機能とは「入力に対して出力を返すこと」と考えられる。入力に対して出力が正しいか(あるいは間違っているか)を検証するとき、「出力結果が同じと期待される入力の集合」を等価とみなせば、入力を試行する回数の削減が図れる。

 簡単な例として年齢で料金を判定するシステムを考える。「12歳以上は通常料金」「6歳以上12歳未満は小児料金」「6歳未満は無料」「入力を認める数値は0以上150未満の整数」という仕様があったとする。全数テストを行おうとすると入力を150回以上繰り返さなければならないが、「通常料金」「小児料金」などの同じ結果となる範囲を1つとみなせば全体は5つになるので、5回のテストとする――。これが同値分割の基本的な考え方である。

事前条件 判定式 入力領域に含まれる値 期待される結果
(150歳以上) 150≦x 150, 151, 152, 153…… エラー
12歳以上(150歳未満) 12≦x<150 11, 12, 13, 14……149 通常料金
6歳以上12歳未満 6≦x<12 6, 7, 8, 9 ,10, 11 小児料金
6歳未満 0≦x<6 0, 1, 2, 3, 4, 5 無料
(0歳未満) x>0 ……-5, -4, -3, -2, -1 エラー
料金判定の例

 入力として「11歳から150歳まで」のどの値を選んでも、出力は「通常料金」の結果が得られると期待できる。このような同じ結果が得られるデータの範囲や共通属性を持つ集合を同値クラスと呼ぶ。この同値クラスから任意の入力値(代表値という)を最低1つ選び、それをテストデータとする方法が同値分割法である。同値クラスを分けることを「同値分割」、分けられた同値クラスを使って行うテストを「同値テスト」「同値クラステスト」と呼称を使い分ける例も見られる。

 同値分割は、同値クラスの内側ではプログラムの内部処理や振る舞いも共通だとみなして、同値クラスを単位にテストを行えばよいと考えるテスト省力化技法である。出力が共通だからといって内部処理も同一だとは必ずしもいえないが、特にロジックを変える必要がなければそのような実装はされていないと考えるのは自然な推測といえよう。同値の考え方は、テストデータを無作為抽出する場合に比べて、はるかに効力のあるテスト設計指針とされる。

 同値分割は一般的なテスト分類では、外部仕様からテストケースを作っていくブラックボックステストの技法とされるが、ソフトウェアテスト実務では、出力結果のほかに処理方法や内部変数、時刻、イベント発生前後の値、インターフェイスパラメータなども同値分割の検討対象となる場合がある。

 数学(集合)上の同値クラス(同値類)概念は、同じ集合から分割された同値類は相互に共通部分がないか、共通部分があるならば完全に一致する存在である。ソフトウェアテストで同値分割を行う場合も、対象となる出力領域や内部変数領域を、抜けや交わりのないMECEな集合に類別できる切り口を使わなければならない。

 同値分割の大きな利点として、仕様上のエラーチェックができる点が挙げられる。仕様に対して正常な出力する同値クラスを「有効同値クラス」、エラーとなることが期待される同値クラスを「無効同値クラス」という。例えば、無効同値クラスの入力値に対して“エラーメッセージ”が出力されるのは、テストとしては正常ということになる。同値分割の教科書的手順では無効同値クラスを機械的にテスト対象にするが、このことによってホワイトボックステストでは発見しにくい異常処理(エラー処理)の実装漏れをチェックできる。

 同値分割は通例、境界値分析と併用される。

参考文献

▼『実践的プログラムテスト入門――ソフトウェアのブラックボックステスト』 ボーリス・バイザー=著/小野間彰、山浦恒央、石原成夫=訳/日経BP社/1997年8月(『Black-Box Testing: Techniques for Functional Testing of Software and Systems』の邦訳)

▼『ソフトウェア・テストの技法〈第2版〉』 グレンフォード・J・マイヤーズ、トム・バジェット、テッド・M・トーマス、コーリー・サンドラー=著/長尾真=監訳/松尾正信=訳/近代科学社/2006年7月(『The Art of Software Testing: 2nd ed』の邦訳)

▼『はじめて学ぶソフトウェアのテスト技法』 リー・コープランド=著/宗雅彦=訳/日経BP社/2005年11月(『A Practitioner's Guide to Software Test Design』の邦訳)

▼『経験ゼロでもできるプログラミング現場の単体テスト』 片桐一宗=著/翔泳社/2009年5月


Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ