C のコード カバレッジを探しています。さまざまなプラットフォームやコンパイラで作業しているため、gcov などのツールに頼ることはできません。
基本的に、コード カバレッジを自分の (独自の実装) 単体テスト フレームワークに組み込むための戦略を探しています。
C のコード カバレッジを探しています。さまざまなプラットフォームやコンパイラで作業しているため、gcov などのツールに頼ることはできません。
基本的に、コード カバレッジを自分の (独自の実装) 単体テスト フレームワークに組み込むための戦略を探しています。
使用しているプラットフォームとコンパイラを説明するために質問を更新すると、非常に役立ちます。
私が使用した戦略は、すべての命令をトレースできるエミュレーターでシステムを実行することです。この命令トレースを使用して、コードカバレッジを計算できます。
UNIXでは、ptrace()を使用してプロセスを実行し、アプリケーションをシングルステップして、実行された命令をキャプチャすることもできます。
関数呼び出しのトレースが必要な場合は、プロシージャリンケージテーブルをハッキングして、特殊なロギングコードにジャンプすることもできますが、それはおそらくおかしなことです。
繰り返しになりますが、有用な答えを出すには、実行環境と詳細レベルに関する詳細が必要になります。
プラットフォーム固有のコードが多すぎて、すべてのプラットフォームで単体テストのカバレッジを測定したいですか? つまり、プラットフォーム固有のコードが多くない限り、単体テストの対象範囲はすべてのターゲットで類似している必要があるため、すべてのターゲットでそれを測定する必要はないかもしれません。共通コードのカバレッジ レベルが特定のコードによって低下しないように、プラットフォーム固有のコードをプラットフォーム固有のモジュールに移動すると興味深い場合があります。
ブランチカバレッジまたは関数カバレッジを見ていますか? 後者の場合、gcc を使用してコードを計測し、各関数がその名前またはアドレスをファイルに出力し、スクリプトを記述してすべてのプラットフォームからの結果を集計することができます。
質問ばかりで申し訳ありません... HTH
コード カバレッジ ツールのページには、Brian Marick による GCT と呼ばれるものが、ソースからソースへの変換によってコード カバレッジを実装しているため、C コードを変換して、プラットフォーム固有のコンパイラでビルドできると書かれています。詳細は追っていません。
アプリケーション自体の一部として、または代替のビルド ターゲットとして、一連のテスト ケースをビルドすることを検討できます。次に、ブラックボックス手法を使用してすべてのブランチをテストしようとするのではなく、すべての「内部」にアクセスできるという追加の利点を使用して、アプリケーション自体をテストできます。