web-dev-qa-db-ja.com

商用のJava静的分析ツールは無料のものと比較してどうですか?

私は、FindBugsやPMDなど、Javaで利用できる無料の静的分析ツールをいくつか知っています。私が知りたいのは、KlocworkやCoverityなどの商用製品がこれらとどのように重なるかです。彼らの長所と短所は何ですか?

34
Alex Varju

オープンソースおよび商用の静的分析ツールのスイートを使用しています。さまざまなツールがさまざまな種類のバグを検出し、実際の問題を見逃す可能性を犠牲にして、誤検出率が低くなるように調整されているものもあります。

私の経験では、Findbugsは、特にチームが示唆しているように正当性エラーに焦点を当てている場合、実際の問題を見つけるのに優れています。最近、Findbugsの開発者は、いくつかの基本的なセキュリティ脆弱性チェックも追加しました。特に実験チェッカーをオンにしない場合、Coverityの誤検出率は低くなります。CoverityPreventには、傾向/クラスター分析用の優れた追跡データベースが含まれています。彼らのスレッドチェッカー(静的または動的)が機能することを私はまだ確信していません-少なくとも彼らは私たちにとって興味深いものを何も見つけていません。 Klocwork Developer for Javaはより高い誤検知を返しますが、これらのツールのセキュリティチェックが最も強力であることがわかります。したがって、優先度が品質チェック(Findbugs、Coverity)であるか、セキュリティ脆弱性分析であるかによって異なります。 (Klocwork、またはFortify)一部の開発者は、PMDを使用して、一般的なコードのクリーンアップに役立つため、ソースコードのレビューをサポートしています。

「SATE:静的分析ツールの説明」と呼ばれるNISTで実施された最近のプロジェクトでは、さまざまなツールとその基礎となるアプローチをレビューしました。 https://samate.nist.gov/index.php/SATE.html およびOWASPなどのこのプロジェクトへの他の参照。一般的な発見は、ツールが異なれば長所と短所も異なるため、徹底的な作業を行う場合は複数のツールを使用することです。

18
Jim

[〜#〜] sonar [〜#〜] ソースコードの品質を継続的に分析および測定するためのオープンソースソフトウェア品質管理ツールを試してみることをお勧めします。このソフトは、コード分析ツールから結果を取得し、その結果を統合して、ユーザーフレンドリーなインターフェイスにアクセスできるようにします。

6
Julien Hoarau

商用静的分析ツールで最も確実に見つかる1つの機能(そして、少なくとも2008年の時点では、フリーウェア分析ツールでは簡単に見つけることができません。 OP)は
レポート:ソフトウェア品質の傾向を測定します時間の経過とともに

これで説明されているように コードメトリクスに関する質問 、静的コード分析自体は必ずしも意味があるとは限りません。

  • 修正するには「欠陥」が多すぎる
  • 報告された欠陥のカテゴリが多すぎます

何を修正するかを優先するために、トリアージを実行する機能が必要です。また、特定の欠陥が時間の経過とともにますます発生していないかどうかを確認する必要があります。

これは、何千ものクラスを持つレガシープロジェクトに特に当てはまります。良い理由がなければ、そのように多くのファイルの欠陥を修正することはできません。その理由は、フリーウェアツールでは見つけられない優れたレポートと傾向分析から推測できます。


更新:2012年(4年後)から、Sonar(2018年には " SonarQube ") "Historical Information"(別名 "Time Machine")という名前の4.xおよび5。 xシリーズ
これらに注意してください プロジェクトダッシュボードが削除されました in SonarQube 6.1 (2016年9月): このスレッド を参照してください。
これらのダッシュボードは手動で再作成する必要があります カスタムページを介して
SonarQube 6.5 プロジェクトの進化を表示するための(いくつかの事前定義された1つのカスタマイズ可能な)チャートを取得するアクティビティページで、これらのダッシュボードの一部を復元します。

5
VonC

私はFindbugsやPMDを直接経験したことはありませんが、KlocworkやCoverityと比較した多くの人々に会いました。

フィードバックに対する私の一般的な見解は次のとおりです。

FindbugsとPMDはより「ツールっぽい」ものです。デスクトップで実行するものの種類。さまざまな潜在的な問題が見つかりますが、ノイズが多くなる傾向があります。つまり、誤検知や「気にしない」種類があります。それはいくつかの良いものを見つけます。長期間の使用については、さまざまなフィードバックが寄せられています。無料のツールのROIは無限であると感じる人もいますが、誤検知には真のコストがかかります。

当然のことながら、コストがかかるKlocworkとCoverityは、ソリューション指向である傾向があり、チームでの作業に合わせて拡張することもでき、UIがより効率的で使いやすく、ノイズが少ない傾向があります。彼らの分析はより深い調査を行っているようであり、したがって、並べて比較すると、より良い結果が得られます。チーム全体でツールを採用する場合、ツールを使用することにさまざまなレベルの熱意があり、雑音指数は、普及を妨げる大きな問題です。もちろん、あなたをバックアップするためのサポートがあるなどのこともあります。

一般に、FindbugsとPMDは無料なので、最初のオプションとしてそれを見ることができます。多くの企業は価値を認識しており、長期的なソリューションとしてCoverityまたはKlocworkを選択していますが、FindbugsとPMDも実行しています。彼らは異なるものを見つける傾向があるので、あなたの目標が可能な限り見つけて修正することであるならば、両方の組み合わせを持つことは良いことです。

開示:私はCoverityのパートナーであるCode Integrity Solutions(codeintegritysolutions.com)で働いています。

4
Andy

商用分析ツールのリストは次のとおりです: http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java_2

コベリティにはいくつかのツールがあります:
http://www.coverity.com/html/coverity-readiness-manager-Java.html :これは同等である必要がありますfindbugsとPMDを使用しますが、プレゼンテーションを改善します

防止: http://www.coverity.com/html/prevent-for-Java.html :低いFALSEPOSITIVES。

スレッドアナライザー: http://www.coverity.com/html/coverity-thread-analyzer-Java.html :これはほとんどの場合に存在しないものですオープンソースツール。

1
anjanb