FindBugsで静的解析を行う


今回はAndroidアプリケーションのソースコードに対し静解析を行うことができるeclipseのプラグイン「FindBugs」の導入方法、簡単な実行方法を紹介します。

FinfbugsはAndroid専用というわけではなく、Javaプログラムに対して実行が可能です。また、eclipseプラグインだけでなく単体のプログラムとしても実行可能で独自のGUIを持っていたり、Antのビルドスクリプトに組み込むことも可能です。

今回は普段の開発に簡単に導入するということを目的としてeclipseプラグイン版の導入方法を説明しますが、興味のある方はこちらの公式のマニュアルを参照してください。

導入方法は続きへどうぞ。

プラグインのインストール

他のプラグインと同様にeclipseのメニューからインストールが可能です。

リポジトリのロケーションは

http://findbugs.cs.umd.edu/eclipse/

を指定します。

2011/6/18現在の最新版は1.3.9です。

選択したらインストールを進めましょう。

バグの検索

インストールが完了したら早速使ってみましょう。

サンプルとして下記のソースを対象として、検索を行ってみます。(検索のためのサンプルソースなので実装の中身に特に意味はありません)

public class MainActivity extends Activity {

	private int mCount;
	private String mStr;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        method();
        mStr = "init";
    }

    private void method() {
    	printLog(mStr);
    }

    private void printLog(String str) {
        Log.d("Sample", str);
    }
}

実行するにはパッケージエクスプローラーのプロジェクト名を右クリックして「バグを検索」メニューから実行します。

検索結果

バグの検索結果を確認する方法は、FindBugsのビューを開く方法と、FindBugsのパースペクティブを開く方法があります。

メニューからビューの表示を行います。以下のようにプラグインをインストールした時点でFindBugsのビューが追加されています。

サンプルソースを検索した場合には以下の結果が表示されます。

結果をダブルクリックすると指摘の場所のソースコードに飛ぶことが可能です。

このサンプルソースでは初期化されずに利用しているメンバ変数と、一度も使っていないメンバ変数が指摘されています。

ソースの指摘の箇所には左側にバグのマーカーが付きます。(一度も使っていないメンバ変数には通常の警告のマーカーも表示されているので重なってしまっていますが)

ビューではなくFindbugsのパースペクティブでも確認をすることができます。

設定

FindBugsにはいくつか設定項目があります。eclipseの環境設定から行うワークスペース全体への設定と、プロジェクトのプロパティからプロジェクト毎に個別に設定することも可能です。

どの項目を指摘するかという設定や、特定のファイルを検索対象から除外するなどの設定を行うことができます

各々の詳細な内容は公式のマニュアルを参照してください。

プロジェクトのプロパティからの設定では自動で検索を実行するかの設定も可能です。

最低限設定しておきたい項目

Androidアプリケーションのソースコードに対しFindBugsで検索を行う際に、最低限設定しておきたい項目があります。

それはRファイルを除外する設定です。Rファイルを除外せずに検索を行うとクラス名の命名方法の指摘が出てしまいます。

※先ほどのサンプルソースの検索ではこの除外設定を実施した後に実行しています

特定のファイルを除外するには除外フィルターを設定するためのXMLファイルを作成して、そのファイルを除外フィルターに追加します。

Rファイルを除外するには以下のように記述したXMLファイルを準備します。filter.xmlなどの名前で保存しておきます。

<FindBugsFilter>
	<Match>
		<Class name="~.*.R" />
	</Match>
	<Match>
		<Class name="~.*.R\$.*" />
	</Match>
</FindBugsFilter>

そしてそのファイルをFindBugsの設定を開き、除外フィルターに追加します。

以上でFindBugsの導入の説明を終わります。ぜひ皆さんの開発にも役立ててください。