Java > FindBugsの基本的な使い方

更新日 2012-04-07
広告
FindBugsは、Javaのプログラムの解析ツールです。例えば、全く使われていない変数やメソッドを見つけて、教えてくれます。
ここでは、FindBugsの基本的な使い方を紹介します。eclipseのプラグインとしてではなく、コマンドラインから実行する方法を紹介します。

ダウンロード

FindBugsのホームページから、FindBugsをダウンロードします。ソフトウェアアップデートのチェックを自動的に行う版と、チェックを行わない版があります。今回は「チェックを行わない版」をダウンロードします。

解凍

ダウンロードしたFindBugsを解凍します。場所はどこでもいいです。
$ tar zxvf findbugs-noUpdateChecks-2.0.0.tar.gz 

サンプルコード

以下のサンプルコード Sample.java を、FindBugsで解析してみます。
public class Sample {

    private String name;

    private void unusedMethod() {
	// do something
    }

    public void methodA() {
    	String a = null;
    	if (a.equals("hogehoge")) {
    	    
    	}
    }

}

シンプルに実行

FindBugsは、.classファイルや、.jarファイルに対して実行します。なので、まずSample.javaをコンパイルします。
$ javac Sample.java
では、シンプルにFindBugsを実行してみます。
$ java -jar ~/project/software/findbugs/findbugs-2.0.0/lib/findbugs.jar -textui Sample.class 
-jarオプションで、findbugs.jarを指定するのは、必須です。-textuiオプションを指定すると、コマンドラインだけで処理が完結するので、個人的には好みです(-textuiを指定しないと、FindBugsのUIが起動します)。
実行結果は以下のようになります。 ParseExceptionが出ますが、解析結果に影響しないので大丈夫です。
$ java -jar ~/project/software/findbugs/findbugs-2.0.0/lib/findbugs.jar -textui Sample.class 
java.text.ParseException: Unparseable date: "12/20/2011 09:17 PM EST"
	at java.text.DateFormat.parse(DateFormat.java:354)
              :
H C NP: ? の null 値を利用しています。Sample.methodA()  Dereferenced at Sample.java:[line 11]
M P UuF: 未使用のフィールド: Sample.name  該当場所 Sample.java
Warnings generated: 2
一番下に、プログラム内の問題の数が表示されています。今回は、2つの問題が発見されました。
問題の説明は、その上に表示されています。
  • nullの値を参照しているという問題(11行目)
  • name変数が使用されていないという問題

詳細なチェック

'-effort:max' を指定すると、FindBugsは、より多くの問題を発見してくれます。基本的に、指定したほうがよいと思います。ただ、普通よりも解析に時間がかかります。また、'-low' を指定すると、発見した全ての問題を出力してくれます。これも、指定したほうがよいと思います。
$ java -jar ~/project/software/findbugs/findbugs-2.0.0/lib/findbugs.jar -textui -effort:max -low Sample.class 
H C NP: ? の null 値を利用しています。Sample.methodA()  Dereferenced at Sample.java:[line 11]
L D NP: null とわかっている値をロードしています。Sample.methodA()  該当箇所 Sample.java:[line 11]
L D UCF: 役に立たない制御フローです。Sample.methodA()  該当箇所 Sample.java:[line 11]
L P UPM: Sample.unusedMethod() は、決して呼び出されません。  該当箇所 Sample.java:[line 7]
M P UuF: 未使用のフィールド: Sample.name  該当場所 Sample.java
Warnings generated: 5
このように、5個の問題を教えてくれます。

ファイルへの出力

'-xml'や'-html'などを指定すると、出力結果をフォーマットしてくれます。また、'-output'オプションでファイル名を指定すると、結果をファイルに出力してくれます。
$ java -jar ~/project/software/findbugs/findbugs-2.0.0/lib/findbugs.jar -textui -effort:max -low -html -output findbugs-result.html Sample.class 
これで、 findbugs-result.html というファイルに、結果が出力されます。ウェブブラウザで見ることができます。
プログラムをコンパイルするたびに、FindBugsが自動的に実行されるようにしましょう。そして、すぐに結果を確認するようにしましょう。プログラムの品質が向上するはずです。
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system