境界値分析は、ある範囲内の境界値の代表値を含めるようにテストを設計するソフトウェアテスト手法です。このアイデアは境界に由来しています。[1]システムをテストするためのテストベクトルの集合があるとすれば、その集合上にトポロジーを定義できます。同値分割理論で定義される同じ同値クラスに属する入力は基底を構成します。基底集合が隣接しているため、基底集合の間には境界が存在します。境界の両側にあるテストベクトルは境界値と呼ばれます。実際には、これにはテストベクトルを順序付けでき、個々のパラメータが何らかの順序(部分順序または全順序)に従うことが必要になります。
正式な定義
正式には、境界値は以下のように定義できます。
- テストベクトルの集合をX 1、...、X nとします。
- ≤としてそれらの上に定義された順序関係があると仮定しましょう。
- C 1、C 2 を2つの同等のクラスとします。
- テストベクトルX 1 ∈ C 1かつX 2 ∈ C 2であると仮定します。
- または の場合 、クラスは同じ近傍にあり、値は境界値です。
簡単に言えば、同値パーティションの最小エッジと最大エッジの値がテストされます。値はソフトウェア コンポーネントの入力範囲または出力範囲である場合もあれば、内部実装である場合もあります。これらの境界はソフトウェア障害につながるエラーが発生する一般的な場所であるため、テスト ケースで頻繁に実行されます。
応用
ソフトウェア コンポーネントへの予想される入力値と出力値は、コンポーネント仕様から抽出する必要があります。次に、値は識別可能な境界を持つセットにグループ化されます。各セット、つまりパーティションには、コンポーネントによって同じように処理されると予想される値が含まれます。テスト データ範囲のパーティション分割については、等価パーティションテスト ケース設計手法で説明されています。テスト ケースを設計するときは、有効なパーティションと無効なパーティションの両方を考慮することが重要です。
デモンストレーションは、 Javaで記述された関数を使用して行うことができます。
クラス Safe { static int add ( int a 、int b ) { int c = a + b ;
if ( a >= 0 && b > = 0 && c < 0 ) { System.err.println ( "オーバーフロー!" ) ; } if ( a < 0 && b < 0 && c > = 0 ) { System.err.println ( "アンダーフロー! " ) ; }
戻り値: c ; } }
コードに基づいて、[ a,b ]の入力ベクトルが分割されます。カバーする必要があるブロックは、オーバーフロー ステートメントとアンダーフロー ステートメントであり、これら 2 つのどちらでもありません。コード レビュー自体から、3 つの同等のクラスが生成されます。

整数のサイズは固定されていることに注意してください。
- MIN_VALUE ≤ x + y ≤ MAX_VALUE
入力パラメータaとbは両方とも整数であるため、それらには全順序が存在することに注意してください。等式を計算すると、次のようになります。
- x + y = 最大値
- MIN_VALUE = x + y
境界上にある値(その値を含む)が返されます。つまり、これらの( a,b )のペアは有効な組み合わせであり、アンダーフローやオーバーフローは発生しません。
一方で:-
- x + y = MAX_VALUE + 1
無効な組み合わせである( a,b )のペアを与えると、オーバーフローが発生します。同様に:-
- x + y = MIN_VALUE - 1
無効な組み合わせである ( a,b )のペアが与えられ、アンダーフローが発生します。
境界値(オーバーフローの場合のみ描画)は、右側の図にオレンジ色の線で示されています。
別の例として、入力値が整数として表される年の月である場合、入力パラメータ「month」には次のパーティションが含まれる可能性があります。
... -2 -1 0 1 ................... 12 13 14 15 ....
--------------|-----------------|-------------- ----
無効なパーティション 1 有効なパーティション 無効なパーティション 2
2 つのパーティション間の境界は、アプリケーションの動作が変化する場所であり、実数ではありません。境界値は、境界にある最小 (または最大) 値です。数値 0 は最初のパーティションの最大値、数値 1 は 2 番目のパーティションの最小値で、どちらも境界値です。テスト ケースは、各境界上またはその両側にある入力または出力を生成するように作成する必要があります。これにより、境界ごとに 2 つのケースが作成されます。境界の両側のテスト ケースは、テスト対象のコンポーネントで可能な限り最小の増分である必要があります。整数の場合、これは 1 ですが、入力が 2 桁の小数の場合は .01 になります。上記の例では、境界値は 0、1、および 12、13 にあり、それぞれをテストする必要があります。
境界値分析では、無効なパーティションは必要ありません。温度が 10 度以下の場合にヒーターがオンになる例を考えてみましょう。2 つのパーティション (温度≤10、温度>10) と、テストする 2 つの境界値 (温度 = 10、温度 = 11) があります。
境界値が無効なパーティション内にある場合、テスト ケースはソフトウェア コンポーネントが制御された方法で値を処理するように設計されます。境界値分析はテスト サイクル全体で使用でき、すべてのテスト フェーズに等しく適用できます。
参考文献
- ^ Craig, Rick David; Jaskiel, Stefan P. (2002). 体系的ソフトウェアテスト。Artech House。pp . 155–156。ISBN 9781580537926. 2024年2月25日閲覧。
外部リンク
- 試験基準ワーキング パーティの Web サイト
