ホーム > ユーザーサポート > FAQ カバレッジマスターwinAMS
【質問】
カバレッジマスターで関数の単体テストを行いましたが、カバレッジ計測結果を見ると、C1(分岐カバレッジ)が100%であるにも関わらず、C0(命令カバレッジ)が100%になりません。全ての分岐が実行されてC1が100%であれば、すべてのソース行が実行されているはずなのですが、なぜ、このような結果となるのでしょうか?
【回答】
1つの原因としては、return命令やgoto命令などがコードにある場合、Cソースのロジックで実行されることのないコード(デッドコード)が存在する場合にこのような結果となります。これは、カバレッジビューで該当行を確認することができます。
もう1つの原因として、コンパイラの生成するコード構造に依存する場合があります。一例では、関数の最終行('}'の行)が実行されない結果が出力される場合があります。これは、実行コードでない定数領域をコンパイラが最終行に生成し、デバッグ情報にこの対応付け(最終行に定数領域のコードを対応付けしてしまう)を行っている場合です。
テスト実行時には、実行コードでない定数領域は実行されないため、カバレッジマスターは最終行が実行されていないと判断し、C0カバレッジが100%とならない結果を出力します。
このような結果については、カバレッジビューの「逆アセンブルコード展開」の機能を使用して、実行されない行のコードを評価頂く必要があります。
<回避方法:関数の最終行に実行できないコードが生成される場合>
関数の最終行をカバレジ計測の対象から除外するオプションが用意されています。このオプションは、「テスト設定」ビューの「カバレッジ」の項目にある「詳細設定」のボタンで表示される設定画面にあります。
□関数終了コードをC0カバレッジの対象外にする
<回避方法:埋め込みコードによるカバレッジ測定>
この問題を完全に回避する方法として、「埋め込みコード」によるC0、C1カバレッジ計測の機能があります。これは、「埋め込みコード」と呼ばれるカバレッジ測定のためのコードをテスト対象のソースコードに挿入し、アセンブラコード展開の影響を受けないカバレッジ測定専用のオブジェクトコードを使用してC0、C1カバレッジを計測する方法です。(MC/DCカバレッジを計測する機能と同様です。)
詳細につきましては、以下のFAQを参照してください。
■013_04 : 「埋め込みコード」によるカバレッジ計測を行うために必要なセットアップ、環境の作成について教えて下さい。