3

私はソナーのベストプラクティスについてかなり掘り下げてきました。コンセンサスは、ソナーは 1 日または 1 週間に 1 回、たとえば夜間にのみ起動されるということです。しかし、Jenkins などの CI サーバーを使用するとどうなるでしょうか。Jenkins はすべての SVN コミットに基づいてビルドし、単体テストを実行し、ステージング環境にデプロイし、Selenium テストを実行します。私が理解しているように、Sonar が 1 日または 1 週間に 1 回だけ起動されると、この追加情報はすべて失われます。ほとんどの場合、チームのすべてのコードの問題と失敗したテストは、午後または週末に解決されています。ソナーは、おそらく日曜日の夜か毎晩実行されます。アプリケーションは事前に構築およびテストされており、その情報に基づいてソナー分析が実行されます。ほとんどの場合、すべてのテストに合格し、リポジトリに大きなコードの問題は残っていません。QA チームは、すべてのソナー レポートが緑色で表示されるため、問題はないと誤って信じています。ただし、1 日または 1 週間の間に、プロジェクトが壊れたビルドなどで完全に混乱している可能性がありますが、Sonar レポートには表示されません :)

ここで何か不足していますか、それともソナーは実際にコミットごとに、または少なくとも 1 時間に 1 回実行する必要がありますか?

4

3 に答える 3

2

新しいコードを開発し、新しい機能をテストしてプロジェクトに統合する必要性とチームの速度にすべて依存します。

Web のタイム ボックスがあるスプリントがある場合、おそらく週末に、月曜日に開始されたバージョンは安定しているため、バグがないか、わずかなバグしかありません。スプリントのタイム ボックスが 1 週間の場合は、少なくとも 1 日 1 回を強くお勧めします。これにより、単体テストなどを実行して欠陥を見つけ、プロジェクトの品質に良好な現実をもたらすことができます。

これらのプラクティスをお勧めします。

  1. Cobertura のようなコード カバレッジを使用して、ユニット テストを少なくとも 1 日に 1 回実行します。
  2. PMD、checkstyle などのコード分析を使用します。可能であれば、アーキテクチャに適用される独自のルールを作成し、品質の面でプロジェクトの価値を高めます。
  3. スプリントの時間枠を考慮して、ソナーでビルドの頻度を選択し、本当に必要なときにのみ実行する cron ジョブをスケジュールします (時間がかかるため)。

これらは私のプロジェクトで使用するプラクティスですが、ツール (Sonar) はプロジェクトの品質に関する情報、したがってアーキテクチャ、チーム、およびエンジニアリング プラクティスに関する情報を提供するためのものであるため、ニーズをよく確認する必要があります。 .

于 2012-09-21T18:45:17.230 に答える
1

Sonar が収集するデータのほとんどは静的分析情報 (複雑さ、コード スタイル違反など) であり、コードがリファクタリングされない限り、ビルドごとにあまり変化しないため、1 日 1 回実行するだけで十分です。また、ソナー分析がビルドの実行時間に追加されることも考慮してください。私の仕事では、そもそもコンパイルとテストにそれほど時間がかからないビルドに 2 ~ 3 分追加できます。

すべての CI ビルドのコード カバレッジとテスト結果を収集したい場合は、Jenkins でそれを行い、Jenkins をビルドの健全性の早期警告システムとして使用して、全体的なコードの品質と保守性をより長期的に分析するために Sonar を残します。

質問で述べたように、Sonar でコード カバレッジとテスト結果を傾向分析することはできますが、CI ビルドごとにそれを使用できるわけではありません。

于 2012-09-21T18:43:06.877 に答える
1

Sonar を 1 日または 1 週間に 1 回実行することは、「ベスト プラクティス」と見なされるべきではありません。利用可能なハードウェアと品質測定の品質を考慮すると、それは現在可能な限り最高かもしれませんが、あなたが言うように、CI 環境ではコミットごとにフィードバックが必要です (実際には、Smalltalk と MOOSE でできるように、コミット内にもフィードバックが必要です)メソッドを保存するたびに)。私が現在取り組んでいる部分のコードの複雑さとテスト カバレッジの変更は、1 日 1 回よりもはるかに細かい粒度で行うのが好きな視覚化/測定の一部です。

Sonar がビルドに多くの時間を追加することは実装の問題であり、根本的な問題ではなく、さまざまな方法で取り組むことができます: 情報のキャッシュ、低速測定と高速測定の分割、モジュールへの分割、非同期実行など。

于 2012-11-10T10:11:46.783 に答える