Javaプロジェクトにはどのコード分析ツールを使用していますか?[閉まっている]


117

Javaプロジェクトで使用しているコード分析ツールは何ですか?

私はすべての種類に興味があります

  • 静的コード分析ツール(FindBugs、PMD、その他)
  • コードカバレッジツール(Cobertura、Emma、その他)
  • その他の計装ベースのツール
  • 他に何か、私が何かを逃しているなら

該当する場合は、使用するビルドツールと、これらのツールがIDEとビルドツールの両方とどの程度統合されているかも説明してください。

ツールが特定の方法でのみ使用できる場合(IDEプラグインとして、またはビルドツールプラグインとして)、その情報も注目に値します。


UCDetectorも見てください:ucdetector.org
Christophe Roussy

変異テストのカバレッジについては、Pitestをチェックアウトします。
mucaho

回答:


70

静的分析ツールでは、CPD、PMDFindBugsCheckstyleをよく使用します。

CPDは、PMDの「コピー/貼り付け検出」ツールです。PMDをしばらく使用していたのは、PMD Webページの[ Finding Duplicated Code]リンクに気づく前でした。

これらのツールは、「すぐに使える」一連のルールを超えて拡張できる場合があることを指摘しておきます。オープンソースだからといって、書き直せるわけではありません。これらのツールの一部には、拡張を可能にするアプリケーションまたは「フック」が付属しています。たとえば、PMDには、新しいルールを作成できる「デザイナー」ツールが付属しています。また、Checkstyleには、大幅なカスタマイズを可能にするプロパティを持つDescendantTokenチェックがあります。

これらのツールをAntベースのビルドと統合します。リンクをクリックすると、私のコメント付き構成を確認できます。

ビルドへの単純な統合に加えて、他のいくつかの方法でツールをいくらか「統合」するように構成すると便利です。つまり、レポート生成と警告抑制の均一性です。これらの側面をこのディスカッションに追加したいと思います(おそらく「static-analysis」タグも必要です)。「統一された」ソリューションを作成するために、これらのツールをどのように構成していますか?(私はここでこの質問を個別に尋ねまし

最初に、警告レポートの場合、各警告が単純な形式になるように出力を変換します。

/absolute-path/filename:line-number:column-number: warning(tool-name): message

これはしばしば「Emacs形式」と呼ばれますが、Emacsを使用していない場合でも、レポートを均質化するための妥当な形式です。例えば:

/project/src/com/example/Foo.java:425:9: warning(Checkstyle):Missing a Javadoc comment.

警告形式の変換は、Ant フィルターチェーンを使用した Antスクリプトによって行われます。

私が行う2番目の「統合」は、警告を抑制するためのものです。デフォルトでは、各ツールはコメントまたは注釈(あるいはその両方)をサポートしており、コードに配置して、無視したい警告を止めることができます。しかし、これらのさまざまな警告抑制リクエストは、いくぶんばかげているように見える一貫した外観を持っていません。警告を抑制しているときは警告を抑制しているので、常に「SuppressWarning?」と書いてはいけません。

たとえば、PMDのデフォルト設定NOPMDでは、コメントに文字列「」が含まれるコード行での警告の生成が抑制されます。また、PMDはJavaの@SuppressWarnings注釈をサポートしています。PMD抑制が同じように見えるように、SuppressWarning(PMD.代わりに「」を含むコメントを使用するようにPMDを構成しNOPMDます。コメントスタイル抑制を使用するときに違反する特定のルールを入力します。

// SuppressWarnings(PMD.PreserveStackTrace) justification: (false positive) exceptions are chained

SuppressWarnings(PMD.コメントにとって重要なのは「」部分だけですが、@SuppressWarning名前による個々のルール違反を認識する注釈に対するPMDのサポートと一致しています。

@SuppressWarnings("PMD.CompareObjectsWithEquals") // justification: identity comparision intended

同様に、Checkstyleは、コメントのペア間の警告の生成を抑制します(注釈のサポートは提供されません)。デフォルトでは、Checkstyleをオフまたはオンにするコメントには、それぞれ文字列CHECKSTYLE:OFFとが含まれますCHECKSTYLE:ON。この構成を(Checkstyleの "SuppressionCommentFilter"を使用して)変更し、文字列 " BEGIN SuppressWarnings(CheckStyle."および " END SuppressWarnings(CheckStyle."を使用すると、コントロールがPMDのように見えます。

// BEGIN SuppressWarnings(Checkstyle.HiddenField) justification: "Effective Java," 2nd ed., Bloch, Item 2
// END SuppressWarnings(Checkstyle.HiddenField)

Checkstyleコメントでは、各チェックに独自の「」コメントペアがあるため、特定のチェック違反(HiddenField重要BEGIN/ENDです。

FindBugsは、@SuppressWarningsアノテーションによる警告生成の抑制もサポートしているため、他のツールとある程度の均一性を実現するために、追加の構成は必要ありません。残念ながら、Findbugsはカスタム@SuppressWarningsアノテーションをサポートする必要があります。これは、組み込みのJava @SuppressWarningsアノテーションに、SOURCEFindBugsが必要とするクラスファイルにアノテーションを保持するほど強力ではない保持ポリシーがあるためです。Javaの@SuppressWarnings注釈との衝突を回避するために、FindBugs警告抑制を完全に修飾します。

@edu.umd.cs.findbugs.annotations.SuppressWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")

これらの手法により、ツール間でかなり一貫性があるように見えます。各警告抑制に​​文字列 " SuppressWarnings"が含まれていると、コードベース全体ですべてのツールのすべてのインスタンスを検索する簡単な検索を簡単に実行できることに注意してください。


うわー、かなり詳細な回答。共有してくれてありがとう。私はあなたのプラクティスを私のコーディングプラクティスにエミュレートします。
Vatsala

16

Cobertura、Checkstyle、(Ecl)Emma、Findbugsを組み合わせて使用​​しています。

EclEmma素晴らしい Eclipseプラグインで、エディターでJavaソースに色を付けることでコードカバレッジを表示します(スクリーンショット)-カバレッジはJUnitテストを実行することで生成されます。これは、特定のクラスでカバーされている行を把握しようとしている場合、または単一のテストでカバーされている行だけを確認したい場合に非常に役立ちます。これは、レポートを生成し、レポートを調べてカバレッジの低いクラスを確認するよりも、はるかにユーザーフレンドリーで便利です。

CheckstyleプラグインとFindbugs Eclipseプラグインも便利です。入力時にエディターで警告が生成されます。

Maven2には、上記のツールと連携してビルド時にレポートを生成するレポートプラグインがあります。これを使用して、プロジェクト全体のレポートを取得します。これは、集計数が必要な場合により役立ちます。これらは、Continuumを使用して実行されるCIビルドによって生成されます。


1
すごい@ EclEmma!私はエマについて知っていましたが、Eclipseに統合されましたか?そのルール。
ジョシュアマッキノン

3
Continuumは最低だ、ハドソンは支配する。
Ken Liu、

11

Maven 2.xビルドとEclipse / RAD 7の両方で、以下のすべてを使用して簡単に統合します。

  • テスト-JUnit / TestNG
  • コード分​​析-FindBugs、PMD
  • コードカバレッジ-クローバー

さらに、Mavenビルドには次のものがあります。

  • JDepend
  • タグチェッカー(TODO、FIXMEなど)

さらに、Maven 2.xを使用している場合、CodeHausのMojoプロジェクトには便利なMavenプラグインのコレクションがあります。

注:CloverはBamboo CIサーバーとすぐに統合できます(どちらもAtlassian製品であるため)。FindBugs、PMD、およびCheckStyle用のBambooプラグインもありますが、前述のように、無料のHudson CIサーバーにもそれらがあります。


9

IntelliJ IDEAに組み込まれている静的分析を使用します。完璧な統合。

Intellij IDEA(EMMAに基づく)に組み込まれたコードカバレッジを使用します。繰り返しますが、完璧な統合。

この統合ソリューションは、さまざまなベンダーのツールをつなぎ合わせるのに比べて、信頼性が高く、強力で、使いやすいものです。


4

Checkstyleは、以前の会社で使用したものの1つです。主にスタイルチェック用ですが、静的分析も可能です。また、コードカバレッジ用のClover。ただし、無料のツールではないことに注意してください。


3

コードカバレッジには、FindBugs、Checkstyle、およびCloverを使用しています。

あなたの開発をサポートする、ある種の静的分析をすることが重要だと思います。残念ながら、これらのツールが重要であることはまだ広く普及していません。


1

Antと統合されたFindBugsとJDependを使用します。JUnitを使用していますが、カバレッジツールは使用していません。

私は、Rational Application Developer(J2EEアプリケーションの開発に使用しているIDE)に統合されたものを使用していません。これは、Windowsコンソールでjavacを実行したときの見栄えが好きだからです。:P


1

Coberturaで幸運を祈りました。これは、通常のビルドの一部としてantスクリプトを介して実行でき、Hudsonに統合できるコードカバレッジツールです。


1

私たちのチームはPMDとCoberturaを使用しています。実際のプロジェクトはMavenプロジェクトであり、コード分析用のプラグインを含めるのは非常に簡単です。本当の質問は、どの分析を使用する必要があるかという特定のプロジェクトに関するものです。私の意見では、プロジェクトごとに同じプラグインを使用することはできないということです。


1

私たちのプロジェクトでは、checkstyleの前にSonarを使用します。pmd.... CI(Bamboo、Hudson)とともに、ソースの品質と私たちが行っている方向の素晴らしい履歴も取得します。CIスタックの中心的なツールの1つであるソナーが好きです。プロジェクトごとにルールを簡単にカスタマイズできます。



0

新しいツールについて学び、この知識を1つの質問/スレッドに統合するための多くの答えを探しているので、この質問に対する1つの真の答えがあるとは思えません。

私自身の質問に対する私の答えは、以下を使用することです:

  • バグ/コーディングの一般的なエラーを探すためのFindbugs-Mavenから実行し、Eclipseに簡単に統合する
  • カバレッジレポートのCobertura-Mavenから実行

Hudsonには、TODOおよびFIXMEの数を表示するだけでなく、それらがソースファイルのどこにあるかを表示するタスクスキャナープラグインもあります。

私たちの場合、すべてがMaven 1.xと統合されており、チェックイン時にビルドを実行するHudsonに関連付けられています。Hudsonトレンドは、JUnitテスト、カバレッジ、findbugs、およびオープンタスクをグラフ化します。コンパイルの警告をレポートおよびグラフ化するHudsonプラグインもあります。Hudsonプロットプラグインを使用した、時間の経過に伴うパフォーマンスとメモリ使用量の独自のグラフを備えたいくつかのパフォーマンステストもあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.