テスト技法とカバレッジ(網羅基準)
ブラックボックステストとホワイトボックステストを選択肢の言い回しから見分けられるようになる。同値分割・境界値分析で必要なテストデータの個数を数え、命令網羅・判定条件網羅(分岐網羅)・条件網羅・複数条件網羅のテストケースを過去問の形で選べるようになる。
過去問で繰り返し出ている定番テーマで、同じ形の問題が何度も出ている。特にブラックボックス/ホワイトボックスの見分けは本試験系で10回(免除試験で25回)出題されている。型を覚えれば得点しやすく、実務でも受け入れテストの観点を決めるときにそのまま使える。
このレッスンで稽古する(用語チェック・過去問)結論:テストには「外から見る」と「中を見る」の2つがある
テストの見方はブラックボックステスト(仕様だけを見て入力と出力を確かめる)と、ホワイトボックステスト(プログラムの中身=命令や分岐を見て、通ったかを確かめる)の2つに分かれる。試験ではこの2つを取り違えさせる選択肢が定番だ。
たとえば自動販売機なら、ブラックボックスは「お金を入れてボタンを押したら正しい飲み物とお釣りが出るか」を外から試すこと。ホワイトボックスは扉を開けて「この配線、この切り替えスイッチを全部一度は通したか」を確かめることにあたる。
ブラックボックスとホワイトボックスの比較(最頻出)
| 観点 | ブラックボックステスト | ホワイトボックステスト |
|---|---|---|
| 見るもの | 機能仕様(入力と出力) | 内部構造(命令・分岐・条件) |
| テストデータの作り方 | 同値分割・境界値分析・決定表・状態遷移など | 流れ図の分岐条件から作る(命令網羅・分岐網羅など) |
| 基準になるもの | 仕様どおりに動くか | 網羅率(カバレッジ):命令や分岐をどれだけ通したか |
| 分岐やモジュールが増えると | 影響を受けにくい | テストデータが急増する |
| 冗長なコード(使われない余分な処理) | 検出できない | 通らない命令として見つけられる |
| 主に使う場面 | 結合テスト・システムテストなど | 単体テスト |
見分けのコツ:選択肢に「網羅率」「内部構造」「分岐命令」「流れ図」が出てきたらホワイトボックスの記述。「機能仕様」「同値クラス」「限界値」が出てきたらブラックボックスの記述だ。
ブラックボックスは中を見ないので、仕様に関係ない余分なコードがあっても結果は正しく見える。だから「冗長なコードがあっても検出できない」はブラックボックスの正しい記述になる。
ブラックボックスのデータの作り方:同値分割と境界値分析
同値分割法は、入力を「同じ扱いをされるグループ(同値クラス)」に分け、各グループから代表値を1つずつ選ぶ方法。正しく処理される範囲を有効同値クラス、エラーになるべき範囲を無効同値クラスと呼ぶ。
**境界値分析(限界値分析)**は、グループの切れ目の値を重点的に試す方法。バグは境目に集まりやすいからだ。たとえば「20歳以上は購入可」なら19歳と20歳を試す。
プログラムで A≧a と書くべきところを A>a と書く誤りは、ちょうど A=a のときだけ結果が変わる。代表値だけを選ぶ同値分割では見逃しやすく、境界値を試す限界値分析なら見つけられる。
| 手法 | 選ぶ値 | 得意なこと |
|---|---|---|
| 同値分割 | 各クラスの代表値(境界でない値) | 少ないデータで全グループを確かめる |
| 境界値分析(限界値分析) | クラスの両端と、そのすぐ外側 | ≧と>の取り違えなど境界の誤りを見つける |
カバレッジ(網羅基準)4種の違い
**カバレッジ(網羅基準)**とは、ホワイトボックステストで「プログラムのどこまでを通したか」を測る物差しのこと。試験では次の4つを区別させる。
| 基準 | 何を満たせばよいか | A OR B の判定での例 |
|---|---|---|
| 命令網羅 | 全ての命令を1回以上実行する | 命令がある側(真)を1回通れば足りることがある |
| 判定条件網羅(分岐網羅) | 各判定の結果を真・偽の両方とも1回以上通す | 判定全体が真になるケースと偽になるケース |
| 条件網羅 | 判定の中の個々の条件を真・偽の両方とも1回以上取る | A真・A偽・B真・B偽が全部出る(判定全体の真偽は問わない) |
| 複数条件網羅 | 個々の条件の真偽の全組合せを試す | (A,B)=(真,真)(真,偽)(偽,真)(偽,偽) の4通り |
強さの関係(包含関係)は次のとおり。上を満たせば下も必ず満たすが、逆は成り立たない。
flowchart TD
M["複数条件網羅(全組合せ)"] -->|"満たせば満たす"| D["判定条件網羅(分岐網羅)"]
D -->|"満たせば満たす"| S["命令網羅"]
判定条件網羅は全分岐を通すので、どの分岐の先にある命令も実行される。だから「判定条件網羅を満たせば命令網羅も満たす」が正しい。命令網羅は、命令のない側(偽で何もせず飛ばす側)を通らなくても満たせるので、逆は成り立たない。
注意点として、条件網羅は判定条件網羅を含まない。A OR B で (A偽,B真) と (A真,B偽) を試すと各条件の真偽は揃うが、判定はどちらも真になり、偽の分岐を一度も通らない。
最少テストケースを数えるコツ
- 流れ図の判定(ひし形)を全部書き出す。
- 基準ごとに「何が真・偽になればよいか」を決める。命令網羅なら命令の箱、分岐網羅なら各判定の真と偽、複数条件網羅なら条件の組合せだ。
- 判定が直列に並んでいるなら、1ケースで前後の判定を同時に満たせることを利用する(真→真、偽→偽の2ケースなど)。
「偽のときは何もせず飛ばす」形では、命令網羅は真の側を通る1ケースで済むことがある。分岐網羅では偽の側も通す必要があるので、最少でも2ケースになる。この差がよく問われる。
状態遷移テスト(短く)
状態遷移テストは、「待機中→ボタン押下→動作中」のように、設計で決めたイベントと状態の組合せどおりにシステムが動くかを確認する手法。状態遷移図や状態遷移表を使う。
「状態が変化しない計算処理向け」「内部状態に着目しない」「データフロー図・決定表で解析する」という選択肢は誤り。
テストの原則(短く)
テストの目的は誤りを見つけることで、「誤りがないことを証明する」ことはできない。正常なデータだけでなく、誤った入力(異常系)でも意図どおりに動くかを必ず確かめる。
テストデータは、先にテストケース(何をどう確かめるか)を決め、それに沿って準備する。正常データだけ用意する、エラーデータは不要、といった選択肢は誤り。
同値分割+境界値分析でテストデータの最少個数を数える
ア 5
イ 6
ウ 7
エ 8
解き方と答えを見る
- 入力の範囲を数直線で整理する:…0 | 1〜100(処理A)| 101〜1,000(処理B)| 1,001…
- 同値クラスを分ける。有効同値クラスは「1〜100」「101〜1,000」の2つ。無効同値クラスは「0以下」「1,001以上」の2つ。
- 条件①:有効同値クラスごとに、境界でない値を1つずつ選ぶ(例:50と500)。→ 2個
- 条件②:全ての境界値を選ぶ。有効側の境界は 1, 100, 101, 1,000 の4個。
- 無効側の境界も数える。0以下の境界は 0、1,001以上の境界は 1,001 の2個。
- 境界値の合計は 4 + 2 = 6個。
- 合計は 2(代表値)+ 6(境界値)= 8個。
答え:エ(8個)。無効側の境界値 0 と 1,001 を数え落とすと7個になるので注意。
命令網羅に必要な最少テストケース数
ア 2
イ 3
ウ 4
エ 5
解き方と答えを見る
- 命令の箱を全部書き出す:x=1、x=2、y=1、y=2 の4つ。
- 判定は「a=0」と「b=0」の2つが直列に並び、どちらも真偽両側に命令がある。
- ケース1:a=0、b=0 → x=1 と y=1 を実行。
- ケース2:a≠0、b≠0 → x=2 と y=2 を実行。
- 2ケースで4つの命令を全て1回以上実行できた。1ケースでは x=1 と x=2 を両方実行できないので、2未満にはできない。
答え:ア(2個)
判定条件網羅(分岐網羅)に必要な最少テストケース数
ア 1
イ 2
ウ 3
エ 4
解き方と答えを見る
- 判定は「X>1」と「A=2 or B=0」の2つ。どちらも偽の側は何もせず飛ばす形。
- 分岐網羅では、それぞれの判定で真と偽の両方を1回以上通す必要がある。
- ケース1:X>1 を真にし(例 X=4)、後段も真にする(A=2)。→ 両判定の『真』を通過。
- ケース2:X>1 を偽にし(例 X=0)、後段も偽にする(A≠2 かつ B≠0)。→ 両判定の『偽』を通過。
- 1ケースでは同じ判定の真と偽を同時に通れないので、最少は2ケース。(参考:命令網羅なら、ケース1だけで全命令を実行できる)
答え:イ(2個)
判定条件網羅のデータを複数条件網羅に広げる
ア (A=3,B=0),(A=7,B=2)
イ (A=3,B=2),(A=8,B=0)
ウ (A=4,B=0),(A=8,B=0)
エ (A=7,B=0),(A=8,B=2)
解き方と答えを見る
- 判定「A>6 or B=0」の中の条件は「A>6」と「B=0」の2つ。複数条件網羅では、その真偽の4通り (真,真)(真,偽)(偽,真)(偽,偽) が全て必要。
- 既にあるデータを判定する。(A=4,B=1) → A>6は偽、B=0も偽 → (偽,偽)。
- (A=5,B=0) → A>6は偽、B=0は真 → (偽,真)。
- 足りないのは (真,偽) と (真,真)。どちらも A>6 が真なので、A は7以上が必要。
- エを判定する。(A=7,B=0) → (真,真)、(A=8,B=2) → (真,偽)。足りない2通りがそろう。
- 他の選択肢も確かめる。アの (3,0) は (偽,真) で重複。イの (3,2) は (偽,偽) で重複。ウの (4,0) は (偽,真) で重複。どれも1通り足りない。
答え:エ
分岐網羅と条件網羅を同時に満たすデータを選ぶ
ア (x, y) = (2, 2), (1, 2)
イ (x, y) = (1, 2), (0, 0)
ウ (x, y) = (1, 2), (1, 1), (0, 1)
エ (x, y) = (1, 2), (0, 1), (0, 2)
出典:基本情報技術者試験 科目A免除 修了試験 20220123 実施分 問47
解き方と答えを見る
- 判定1は「x≧1 or y=1」(条件 x≧1、y=1)、判定2は「y>1」(条件 y>1)。
- 満たすべきこと:①3つの条件 x≧1・y=1・y>1 がそれぞれ真と偽の両方を取る(条件網羅)。②判定1と判定2がそれぞれ真と偽の両方になる(分岐網羅)。
- エを判定する。(1,2):x≧1真、y=1偽 → 判定1真。y>1真 → 判定2真。
- (0,1):x≧1偽、y=1真 → 判定1真。y>1偽 → 判定2偽。
- (0,2):x≧1偽、y=1偽 → 判定1偽。y>1真 → 判定2真。
- x≧1 は真偽そろい、y=1 も真偽そろい、y>1 も真偽そろう。判定1・判定2も真偽そろう。→ 両方満たす。
- 他を確かめる。アは x が全て1以上で x≧1 の偽が無い。イは y=1 の真が無い。ウは判定1が全て真で、偽の分岐を通らない。
答え:エ
要点(試験直前に読む)
- 「網羅率・内部構造・分岐」はホワイトボックス、「機能仕様・同値クラス・限界値」はブラックボックス。ブラックボックスは冗長なコードを検出できない。
- 同値分割と境界値の個数問題では、有効クラスの代表値に加えて、有効・無効の境界値を全部数える(1〜1,000を100で分けるなら 2+6=8個)。
- 強さは 複数条件網羅 ⊃ 判定条件網羅(分岐網羅) ⊃ 命令網羅。上を満たせば下も満たすが、逆は成り立たない。
- 分岐網羅は各判定の真と偽を通す。直列の判定なら「真→真」「偽→偽」の2ケースで済むことが多い。
- 複数条件網羅は条件の真偽の全組合せ。既存データの組合せを判定し、足りない組合せだけを選ぶ。
- テストは誤りを見つけるためのもの。異常系も確かめ、テストケースを先に決めてからデータを準備する。
ひっかけ
- ブラックボックスの問題で、ホワイトボックスの特徴(網羅率を使う・内部構造に着目・分岐が増えるとデータが急増)を混ぜた選択肢 → 「中を見ているか」で判定する。
- 包含関係の向きを逆にした選択肢(「命令網羅を満たせば判定条件網羅も満たす」)→ 命令網羅は何もしない側の分岐を通らなくても満たせるので誤り。
- 条件網羅を満たすだけのデータ(A OR B に (偽,真)(真,偽))を分岐網羅の答えに見せる → 判定全体の結果が真と偽の両方出ているかを確かめる。
- 同値分割の個数問題で無効側の境界値(0や1,001)を数え落とさせる → 数直線を書いて両端の外側まで数える。
- 状態遷移テストを「内部状態に着目しない」「決定表やデータフロー図を使う」と説明した選択肢 → 状態遷移テストはイベントと状態の組合せを確かめる手法。
用語(14)
プログラムの中身を見ずに、機能仕様どおりの入力と出力になるかを確かめるテスト。
⚠ ホワイトボックステスト。選択肢に「網羅率・内部構造・分岐」があればホワイト、「機能仕様・同値クラス・限界値」があればブラック。
プログラムの内部構造(命令や分岐)に着目し、必要な部分が実行されたかを網羅率で確かめるテスト。
⚠ ブラックボックステスト。分岐やモジュールが増えるとテストデータが急増するのはホワイト側の特徴。
入力を同じ扱いをされるグループ(同値クラス)に分け、各グループから代表値を選んでテストする方法。
⚠ 境界値分析。同値分割は「代表値」、境界値分析は「切れ目の値」を選ぶ。
仕様上、正しく処理されるべき入力値のグループ。
⚠ 無効同値クラス(エラーになるべきグループ)。個数問題では無効側も数える。
仕様上、エラーとして扱われるべき入力値のグループ(範囲外の値など)。
⚠ 有効同値クラス。無効側の境界値(範囲のすぐ外の値)の数え落としが典型ミス。
同値クラスの切れ目にある値とそのすぐ外の値をテストデータにして、境目の誤りを見つける方法。
⚠ 同値分割。≧と>の取り違えのような境界の誤りを見つけるのは限界値分析。
ホワイトボックステストで、命令・分岐・条件をどこまで実行したかを測る基準。
プログラム中の全ての命令を1回以上実行させる基準。
⚠ 判定条件網羅。命令網羅は「何もしない側」の分岐を通らなくても満たせるので、一番弱い。
各判定の結果が真になる場合と偽になる場合の両方を1回以上通す基準。
⚠ 条件網羅。分岐網羅は判定全体の真偽、条件網羅は中の個々の条件の真偽を見る。満たせば命令網羅も満たす。
判定の中の個々の条件が、それぞれ真と偽の両方を1回以上取るようにする基準。
⚠ 判定条件網羅。条件網羅を満たしても判定全体が片方の結果しか出ないことがあり、分岐網羅を満たすとは限らない。
判定の中の個々の条件について、真偽の全ての組合せを試す基準。
⚠ 条件網羅。条件が2つなら、条件網羅は各条件の真偽がそろえばよいが、複数条件網羅は4通り全部が必要。
設計で決めたイベントと状態の組合せどおりに、システムの状態が変わるかを確認するテスト手法。
⚠ 決定表(ディシジョンテーブル)を使う手法。状態遷移テストは状態遷移図・状態遷移表を使い、状態が変わるシステムに向く。
何を、どんな入力と期待結果で確かめるかを決めたテストの1単位。
⚠ テストデータ。先にテストケースを決め、それに沿ってテストデータを準備する。
仕様上の結果に影響しない、余分で不要な処理。
⚠ ブラックボックステストでは結果が正しく見えるため検出できない。
このレッスンの過去問
- ブラックボックステストとホワイトボックステストの違い平成31年度 春期 基本情報技術者試験 午前 問47
- 同値分割法と境界値分析のテストデータ個数平成28年度 秋期 基本情報技術者試験 午前 問48
- テストカバレッジ基準の包含関係(命令網羅・判定条件網羅)令和元年度 秋期 基本情報技術者試験 午前 問49
- 判定条件網羅(分岐網羅)の最少テストケース基本情報技術者試験 科目A免除 修了試験 20260726 実施分 問37
- 複数条件網羅のテストデータ設計平成30年度 春期 基本情報技術者試験 午前 問49
- 状態遷移テストの内容平成28年度 春期 基本情報技術者試験 午前 問48
- テストの原則(異常系も検証する)基本情報技術者試験 科目A免除 修了試験 201006 実施分 問50
- テストデータはテストケースに沿って準備する基本情報技術者試験 科目A免除 修了試験 201012 実施分 問49