FE EXAM

分岐網羅(ブランチカバレッジ)

すべての分岐の真と偽の両方を実行することを確認するテスト網羅基準。

INTERACTIVE VISUALIZATION
真ルート
偽ルート
テストケース
真・偽の達成
真— / 偽—
分岐網羅率
0%
シナリオ
ステップ1 / 7
STEP 1/7テストを始める前まだ1件もテストを実行していない状態です。このプログラムには「score(点数)が60以上か」を判定する分岐(=枝分かれ)が1つあります。分岐網羅では、この分岐の「真(条件が成り立つ側)」と「偽(成り立たない側)」の両方を必ず通すことを目指します。
開始score>= 60 ?return 合格return 不合格終了
擬似コード
function judge(score) {
if (score >= 60) {
return "合格";
} else {
return "不合格";
}
}
解説

📌
分岐網羅とは

条件真ルート偽ルート

分岐網羅(ブランチカバレッジ)とは、プログラム中のすべての分岐(=if文などの枝分かれ)について、真と偽の両方のルートを最低1回ずつ実行することを目指すテスト基準です。プログラムの内部構造に注目してテストを設計する「ホワイトボックステスト」の代表的な基準のひとつです。

身近な例で考えると、道路の分かれ道に似ています。左の道と右の道、どちらも実際に車を走らせてみて初めて「両方とも問題なく通れる」と確認できます。片方の道しか通っていなければ、もう片方に穴が空いていても気づけません。

上のツールで▶ボタンを押すと、合否判定の if 文に対して score=80(真)と score=30(偽)の2件を実行し、両方のルートを通って分岐網羅が100%になる流れを確認できます。

📐
網羅率の計算

分岐網羅率は、実行できた分岐の数を、全分岐数で割って求めます。ここでいう「分岐」は真ルート・偽ルートをそれぞれ1つと数えます。

分岐網羅率 = 実行した分岐数 ÷ 全分岐数

上のツールの例で計算してみましょう。
全分岐数:1つの if 文に真・偽の2方向 → 2
score=80 を実行:真ルートを通過 → 実行1(網羅率 50%)
score=30 を実行:偽ルートを通過 → 実行2(網羅率 100%)

よって 2 ÷ 2 = 100% です。片方のルートしか通っていなければ50%にとどまります。テストの網羅率が高いほど、見落としの少ない丁寧なテストだといえます。

⚖️
命令網羅との違い

似た言葉に命令網羅(ステートメントカバレッジ)があります。命令網羅は「すべての命令(行)を1回は実行する」基準で、分岐網羅は「すべての分岐の真偽を実行する」基準です。分岐網羅のほうが厳しい(強い)基準です。

項目命令網羅分岐網羅
狙い全命令を1回実行全分岐の真偽を実行
厳しさ弱い強い
包含関係分岐網羅に含まれる命令網羅を内包する

ポイントは「分岐網羅を満たせば命令網羅も自動的に満たされる」という関係です。すべての分岐の真偽を通れば、その途中にある命令はすべて実行されるからです。逆は成り立ちません。たとえば if 文の真ルートだけを通せば「合格」の命令は実行され命令網羅は達成できますが、偽ルートを通っていないので分岐網羅は50%のままです。

💡
なぜ両方のルートを通す必要があるのか

score≥60?合格(OK)不合格未通過→バグ潜む

なぜ真と偽の両方を通さなければならないのか?それは、通っていないルートに潜むバグは、通らない限り見つけられないからです。

たとえば上の図のように、合格(真)ルートだけをテストしていると、不合格(偽)ルートに書き間違いがあっても気づきません。点数が低いユーザーが実際に使ったときに初めて不具合が起きます。
片方しか通っていない=もう片方の中身は「存在するが検査されていない」状態
分岐網羅を要求する理由=「すべての枝を一度は歩いてみる」ことで、隠れた問題を洗い出す

道路の例で言えば、左の道だけ点検して「道は安全」と判断するのは間違いです。右の道に穴が空いていても、誰も通らなければ気づかないからです。分岐網羅とは「どの道も最低1回は実際に走って確かめる」ことを義務づける基準です。

🔬
さらに厳しい基準:条件網羅との関係

命令網羅全命令1回分岐網羅真・偽の両方を実行条件網羅各条件式の真・偽を実行弱い ← 厳しさ → 強い

分岐網羅よりさらに厳しい基準として条件網羅(コンディションカバレッジ)があります。条件網羅とは、条件式の中に含まれる個々の比較(部分条件)について、それぞれ真と偽の両方を実行する基準です。

たとえば if (A かつ B) という条件があるとき、分岐網羅は「条件全体が真になるケース」と「偽になるケース」の2つを通せばOKです。しかし条件網羅では、A が真・偽の両方、B が真・偽の両方をそれぞれ実行しなければなりません。
命令網羅:全命令を1回実行(最も弱い)
分岐網羅:全分岐の真偽を実行(命令網羅より強い)
条件網羅:各部分条件の真偽を実行(分岐網羅より強い)

ただし、条件網羅を満たしても分岐網羅を満たすとは限らない点に注意が必要です。これは「部分条件を個別にチェックすることと、全体の分岐の真偽をチェックすることは別」だからです。現場ではテストにかけられるコストと要求される品質に応じて、どの基準を使うかを選びます。

練習問題

🎯
基本情報技術者 練習問題

Q1.分岐網羅(ブランチカバレッジ)の説明として最も適切なものはどれか。
A.すべての命令を少なくとも1回は実行する
B.すべての分岐の真と偽の両方を実行する
C.各条件式の真と偽の両方を実行する
D.入力を同値クラスに分けて代表値でテストする
Q2.分岐網羅率の計算式として正しいものはどれか。
A.実行した命令数 ÷ 全命令数
B.実行したテストケース数 ÷ 全テストケース数
C.実行した分岐(真・偽の方向)数 ÷ 全分岐数
D.バグ件数 ÷ 全テスト件数
Q3.命令網羅と分岐網羅の関係として正しいものはどれか。
A.分岐網羅を満たせば命令網羅も自動的に満たされる
B.命令網羅を満たせば分岐網羅も自動的に満たされる
C.両者はまったく無関係である
D.命令網羅は分岐網羅より厳しい基準である

関連コンテンツ