Upgrade to Pro — share decks privately, control downloads, hide ads and more …

カバレッジとは?

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 カバレッジとは?

ソフトウェアテストに関して「カバレッジ」という言葉を聞くことがあると思いますが、ぼんやりと「どれくらいカバーされているか」のようなイメージしかない事も多いと思います。
そこで「カバレッジ」とはどんなものか掘り下げて学習していきたいと思います。

Avatar for Atsushi Okui

Atsushi Okui

February 15, 2026
Tweet

More Decks by Atsushi Okui

Other Decks in Programming

Transcript

  1. 自己紹介 Atsushi Okui (@blue32a_jp) ソフトウェアエンジニア / Webアプリケーション エンジニア / PHPer

    関心:設計、コード品質、リファクタリング、テス ト、モデリング
  2. サンプルコード function sampleMethod($age, $withCoupon) { $price = 1200; if ($age

    < 6 || $age >= 65) { $price = 0; return $price; } if ($withCoupon) { $price -= 200; } return $price; } 『ソフトウェア徹底指南書』のサンプルコードを PHPに書き替えたコード
  3. デシジョンカバレッジ 「対象の判断文の真偽を、テストでどの程度網羅で きたか」の割合です。 赤枠の分岐で真偽それぞれ実行できれば 100%に なります。 例えば、次の入力を用意すれば達成できます。 • $age =

    10 • $age = 5, $withCoupon = true • $age = 5, $withCoupon = false function sampleMethod($age, $withCoupon) { $price = 1200; if ($age < 6 || $age >= 65) { $price = 0; return $price; } if ($withCoupon) { $price -= 200; } return $price; }
  4. 条件カバレッジ 「対象の条件式の真偽を、テストでどの程度網羅で きたか」の割合です。 赤枠の条件式で真偽それぞれ実行できれば 100% になります。 例えば、次の入力を用意すれば達成できます。 • $age =

    5 • $age = 10, $withCoupon = true • $age = 10, $withCoupon = false • $age = 65 function sampleMethod($age, $withCoupon) { $price = 1200; if ($age < 6 || $age >= 65) { $price = 0; return $price; } if ($withCoupon) { $price -= 200; } return $price; }
  5. コードカバレッジの限界 紹介したカバレッジだけでは、網羅でき ない制御フローがあります。また、制御 フロー以外にも網羅すべきものが多数 あります。 そのため、コードカバレッジを100%に出 来たとしても、テストが十分であるという 根拠にはなりません。 網羅できない制御フローの例 •

    例外処理 • 並行処理 • プリプロセッサやメタプログラミング • ダックタイピング • フレームワークやライブラリ 制御フロー以外にも網羅すべきものの例 • テスト対象の出力の妥当性 • 意図しない副作用や異常 • 必要なコードの欠落
  6. コードカバレッジの限界 カバレッジ以外にも境界値 /同値分割とか。 • $age = 0 • $age =

    5 • $age = 6 • $age = 30 • $age = 64 • $age = 65 • $age = 90 function sampleMethod($age, $withCoupon) { $price = 1200; if ($age < 6 || $age >= 65) { $price = 0; return $price; } if ($withCoupon) { $price -= 200; } return $price; }