web-dev-qa-db-ja.com

チェックスタイルとPMD

Java製品。静的な分析ツールをビルドシステムに導入しています。Maven2を使用しているため、 Checkstyle および [〜#〜] pmd [〜 #〜] 統合は無料ですが、基本的なスタイルルールを適用するという点で、これらの2つのツールの機能には大きな重複があるようです。

これらの両方を利用するメリットはありますか? 1つが機能する場合、2つのツールを維持したくありません。 1つを選択した場合、どちらを使用する必要があり、その理由は何ですか?

FindBugsの使用も計画しています。他に注目すべき静的解析ツールはありますか?

更新:コンセンサスは、CheckStyleよりもPMDが好まれているようです。両方を使用する確固たる理由は見当たらず、2組のルールファイルを維持したくないので、おそらくPMDのみを目指します。また、FindBugs、おそらく最終的にはMackerを導入して、アーキテクチャルールを適用します。

83
John Stauffer

必ず FindBugs を使用してください。私の経験では、偽陽性率は非常に低く、それが報告する最も重要度の低い警告でさえ、ある程度対処する価値があります。

Checkstyle vs. PMDについては、Checkstyleはスタイルにのみ関係しているので使用しません。私の経験では、Checkstyleはまったく関係のないものをレポートします。一方、PMDは、疑わしいコーディング手法を指摘することもでき、その出力は一般に関連性が高く有用です。

66
Chris Vest

どちらのソフトウェアも便利です。 Checkstyleは、プログラミング中にコーディングスタイルつまりブレース、ネーミングなどをチェックするのに役立ちます。単純なことですが、非常に多数あります。

PMDは、クラスの設計時など、より複雑なルールをチェックしたり、クローン関数を正しく実装するなどの特別な問題をチェックしたりするのに役立ちます。単に、PMDはプログラミングスタイルをチェックします

ただし、どちらのソフトウェアも、説明が不適切な場合がある類似のルールに悩まされています。設定が不適切な場合、2回または2回反対のこと、つまり「不要なコンストラクターを削除する」と「常に1つのコンストラクター」をチェックすることがあります。

36
temptfate

1つを選択した場合、どちらを使用する必要があり、その理由は何ですか?

これらのツールは競合していませんが、補完的であり、同時に使用する必要があります。

規則タイプ(Checkstyle)は、一貫性のないコードを理解するために時間とエネルギーを費やす代わりに、人々が協力して創造性を解放できるようにする接着剤です。

チェックスタイルの例:

  • パブリックメソッドにjavadocはありますか?
  • プロジェクトはSunの命名規則に従っていますか?
  • コードは一貫した形式で記述されていますか?

pMDは悪い習慣を思い出させますが:

  • 何もせずに例外をキャッチする
  • デッドコードを持っている
  • 複雑なメソッドが多すぎる
  • インターフェイスの代わりに実装を直接使用する
  • Not equals(Object object)メソッドなしでhashcode()メソッドを実装する

ソース: http://www.sonarsource.org/what-makes-checkstyle-pmd-findbugs-and-macker-complementary/

22
Lucas

両方を使用します。

  • チームの全員が同様の方法でコードを書くことを確認するためのチェックスタイル
  • 問題のあるコード領域と次のリファクタリングターゲットを見つけるためのPMD
13
Ilya Kochetov

主な使用場所がEclipseでの開発である場合、InstantiationsのCodeProが最適です。以前は商用ツールでしたが、GoogleがInstantiationsを購入したため、CodeProアナリティックスは現在無料です。

チェックアウト http://code.google.com/javadevtools/download-codepro.html

7
Naveen

Checkstyle、PMD、およびFindbugsルールリストを確認した場合、3つすべてが貴重な出力を提供し、3つすべてがある程度重複し、独自の一意のルールをテーブルにもたらすことがわかりました。これが、Sonarのようなツールが3つすべてを使用する理由です。

そうは言っても、Findbugsには最も具体的なルールやニッチなルール(「IllegalMonitorStateExceptionの疑わしいキャッチ-どのくらいの頻度でそれに遭遇する可能性がありますか?」) CheckstyleおよびPMDでは、ルールはより一般的でスタイルに関連しているため、カスタム構成ファイルでのみ使用して、チームを無関係なフィードバック(「5行目のタブ文字」、「6行目のタブ文字」、 「7行目のタブ文字」...写真が表示されます)。また、独自の高度なルールを作成するための強力なツールも提供します。 Checkstyle DescendentToken ルール。

3つすべてを使用する場合(特にSonarなどのツールを使用する場合)、重複を防ぐために注意を払って(3つすべてのツールがhashCode()が検出されたことを検出しながら)たとえば、オーバーライドされ、equals()ではありません)。

要約すると、静的コード分析が有益であると考える場合、3つのいずれかが提供する値を拒否することは意味がありませんが、3つすべてを使用するには、それらを構成して使用可能なフィードバックを提供するために時間を費やす必要があります。

Sonar(http://www.sonarsource.org/)は、コード品質を管理するための非常に便利なオープンプラットフォームであり、Checkstyle、PMD、Findbugsなどが含まれています。

これは、3つのツールすべてに存在する権利があることも示しています...

6
DaveFar

CheckstyleとPMDはどちらもコーディング標準の確認に優れており、拡張が容易です。ただし、PMDには、循環的な複雑さ、Npathの複雑さなどをチェックする追加のルールがあり、健全なコードを記述できます。

PMDを使用するもう1つの利点は、CPD(Copy/Paste Detector)です。プロジェクト全体でコードの重複を検出し、Javaに制約されません。JSPでも機能します。 Neal Fordは Metrics Driven Agile Development で優れたプレゼンテーションを行っており、Java/Java EE開発に役立つ多くのツールについて説明しています。

5
user68838

どちらのツールも構成可能であり、ほぼ同じことを実行できます。つまり、すぐに使用できるものについて話している場合、かなりの重複がありますが、明確なルール/チェックもあります。たとえば、Checkstyleは、Javadocのチェックとマジックナンバーの検索を強力にサポートしており、カップルを挙げています。さらに、Checkstyleには、Mackerの機能に似た「インポート制御」機能があります(Mackerは使用していません)。

CheckstyleがPMDにはない、すぐに使用できる重要なものがある場合は、それらのチェックのみを使用した最小限のCheckstyle構成を検討してください。次に、Checkstyle構成が成長できないポリシーを制定し、カスタムPMDルールなどで同様の機能を実装するときにチェックを削除します。

また、Checkstyleの「インポート制御」機能がMackerに必要なものをカバーすると判断した場合、PMD/Mackerの代わりにPMD/Checkstyleを実装できることも考慮してください。いずれにせよ、2つのツールですが、Checkstyleを使用すると、PMDがすぐに使用できる機能を「無料」で入手できます。

4
Greg Mattes

CheckstyleとPMDは、スタイルの問題と単純な明らかなコーディングバグを強制するのに最適だと思います。私はEclipseとすべての警告を使用するのが好きであることがわかりましたが、それはその目的に適しています。共有設定を使用し、それらを実際のエラーとしてマークすることにより、スタッフを強制します。そうすれば、そもそもチェックインされることはありません。

FindBugsを使用することを強くお勧めします。バイトコードレベルで機能するため、ソースレベルでは不可能なことを確認できます。かなりの数のジャンクを吐き出しますが、コードに多くの実際の重要なバグが見つかりました。

4
Alex Miller

今まで見たことのない点の1つは、コードにCheckStyleルールセットを適用するIDE用のプラグインがありますが、PMDプラグインは違反のみを報告することです。たとえば、複数のプログラミングチームにまたがるマルチサイトプロジェクトでは、標準について報告するだけでなく、標準を積極的に実施することが重要です。

どちらのツールにも、IntelliJ、NetBeans、Eclipseで使用可能なプラグインがあります(私の見解では、これはほとんどの使用法をカバーしています)。私はNetBeansにあまり詳しくないので、IntelliJとEclipseについてのみコメントできます。

とにかく、IntelliJとEclipseのPMDプラグインはレポートを生成しますオンデマンドプロジェクトコードベース内のPMD違反で。

一方、CheckStyleプラグインはその場で違反を強調表示し、(少なくともIntelliJについてはEclipseの経験が少ない)いくつかの問題を自動的に変換するように構成できます(例: 'OneStatementPerLine'の場合、CR-LFが配置されます) 「NeedBraces」のステートメント間では、欠落している場所にブレースが追加されます。明らかに、より単純な違反のみが自動的に修正できますが、それでもレガシープロジェクトや複数の場所にあるプロジェクトの助けになります。

PMDの「オンデマンド」とは、開発者がレポートを実行することを意識的に決定する必要があることを意味します。一方、Checkstyle違反は、開発時に自動的に報告されます。 PMD doesにはより広範なルールセットが含まれていますが、IDEでの違反の自動施行/報告は、2セットのルールを維持する手間をかける価値があります。

そのため、私が取り組んでいるプロジェクトでは、IDEで実施されているCheckstyle、IDEで報告されているPMD、およびビルドで報告され測定されている--Jenkinsによるbothの両方のツールを使用します。

3
GKelly

そして10年後... 2018年、私はそれらすべてをCheckstyle、PMD、FindBugsを使用しています。

FindBugsで開始します。後でPMDとCheckstyleを追加するかもしれません。

デフォルトのルールを盲目的に強制しない

手順:

  • 多くのコードを持つプロジェクトでデフォルトのルールを使用して1つのツールを実行する
  • ルールをこのプロジェクトに適合させ、無用なルールをコメントでコメントアウトします
  • ぶら下げ果物ルール(NPE、ロガーチェック、非クローズリソースチェックなど)に焦点を当てる
  • 価値のあるルールを修正します(一度に1つ!)
  • ツールごとにこれを行いますが、すべてを一度に行うわけではありません!
  • このプロセスを繰り返します

理想的には、各プロジェクトに個別のルールを設定できます。ビルドを介して(mavenプラグインを介して)ルールを実行するのが好きで、プロジェクトが定義したすべてのルールに合格すると、ルールエラーで失敗します。 レポートでは不十分であるため、開発者はアクションを実行する必要があります。プロジェクトのその時点から、ほとんど防弾であり、後でルールを追加したり、カスタムルールを記述したりすることもできます。

3

qulice-maven-plugin をご覧ください。Checkstyle、PMD、FindBugs、および他のいくつかの静的アナライザーを組み合わせて、事前に構成します。この組み合わせの利点は、すべてのプロジェクトで個別に構成する必要がないことです。

<plugin>
  <groupId>com.qulice</groupId>
  <artifactId>qulice-maven-plugin</artifactId>
  <version>0.15</version>
  <executions>
    <execution>
      <goals>
        <goal>check</goal>
      </goals>
    </execution>
  </executions>
</plugin>
2
yegor256

PMDはJavaスタイル/慣習チェックの最新の製品です。FindBugsに関しては、多くの商用開発グループがCoverityを使用しています。

1
Steve Moyer

CheckstyleとPMDの使用を開始しました。私にとって、PMDは、System.gc()、Runtime.gc()が存在するかどうかなど、まったく難しくないXPathクエリを記述できる限り、カスタマイズされたルールを作成する方が簡単です。ただし、PMDには、列番号を表示する機能があることは示されていません。そのため、列の制限を確認するなどの場合。 Checkstyleを使用することもできます。

1
J.P.

PMDは、私が言及しているより多くの人々を見つけるものです。 Checkstyleは4年前に人々が言及していたものでしたが、PMDはより継続的に維持され、他のIDE /プラグインが連携することを選択したと思います。

0
anjanb