SpotBugs Plugin使用方法(Eclipse・Gradle Plugin)

Eclipse Pluginの使い方

Pleiades All in One Eclipseを使用している場合は、既にダウンロードされている。

設定

「ウィンドウ」⇒「設定」で設定画面を開く
左側のメニューから「Java」⇒「SpotBugs」を選択

設定画面では以下の項目の設定を行う

  • 分析力
  • 報告する最小ランク
  • レポートする最低の信頼度
  • 報告(可視)バグ・カテゴリー
  • フィルターファイル ・ディテクター構成

分析力

どれくらいチェックを行うかを設定する。
「min」「less」「more」「max」があり、デフォルトでは「more」が設定されている。
minではチェック項目が最も少なく、maxではチェック項目が最も多くなる。

各設定値でどのようなチェックを行うかは公式ドキュメント参照

チェックフラグ 説明 min less more max
Accurate Exceptions どのような例外がスローされるか、ブロックが到達可能か、例外が実行されるかなどの暗黙的なランタイム例外を判断する
Model Instanceof 型解析におけるinstanceofチェックの効果をモデル化する
Track Guaranteed Value Derefs in Null Pointer Analysis NULL ポインタ解析でパスで逆参照されることが保証されているNULL値を追跡する
Track Value Numbers in Null Pointer Analysis NULLポインタ解析で、NULLとわかっている値の番号を追跡する
Interprocedural Analysis アプリケーションクラスのプロシージャ間解析を有効にする
Interprocedural Analysis of Referenced Classes 参照クラス (非アプリケーションクラス) のプロシージャ間解析を有効にする
Conserve Space 精度を犠牲にしてスペースを節約しようとする
Skip Huge Methods バイトコードが長すぎる (6,000)場合メソッド解析をスキップする

eclipse pluginでは、「最小(min)」「デフォルト(more)」「最大(max)」の3つから選択可能。

報告する最小ランク

どの程度のランクのバグまで報告するかを設定する。 1から20まで設定可能であり、数字を大きくするとより軽微のバグも報告されるようになるため、バグの報告数が増加する。

レポートする最低の信頼度

表示される警告を選択するためのもので、「Medium」を選択すると、信頼度 (中)と信頼度 (高)の警告だけが表示されるようになる。

信頼度:高いとバグである可能性が高くて、低いとバグである可能性が低い

報告(可視)バグ・カテゴリー

チェックを行うカテゴリーを選択する。

各カテゴリでどのようなチェックを行うかは公式ドキュメント参照 ここでは各カテゴリの概要をまとめるに留める。

カテゴリ Eclipse設定名 説明
バッドプラクティス (BAD_PRACTICE) 悪い記述 推奨または必須のコーディングプラクティスへの違反
悪意のあるコード脆弱性 (MALICIOUS_CODE) 悪意があるコードの脆弱性 信頼できないコードからの攻撃に対して脆弱なコード
正確性 (CORRECTNESS) 正当性 開発者が意図していなかったコードになっている明らかなコーディングミス
性能 (PERFORMANCE) パフォーマンス 必ずしも間違っているというわけではないが,効率が悪いかもしれないコード
セキュリティ (SECURITY) セキュリティー リモートから悪用可能なセキュリティ脆弱性を引き起こすかもしれない信頼できない入力を使用したコード
危ないコード (STYLE) 危険なコード 紛らわしいコード,異常なコード,またはエラーを引き起こす方法で書かれたコード
実験用 (EXPERIMENTAL) 実験用 実験用で完全に精査されていないバグパターン
マルチスレッドの正確性 (MT_CORRECTNESS) マルチスレッドの正当性 スレッド,ロック,volatile に関係があるコードの欠陥
国際化 (I18N) 国際化対応 国際化とロケールに関係があるコードの欠陥
偽のランダムノイズ (NOISE) - 偽のランダムノイズ: ソフトウェアで実際のバグを発見するのではなく,データマイニング実験のコントロールとして役に立つことを意図しているカテゴリー

フィルターファイル

特定のクラスやメソッドのバグレポートに含めたり除外したりするためのファイルを指定する。
フィルターファイルの内容を含めるようにしたい場合は「包含フィルター・ファイル」に、除外したい場合は「除外フィルター・ファイル」に作成したフィルターファイルを指定する。

フィルターファイルの記述方法は公式ドキュメント参照
以下は適用するカテゴリを指定したフィルターファイルの記述例である

<?xml version="1.0"?>
<FindBugsFilter>
    <Match><Bug category="BAD_PRACTICE,MALICIOUS_CODE,CORRECTNESS,PERFORMANCE" /></Match>
</FindBugsFilter>

ディテクター構成

有効・無効化するディテクターを指定する。

ディテクターの種類については公式ドキュメント参照
全ての設定が完了したら「適用して閉じる」を押下して設定画面を閉じる

実行

手動で実行する

手動でSpotBugsを実行する場合、実行したいプロジェクトで 「右クリック」→「SpotBugs」→「バグを検索」を押下する

自動で実行する

自動で実行したいプロジェクトで 「右クリック」→「プロパティ」を押下
メニューの「SpotBugs」を選択し、「SpotBugsを自動的に実行する」のチェックをONにする

設定が完了したら「適用して閉じる」を押下してプロパティ画面を閉じる


Gradle Pluginの使い方

公式ドキュメント

依存関係の追加

plugins {
  id 'com.github.spotbugs' version "${spotbugs_plugin_version}"
}
# Spotbugs
spotbugs_plugin_version=5.0.9

設定

plugins {
  id 'com.github.spotbugs' version "${spotbugs_plugin_version}"
}

spotbugs {
    toolVersion = "${spotbugs_tools_version}"
    includeFilter = rootProject.file('config/spotbugs/spotbugs-include-filter.xml')
    // チェック違反がある場合ビルドを失敗させる
    ignoreFailures = false

    spotbugsMain {
        // デフォルトだとレポートはxmlファイルで出力されるので
        // htmlファイルで出力されるように設定を変更する
        reports {
            html {
                enabled = true
            }
        }
    }
}
# Spotbugs
spotbugs_plugin_version=5.0.9
spotbugs_tools_version=4.7.1

タスク

SpotBugsのチェックのみを実行する場合は以下のタスクを実行する。

gradlew spotbugsMain
gradlew spotbugsTest

SpotBugsプラグインを追加すると、Checkタスクに上記2つのタスクが追加されるため、ビルドコマンド実行時にもSpotBugsのチェックは実行される。

gradlew build