FE EXAM

命令網羅(ステートメントカバレッジ)

すべての命令が少なくとも1回実行されることを確認するテスト網羅基準。

INTERACTIVE VISUALIZATION
実行済
今回通った
未実行
フェーズ
idle
実行できた命令
0 / 3
命令網羅率
0%
シナリオ
ステップ1 / 5
STEP 1/5対象コードを確認絶対値を返す関数 abs(x) です。命令網羅では「実行される命令(処理の1行)」がすべて1回以上実行されたかを数えます。ここで数える命令は、2行目の if 判定、3行目の x = -x、5行目の return x の3つです。まだどれも実行していません。
1function abs(x) {
2 if (x < 0) {未実行
3 x = -x;未実行
4 }
5 return x;未実行
6}
網羅率の計算
命令網羅率 = 実行できた命令数 ÷ 全命令数 × 100
      = 0 ÷ 3 × 100 = 0%
解説

📌
命令網羅とは

命令1 ✓命令2 ✓命令3 ✓すべて1回以上

命令網羅(ステートメントカバレッジ)とは、テストのときプログラム中のすべての命令(処理の1行)が、少なくとも1回は実行されたかを確認する網羅基準のことです。プログラムの中身(コード)を見ながら検証する、ホワイトボックステストの代表的な基準です。

身近な例で考えると、料理のレシピの全工程を一度は試しておくのに似ています。「炒める」「煮る」「盛り付ける」という手順があるなら、そのすべてを最低1回は実際にやってみて、おかしな手順がないか確かめる、というイメージです。

上のツールで▶ボタンを押すと、正の数・負の数の2つのテストを実行して、未実行だった命令が緑(実行済)に変わり、命令網羅100%に到達する流れを確認できます。

📐
網羅率の計算

どれだけ命令を実行できたかは命令網羅率という割合で表します。計算はとても単純で、割り算1つで求められます。

命令網羅率 = 実行できた命令数 ÷ 全命令数 × 100

上のツールの例(命令が全部で3つ)で計算してみます。
テスト1だけ:通った命令は2つ → 2 ÷ 3 × 100 ≒ 67%
テスト2を追加:残り1つも通り3つ全部 → 3 ÷ 3 × 100 = 100%

目標は命令網羅率100%です。100%になっていないということは、一度も実行されていない命令(テストで通っていない処理)が残っているということなので、その部分を通すテストを足していきます。

⚖️
分岐網羅との違い

if 判定真の経路偽の経路

ホワイトボックステストの網羅基準には、命令網羅のほかに分岐網羅(ブランチカバレッジ)があります。分岐網羅は、if文などの各分岐で「真」と「偽」の両方の経路を1回ずつ通したかを確認する、より厳しい基準です。

項目命令網羅分岐網羅
確認すること全命令を1回実行全分岐の真・偽を実行
厳しさゆるい厳しい(命令網羅を含む)
必要なテスト数少なくて済むことが多いより多く必要

注意したいのは、命令網羅100%でも、分岐網羅100%とは限らないという点です。たとえば if 文で「偽」のとき何もしない(else が無い)場合、真の経路だけ通れば全命令を実行できますが、偽の経路を通っていなければ分岐網羅は未達です。だから分岐網羅のほうが厳しい基準なのです。

💡
なぜ網羅基準が必要か

バグが潜む未実行=見落とし全命令を通過 → 安心

「テストをやった」だけでは不十分なことがあります。たとえば10行のプログラムがあっても、テストが特定の入力値だけだと、残り数行が一度も実行されないまま見落とされる可能性があります。その見落とし部分にバグ(誤り)が潜んでいても、テストで検出できません。

なぜ命令網羅が必要か。「全命令を最低1回通す」という基準を設けることで、「実行されていない命令がゼロ」という状態を目指します。実行されていない行はテストで確認できていない行なので、その部分を必ず通すようにテストを追加していきます。

身近な例で考えると、建物の点検に似ています。「点検した」と言っても、地下室だけ点検していなければ地下室の不具合を見逃します。「全部屋を最低1回点検する(命令網羅100%)」という基準を守ることで、見落としのない点検が保証されます。

🔢
「命令」として数える行・数えない行

// 判定処理数えないif (score > 60) {命令 ✓ result = "合格"命令 ✓}数えない実際の処理をする行だけが命令

命令網羅で「命令(ステートメント)」として数えるのは、実際に何か処理を行う行です。すべての行が対象というわけではありません。

命令として数える行の例は次のとおりです。
代入x = 10 のように値を変数に入れる行
条件判定if (score > 60) のような分岐を決める行
関数呼び出しprint("結果") のように他の機能を呼ぶ行

逆に数えない行の例は次のとおりです。
コメント行///* */ で始まる説明文)
空行・閉じ括弧だけの行(処理を何もしない行)
変数の宣言だけの行(言語によっては命令に含む場合もある)

命令網羅率の計算では、この「命令として数える行」の合計数が分母になります。上のツールのコードブロックでは、命令と見なされた行に緑の縦バーがつき、網羅率の計算に反映される仕組みを確認できます。

練習問題

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

Q1.命令網羅の説明として最も適切なものはどれか。
A.すべての命令が少なくとも1回は実行されることを確認するテスト基準
B.すべての分岐の真・偽の両方を1回ずつ通すことを確認する基準
C.入力値の境界付近を重点的にテストする手法
D.仕様書だけを見て内部構造を無視するテスト手法
Q2.全命令数が4、テストで実行できた命令数が3のとき、命令網羅率はいくらか。
A.25%
B.50%
C.75%
D.100%
Q3.命令網羅と分岐網羅の関係として正しいものはどれか。
A.命令網羅のほうが分岐網羅より厳しい(多くのテストが必要)基準である
B.分岐網羅のほうが命令網羅より厳しい基準で、分岐の真・偽の両方を通す必要がある
C.両者はまったく同じ基準である
D.命令網羅を満たせば必ず分岐網羅も満たされる

関連コンテンツ