CppUnit テスト カバレッジ (win32 および Unix 上) を測定するにはどうすればよいですか?
-
09-06-2019 - |
質問
広範な単体テスト (CppUnit を使用) を含む非常に大規模なコード ベースがあります。 これらのテストでコードの何パーセントが実行されるかを計算する必要があります, そして、(理想的には) ライブラリごとまたはファイルごとに、どの程度のコードが実行されたかを示す、ある種のレポートを生成します。
キッカーは次のとおりです。これは完全に無人で (最終的には継続的統合ビルド内で) 実行する必要があり、クロスプラットフォーム (少なくとも WIN32 と *nix) である必要があります。
これを行うのに役立つツールまたはツールセットを提案できる人はいますか?私は CppUnit から離れることはできません (また、CppUnit は嫌です) が、それ以外の場合は、皆さんからのアドバイスをお待ちしています。
乾杯、
解決
どのツールを使用すればよいですか?
これ 記事の説明 別の開発者は、C++ コード カバレッジ ツールを探してイライラしています。著者の最終的な解決策は、 ブルズアイの報道.
ブルズアイの報道 特徴:
- クロスプラットフォームのサポート (win32、unix、および組み込み)、(linux gcc コンパイラーおよび MSVC6 をサポート)
- 使いやすい (数時間以内に起動して実行できるようになります)。
- 「最良の」指標を提供します:機能カバレッジと条件/決定カバレッジ。
- ソースコードインストルメンテーションを使用します。
継続的インテグレーションへの接続に関しては、使用する CI ソリューションによって異なりますが、自動テストに使用するメイク ファイルにインストルメンテーション / カバレッジ測定のステップを接続できる可能性があります。
Linux と Windows をテストしますか?
すべてのテストが両方の環境で正しく実行される限り、どちらかの環境でカバレッジを測定しても問題ありません。(ブルズアイは出ますが 両方のプラットフォームをサポートするには)。しかし、なぜ両方の環境で継続的統合ビルドを実行しないのでしょうか??両方の環境でクライアントに配信する場合、 必要 両方でテストすることになります。
そのため、Linux ビルド用と Windows ビルド用に 2 つの継続ビルド サーバーをセットアップする必要があるようです。おそらくこれは、次のような仮想化ソフトウェアを使用して簡単に実現できます。 ヴイエムウェア または バーチャルボックス. 。両方の OS でコード カバレッジ メトリックを実行する必要はないかもしれませんが、両方の OS で単体テストを実行する必要があります。
他のヒント
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 だけかもしれません...