コード網羅率

コード網羅率とは



コード網羅率(コードカバレッジ)は、ソフトウェアテストにおいて、プログラムのソースコードがどれだけテストされたかを測る指標です。具体的には、ソースコードのどの部分が、テスト中に実行されたかを割合で示します。この指標は、テストの網羅性を評価し、ソフトウェアの品質を向上させるために重要な役割を果たします。コード網羅率は、主にホワイトボックステストで使用され、コードの内部構造を理解した上でテストケースを作成します。


コード網羅率の歴史



コード網羅率は、体系的なソフトウェアテスト技法として初期に確立されました。1963年に発表されたミラーとマロニーの論文で初めて言及され、ソフトウェアテストの分野において重要な概念として認識されるようになりました。

コード網羅率の測定手法



コード網羅率を測定する際には、いくつかの異なる手法が存在します。それぞれの網羅率の定義と、具体的な内容について以下に説明します。

文網羅ソースコード内の各文がテストによって少なくとも一度は実行されたかどうかを評価します。コードの各行が実行されたかどうかをチェックする基本的な指標です。
分岐網羅:プログラムの制御構造における各分岐(if文やswitch文など)が、テストで実行されたかどうかを評価します。条件分岐のすべての結果がテストされているかを確認します。
条件網羅:分岐条件に含まれる各条件式が、真と偽の両方でテストされたかどうかを評価します。複雑な条件式を網羅的にテストするのに役立ちます。
経路網羅:プログラムの実行可能なすべての経路をテストで実行したかどうかを評価します。理論上は最も網羅的なテストが可能ですが、実際には実現が難しい場合が多いです。
入口/出口網羅:プログラム内のすべての関数呼び出しがテストによって実行されたかどうかを評価します。関数の呼び出し漏れを防ぐために有効です。

網羅率の関係性



これらの網羅率は互いに関係しており、網羅率の高いテストは、網羅率の低いテストを包含します。例えば、経路網羅は分岐網羅、文網羅、入口/出口網羅を含みますが、文網羅は分岐網羅を含みません。以下に簡単な例を示します。

c
void foo(int bar) {
if (bar > 0) {
// ...
}
}


例えば、この関数を`bar = -1`で呼び出すと文網羅は達成されますが、分岐網羅は達成されません。分岐網羅を達成するには、barが正の数である場合もテストする必要があります。このように、網羅率によってテストの品質に違いが生じます。

経路網羅の限界



完全な経路網羅は、現実的ではなく、不可能であるとされています。n個の判断が存在するモジュールでは、最大で2^n個の経路が存在する可能性があり、ループがある場合には無限の経路が存在します。また、タイミングに依存する条件分岐の場合、テストで再現できないこともあります。このような問題から、テスト不可能な経路を特定する一般的なアルゴリズムは存在しません。そのため、実際にはループ回数が異なるだけの経路をクラスとして扱い、経路クラスを網羅するようにテストを行います。

コード網羅率の活用



コード網羅率は、テストの実施後に結果を分析し、算出されます。必要に応じてテストを修正し、再度実行することで、網羅率を向上させることが可能です。テスト作成の最終的な目的は、コード修正時のバグ混入を防ぐ回帰テストの作成にあります。

コード網羅率は通常、パーセンテージで表示されますが、測定手法によって値が異なることに注意が必要です。テストの目的や対象となるコードに合わせて、適切な網羅率を選択する必要があります。

コード網羅率の注意点



コード網羅率はあくまでもテストの網羅性を評価する指標であり、コードの品質を保証するものではありません。高い網羅率を達成したとしても、バグが完全に排除されるわけではありません。しかし、網羅率を向上させることは、バグを発見しやすくし、ソフトウェアの品質を高めるための重要なステップです。

関連事項



変異解析:テストの有効性を評価する手法です。
ソフトウェア測定法:ソフトウェアの品質を定量的に評価するための手法です。
回帰テスト:コードの変更によって既存機能が壊れていないかを確認するテストです。
静的コード解析:コードを実行せずに問題点を見つける手法です。
ホワイトボックステスト:コードの内部構造を理解して行うテストです。

コード網羅率を測定するツール



コード網羅率を測定するためのツールは多数存在します。以下は、その一部です。

gcov:GNU テスト網羅率プログラムです。
EMMA:Java 用のコード網羅率測定ツールです。
Netbeans Code Coverage Plugin:EMMAベースのNetBeans向けプラグインです。
Eclipse EMMA plugin:EMMAベースのEclipse向けプラグインです。
NCover:.NET 用のコード網羅率測定ツールです。
trace2htmlPython 用のコード網羅率測定ツールです。
coverage.pyPython 用のコード網羅率測定ツールです。
Cobertura:Java 用のコード網羅率測定ツールです。
PartCover:.NET 用のコード網羅率測定ツールです。
Devel::Cover:Perl 5 用のコード網羅率測定ツールです。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。