ソフトウェアテストのために確保できる予算や工数には限りがあります。考えうる全てのケースでテストができれば安心ですが、限られた予算・工数で行うためには効率的にテストをすすめなくてはなりません。

「境界値テスト」は、テストの品質を保持しながら効率を高められるテスト技法です。この記事では境界値テストの概要と、具体的なテストケースの例を解説します。

境界値とは

境界値とは、プログラムにおいて条件の分岐が生じる境界となる値のことです。境界値について理解するために、1つの例にとって考えてみます。

たとえばRPGゲームで、主人公のレベルが10~30の間だけAというダンンジョンに入れるとしましょう。この場合の境界値はレベル10とレベル30です。この2つのレベル前後でダンジョンに入れるか否かが変わるからです。

境界値をより深く理解するためには、「同値クラス」についても知る必要があります。同値クラスとはプログラムの仕様や条件上、同じ出力結果になる入力値の集まりです。

同値クラスを前述のRPGゲームの例でみてみましょう。レベルの上限値は99とします。この場合、ダンジョンに入れるレベル10~30、ダンジョンに入れない1~9、31~99がそれぞれ同値クラスです。

正常に動作する同値クラスを「有効同値クラス」、エラーとなる同値クラスを「無効同値クラス」とも言います。上記例ではダンジョンに入れるレベル10~30が有効同値クラス、入れないレベル1~9と31~99が無効同値クラスです。

境界値テストとは

境界値テストとは、同値クラスにおいて境界となる値(境界値)を使いテストをする手法です。境界値テストは「境界値分析」とも呼ばれ、「ブラックボックステスト(※)」の1つに分類されます。

※ブラックボックステストとは
システムの内部構造を見ずに、入力するデータと出力結果だけに注目して行われるテストのこと。

ブラックボックステストとは?テスト技法をわかりやすく解説

境界値テストが採用される理由

ソフトウェアのテストにおいて、全ての入力値に対して同じテストを行うのは効率的ではありません。同値クラスのデータを入力してテストを行っても、同じ結果になると考えられるからです。

一方で境界値テストであれば、全ての入力値でテストするより、はるかに効率的にテストを実行できます。そのため境界値テストが採用されるわけです。

また境界値付近ではバグが含まれる可能性が高いことも、境界値テストが行われる理由といえます。境界を表す際の表記は、「~と同等」「~より大きい」「~より小さい」「~以上」「~以下」など種類が多い上に間違えやすいためです。

境界値テストのテストケース例

境界値テストを行う際のパターンは複数あり、それぞれ条件が異なります。テストによって採用されるパターンが異なることから、実際にどんなパターンがあるか覚えておきたいところです。以下、前述したRPGゲームの例を使い境界値テストのケース例を紹介します。

境界値の範囲に含まれる値と含まれない値をテストケースとする例

境界値の範囲に含まれる値(=有効同値クラス内の値)と、そうでない値(=無効同値クラス内の値)をテストケースとする例です。より具体的には有効同値クラスの最小値と最大値に加え、有効同値クラスの最小値-1、最大値+1をテストケースに使います。(有効同値クラスの最小値-1と最大値+1は、境界値の範囲に含まれない値(無効同値クラス内の値)となる)

RPGゲームの例でみると、ダンジョンに入れるレベル(有効同値クラス)は10~30までなのでテストケースに使う値は以下の通りです。

・レベル10(有効同値クラスの最小値)とレベル9(最小値-1)
・レベル30(有効同値クラスの最大値)とレベル31(最大値+1)

境界値の範囲に含まれる値と含まれない値をテストケースとする例

ISTQB(国際ソフトウェアテスト資格認定委員会)は、このパターンを境界値テストの正式な考え方と判断しています。

境界値とその両隣をテストケースとする例

境界値(=有効同値クラスの最小値・最大値)と隣接する両方の数値をテストケースとする例です。RPGゲームの例にあてはまると、以下のようになります。

・レベル10(境界値/有効同値クラスの最小値)と、その両隣のレベル9・レベル11
・レベル30(境界値/有効同値クラスの最大値)と、その両隣のレベル29・レベル31

境界値とその両隣をテストケースとする例

「境界値の範囲に含まれる値と含まれない値をテストケースとする例」では、有効同値クラス最小値・最大値の左隣り・右隣どちらの数値を選ぶかが問題となります。正しい方を選ばないと、テストの意味がなくなってしまうからです。(例:本来はレベル9をテストすべきなのに、レベル11でテストしてしまう)

その点、あらかじめ両隣をテストするようにテストケースを設計しておけば、その心配がありません。この例はISTQBの考え方とは異なりますが、確実にテストを行うためこのパターンが採用されることも多いです。

無効なデータの端もテストケースとする

境界値を含め、無効同値クラスの端にある値もテストケースとするパターンです。前述のRPGゲームを例にとると、以下8種類のテストケースが必要となります。

【無効同値クラスであるレベル1~9の両端に該当する以下レベル】
0、1、9、(10)

【境界値/有効同値クラスの両端に該当する以下レベル】
(9)、10、30、(31)

【無効同値クラスであるレベル31~99の両端に該当する以下レベル】
(30)、31、99、100

無効なデータの端もテストケースとする

入力可能な値全てがテスト対象に含まれる場合、仕様を確認した上で無効な値に対してもテストケースが必要となることがあります。このパターンに該当する際は、無効同値クラスの両端についてもテストケースを作るわけです。

まとめ

境界値は条件分岐の境界にあたる値です。境界値を使った境界値テスト(境界値分析)と呼ばれるテスト技法は、効率的にソフトウェアテストをすすめるのに適しています。境界値の範囲内(有効同値クラス)と範囲外では、それぞれテスト結果が同じになると考えられるためです。

また境界値付近は、「=、>、<」を組み合わせた様々な記述が行われることから、プログラムの記述ミスが発生しやすくなります。その結果、境界値付近にはバグが含まれやすくなるのです。境界値テストは、これらのバグを効率的に発見するのにも適したテスト技法と言えます。