14

いくつかのプロジェクトをAntビルドからMavenビルドに移行しています。ビルドサーバーはHudsonであり、今後も存続します。

テストが実行され、2回記録された問題が原因で、ハドソンでcoberturaを使用してコードカバレッジを記録するのに問題がありました。

プロジェクトはマルチモジュールであり、必須ではありませんが、コードカバレッジデータの集約された出力があると便利です。

全体として、私が探しているソリューションは次のとおりです。

  • すべてのモジュールに対して自動テストを実行し、結果を1回記録します。
  • ハドソンで個々のモジュールコードカバレッジを表示します;
  • すべてのモジュールではなく、プロジェクト全体に対して一度簡単に構成できます。

このソリューションは、Cobertura、Emma、またはその他のJavaコードカバレッジツールに基づくことができます。


更新:Emmaを使用してテストを実行すると、結果が複製され、merge機能がないため、マルチモジュールビルドでは実際には使用できません。

4

6 に答える 6

8

Sonarは、Hudsonと簡単に統合できる非常に優れたツールであり、マルチモジュールプロジェクトを備えた組織が本当に気に入っています。あなたはそれを試してみるべきです

代替テキストhttp://sonar.codehaus.org/wp-content/uploads/2009/08/dashboard.png

于 2009-10-03T16:16:57.533 に答える
6

少しハックですが、私が使用しているアプローチは、Maven coberturaプラグインの修正バージョンリポジトリから入手可能)を使用することです。cobertura:generate-reportターゲットを提供するため、テストの実行前と実行後に、それぞれcobertura:instrumentとcobertura:generate-reportをライフサイクルに挿入できます。これにより、テストの実行/記録を重複させることなく、必要なカバレッジデータを取得できます。

根本的な問題は、私が遭遇したすべての非クローバーMavenカバレッジプラグインが、Mavenライフサイクルのメインテスト実行とは別にカバレッジを使用してテストを実行するというアイデアに基づいて構築されていることです。これにより、明らかに2セットのテストが実行されます。フリースタイルプロジェクトを使用している場合、記録されるテストのセットは1つだけです(2つのテスト実行があっても、テスト出力のコピーは1つしかないため)が、Mavenプロジェクトタイプは実際にはMavenmojo実行をインターセプトします。フリースタイルプロジェクトのようにビルドの最後に一度にすべてではなく、テストの実行時にテストの出力/結果を記録します。これには多くの利点がありますが、1つのテストが2回実行されると、2つのテストとしてカウントされるというかなり明白な欠点もあります。

とはいえ、インストルメントされていないコードとインストルメントされたコードの両方に対してテストを実行することについて強い議論を見てきましたが、Maven / Hudsonの問題だけでなく、 45分かかるテストがありますが、同じ結果を生成するために2回実行するのは、率直に言ってばかげているようです。

于 2009-09-28T15:29:35.970 に答える
1

私たちはフリースタイルのプロジェクトを使用しており、この問題はありません。示されているように、これが問題の原因である可能性があります。

マージ機能を提供するために、独自のアーティファクトリポジトリを作成しました(Mavenは使用していません)。各ビルドの最後に、cobertura.serファイルをネットワーク共有にコピーし、その過程で名前を変更します。すべてのcoberturaファイルとソースコードファイル(ネットワーク共有にコピーされた別のビルドアーティファクト)をローカルビルドディレクトリにコピーし、Coberturaレポートを生成する統合ビュージョブがあります。

Hudson内に標準のアーティファクトリポジトリがないことは少しイライラしますが、作成者が通常これらのニーズにMavenを使用することを考えると理にかなっています。ビルドプロセスは複数のサーバーで実行されるため、他のジョブディレクトリへの相対パスを使用することはできません。

他のメトリックについても同じことを行うことに注意してください:テスト結果、JavaNCSSなど。正しいツールまたはカスタムコードを使用して参加しました。

従来のビルドアーティファクト(DLL、JAR、インストールスクリプト)にも同じリポジトリを使用します。

于 2009-09-15T11:44:15.790 に答える
1

優れたGUIを備えた非常に低いオーバーヘッドのツールについては、SDJavaテストカバレッジを参照してください。「2回実行」の問題を理解できるかどうかはわかりませんが、SDツールを使用して(同じ決定論的)テストを2回実行すると、同じテストカバレッジデータ(べき等)が得られます。テストが非決定的である場合、2つの異なるテスト実行が得られますが、これらのツールは、複数の実行の結果を1つの全体的な要約に簡単にマージします。

また、非常に大きなアプリケーションを処理し、複数のスレッド化されたアプリケーションをかなりうまく処理します(小さなタイミングの破片は、理論的には答えを少し不正確にする可能性がありますが、これを実践することは単に問題ではありません)。

于 2009-10-03T04:50:24.103 に答える
1

ロバート、

私もこの問題を抱えていましたが、プロジェクトをMaven2プロジェクトではなくフリースタイルプロジェクトとして設定した場合、Hudsonが二重に報告しないことがわかりました。あなたはmaven2プロジェクトを持つことの素晴らしさのいくらかを失います、しかし私たちにとって、それは私たちがしなければならなかった取引でした。

ジェフ

于 2009-09-15T02:37:10.043 に答える
1

アトラシアンのクローバーを検討しましたか?

maven-clover2-pluginには、ライフサイクルをフォークしたり、テストを2回実行したりせずに、テストを単純にインストルメント化するclover2:setupという新しい目標があります。

ハドソンで実行する目標を次のように定義します。

mvn clover2:setup verify clover2:aggregate clover2:clover

maven-clover2-pluginは30日間無料で試すことができます。

于 2009-09-23T11:24:44.123 に答える