判定分岐網羅テスト(Decision Coverage / Branch Coverage)

判定分岐網羅テスト(Decision Coverage / Branch Coverage)

概要と特徴

  • 判定条件の網羅 プログラム内の各判定条件(Decision)において、真(True)と偽(False)の両方の結果を少なくとも1回は実行させるテスト手法。
  • ホワイトボックステストの一種 内部構造を分析し、制御フローに基づいてテストケースを作成する手法(White Box Testing)。
  • 論理的な分岐の確認 if文やswitch文などの分岐点において、すべての経路が正しく動作することを確認。

分類

  • コード網羅率(Code Coverage) ソフトウェアテストにおける網羅性の指標の一つ。
  • 制御フローテスト プログラムの実行順序に注目したテストカテゴリ。

上位概念・下位概念

  • 上位概念:命令網羅(Statement Coverage / C0) すべてのコード行を1回以上実行すること。判定分岐網羅は命令網羅を包含。
  • 下位概念:条件網羅(Condition Coverage / C2) 判定条件内の個々の論理式(個別の条件)が真偽の両方を取ることを重視する概念。

メリット

  • 未実行ルートの検出 命令網羅では見逃される「else句がない場合の偽のルート」などの確認が可能。
  • バグ発見率の向上 条件分岐に伴う論理的な誤りを発見しやすい。
  • 標準的な指標 業界内で広く普及しており、ツールのサポートも豊富。

デメリット

  • 複合条件の不完全性 「A かつ B」のような複合条件において、個々の組み合わせ(A=T, B=Fなど)までは保証不可。
  • テストケース増大 命令網羅と比較して、作成すべきテストケース数が増加。

既存との比較

  • 命令網羅(C0)との比較 C0は「通る道」に注目。判定分岐網羅(C1)は「分岐の出口」に注目。C1の方が網羅性が高い。
  • 複合条件網羅(MCC)との比較 MCCは全組み合わせを網羅するため、C1よりも厳格だがコストが極めて高い。

導入ポイント

  • カバレッジツールの活用 JaCoCoやgcovなどのツールを用い、自動で網羅率を算出。
  • 目標値の設定 クリティカルなモジュールでは100%を目標とし、それ以外はコストとのバランスで調整。

注意点

  • 到達不能コード 論理的に実行不可能なコード(Dead Code)がある場合、網羅率100%の達成は不可能。
  • 過信の禁物 網羅率が高いことは「テストが十分であること」の必要条件であり、十分条件ではない。

今後

  • AIによる自動生成 AIがソースコードを解析し、最適な判定分岐網羅テストケースを自動生成する技術の普及。
  • 高信頼性システムでの必須化 車載ソフトウェアや医療機器など、安全性が重視される分野での厳格な適用。

関連キーワード

  • ホワイトボックステスト (White Box Testing)
  • 命令網羅 (Statement Coverage)
  • 条件網羅 (Condition Coverage)
  • 改良条件判定網羅 (MC/DC)
  • 制御フローグラフ (Control Flow Graph)
  • ソフトウェア品質保証 (Software Quality Assurance)