FindBugsをビルドプロセスに統合する
FindBugsをIDE内で使うのが、おそらくこの静的分析ツールを利用する最も効率的な方法です。ただし、FindBugsのバグ検出処理を非常に効率よくビルドプロセスに統合することもできます。これは、プロジェクト全体のコードを自動的に高品質に保ち、すべての開発者にルールを遵守させるには最適な方法です。さらに、プロジェクト全体のFindBugs分析を自動化する一方でコードのレビューや定期的なコード品質会議を実施することにより、チームのスキルを高めることもできます。
FindBugsは、AntとMavenの両方に巧みに統合されます。ビルドスクリプトがAntで書かれている場合は、FindBugsに付属するAntタスクを使用できます。findbugs-ant.jarファイルをAntのlibディレクトリにコピーし、FindBugsタスクを次のように宣言します。
<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" />
FindBugsがインストールされている場所も定義する必要があります。たとえば、homeディレクトリ下のfindbugsという名前のディレクトリにインストールした場合、次のように記述します。
<property name="findbugs.home" value="${user.home}/findbugs" />
あとは、FindBugsタスクを次のように呼び出すだけです。
<target name="findbugs" depends="compile">
<findbugs home="${findbugs.home}" output="xml"
failOnError="true" outputFile="findbugs-report.xml">
<class location="${build.classes.dir}" />
<auxClasspath refId="compile.classpath" />
<sourcePath path="src" />
</findbugs>
</target>
すべてのFindBugs検出項目について、マシンに負担をかけないようにXML形式でレポートが生成されます。HTML形式で出力するオプションを使うと、読みやすいレポートが得られます。
Mavenを使用する場合は、Maven FindBugsプラグインをpom.xmlのreportingセクションに統合するだけで作業は終わりです。
<project>
<reporting>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<configuration>
<threshold>Normal</threshold>
<xmlOutput>true</xmlOutput>
</configuration>
</plugin>
...
</plugins>
</reporting>
</project>
どちらのプラグインもレポートをXMLとHTMLの両方で生成できます。HTML形式のレポートは整然としていて読みやすく、チェック結果を発行するために使用できます。ただし、FindBugsの結果と統計を表示する最もユーザーフレンドリな手段は、Hudson Continuous Integrationサーバーです(図5を参照)。Hudsonは、FindBugsから生成されたXML形式のレポートを受け取り、HTML形式のレポートと、各ビルドに見つかった問題点の詳細が注釈として追加されたソースコードを生成します。また、FindBugsで検出された問題点の数を時系列で示すグラフも作成します。
アプリケーションを脅かすバグへの専念
市場にあふれるJava静的分析ツールのなかでも、FindBugsは際立った存在です。FindBugsは、コーディングのスタイル、命名規則、あるいはベストプラクティスに重点を置くのではなく、アプリケーションを脅かすバグを特定することに全力を傾けます。しかも、妥当な成功率でこのようなバグを検出できます。実際に試した範囲では、FindBugsで指摘される問題点の少なくとも半数には注意する価値があります。コードのエラー検出に真剣に取り組むなら、FindBugsは必携のツールです。
