ほくそ笑む

R言語と統計解析について

Javaを書く新入社員のみなさん、FindBugsは絶対入れよう!

春ですね。どうやら新入社員向けの記事を書くのが流行っているようで。私も尻馬に乗っかろうと思います。
私が新入社員に一つだけアドバイスするとしたら何かなーと考えて、FindBugs について紹介することにしました。

FindBugs

FindBugsJava プログラムの静的解析ツールです。*1
FindBugs はプログラム中のバグっぽい部分を指摘してくれるナイスなやつです。
例えば、次のコードにバグがあるのがわかりますか?

/**
 * 入力された文字列を標準出力に出力する.
 * @param input 入力文字列
 * @throws IllegalArgumentException 入力が null の場合
 */
public void printInput(String input) {
	if (input == null) {
		new IllegalArgumentException("input must not be null");
	}
	System.out.println("Input is " + input);
}

答えは「例外が throw されてない」です。
私って、ほんとバカなのでこういうミスをよくやります。
よくやるわりには、こういうバグは見つけにくいんです。
こんなの絶対おかしいのに、気づくことはほとんどないです。
特にレガシーコード開発現場では日常茶飯事です。*2

強力な味方

そんなアホな私にとって、強力な味方が FindBugs です。
EclipseFindBugs プラグインを入れた結果が次の画像です。

おおお!ちゃんと「new IllegalArgumentException(String) をスローしていません」というメッセージが出ているではありませんか!
このコードの左側に出ている虫アイコンみたいなのが FindBugs です。
クリックすると、何が悪いのか教えてくれます。

教えてくれてありがとう!FindBugs!
もうケアレスミスも恐くない!それはとっても嬉しいなって思います。
奇跡も、魔法も、あるんだよって、みんなに教えたくなります。

Eclipse にインストール

さて、FindBugsEclipse にインストールする方法を説明します。*3
みなさん、もちろん Eclipse は最新版の Indigo を入れてますよね?
「夢の中で入れた、ような……」という記憶があやふやな人は Help > About Eclipse で確認してください。
まずは、Help > Eclipse Marketplace... をクリックしてください。

しばらく待つとマーケットプレースの検索画面が開くので Find のところに findbugs と打って検索してください。

インストールボタンをクリックすれば、インストールできます。
アンインストールしたい場合も同じ方法でアンインストールボタンを押せばできますが、FindBugs をインストールしたことに後悔なんて、あるわけないですよね。

まとめ

FindBugs によって、プログラム中のバグの半分くらいは実行前に発見できます。*4
つまり、デバッグにかけていた時間を 50% 削減できます。
残りの 50% が本当のバグです。余った時間を本当のバグに費やすことができるようになります。
FindBugs を入れずに、本当のバグと向き合えますか?
FindBugs を入れないなんて、そんなの、私が許さないです。
もう誰にも頼らないなんて言わずに、FindBugs を入れましょう。
FindBugs はわたしの、いや、全 Java プログラマーにとっての、最高の友達です。

最後に

残った道しるべとして

  • Javaを書く新入社員のみなさん、Javadocは絶対書こう!」
  • Javaを書く新入社員のみなさん、EffectiveJavaは絶対読もう!」

を誰かが書いてくれるのを期待します。

*1:静的というのはプログラムを動かさないということです。プログラムを実行しないでわかる範囲だけを解析します。プログラムを動かす場合は動的です。

*2:レガシーコードとは、テストの無いプログラムを指します http://www.amazon.co.jp/gp/product/4798116831

*3:FindBugs のサイトを見ると、NetBeansIntelliJ にもインストールできるみたいです http://findbugs.sourceforge.net/

*4:個人的な感想です。効果には個人差があります