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 まで。