分岐カバレッジとは

分岐カバレッジは、ソフトウェアテストにおいて、プログラムのソースコード内に存在するすべての条件分岐(if文やswitch文など)の真偽両方の経路が、テストケースによって実行されたかどうかを測定する指標のことです。

分岐カバレッジの概要と目的

分岐カバレッジ(Branch Coverage)は、プログラムの品質を評価するための重要な指標の一つです。コードが書かれただけでは、そのコードが意図した通りに動作するかは分かりません。テストを実行することで、その正当性を検証します。

分岐カバレッジは、テストの網羅性を高めるための指標です。if (A > B)という条件文がある場合、分岐カバレッジ100%を達成するには、A > Bが真となるテストケースと、A > Bとなるテストケースの両方を実行する必要があります。これにより、プログラムの異なる実行パスを網羅的にテストし、見落とされがちなバグを発見することができます。

主な目的は、テストの品質を客観的に評価し、潜在的なバグの発見率を高めることにあります。行カバレッジ(実行されたコードの行数を数える)よりも厳密な指標であり、より詳細なテストの網羅性を示します。

分岐カバレッジの計算方法

分岐カバレッジは、以下の計算式で求められます。

\text{分岐カバレッジ} = \frac{\text{実行された分岐の総数}}{\text{プログラム全体の分岐の総数}} \times 100%

  • プログラム全体の分岐の総数: if文、whileループ、forループ、switch文、三項演算子など、すべての条件分岐の総数です。各条件分岐は、真と偽の2つのパスを持つため、通常は「条件分岐の数 × 2」で計算されます。
  • 実行された分岐の総数: テストケースの実行によって通った、真のパスと偽のパスの合計数です。

計算例

以下の簡単なプログラムを例に考えます。

C

void checkNumber(int x) {
    if (x > 0) { // ①
        printf("Positive");
    } else {
        printf("Non-positive");
    }
}

このコードには、if (x > 0)という1つの条件分岐があります。この条件には「真」と「偽」の2つのパスが存在するため、プログラム全体の分岐の総数は2です。

  • テストケース1: checkNumber(5)を実行
    • x > 0が「真」となり、ifブロックが実行されます。これにより、1つの分岐(真)が実行されます。
    • 分岐カバレッジ: 1 / 2 = 50%
  • テストケース2: checkNumber(-3)を実行
    • x > 0が「偽」となり、elseブロックが実行されます。これにより、もう1つの分岐(偽)が実行されます。
    • 分岐カバレッジ: 1 / 2 = 50%
  • 両方のテストケースを実行
    • 両方の分岐が実行されるため、合計2つの分岐が実行されます。
    • 分岐カバレッジ: 2 / 2 = 100%

分岐カバレッジの重要性

分岐カバレッジを測定することは、単に数字を追うだけでなく、以下のような重要な意味を持ちます。

  • 潜在バグの発見
    • テストケースが通っていない分岐パスを特定し、その部分に潜むバグを発見する機会を提供します。例えば、上記の例で、elseブロックにバグがあった場合、checkNumber(-3)を実行しなければそのバグは見つかりません。
  • テスト品質の向上
    • 分岐カバレッジの目標値を設定することで、テスト計画がより網羅的で体系的になります。
  • コード品質の評価
    • 分岐カバレッジが低いコードは、テストが不十分であるだけでなく、複雑で理解しにくい構造になっている可能性を示唆します。

分岐カバレッジは、ソフトウェアの品質保証プロセスにおいて、テストの有効性を定量的に評価するための不可欠なツールです。

関連用語

品質管理 | 今更聞けないIT用語集
ペアプログラミング | 今更聞けないIT用語集
AIソリューション

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。