はじめに

ソフトウェアテストにおいて使用されるブラックボックステスト技法の1つに「同値分割(Equivalence Partitioning)」があります。入力データを同じような振る舞いをするグループ(同値クラス)に分割し、それぞれのグループから代表的な値を選ぶことで、効率的にテストしようというものです。
今回は、この「同値分割」のキモについて、例を用いて説明してみようと思います。

例)ユーザ年齢入力

条件:ユーザ年齢の入力フィールドとして、18歳以上100歳以下の値を受け付ける。

有効同値クラス(例):25, 50, 75
無効同値クラス(例):
  18未満の整数値:10, 17
  100を超える整数値:101, 120
  整数ではない値:abc(文字列)、25.5(浮動小数点)

テストケースとしては、各同値クラスから任意の値を選んでテストすることで、全数(0~125)をテストするより手間(ケース作成/実施/検証など)が削減できます。

隠れた無効同値

上記は、ChatGPTに「同値分割とは?」と問い合わせた場合の例ですが、実際に使われる場面を想像しながら 「無効同値クラス」を考えてみると、もう少しテストケースが出てきそうです。

整数の値:マイナス値(-1以下)、上限超え(126以上、??桁以上)
整数ではない値:半角英字(大文字/小文字)、半角記号(空白含む)、小数(小数点以下??桁)

機能依存の無効同値

また既存のライブラリ(ロジック)を流用した場合など、気付かないところに落とし穴が待っていることがあります。
例えば、年金受取のプログラムから年齢入力のところだけを流用した場合など、年齢入力に加えて 繰り上げ/繰り下げ年金の受け取り(例. 60、65、70、…)を想定して、いくつかの条件が隠れている 場合も否めません。

まとめ

何となく全て揃ってそうな条件を提示されると、「あ~なるほど、これでケースを作れば良いんだ」と勘違いしてしまうかもしれませんが、もう少し突っ込んで考えておかないと、後で残念な結果になったりします。同値分割では、同値クラスから任意の値を選んでテストするテスト手法ですが、実際にどこまで考えて、どこまで品質を担保するのかについては、関係者に相談して、一緒に検討することをお勧めします。