カバレッジ(網羅率)分析とは

カバレッジは、所定の網羅条件がテストによってどれだけ実行されたかを割合で表したものです。網羅条件が命令であれば、命令網羅と呼ばれ(またはステートメントカバレッジC0とも呼ばれます)、すべての実行可能な命令のうち、テストで実行された命令の割合を意味します。そのほかに、すべての判定条件(if文による分岐など)のうち、テストで実行された判定条件を意味する判定条件網羅(ブランチカバレッジC1とも呼ばれます)などがあります。

テストを実施するにあたって、カバレッジ (網羅率)を測定/分析することは、ソフトウェアの品質向上に非常に大きな意味を持ちます。なぜなら、カバレッジ情報からテストそのもの品質を定量的に測ることができるからです。テストのカバレッジを測定する方法は、コードや仕様、要件、設計など、さまざまな側面から計測する方法がありますが、単体テストの段階では、コードベースのカバレッジでテストの品質を測ることが一般的です。コードカバレッジを測定し、テストが実施されていないコードを確認することにより、テストの妥当性を向上させることができます。

カバレッジの種類

  • 行カバレッジ
    すべてのコード行のうち、テストで実行された行の割合です。
  • ステートメントカバレッジ(C0:命令網羅率)
    すべての実行可能命令(ステートメント)のうち、テストで実行された命令の割合です。
  • ブロックカバレッジ
    すべてのブロックのうち、テストで実行されたブロックの割合です。ブロックは、if文などによる分岐を含まない一連のステートメントです。
  • パスカバレッジ
    すべてのパス(可能な実行経路)のうち、テストで実行されたパスの割合です。
  • 判断文カバレッジ(ブランチカバレッジ、C1:分岐網羅率)
    すべての判定条件のうち、テストで実行された判定条件の割合です。
  • 単純条件カバレッジ(C2:条件網羅率)
    すべての条件のうち、テストで実行された条件の割合です。判断文カバレッジ との違いは、1つの判断文には(ANDやORで接続された)複数の条件が含まれる場合がありますが、 判断文カバレッジでは判断文全体が真と偽の両方の値を取ればよいのに対し、単純条件カバレッジでは個々の条件が真と偽の両方の値を取る必要がある点です。
  • Modified Condition/Decision Coverage (MC/DC)カバレッジ
    MC/DCは、国際技術標準 DO-178B(RTCA)に準拠しています。これは、ソフトウェア証明のための基準を指定したものであり、対象となるソフトウェアには、航空業界で使用される重要機器およびシステムのためのリアルタイム組込みシステムも含まれます。 DO-178Bに従うと、完全な(100%の)MC/DCカバレッジ を得るには、次の3つの条件を満たす必要があります。 

    a.各「判断文」が、少なくとも1回すべての可能な結果を得ている。
    b.1つの「判断文」中の各条件が、少なくとも1回すべての可能な結果を得ている。
    c.1つの「判断文」中の個々の条件が、単独で全体の「判断文」の結果を左右する。
  • 関数カバレッジ
    すべての関数のうち、テストで最低1回実行された関数の割合です。
  • コールカバレッジ
    すべての関数呼び出しのうち、テストで呼び出された関数の割合です。

カバレッジ分析と機能安全規格コンプライアンス

機能安全規格は、航空機、乗用車、医療機器など、人間や環境に危害をもたらす可能性のあるシステムについて、危険の度合いを許容可能なレベルにまで低減するための方策を定めたものです。ますます多くの機器にソフトウェアが組み込まれ、さまざまな機能を担っている現在、ソフトウェア開発における機能安全は重要な課題となっています。 電気・電子・プログラマブル電子安全関連系の機能安全規格であるIEC 61508や、自動車向け機能安全規格であるISO 26262では、規定された手法を使用して単体テストを実施すること、そしてカバレッジ情報を取得してテスト品質を確保することが要求されています。

カバレッジ計測を効率的におこなう

効率的にカバレッジを計測するにはテストツールの利用が有効です。
C/C++言語対応テストツールのC++testは、単体テストの実行中に8種類ものテストカバレッジを計測することができます。

まずは無償体験版でお試しください。
  • C++testのすべての機能を無償で14日間ご利用可能
  • すぐにご評価可能なチュートリアル付属
  • ご評価を円滑に進めるための、技術的なサポート対応