公開:
境界値テストとは?定義やメリット、設計のポイントについて解説

入力値や条件の境界に注目し、仕様と実装のズレを確かめる「境界値テスト」。発生頻度の高いバグを効率的に検出する手法として、多くの現場で活用されています。
一方で、境界値テストについて、「どういった場面で実施すべきなのか」「そもそもなぜ境界値を調べるべきなのか」といった疑問を持つテスト担当者も少なくありません。境界値テストを通して品質を向上させるためには、手法の背景にある考え方や設計・実施の手順を体系的に理解することが重要です。
本記事では、境界値テストについて、定義や実際の適用シーン、設計のポイントまでを解説します。
開発プロジェクトにおける『第三者検証』の重要性とは│資料ダウンロード
目次
境界値テストとは
まずは、境界値テストの定義および関連する手法との違いや関係について整理します。背景にある考え方やほかの手法との差異について理解しておくことで、境界値テストを適切な場面で取り入れ、品質保証につなげることができます。
定義
境界値テストとは、入力値や条件の「境界」に注目することで、不具合を効率よく検出するテスト手法で、境界値分析とも呼ばれます。
例えば「年齢が0歳以上120歳以下のときに登録可能」という仕様がある場合、次の値を対象としたテストケースを作成します。
- 最小値およびその前後(-1,0,1)
- 最大値およびその前後(119,120,121)
境界値付近は、比較演算子の入力ミスや解釈違い(「<=」と書くべきところ、「<」と書いてしまうなど)や浮動小数点の振る舞いにより、バグが発生しやすい傾向があります。境界値テストでは、このようなリスクの高い箇所を優先的にテストする手法として、多くのソフトウェア開発で使用されています。
同値分割との違い
境界値テストとよく混同される手法の一つに「同値分割」があります。どちらも入力値の妥当性を確認するために用いられますが、同値分割は意味やふるまいが等しい値のグループを前提に設計するのに対し、境界値テストはそのグループ同士の“切れ目”に注目します。
例えば「1~10がOK、それ以外がNG」という仕様において、同値分割と境界値テストでは、それぞれ次のようなテストが行われます。
同値分割
入力値を「0以下」「1~10」「11以上」の3つの同値クラスに分け、それぞれから代表値(例:-1、3、13)を選んでテストを行う

境界値テスト
OKとNGの分かれ目である「10」と「11」といった、クラスの境界にある値に注目してテストを行う

同値分割は条件分岐の実装漏れがないかを確認するのに向いているのに対し、境界値テストは、比較演算子のミスや範囲のズレといった実装ミスを検出するのに適しています。両者を併用することで、条件分岐の多い複雑な機能においても、リスクの高い不具合を優先的に洗い出すことが可能になります。
境界値テストが効果を発揮する場面
フォームの入力やパスワード設定など、一般ユーザーにとって身近な多くの機能において、境界値テストは重要な役割を果たしています。ここからは、境界値テストが効果を発揮する具体的なシーンを見ていきましょう。
数値の上下限が決まっている項目
年齢や金額、日付といった数値を入力する項目では、仕様上の許容範囲が明確に定義されていることが多く、その上下限が境界値テストの対象になります。
例えば、「年齢」が0歳から120歳まで許容されている場合、以下のような値が境界値として検証されます。
- 境界直前:-1
- 境界:0、120
- 境界直後:121
日付の入力値について検証をする際には、UI上の上下限に加えて、「開始日と終了日の前後関係」や「未来日・過去日を受け入れるかどうか」といった時間ならではの制限・条件についても十分な検証が欠かせません。
文字数制限のある項目
ユーザ名・パスワードの設定などで文字数制限を実装する場合も、境界値テストが重要な役割を果たします。
例えば、パスワードの文字数制限が「8文字以上16文字以内」とされている場合、以下のような長さの入力を確認します。
- 境界直前:7文字
- 境界:8文字、16文字
- 境界直後:17文字
業務システムでは、実務上の都合で制約が発生する場合もあります。「UI上は30文字入力可能だが、帳票印字の関係で『20文字以内』が実質的な制限となっている」といった場合には、実際の業務フローも考慮に入れた検証が必要です。
検索条件・フィルターの処理
業務システムやECサイトなど、検索機能やフィルター機能のあるソフトウェアでも、境界値テストを用いた検証が必要です。
例として、ECサイトで「5,000円以下の商品を表示する」というボタンを押した際に5,001円以上の商品が検索結果に混入しないか、逆に5,000円以下の商品の表示が漏れることがないか、といった確認を行います。
検索結果の表示漏れは、重要なデータの確認漏れや購買機械の喪失につながるため、仕様通り表示されるか正確に検証する必要があります。
テスト観点の洗い出しとケース設計
次に、境界値テストを実際に活用するための「テスト観点の見つけ方」と「ケース設計の進め方」について解説します。仕様から境界を正しく抽出し、テストケースに反映する力が、品質保証の精度を左右します。
境界値の見つけ方
境界値テストの設計にあたって重要なポイントとなるのが、「境界」を漏れなく捉えること。仕様を丁寧に読み取り、どこにルールの分かれ目があるかを整理していきます。
基本的な観点としては、上述の「数値の上下限」「UI上の文字数制限」などを念頭に置くとよいでしょう。
境界を洗い出す際は、仕様で許容される値(正常系)と、その外側の値(異常系)の両面を含めることが重要です。「1~10が有効」とされている場合、正常系である「1」や「10」に加えて、異常系である「0」や「11」もテストケースに含める必要があります。
境界値テストケースの作り方
洗い出した境界に基づき、具体的なテストケースを設計します。境界値テストでは、基本的に「境界直前・境界・境界直後」の3点をそれぞれ取り上げて確認するのが一般的です。
例として、「1~10までが有効範囲」という仕様に対しては、以下のようなケースを用意します。
- 境界直前:0
- 境界:1、10
- 境界直後:11
このように、範囲の外側と内側が対になるように確認の対象を定めることによって、バリデーションや条件分岐のロジックに漏れがないかを検証できます。
また、対象によっては、例外的な条件や極端な入力値に対する観点を追加することも有効です。例えば、「0」は実装によっては有効な最小値として扱われる一方で、初期値や未入力と誤認されるリスクもあります。こうした境界的な値の扱いは、フェイルセーフ(異常が起きたときにシステムを安全側に倒すこと)の観点からも慎重に確認する必要があります。
応用編:デシジョンテーブルとの併用例
複雑な条件分岐を伴う機能では、デシジョンテーブルを用いた整理と、境界値テストの組み合わせが効果的です。
例えば、会員ステータスと購入金額によって割引条件が変わるような機能があるとします。この場合、まずデシジョンテーブルを使って、ステータスや金額帯の組み合わせパターンを以下のように整理し、それぞれのケースにおいて割引有無や金額の計算結果を明示します。
デシジョンテーブル(会員ステータス × 購入金額)
ケース | 会員ステータス | 購入金額 | 割引適用 | 備考 |
1 | 一般 | 4,999円以下 | なし | 基準未満 |
2 | 一般 | 5,000円以上 | あり | 境界条件をまたぐケース |
3 | プレミアム | 4,999円以下 | あり | 会員ステータスによる特例 |
4 | プレミアム | 5,000円以上 | あり | 両条件満たす |
そのうえで、金額条件の境界(例:4,999円と5,000円)に注目し、テーブルで定義された条件をまたぐ境界値をテストすることで、網羅性と精度の両立を図ることができます。
さらに、条件が3つ以上になるようなケースでは、コンビネーションテスト(複数の入力条件から代表的な組み合わせを抽出してテストする手法)の一部として境界値を組み込むことも可能です。すべての組み合わせを検証することが難しい場合でも、境界を含む条件に絞って重点的に確認することで、実装上のリスクを効率よく抑えることができます。
境界値テストで品質リスクを見逃さない体制を作ろう
発生頻度の高い不具合を早期に発見できる境界値テストは、多くの開発現場で品質保証に欠かせない手法となっています。
入力値や日付・数値などの範囲制約がある機能では、境界に着目したテストを設計・実施することにより、比較的少ないテストケースで品質の安定性を大きく向上させることができます。
一方で、境界の洗い出しやケース作成には一定の経験やノウハウが求められ、自社のテスト設計に不安を感じている担当者も少なくありません。
AGESTでは、テスト設計段階から伴走し、プロジェクト全体にわたって品質保証を支援しています。仕様や業務要件に即した設計のサポートから、実行・分析・改善提案までを一貫してご支援することで、開発チームのリソースを最適化しつつ、テスト品質の向上を後押しします。
自社のテスト計画・設計に不安を感じている方は、ぜひAGESTにご相談ください。