
【初心者向け】境界値分析について
本記事ではテスト技法の一つの「境界値分析」について解説していきます。
1. 境界値分析とは

境界値分析とは、仕様条件の境界となる値とその隣の値に対してテストする技法のことです。
境界値とは、ある範囲の最小値または最大値などの同値分割した領域の端にあたる値です。
具体的には「未満」や「以下」などが該当し、こういった境界部分は、間違いを引き起こしやすく、不具合が潜んでいる可能性が高いとされます。
境界値を狙ってテストすることで、仕様の認識ミスや実装ミスによる不具合を検出できます。
2. 境界値分析のメリット

境界値テストでは、バグや欠陥が発生しやすい条件づけの境界値前後を対象範囲として指定し、テストを行います。
境界付近にバグや欠陥が発生しやすい理由は、主に下記の2つです。
1.境界の指定条件に誤解が生じやすいため
境界の指定条件には、「以上」「~より大きい」「以下」「~より小さい」「未満」「~と同等」など、複数の記述方法があります。記述のルールが明確になっていないと誤解が生じやすく、想定外の動作をする場合があります。
2.コーディング時に記述ミスが起こりやすいため
プログラムの仕様条件を正確に理解していても、コーディング時の設定ミスを完全に防ぐことは困難です。境界を表す記号や数字などは特に記述ミスを起こしやすく、開発仕様書の指示とは異なる条件を指定してしまうケースは珍しくありません。
3. 境界値テストの手順

境界値テストの手順は以下の3段階に大別されます。
・境界を見つける
・境界値を決める
・テストする値を決める
ここからは、各フェーズの作業内容について解説します。
境界値テストの手順を正確に把握し、実際のテスト作業に役立てましょう。
1.境界を見つける
境界値テストを行う際にはまず、同値分割法などを用いて「出力が切り替わる境界」を見つける必要があります。
ここでの重要なポイントは、「仕様・設計書などを基に、境界値となる部分を数直線などで図解すること」です。
前述の通り、仕様・設計書の「以下」と「未満」、コーディングの「≧」と「>」などの記載は、担当者によって認識の相違・誤解が生じ、思わぬミスに繋がることもあるのです。
テストを行う際にはできる限り曖昧な表現・記載を避けるよう心がけましょう。
以上をふまえ、見つけた境界値の図を作成し、「具体的にどのような境界値を検証すべきなのか?」を正しく把握・整理することが大切です。
2.境界値を決める
境界値=「ある範囲の最小値」、もしくは「最大値などの同値分割した領域の端となる値」です。
境界を見つけた後は、境界値を正式に決定します。
決定する境界値は主に、「有効同値クラスの最小値と最大値」に該当します。
これらはテストケース作成の要となるため、ミスや抜け漏れのないよう注意しましょう。
3.テストする値を決める
境界値の決定後は、テストする値を決めます。
テストする値の候補は、以下の3つです。
・境界値
・境界値の1つ下の値
・境界値の1つ上の値
上記の中でも「境界値」と「境界値の1つ上の値」を省略せずにテストすれば、不具合・バグ抽出の確率が高くなります。
しかし、業務効率化の一環で省略されるケースもあるため、留意しておきましょう。
4. 境界値分析で見逃しがちなポイント

境界値分析にはいくつかの注意点があります。
ここでは、境界値分析を行う際に見落とされがちなポイントについて説明します。
1.非整数または非数値データの考慮
通常、整数や数値データに焦点を当てますが、非数値データ(文字列や特殊文字など)の境界も重要です。
これらのデータに対してもシステムが適切に処理できるかどうかを確認する必要があります。その他にも以下のような境界があります。
位置の境界…端、境目。(画面端にオブジェクトを配置する、など)
状態の境界…状態と状態の境目。(待機中→スキャン中→印刷中→待機中と状態遷移するコピー機で、スキャン中から印刷中に変わる瞬間(前後)に他の操作を割り込ませる、など)
2.時間や日付データの境界値
時間や日付を扱うシステムでは、月末、年末、閏年といった特別な時点での挙動をテストすることが重要です。
3.異常なデータへの対応
通常のデータだけでなく、極端に大きな値や不正な形式のデータに対するシステムの反応もテストします。
4.複数の条件が組み合わさる場合のテスト
システムが複数の条件を同時に処理する場合、それらの条件が重なる境界値もテストして、複雑な条件での不具合を排除します。
5.データの取り違えに注意
境界値分析では、似たような値を持つ異なるデータが存在することがあります。
例えば、ある機能に対する上限値と別の機能に対する下限値が似ている場合、これらの似た境界値を間違えてテストケースに使うと、本来のテストの目的を見失い、正確な結果を得られなくなる恐れがあります。
特に、条件やデータの種類が似ているが微妙に異なる場合、それぞれを正確に識別し、適切なテストケースを設定する必要があります。
このような混同を避けるためには、テストデータを慎重に選び、それぞれの目的に合ったテストケースを作成することが重要です。
これらのポイントに留意して境界値分析を行うことで、システムの信頼性を高め、重要な不具合を見逃さないようにすることができます。
5. 例題

あるECサイトで注文金額に応じて送料を判定する処理のテストを設計しています。
仕様は次の通りです。
【送料割引の仕様】
①注文金額の1円未満は切捨て
②注文金額が4,900円以上の場合、送料無料を表示する
③注文金額が4,900円未満の場合、送料無料対象外を表示する
④注文金額はマイナスにならないものとする
1.同値クラスに分割
まずは有効同値クラスと無効同値クラスに分割しましょう。この例題では送料が無料になる有効同値クラスが1つ、送料が無料にならない無効同値クラスが1つ存在します。
各同値クラスの条件は、
有効同値クラス(送料無料):注文金額≧4,900円
無効同値クラス(送料無料対象外):0円≦注文金額<4,900円
のように不等式を使って表現することができます。
2.境界値の特定
次は分割された同値クラスをもとに、境界値を特定しましょう。有効同値クラスにギリギリ入る値は4,900、ギリギリ入らない値は4,899です。
この2つの値は境界値としてテストする必要があります。
無効同値クラスにギリギリ入る値は4,899と0です。
仕様の④に「注文金額はマイナスにならないものとする」とありますので、-1はテスト対象から除外しましょう。
4,899は有効同値クラスと境界値を共有しているので、重複しないように0だけをテストする境界値に追加すればOKです。
以上の結果をまとめると、テストする必要がある境界値は0、4,899、4,900の3つであることがわかりました。
3.テストケースに落とし込む
それでは、特定できた境界値をもとにテストケースを作成しましょう。実際のテストケースより少し簡略化していますが、次のようなイメージです。
番号 条件 操作 期待値
1 注文金額=0 送料の表示を確認する 送料無料対象外が表示されること
2 注文金額=4,899 送料の表示を確認する 送料無料対象外が表示されること
3 注文金額=4,900 送料の表示を確認する 送料無料が表示されること
6. 最後に
今回はブラックボックステストのテスト技法、「境界値分析」をご紹介しました。
押さえておくべきポイントとしては、
・同値分割法と同様に入力値を「同値クラス」に分割する
・同値クラスの条件を不等式の形で表現できる場合に利用可能
・各同値クラスの範囲に「ギリギリ入る値」と「ギリギリ入らない値」を「境界値」としてテストする
・隣接する同値クラスは境界値を共有するため、テストすべき値を列挙するときは重複に注意する
といったものがあります。
境界値分析を使うと同値クラスの境目だけ確認すればよいので、効率よくテストが進められます。
最後まで読んでいただきありがとうございました。