5

Java開発の仕事をしています。私は最近、コーディング標準 (メンバーとメソッドの順序、命名規則、修飾子シーケンス) に準拠しなければならない状況に陥っています。コンプライアンスのチェックを自動化するか、並べ替えを行う何らかのメカニズムを生成する方法を考えています。

私たちは Eclipse で開発していますが、テクノロジーはオープンです。うまくいく方法の 1 つは、外部ビルダー ツールを生成し、これをプロジェクトに追加することです。不利な点は、すべてのファイルに自動的に適用されるため、レガシー コードで問題が発生する可能性があり、コンプライアンスの適切な指標ではない程度までエラー数が急増する可能性があることです。また、コード レビューが非常に難しくなりますが、これは望ましくありません。

別の方法は、情報機能のみを備えたある種のパーサーです。Jenkins 内でプロセスを実行することもできますが、それは確かに機能しますが、それはコードが既にレビューに合格していることも意味します。これは通常、コード コンプライアンス チェックには少し遅れます。

そのような機能を IDE、ソース管理システム (Mercurial)、または Jenkins に統合するための提案された、または簡単な方法はありますか? これは他の場所ではどのように実施されていますか?

4

5 に答える 5

3

このような変更を自動的に行うことはお勧めしません。ほとんどの checkstyle/pmd 準拠は有効ですが、いくつかの警告/エラーを無視する必要がある場合があります。さらに、そのような簡単な問題のプールはごくわずかです。通知のほとんどは、より複雑な操作を必要とし、おそらく人間の介入なしでは実行できませんでした。

私はソナー統合を使用しています。PMD、CPD、CheckstyleFindbugsなどの多くの外部チェッカーが含まれており、 Cobertura (テスト カバレッジ統計)などの他の便利なツールと統合できます。Sonar ビルドを Jenkins ビルドにバインドすることはほとんど簡単であり、主要/重大な問題を回避しようとすることは、良いアプローチと見なされる可能性があります。

開発者環境では、findbugs との Eclipse 統合を使用しています。ソナーとの統合のポイントもありますが、コードをサーバーに送信するか、サーバーをローカルで実行する必要があり、個人的には好きではありません。ただし、Sonar でのコード レビュー後にコードを数回磨き上げた後、あなた (および他のチーム メンバー) はほとんどのルールに固執し、毎日レポートをチェックするだけで十分であることに気付くでしょう。

于 2013-03-29T16:35:40.910 に答える
1

1 つの解決策は、JCSC / checkstyleまたはコマンド ラインに適したその他のツールを使用することです。これをビルド プロセスに統合します。個々の開発者は、これを自分のブランチで実行します。

ほとんどのツールは、ダッシュボードとして使用できる Jenkins と (プラグイン経由で) うまく統合されます。

于 2013-03-29T16:21:26.483 に答える
1

@Jayan の回答に加えて、Jenkins にはCheckStyle プラグインがあり、各 CheckStyle 実行の結果を表示し、検出された違反の数に応じてビルド ステータスを設定できます。したがって、セットアップ手順は次のようになります。

  1. コーディング基準に合わせてCheckStyle ルールを設定する
  2. CheckStyle を実行する Jenkins ビルドにステップを追加します。
  3. ビルド後のステップを追加して、CheckStyle の結果を公開します。
于 2013-03-29T16:39:27.870 に答える
0

Jayan は、コーディング標準に対するチェックに最適な checkstyle について言及しています。

何年も前にコードの自動フォーマットにJalopyを使用したことを覚えていますが、それはあなたのニーズにも合うかもしれません。

正直なところ、コードを自動的に再フォーマットするつもりはありません。checkstyle などのツールを使用して警告を表示することも 1 つの方法です。開発者のソース コードを制御することはまったく別のことであり、ほとんどの人はそれを非常に煩わしく不快に感じています。また、コード チェッカーのバグにより、最悪の場合、誤った警告が生成されます。コード ビューティファイアーのバグにより、何時間にもわたる作業が破損し、破壊される可能性があります。

于 2013-03-29T16:41:40.957 に答える