関数が呼び出されたか、またその頻度を測定します。100%の関数カバレッジを達成することは、すべての関数が少なくとも一度は実行されたことを確認するものであり、デッドコードや未使用コードを発見するのに有用です。ただし、どの関数も正しく動作したことを保証するものではありません。
行カバレッジ
実行可能なコードを含む行のうち、実際に実行された行を測定します。この指標はフォーマットの影響を強く受けます。1行に複数の文が含まれる場合があり、同一のロジックでもフォーマットが異なると結果が大きく異なることがあります。その結果、行カバレッジはチーム間の比較や徹底の指標としては信頼性が低いと言えます。
ステートメントカバレッジ
ステートメントカバレッジは、常に一緒に実行されるステートメントをグループ化し、コードの書式設定に関わらず、実行可能なすべてのステートメントが実行されることを保証します。これによって書式設定の問題に対処します。
Coco Code Coverageツールのドキュメントでは、これはしばしばステートメントブロックカバレッジと呼ばれます。これは、ステートメントを常に一緒に実行されるブロックにグループ化するからです。
ステートメントカバレッジは、コーディングスタイルを超えてより一貫したメトリクスを生成しますが、それでもなお、すべての論理パスがテストされたことを保証するものではありません。
高いカバレッジ数値は、測定対象が不適切なレベルである場合、誤解を招く可能性があります。重要な動作が実際にテストされたという証拠がないにもかかわらず、チームに過信を招く恐れがあります。
こちらの専門家のブログ記事で、コードカバレッジのパーセンテージが示す真の意味について、より深くご理解いただけます。これらの数値が実際に何を意味するのか、また「100%のステートメントカバレッジ」が保証するものとしないものについて、詳しく解説します。
判定カバレッジ (分岐カバレッジ)
判定カバレッジでは、あらゆる判定の双方(真と偽)の結果についてテストを実施する必要があります。ここでカバレッジ分析は意味のある欠落を明らかにし始めます。多くのチームは「正常経路」のみをテストし、エラー処理を見逃しがちです。判定カバレッジは両方の経路の検証を強制し、より単純な指標では見逃される論理エラーをしばしば発見します。ほとんどのチームにとって、この指標は実用性と洞察力のバランスが最も取れています。
条件カバレッジ
条件カバレッジは複雑な判断を個々の条件に分解します。単に「アクセス許可」と「アクセス拒否」をテストするのではなく、各構成条件(例:ログイン済み、権限付与済み、有効期限切れでない)が真と偽の両方で評価されていることを検証します。これにより、予期せぬ抜け穴が明らかになることがよくあります。
複合条件カバレッジ - Multiple Condition Coverage (MCC)
MCCでは、決定におけるあらゆる可能な条件の組み合わせをテストする必要があります。条件が3つある場合、それは8つのシナリオに相当します。さらに2つ追加すると、32のシナリオになります。MCCは複雑さが急速に増大する可能性があるため、選択的に使用されるのです。
改良条件判定カバレッジ - Modified Condition/Decision Coverage (MC/DC)
MC/DCはより賢明なバランスを提供します。あらゆる組み合わせをテストする代わりに、個々の条件が意思決定の結果に独立して影響を与えることを証明することを求めます。レシピが機能することを知るために、全ての材料の組み合わせを試す必要はありません。各材料を除去した際に結果が変化することを示すだけで十分です。MC/DCはコードに対しても同様の役割を果たし、数千ものシナリオを必要とせずに強力な保証を提供します。安全性が極めて重要なソフトウェアにおける最高の基準と見なされています。
これらのカバレッジレベルと、規制環境におけるその適用方法についてより深く議論するには、Qt Group のシニアソフトウェアエンジニア、James Vance 氏の講演をご覧ください。James 氏は、コードカバレッジを念頭に置いたテストへのアプローチ方法を分析し、コードカバレッジの重要なレベルについて説明し、安全性が重要な業界が、信頼性が高く、コンプライアンスに準拠したソフトウェアを確保するために必要な要件を強調しています。
こちらのリンクよりウェビナーの全編にアクセスいただき、実践におけるコードカバレッジの詳細について、以下の内容を含めご確認いただけます
- テストプロセスへのコードカバレッジ統合のメリット
- コードカバレッジの限界とそれらへの対応方法
- コードカバレッジツール選定の基準
- Cocoコードカバレッジツールの主な機能
- Cocoのライブデモ
業界によってカバレッジレベルの義務付け
セーフティクリティカルシステムを開発するチームにとって、徹底的なテストは任意ではなく必須です。
- 自動車分野(ISO 26262):リスクに応じて、決定分岐カバレッジが推奨されます(高ASILレベルでは強く推奨)。また、MC/DCはASIL Dレベルで強く推奨されます(低ASILレベルでも推奨)。
- 鉄道: EN 50128では従来、分岐カバレッジおよびMC/DCまたはMCCが推奨されておりましたが、SIL 3~4ではその推奨がより強く求められておりました。鉄道規格は進化を続けており、EN 50716:2023がEN 50128に取って代わり、ツール適格性評価を含む検証要件が強化されております。従いまして、チームの皆様は新規プロジェクトをEN 50716に準拠させると同時に、既存システムを適切に維持管理される必要がございます。

ガイドを入手
規制対象業界以外においても、これらの基準は、重大な欠陥が被害をもたらす前に発見するための数十年にわたる経験から生まれた貴重な指針を提供します。
コードカバレッジの強みと限界