BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Bill Pugh氏によるFindBugs 1.3.9がリリース

Bill Pugh氏によるFindBugs 1.3.9がリリース

原文(投稿日:2009/09/16)へのリンク

メリーランド大学のBill Pugh教授が開発したFindBugsは静的解析をおこないJavaコード中のよくある欠陥を見つけ出すオープンソース(LPGLライセンス)ツールだ。FindBugsは徐々にメインストリームになってきており、Bank of America、eBay、Oracle、Sun Microsystemsのような有名企業、そして氏が客員研究者となっているGoogleをはじめ多くの企業で利用されている。

CheckstylePMDのようなより広範なスタイルベースの提案方式でコード品質を改善しようとするツールとの一番の違いが、欠陥を見つけることに注力している点だ。FindBugsの解析エンジンもまたCheckstyleやPMDとは違い、ソースコードというよりはクラスファイルを直接扱う。実行はコマンドラインからおこなうことも、AntやCruise Control、Hudson、Mavenといった多くのビルドツールからおこなうことも、Swing GUIあるいはEclipseやNetBeansのプラグインからおこなうこともできる。出力はXMLあるいはテキストにできる。FindBugsの解析エンジンは現在約300のパターンをテストすることができる。そのために利用される検出法は概して分かりやすく、またプラグイン形式を採用していることで、ユーザが独自の検出法を追加できるようにもなっている。そしてPMDがしているようなパターン言語によってバグを記述するやり方ではなく、Javaによって書く方法を採っている。

ディベロッパたちは静的解析ツールをさまざまな方法で利用しているが、典型的な2つの方法は、新しく書かれたモジュールのコードレビューに属するものと、既存のコードベースに対するより広範なレビューに属するものだ。これら2つの方法はまったく異なる要件をもっている。前者ではツールが見つけた疑わしいコードは、たとえそれがアプリケーションの挙動に関わらなくてもディベロッパがレビューをおこない修正する。それとは対照的に、既存のコードベースをレビューする方法では、製品になにか明白な問題が起きているわけでもなく、またディベロッパがそのコードについてよく知っておく必要があるため、コード変更をおこなう敷居が高い。FindBugsの解析エンジンはどんどん改善がされていっており、バージョン1.3.9のリリースでは12の新しい検出法が追加されたが、1.3.9から以降で重要視されているのは後者の方法だ。たとえばFindBugsではこれまで各バグパターンを正常性、バッドプラクティス、パフォーマンス、国際化のカテゴリにグループ分けしていた。そして各グループは優先度の高低を設定できた。これは大規模なコードベースからあまり重大でない欠陥を選り分けたいディベロッパにとっては便利であり、実際そういう利用法が広くおこなわれている。1.3.9のリリースでは、このコンセプトが拡張され、バグランキング(1から20)とこのランキングによるフィルタリングの機能が追加された。年内にリリースされる2.0では独自のバグランキングが設定できるようになる予定だ。

FindBugs 2.0で予定されている主要機能のひとつはコミュニティレビューで、これはオープンソースプロジェクトの問題をレビューできるようにし(たとえば問題を"修正必須"や"危険度小"のようにマークする)、そしてそのレビューを保存して自動的に他のレビュアーと共有できるようにするものだ。この機能のアーリーベータ版はFindBugsのウェブサイトからJava Web Startによって取得することでSun JDK 7Eclipse 3.5(要Java 1.5以降)で利用できるようになる。またこの機能はGoogleのバグ潰し大会でも用いられた。FindBugsのホームページにはこう書かれている。

5月13日から14日にかけてGoogleが開催したグローバル大会で、コーディングの誤りを見つけるJava解析ツールであるメリーランド大学のFindBugsが対象になりました。この大会の目的は、Googleで使われているFindBugsによって見つかった4000の問題についてフィードバックを得て、Googleのエンジニアがどれを修正すべきか決めるようにするものでした。

多くの場所で700名以上のエンジニアがFindBugsを実行しました。そのうち250名以上が8000以上の問題のレビューを入力しました。レビューは修正必須、要修正、危険度小、バグ以外などのカテゴリに分けられます。75%以上のレビューが修正必須か要修正か修正予定に分類されました。もっとも危険な部類の問題の多くには10以上のレビューが付きました

エンジニアはこれまでに3800の問題のうちの1100を解決する変更を既におこなっています。また1700以上のバグレポートもアップされ、そのうち600が既に修正されています。この大会によって提起された問題を解決する作業は続いており、FindBugsがGoogleのソフトウェア開発に組み込まれる見通しとなっています。

この大会はFindBugsにクラウドコンピューティングやソーシャルネットワーキングを支える性能があることを示しました。問題のレビューは他のディベロッパも見ることが出来る場所にただちに永続化されます。Googleではバグレポートをアップしたり閲覧するためのツールやソースファイルのバージョンコントロールをおこなうツールとFindBugsが連携するようになっています。この大会では自分がレビューを入力しないと他のエンジニアからのレビューも見れないようにFindBugsのモードが設定されましたが、今後はレビューを入れなくても他のエンジニアからのレビューが見られるようなオープンな設定に変更がされる予定です。

静的解析ツールは万能薬ではない。設計やコードレビュー、テストといった他の手法の方が重要かもしれない。しかし正しく使うことでディベロッパ各人やプロジェクトにとって有益なものになるのだ。

この記事に星をつける

おすすめ度
スタイル

BT