はじめに
FindBugsは、Javaコードのバグ検出のために設計されたオープンソースの静的分析ツールです。ただし、他の多くの静的分析ツールとは違って、アプリケーションを破壊する可能性がある危険なコーディングエラーを特定することに、ほぼ全力を傾けます。他の静的分析ツールでは検出できないような微妙なバグでも見つけることができます。
FindBugsは、コンパイル済みのJavaバイトコードを走査して、いわゆる「バグパターン」を探します。簡単にいうと、バグパターンとは、バグを生みやすいコーディング上の習慣のことです。バグパターンは、「人は(個人でも集団でも)同じ過ちを繰り返す傾向がある」という考え方に基づいています。人は習慣に従って行動する生き物であり、習慣は、たとえ有害なものでも、恒常的に繰り返されるのです。経験の浅い開発者が、経験豊富な開発者がまだ新人だった頃に犯したようなミスを犯すことも珍しくありません。したがって、感心できないプログラミングの習慣を見つけ出して改めるよう普段から心がけていない限り、このようなミスはたびたび姿を現します。特に、Java言語APIのひとくせある部分からは、同じ過ちが生まれてくる傾向があります。
FindBugsには、300を超えるバグパターンが定義されています(FindBugs 1.3.4では336種類)。バグパターンは、悪意のあるコード(Malicious Code)、悪しき習慣(Bad Practice)、パフォーマンス(Performance)などのバグカテゴリに分類されます。また、バグパターンには深刻度(高・中・低)が個別に与えられます。このレーティングを参考にして、どのバグの修正から優先的に手をつけるべきか判断できます。FindBugsチームは「高」または「中」のレーティングを持つ問題には真剣に対処することを勧めています。
不適切なコーディングの習慣やミスのうちで最も危険なものをレーティングで示すだけでなく、そのようなコードの過ちに関する詳細な解説も提示されます。この機能があるため、FindBugsは高機能のバグ検出ツールとしてだけでなく、優れた学習ツールとしても利用できます。チームのプログラミングスキルをみがき、開発者が同じようなミスを将来犯すことを防ぐために役立ちます。
一般にコーディング標準は良薬と認められていますし、組織に固有のコーディング規則の遵守を支援するツールは、利用する価値があります。多くのコーディングのベストプラクティスはコードの読みやすさと保守のしやすさの改善を主な目的としますが、これと対照的にFindBugsはまったく別の目的、アプリケーションをクラッシュさせたり、ときにはそれよりも悪い事態を招く危険がある凶悪なバグや目立たないエラーを見つけることに、その全精力を傾けます。
この記事では、FindBugsの概要を説明するためにEclipseでの使用方法を示してから、具体的な使用例を示して各機能を明らかにしていきます。
用意するもの
- Java 5
- 十分なメモリ(最低512MB)
FindBugsの使い方
FindBugsは機能こそ強力ですが、使い方は簡単です。実際、コードをチェックする方法は複数用意されています。デフォルトでは、グラフィカルツールを使って、検出された問題点をチェックできます(図1を参照)。問題を「要修正(Should Fix)」「ほぼ無害(Mostly Harmless)」などのカテゴリに分けたり、ソートすることもできます。
ただし、この方法よりも、FindBugsをIDE内で直接使う方が便利です。こうすると、FindBugsによるコードの分析と問題の特定をいつもの開発環境で行えるため、問題をその場ですぐに修正できます。
FindBugsをEclipse環境に統合するためのEclipseプラグインが、FindBugsに付属しています(図2を参照)。このプラグインのインストールには、FindBugsアップデートサイトを使用します。インストールの完了後、コンテキストメニューの[FindBugs]を選択すると、FindBugsの分析機能をコードに対して実行できます。
FindBugsで検出された問題点は、ソースコードウィンドウの余白に赤い昆虫のアイコンで示されるので、すぐにわかります。にくいことに、色の濃さで問題の深刻度が表現されます。赤色が濃いほど、問題はより深刻です。マウスポインタをアイコンの上に置くと、問題に関する簡単な説明が表示されます。また、問題のリストを[Problems]ビューに表示することもできます。これは、FindBugs用の特別なビューの1つです。問題項目をクリックすると、Eclipseに[FindBugs Details]ビューが開き、バグの詳細な情報を読むことができます。
使い慣れたら、[Project]メニューから[Properties]ウィンドウを開き、[FindBugs]項目でFindBugsの動作を細かく設定できます(図3を参照)。たとえば、特定のFindBugsルールを自動的に実行したり、不要なFindBugsルールをオフにすることができます。[Reporter Configuration]タブでは、特定のカテゴリのルール全体を除外できます。[Filter files]タブでは、特定のファイルやファイルセットを分析の対象から除外できます。