同値クラスの境界(最小値・最大値・その手前と直後)を集中的にテストする技法。バグの大半は境界に集まる という経験則に基づく。
概要
ソフトウェアのバグは off-by-one エラー (> と >= の取り違え、ループの 1 回多い・少ないなど)が圧倒的に多い。これらは 境界値だけが問題 で、クラス内の他の値は正しく動く。
境界をテストすれば、バグの 80% が捕まる。
境界値テストの基本パターン
「年齢が 18 以上 65 以下なら有効」という仕様の場合:
有効範囲: 18 〜 65
テストすべき境界値:
17 ← 下限の手前(無効)
18 ← 下限ちょうど(有効)
19 ← 下限の直後(有効)
64 ← 上限の手前(有効)
65 ← 上限ちょうど(有効)
66 ← 上限の直後(無効)
各境界 ±1 を必ずテスト すれば、> と >=、< と <= の取り違えを確実に検出できる。
よくある境界値
| 値の種類 | 必ずテストする境界値 |
|---|---|
| 数値(範囲あり) | min - 1, min, min + 1, max - 1, max, max + 1 |
| 数値(自然数) | 0, 1(0 は無効、1 は有効など) |
| 文字列長 | 0, 1, max, max + 1 |
| 配列 | 空配列, 1 件, 規定上限 |
| 日付 | 月末(28/29/30/31), 年末(12/31→1/1), うるう年(2/29) |
| 時刻 | 23:59:59, 00:00:00, タイムゾーン境界 |
同値分割との関係
同値分割 で入力空間をクラスに分け、 そのクラスの境界を限界値分析でテストする という関係。両者は必ずペアで使う。
同値分割: 入力空間 → クラスに分ける(マクロ視点)
限界値分析: 各クラスの境界を集中的にテスト(ミクロ視点)
AI 駆動開発との関係
AI が生成するテストは ハッピーパス中心 で境界値を忘れがち。明示的に指示することで網羅性が劇的に上がる。
AI への指示テンプレート:
対象: PriceCalculator.applyDiscount(amount)
仕様: 1 円以上 1,000,000 円以下が有効
技法: 限界値分析
境界値: 0, 1, 2, 999999, 1000000, 1000001 を必ずテスト
追加: 負数 / 小数 / null / NaN / Infinity
人間が 境界値リストを事前に渡す ことで、AI が境界バグを見逃さなくなる。AI 駆動開発で「動いたのに本番で落ちた」を防ぐ最重要技法。
関連記事
- 開発手法ガイド:テスト技法編 — 限界値分析の位置づけ
- 開発手法ガイド:TDD 編 — テスト網羅性チェックリスト(日付の境界値含む)