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