対象試験と出題頻度

同値分割は、基本情報技術者・応用情報技術者で出題されるテーマです。

ブラックボックステストのテストケース設計手法として定番化しており、「限界値分析(境界値分析)」「原因結果グラフ」「エラー推測」との違いを正確に区別できるかが問われます。

詳細をクリックして確認
対象試験:
基本情報技術者
応用情報技術者
出題頻度:
★★★★☆
ランクA(重要)必ず覚えておくべき

用語の定義

情報処理試験を勉強していると、「同値分割って結局何をやっているの?限界値分析と何が違うの?」と混乱しがちです。

同値分割(Equivalence Partitioning)とは、一言で言うと

 「入力データを同じ結果になるグループに分け、各グループから代表値を1つだけ選んでテストする手法

のことです。

イメージとしては、給食の味見です。

大鍋いっぱいのカレーを、全部食べて確かめる必要はありません。

よくかき混ぜたうえでスプーン1杯すくえば、鍋全体の味が分かります。「同じ味の集まり(=同値クラス)」から代表を1つ選べば十分、という発想です。

同値分割も同じで、「どうせ同じ結果になる入力値の集まり」から代表値を1つだけ選び、テストケースの数を爆発させずに済ませる技法です。

📊 同値分割の基本情報

項目 内容
英語名 Equivalence Partitioning
分類 ブラックボックステストのテストケース設計技法
主な利用工程 単体テスト・結合テスト
同値クラスの種類 有効同値クラス/無効同値クラス

解説

プログラムが受け付ける入力値は、整数だけでも何億通りもあります。これを全部試すのは現実的ではありません。

とはいえ、テストケースを「気分」で選ぶと、似たような入力ばかり試して肝心のバグを見逃します。

この問題を解決するため、入力空間を「処理結果が同じになるグループ」に分割し、各グループから代表を1つ選ぶという考え方が同値分割です。

有効同値クラスと無効同値クラス

同値分割では、入力値を2種類のグループに分けます。

有効同値クラス:仕様上「正しく受け付けられる」値の集まり。プログラムが正常処理する範囲です。

無効同値クラス:仕様上「エラーになる」値の集まり。範囲外や型違いなど、はじかれるべき入力です。

図解:年齢入力(1〜120)の同値分割

具体例として、「1以上120以下の整数」を受け付ける年齢入力欄を考えます。

同値分割ではこの入力空間を3つのクラスに分け、各クラスから代表値を1つだけ選びます。

入力値の数直線と同値クラス

無効(下限未満)
有効(1〜120)
無効(上限超過)
0
1120
121〜
代表値: -5
代表値: 50
代表値: 200

▲ 3つの同値クラスから代表値を1つずつ。テストケースはわずか3個で済む

仮に1〜120を全部試すと120ケース必要ですが、同値分割なら-5・50・200の3ケースで「同じ結論が得られるはず」と判断します。これがテストケース削減の核心です。

限界値分析との関係

同値分割の弱点は、「境目(0と1、120と121)でのバグを見逃しやすい」ことです。

プログラマーが x > 1x >= 1 を書き間違えるバグは、ど真ん中の50では検出できません。

そこで、境目の値を狙い撃ちする限界値分析(境界値分析)とセットで使うのが定石です。実務でもIPA試験でも、この2手法は併用が前提とされます。

手法 代表値の選び方 先ほどの例(1〜120)
同値分割 各クラスの「中の任意の値」 -5、50、200
限界値分析 各クラスの「境目の値」 0、1、120、121

他のテスト技法との位置づけ

技法 分類 着眼点
同値分割 ブラックボックス 入力を結果が同じグループに分けて代表値で試す
限界値分析 ブラックボックス クラス間の境目の値でバグを狙い撃つ
原因結果グラフ ブラックボックス 入力条件と出力結果の論理関係を整理する
命令網羅・分岐網羅 ホワイトボックス プログラムの構造(命令・分岐)を網羅する

擬似コードでイメージする

「年齢が1〜120のとき OK」という仕様を、同値分割の考え方でテストする様子を擬似コードで示します。

# 仕様:1 <= age <= 120 なら受理、それ以外は拒否
def validate_age(age):
    if 1 <= age <= 120:
        return “OK”
    return “NG”
 
# ── 同値分割によるテストケース(各クラスから代表1つ)──
assert validate_age(-5) == “NG”  # 無効(下限未満)
assert validate_age(50) == “OK”  # 有効
assert validate_age(200) == “NG”  # 無効(上限超過)

では、この用語が試験でどのように出題されるか見ていきましょう。

💡 同値分割の核心を3行で

・入力値を「結果が同じになるグループ(同値クラス)」に分ける
・有効同値クラスと無効同値クラスから代表値を1つずつ選んでテストする
・境目を狙う限界値分析と組み合わせるのが実務・試験ともに定石


試験ではこう出る!

同値分割は、FE・APの午前問題でブラックボックステスト技法の比較問題として繰り返し出題されています。出題パターンは大きく2つに分かれます。

📊 過去問での出題実績

試験回 出題内容 問われたポイント
FE H28秋
問48
同値分割で必要なテストデータの最小個数を問う計算問題。 ・有効同値クラスと無効同値クラスを正しく数えられるか
・「各クラスから1個ずつ」が原則
FE H18秋
問43
テストケース設計手法としての同値分割の説明を問う。 ・「正しい範囲・範囲超過・範囲未満」の3クラス分割
・限界値分析との混同に注意
AP H21秋
問47
テストケース設計法として同値分割の特徴を選ぶ問題。 ・「データクラスの代表値でテストする」が正解
・実データ抽出(運用テスト)はひっかけ
AP H23秋
問47
ブラックボックステストのテストケース作成手法を選ぶ問題。 ・同値分割・限界値分析・原因結果グラフが該当
・命令網羅(ホワイトボックス)はひっかけ
AP H26秋
問47
テストデータ作成方法として適切なものを選ぶ問題。 ・同値分割は「入力値を有効・無効のクラスに分割」
・稼働中システムの実データ無作為抽出は誤り

📝 IPA試験での出題パターン

パターン1:「説明文を選べ」
4つの選択肢からブラックボックステスト技法の説明を選ぶ形式。同値分割のキーワードは「データクラス」「代表値」「有効・無効」。ひっかけとして「命令を1回ずつ実行」(命令網羅)、「境界値でテスト」(限界値分析)、「実運用データの抽出」(運用テスト)が紛れ込みます。

 

パターン2:「テストケースの最小個数を答えよ」
FE H28秋問48タイプ。仕様から有効・無効同値クラスを数え、「クラス数=最小ケース数」で算出します。条件が複数ある場合は組み合わせを考えるのではなく、各入力項目ごとにクラス数を足し合わせるのが原則です。

 

頻出のひっかけは「同値分割と限界値分析の取り違え」です。「代表値」と来たら同値分割、「境界値・上限・下限ぴったり」と来たら限界値分析、と機械的に区別してください。試験ではここまででOKです。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. ブラックボックステストにおける「同値分割」の説明として、最も適切なものはどれでしょうか?

  • A. 入力データの有効範囲と無効範囲の境目になる値を選び、その上限・下限ぴったりの値でテストを行う。
  • B. 入力データを処理結果が同じになるグループ(同値クラス)に分割し、各グループから代表値を1つずつ選んでテストする。
  • C. プログラムの内部構造に着目し、すべての命令や分岐が少なくとも1回は実行されるようにテストデータを設計する。

正解と解説を見る

正解:B

解説:
同値分割は、入力値を「結果が同じになる集合」に分け、各集合の代表値だけを試すことで少ないテストケースで広い範囲をカバーするブラックボックステストの設計技法です。「データクラス」「代表値」というキーワードが選択肢Bに揃っているため、これが正解と判断できます。

選択肢Aは限界値分析(境界値分析)の説明です。「境目」「上限・下限ぴったり」というキーワードが特徴で、同値分割と併用される別の技法です。選択肢Cは命令網羅・分岐網羅などのホワイトボックステストの説明です。プログラムの内部構造に着目している時点で、入力仕様から考えるブラックボックステストである同値分割とは異なります。


よくある質問(FAQ)

Q. 同値分割で代表値はどう選ぶのが正解ですか?真ん中の値?

理論上は同値クラス内であればどの値でも構いません。ただし実務では「典型的な値(例:1〜120なら50)」を選ぶのが一般的です。端っこの値は限界値分析に任せ、同値分割側ではあえて「ど真ん中」を選ぶことで、両手法の役割分担が明確になります。試験では「代表値の選び方」自体が問われることはほとんどなく、「クラスから1つ選ぶ」という原則だけ押さえれば十分です。

Q. 入力項目が複数ある場合、テストケースは掛け算で増やしますか?

同値分割の基本では、項目ごとにクラス数を「足し算」してケース数を見積もります。すべての組み合わせ(掛け算)を試すと爆発的に増えるためです。組み合わせの網羅が必要な場合は、ペアワイズ法や直交表といった別技法を使います。FE H28秋問48のような「最小個数」を問う問題では、足し算ベースで考えると正解に辿り着けます。

Q. 仕様書がない場合でも同値分割は使えますか?

使いにくくなります。同値分割は「仕様上どの入力をどう扱うか」が明確であることを前提にクラスを切るため、仕様書や受け入れ条件が曖昧だとクラスの境界も曖昧になります。仕様が不確かな場合は、まず仕様の明確化を行うか、エラー推測(経験ベース)など別の技法で補完するのが実務的です。IPAの「組込みソフトウェア開発における品質向上の勧め」でも、同値分割は仕様ベーステストの代表として位置づけられています。

Q. 同値分割で見つけられないバグはどんなものですか?

境界条件のミス(< を <= と書き間違えるなど)と、入力の組み合わせに依存するバグです。前者は限界値分析、後者は原因結果グラフやデシジョンテーブルテストでカバーします。同値分割は「広く薄く効率的に」が持ち味の手法であり、単独で銀の弾丸にはならない点を押さえておくと、実務でも試験の応用問題でも応用が利きます。