FindBugsだけで本当に満足できる解析ができているか?
しかし「FindBugsだけではコードの品質を担保することは難しい」と天久氏は続ける。というのも、各テストツールの解析精度や検出できるバグの種類(ルール)には違いがあるからだ。FindBugsには、クラスやメソッドが分かれている処理の問題を検出できない弱点がある。
例えばNullPointerExceptionを検出したいとする。FindBugsでは「検出は可能だが不十分」と天久氏は指摘する。他のメソッドやクラスにまたがった場合、問題を検出できないからだ。
また、クロスサイトスクリプティングの検出能力についても不十分だという。サーブレットの出力にHTTPパラメータを直接書き込む処理が一つのクラスに閉じていれば問題ないが、別のクラスで処理する場合には検出できない。
こうしたFindBugsの弱点を補うツールとして「ぜひ使ってほしい」と天久氏が勧めるのが、Parasoftの「Jtest」である。
FindBugsの弱点を補う「Jtest」
Jtestは高速な静的解析とCIとの高い親和性を実現したJava対応テストツールだ。静的解析に加えてフロー解析が行え、検出するバグの種類(ルール)の豊富さとその解析精度の高さが大きな特長だ。静的解析は約1000種類のコーディングルールに従ってソースコードを静的に解析し、違反している箇所をレポートしてくれる。多くのルールにはカスタマイズ可能なパラメータがあり、ニーズに合わせて詳細な条件が設定できるようになっている。また、静的フロー解析は、クラスやメソッドにまたがった解析を行えるため、FindBugsで検出できないさまざまなソースコードの問題を検出できる。もちろん、例として先に挙げたバグも、Jtestなら検出可能だ。
Jtestを導入するメリットはそれだけではない。導入支援として「実プロジェクトの解析・簡易アセスメント」「ツールのトレーニング」「環境構築支援」などを、テクマトリックスが用意する。「お客さまの実プロジェクトの状況に併せてコーディングルールを選定し、要望に応じて、CI環境の構築も行うことができる」と天久氏。テクマトリックスの支援の下で静的解析を自動化する環境を実現可能というわけだ。
その他、Jtestでは次の機能が提供されている。例えば、コーディングルール作成ツール「RuleWizard」だ。これにより、ユーザー独自のコーディングルールを自由に追加できる。RuleWizard上では、フローチャートのような図を編集して視覚的にルールを作成できる他、不正なサンプルコードからルールを自動生成することも可能だ。また、コードメトリクスの計測によってメソッド数、オブジェクトの結合度、サイクロマティック複雑度などの約70種類のメトリクスをレポートしてくれる機能もある。さらに動的テストもカバーしており、これまでJUnitの利用に苦労してきた開発者が単体テストをすぐに行えるような単体テストアシスト機能や、テストカバレッジ収集機能などが搭載されている。
Jtestはすでに国内企業600社、5000ライセンス以上の導入実績がある。例えば、交通インフラ系のSI企業がJtestを選んだ理由は、導入していたオープンソースのテストツールで検出できなかったルールをカバーできるなど、標準で搭載されているルールの数が圧倒的に多かったからだ。それに加え、目視では見つけることが難しい複数のファイルにまたがったバグを解析する静的フロー解析が実施できることが決め手になったという。また、ある金融系企業では、細かな設定ができるコーディングルールと、目視では見つけることが難しいバグを発見可能な静的フロー解析に魅力を感じたのはもちろんのこと、設定作業の支援などのサポート体制が充実していることや、静的解析に限らず、動的解析やカバレッジ分析までカバーする優れた拡張性を評価した。
静的解析のベストプラクティス!
スピード重視の開発現場において、FindBugsの弱点を補うJtestの高度な静的解析とFindBugsの軽快な解析を併用するコツを、次ページでご紹介します。
Jtestの無料体験版を入手!
Jtestの無料体験版を配布しております。以下のリンクからダウンロード可能です。