私は、FindBugs や PMD など、Java で使用できる無料の静的解析ツールをいくつか知っています。私が知りたいのは、Klocwork や Coverity などの商用製品がこれらにどのように対応するかです。彼らの強みと弱みは何ですか?
5 に答える
私たちは、オープンソースおよび商用の静的分析ツールのスイートを使用しています。さまざまなツールがさまざまな種類のバグを検出し、実際の問題を見逃す可能性を犠牲にして、偽陽性率を下げるように調整されているものもあります。
私の経験では、Findbugs は実際の問題をうまく見つけてくれます。特に、彼らのチームが提案するように、正確性エラーに注目している場合はなおさらです。最近、Findbugs の開発者は、いくつかの基本的なセキュリティ脆弱性チェックも追加しました。特に実験的なチェッカーをオンにしない場合、Coverity の誤検知率は低く、Coverity Prevent にはトレンド/クラスター分析用の優れた追跡データベースが含まれています。彼らのスレッド チェッカー (静的または動的) が機能するかどうかは、まだ確信が持てません。少なくとも、興味深いものは見つかりませんでした。Klocwork Developer for Java はより高い誤検知を返しますが、これらのツールのセキュリティ チェックが最も強力であることがわかりました。そのため、優先順位が品質チェック (Findbugs、Coverity) であるか、セキュリティ脆弱性分析 (Klocwork、または Fortify) であるかによって異なります。
「SATE: Static Analysis Tool Exposition」と呼ばれる NIST で実施された最近のプロジェクトでは、さまざまなツールとそれらの基本的なアプローチが検討されました。 https://samate.nist.gov/index.php/SATE.html および OWASP などのこのプロジェクトへのその他の参照。一般的な調査結果として、ツールによって長所と短所が異なるため、徹底した作業を行う場合は複数のツールを使用してください。
ソースコードの品質を継続的に分析および測定することに特化した、オープンソースのソフトウェア品質管理ツールであるSONARを試してみることをお勧めします。このソフトは、コード分析ツールから結果を取得し、その結果を統合して、ユーザー フレンドリーなインターフェイスにアクセスできるようにします。
市販の静的分析ツールで最も確実に見つかる機能(および、OP の時点で、少なくとも 2008 年にはフリーウェアの分析ツールでは簡単に見つけられない機能) は、
レポートです。時間の経過に伴うソフトウェア品質の傾向を測定 します。
コード メトリクスに関するこの質問で説明されているように、静的コード分析自体は常に意味があるとは限りません。
- 修正すべき「欠陥」が多すぎる
- 報告された欠陥のカテゴリが多すぎる
トリアージを行う能力が必要であり、特定の欠陥の発生が時間の経過とともに減少しているかどうかを確認して、何を修正するかの優先順位を付けるのに役立てる必要があります。
これは特に、数千のクラスを持つレガシー プロジェクトに当てはまります。正当な理由がなければ、そのように多数のファイルの欠陥を修正することはありません。その理由は、フリーウェア ツールでは見られない優れたレポートとトレンド分析から推測できます。
更新: 2012 年 (4 年後) から、4.x および 5.x シリーズの Sonar (現在は 2018 年に " SonarQube " という名前)の"Historical Information" (別名 "Time Machine")。
これらのプロジェクト ダッシュボードはSonarQube 6.1 (2016 年 9 月)で削除されたことに注意してください。このスレッドを参照してください。これらのダッシュボードは、カスタム ページから
手動で再作成する必要があります。SonarQube 6.5では、[アクティビティ] ページでこれらのダッシュボードの一部が復元され、プロジェクトの進化を表示する (いくつかの事前定義されたグラフと 1 つのカスタマイズ可能な) グラフが取得されます。
私はFindbugsやPMDを直接経験したことはありませんが、KlocworkやCoverityと比較した多くの人々に会いました。
フィードバックに対する私の一般的な見解は次のとおりです。
FindbugsとPMDはより「ツールっぽい」ものです。デスクトップで実行するもののタイプ。さまざまな潜在的な問題が見つかりますが、ノイズが多くなる傾向があります。つまり、誤検知や「気にしない」種類があります。それはいくつかの良いものを見つけます。長期間の使用については、さまざまなフィードバックが寄せられています。無料のツールのROIは無限であると感じる人もいますが、誤検知には真のコストがかかります。
当然のことながら、コストがかかるKlocworkとCoverityは、ソリューション指向である傾向があり、チームでの作業に合わせて拡張することもでき、UIがより効率的で使いやすく、ノイズが少ない傾向があります。彼らの分析はより深い調査を行っているようであり、したがって、並べて比較すると、より良い結果が得られます。チーム全体でツールを採用する場合、ツールを使用することにさまざまなレベルの熱意があり、雑音指数は、普及を妨げる大きな問題です。もちろん、あなたをバックアップするためのサポートがあるなどのこともあります。
一般に、FindbugsとPMDは無料であるため、これを最初のオプションと見なします。多くの企業は価値を認識しており、長期的なソリューションとしてCoverityまたはKlocworkを選択していますが、FindbugsとPMDも実行しています。彼らは異なるものを見つける傾向があるので、あなたの目標が可能な限り見つけて修正することであるならば、両方の組み合わせを持つことは良いことです。
開示:私は、CoverityのパートナーであるCode Integrity Solutions(codeintegritysolutions.com)で働いています。
商用分析ツールのリストは次のとおりです: http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis#Java_2
coverity にはいくつかのツールがあり
ます。
prevent : http://www.coverity.com/html/prevent-for-java.html : 低誤検知。
スレッド アナライザー : http://www.coverity.com/html/coverity-thread-analyzer-java.html : これは、ほとんどのオープン ソース ツールに欠けているものです。