CppUnit テスト カバレッジ (win32 および Unix 上) を測定するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/33042

質問

広範な単体テスト (CppUnit を使用) を含む非常に大規模なコード ベースがあります。 これらのテストでコードの何パーセントが実行されるかを計算する必要があります, そして、(理想的には) ライブラリごとまたはファイルごとに、どの程度のコードが実行されたかを示す、ある種のレポートを生成します。

キッカーは次のとおりです。これは完全に無人で (最終的には継続的統合ビルド内で) 実行する必要があり、クロスプラットフォーム (少なくとも WIN32 と *nix) である必要があります。

これを行うのに役立つツールまたはツールセットを提案できる人はいますか?私は CppUnit から離れることはできません (また、CppUnit は嫌です) が、それ以外の場合は、皆さんからのアドバイスをお待ちしています。

乾杯、

役に立ちましたか?

解決

どのツールを使用すればよいですか?

これ 記事の説明 別の開発者は、C++ コード カバレッジ ツールを探してイライラしています。著者の最終的な解決策は、 ブルズアイの報道.

ブルズアイの報道 特徴:

継続的インテグレーションへの接続に関しては、使用する CI ソリューションによって異なりますが、自動テストに使用するメイク ファイルにインストルメンテーション / カバレッジ測定のステップを接続できる可能性があります。


Linux と Windows をテストしますか?

すべてのテストが両方の環境で正しく実行される限り、どちらかの環境でカバレッジを測定しても問題ありません。(ブルズアイは出ますが 両方のプラットフォームをサポートするには)。しかし、なぜ両方の環境で継続的統合ビルドを実行しないのでしょうか??両方の環境でクライアントに配信する場合、 必要 両方でテストすることになります。

そのため、Linux ビルド用と Windows ビルド用に 2 つの継続ビルド サーバーをセットアップする必要があるようです。おそらくこれは、次のような仮想化ソフトウェアを使用して簡単に実現できます。 ヴイエムウェア または バーチャルボックス. 。両方の OS でコード カバレッジ メトリックを実行する必要はないかもしれませんが、両方の OS で単体テストを実行する必要があります。

他のヒント

ご利用いただければ GNU GCC あなたのコンプライアンスとして、 gcov ツールはうまく機能します。プロセス全体を完全に自動化するのは非常に簡単です。

GCC ツールチェーンを使用している場合、gcov はソース、関数、およびブランチ カバレッジの統計を取得します。gcov は MinGW と Cygwin では正常に動作します。これにより、カバレッジ統計を取得できるだけでなく、未実行のコードを視覚化できるインストルメント化されたソース コードを出力できるようになります。

ただし、本当にきれいなレポートを作成したい場合は、gcov を併用してください。 lcov が進むべき道です。lcov は、ファイルとディレクトリを対象とした棒グラフ、機能カバレッジ統計、およびカバレッジを示す色分けされたソース ファイルの参照を提供します (緑は実行されたことを意味し、赤は実行されていないことを意味します...)。

lcov は Linux では簡単ですが、Cygwin では Perl ハッキングが必要になる場合があります。私個人としては、Windows 上でスクリプト (lcov は Perl で実装されています) を実行するときにいくつかの問題が発生しました。ハックアップしたバージョンも動作しますが、あらかじめご了承ください。

もう 1 つのアプローチは、Windows で gcov 出力を実行し、Linux で lcov 後処理を実行することです。Linux では、すぐに確実に機能します。

私たちをチェックしてください SD C++ テスト範囲 道具。これは、GCC および MSVC6 で取得できます。

オーバーヘッドの低いプローブ データ収集、コード上にオーバーレイされたカバレッジ データの適切な表示、メソッド/クラス/ファイル/ディレクトリ レベルにわたるカバレッジのロールアップを含む完全なレポート生成が備わっています。

編集:2015 年 8 月:Visual Studio 2015 を通じて GCC5 およびさまざまな MS 方言をサポートするようになりました。Linux でこれらのツールを使用するには Wine が必要ですが、このツールは Linux ネイティブの sh スクリプトと Linux/Java ベースの UI を提供するため、このツールはネイティブ Linux ツールのように感じられます。

コンパイラを指定するべきだったと思います。Linux には gcc を使用し、WIN32 には MSVC 6 (古いことは知っていますが、(ほとんど) 動作します) を使用しています。

そのため、gcov は Win32 ビルドでは機能せず、Bullseye は Linux ビルドでは機能しません。

もう一度言いますが、必要なのは 1 つの OS だけかもしれません...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top