同値分割および境界値分析とは何か?ブラックボックステストで使われる用語を解説

2022年7月6日

この記事では、「ブラックボックステスト」と「ホワイトボックステスト」についての解説から始まり、
記事後半ではブラックボックステストの代表的手法である「同値分割」と「境界値分析」について解説していきます。

テストとは何か

開発したシステムが正常に動くかどうかを試すことを「テスト」と言います。
テストではシステムが仕様書通りに作られているか、要望通りの機能や性能を満たしているか、システムをどのように動かしても不具合は発生しないかなど、様々な事柄を試していきます。

システムは「開発したら終わり」ではありません。テストを完了し、問題を洗い出し、それを修正することで、製品として世に送り出すことができます。

ブラックボックステストとホワイトボックステスト

テストには、テストケースの作り方の種類として「ブラックボックステスト」と「ホワイトボックステスト」という2種類の技法があります。

ブラックボックステストとは何か

ブラックボックステストとは、システムの内部構造を考慮せず、入力したデータと出力結果の整合性が取れているかという点に着目して実施するテスト技法です。
システムの仕様書からテストをするべき入力データとそれに対応する出力結果を導き出し、テストケースを作成します。
ブラックボックステストにおける代表的なテストケースの作成手法として「同値分割」と「境界値分析」の2種類があります。

ホワイトボックステストとは何か

ホワイトボックステストとは、ブラックボックステストとは反対に、システムの内部構造に着目して実施するテスト技法です。

内部構造はプログラムのソースコードに書かれている「中身」です。
仕様書が日本語で分かりやすく書かれているのに対し、内部構造はプログラミング言語を使用して、情報をどのように処理するか具体的に書かれています。
「機能仕様」は外から見たプログラムの動き、「内部構造」はプログラムの中身です。

ホワイトボックステストでは、プログラムの知識を持ったエンジニアが、プログラムが正しい動きをしているかをテストします。

これらブラックボックステストとホワイトボックステストについては、下記の記事もご参照ください。

同値分割と境界値分析

ここでは、ブラックボックステストにおける代表的なテストケースの作成手法である「同値分割」「境界値分析」について解説していきます。

同値分割とは何か

同値分割とは、入力データを仕様書から導き出した範囲ごとにグループ化し、グループの中で代表的な値を1つ、テストケースとして選ぶ方法です。

システムにとって正しい入力とされるグループを「有効同値クラス」、間違った入力とされるグループを「無効同値クラス」と言います。
たとえば「整数で年齢を入力して未成年かどうかを判断する」というシステムのテストケースを作る場合、有効同値クラスは「0~18」の値グループ、無効同値クラスは「19以上」の値グループと「-1以下」の値グループとなります。

同値分割では各値グループから1つテストケースを選びます。
すなわち前述の例では、以下のようにテストケースを選びます。

  • 有効同値クラスである「0~18」の値グループから「10」
  • 無効同値クラスである「19以上」の値グループから「25」
  • 無効同値クラスである「-1以下」の値グループから「-3」

このように、各グループを代表する値を1つテストケースに選ぶことにより、少ないテストケースで効率よくテストを実施できます

境界値分析とは何か

境界値分析とは、値グループの境界値をテストケースとして選ぶ技法です。
値グループの境界値とは、値グループ内の最大値、最小値を指します。

前述の「同値分割」と同様の例、「整数で年齢を入力して未成年かどうかを判断する」というシステムのテストケースを作る場合で見ていきましょう。有効同値クラスは「0~18」の値グループ、無効同値クラスは「19以上」の値グループと「-1以下」の値グループでした。

境界値分析では有効同値クラスに関しては最大値と最小値を、無効同値クラスでは境界となる値をテストケースとして選びます。
すなわち、テストケースは以下のようになります。

  • 有効同値クラスである「0~18」の値グループから「0」と「18」
  • 無効同値クラスである「19以上」の値グループから「19」
  • 無効同値クラスである「-1以下」の値グループから「-1」

同値分割が各グループから1つのテストケースを選ぶことに対し、境界値分析では、有効同値クラスでは2つ、無効同値クラスでは1つのテストケースを選びます。
境界値分析の方が同値分割よりもテストケースが増えてしまう一方、開発時に間違えやすい「以上」や「未満」などの値の設定ができているかをきちんとチェックできるというメリットがあります。

同値分割と境界値分析の実例 ―基本情報技術者試験の出題よりー

同値分割と境界値分析の実例を、基本情報技術者試験の問題で見てみましょう。


整数1~1,000を有効とする入力値が、1~100の場合は処理Aを、101~1,000の場合は処理Bを実行する入力処理モジュールを、同値分割法と境界値分析によってテストする。次の条件でテストするとき、テストデータの最小個数は幾つか。

〔条件〕
有効同値クラスの1クラスにつき、1つの値をテストデータとする。ただし、テストする値は境界値でないものとする。
有効同値クラス、無効同値クラスの全ての境界値をテストデータとする。

(ア)5 (イ)6 (ウ)7 (エ)8

引用:基本情報技術者平成28年秋期 午前問48

まずは処理Aと処理Bの有効同値クラス、および無効同値クラスを考えてみましょう。

  • 処理Aの有効同値クラスは「1~100」
  • 処理Bの有効同値クラスは「101~1,000」
  • 無効同値クラスは「0以下」と「1,001以上」

問題文の〔条件〕に「有効同値クラス,無効同値クラスの全ての境界値をテストデータとする。」とあります。
境界値分析のテストケースは以下のようになります。

  • 処理Aの有効同値クラスである「1~100」の値グループから「1」と「100」
  • 処理Bの有効同値クラスである「101~1,000」の値グループから「101」と「1,000」
  • 無効同値クラスである「0以下」の値グループから「0」
  • 無効同値クラスである「1,001以上」の値グループから「1,001」

このように計6つのテストケースが選ばれました。

また問題文の〔条件〕「有効同値クラスの1クラスにつき、1つの値をテストデータとする。」より、同値分割のテストケースは以下のように選びます。

  • 処理Aの有効同値クラスである「1~100」の値グループから「34」
  • 処理Bの有効同値クラスである「101~1,000」の値グループから「206」

このように計2つのテストケースが選ばれました。上のテストケースは一例です。同値分割の場合、範囲内であればどの値を選んでも問題ありません。
ただし、この問題の場合は、問題文の〔条件〕より、境界値ではない値を選ぶ必要があります。
また、この問題の場合、無効同値クラスからは代表値を選ばないことにも注意しなければなりません。

この問題では同値分割と境界値分析の両方でテストするとのことなので、テストケースの数を合わせます。
すなわち6+2で答えは「(エ)8」となります。

実際のテストケースの作成においても、このように同値分割と境界値分析を併用して計画することがよくあります。

まとめ

今回は「テスト」とは何か、そして「ブラックボックステスト」と「ホワイトボックステスト」について、最後に「同値分割」と「境界値分析」について解説しました。

  • 開発したシステムが正常に動くかどうかを試すことをテストと言います。
  • ブラックボックステストでは、入力と出力の整合性に着目します。
  • ホワイトボックステストでは、システムの内部構造に着目します。
  • 同値分割では、入力データを範囲ごとにグループ化し、グループの中で代表的な値を1つ、テストケースとして選びます。
  • 境界値分析では、同値グループの境界値をテストケースとして選びます。