CTS-KB

同値分割

どうちぶんかつ

Equivalence Partitioning 同値クラス分割 同値分割法 EP
#テスト #テスト技法 #ブラックボックステスト

入力空間を「同じ振る舞いをするはずのクラス」(同値クラス)に分割し、各クラスから代表値を 1 件ずつテストする技法。テストケース数を爆発させずに網羅性を担保する。

概要

「年齢」のように入力範囲が広いとき、 全ての値をテストするのは不可能 。しかし「振る舞いが同じ範囲」をクラスとして括れば、各クラスから 1 件ずつテストすれば十分とみなせる。これが同値分割の発想。

入力クラス分け
年齢が 18 以上 65 以下なら有効無効(17 以下)/ 有効(18-65)/ 無効(66 以上)
商品名が 1〜100 文字無効(0 文字)/ 有効(1-100)/ 無効(101 以上)
注文金額が 0 円超無効(0 以下)/ 有効(0 超)

同値クラスの種類

種類説明
有効同値クラス仕様上正しいとされる入力年齢 = 30
無効同値クラス仕様上拒否される入力年齢 = -1 / 200 / “abc”

無効同値クラスも複数に分けて、各エラーパスを網羅する。

限界値分析と組み合わせる

同値分割だけでは 境界のバグ を検出できない(クラスの真ん中を 1 件テストするだけだから)。 限界値分析 と必ず組み合わせる。

同値分割:    無効(17 以下) / 有効(18-65) / 無効(66 以上)

限界値分析:  17, 18, 19, 64, 65, 66 を確実にテスト

AI 駆動開発との関係

AI に「テスト書いて」と指示するだけでは、 ハッピーパス(有効クラスの中央値)ばかり 書きがち。次のように指示すると網羅性が上がる:

PriceCalculator.applyDiscount(amount) のテストを書いてください。

技法: 同値分割 + 限界値分析
有効クラス: 1 〜 1,000,000 円
無効クラス: 0 円以下 / 1,000,001 円以上 / 負数 / 小数 / null

各クラスから 1 件ずつ + 境界値(0, 1, 1000000, 1000001)を必ず含めて。

人間が 「同値クラスを設計し、AI に渡す」 ことで、AI が機械的に書いてもしっかり網羅される。

関連記事

関連用語