Gobble up pudding

プログラミングの記事がメインのブログです。

MENU

SpotBugsの使い方とレポート化の手順

スポンサードリンク

Javaで静的解析がお手軽にできるツールということでレポート化できんだっけ?というので調べたときのメモ

前提条件

Java 17環境(Java 8でも同じだと思うが)
Maven使用(Gradleの場合は末尾の参考サイトを)
Eclipse(英語版)のPleadesじゃないのを使ってる想定
自PCにMavenをインストールしてなくてmvnwを使っていて、
基本的にEclipseのGUIでbuild/installする前提
SpotBugsは4.8.3を使います

インストール

Help > Install new software
Work with:
https://spotbugs.github.io/eclipse/
Addを押しとく Name: SpotBugs
あとは選択してNext、agreeしてFinish

その後しばらくして経つと、trust selectedを選ぶ

そのあとEclipse再起動により
プロジェクト右クリックでSpotBugsが出てくるようになる
4.8.3が選ばれた。

設定

プロジェクト右クリック
プロパティでSpotBugsを選ぶ

Configure Workspace Settingsを押す
お好みですが、かなり緩い設定にしてます。
後述のプラグインで簡単に制御できるのは analysis effortMinimum confidence to reportです。

analysis effort: Default  
Reporter Configurationタブ  
Reported (visible) bug categories  
の欄のBad pricticeなどのチェックを全部入れる  
右側のMinimum confidence to report: Highにする  
あとはそのまま  

実行方法

右クリックによりFind Bugsで出せる
そうすると下部の(Problems(マーカー))に出てくる。どれが出したかは
TypeにSpotBugsと書いてあるのでそれで判別できる
Excelに貼り付けたい場合はこれをCtrl+Aでコピーしてコピペすればよい

HTMLレポート化

spot-bugs-maven-pluginの最新版は4.8.3であるようだ
1)pom.xmlのdependencyに以下を追加

    <dependencies>
            ...
        <dependency>
            <groupId>com.github.spotbugs</groupId>
            <artifactId>spotbugs-maven-plugin</artifactId>
            <version>4.8.3</version>
        </dependency>
    </dependencies>

注:環境によっては次の依存も追加しないといけないかもしれない

    <dependencies>
            ...
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-site-plugin</artifactId>
            <version>3.12.1</version>
        </dependency>
    </dependencies>

あと場合によってはmaven-site-pluginの依存するhttpcoreあたりも追加する必要があるかも。

2)pom.xmlのbuild.pluginsの中に下記を追加

    <build>
        <plugins>
            ...
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
                <version>4.3.0</version>
            </plugin>
        </plugins>
    </build>

3)pom.xmlのreporting.pluginsに下記の記載を追加

 <reporting>
        <plugins>
            <plugin>
                <groupId>com.github.spotbugs</groupId>
                <artifactId>spotbugs-maven-plugin</artifactId>
                <configuration>
                    <effort>Default</effort>
                    <threshold>High</threshold>
                    <xmlOutput>true</xmlOutput>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

※かなり緩い設定にしています。これはEclipseのプラグインの設定画面の次にあたるっぽいです。   effort -> analysis effort threshold -> Minimum confidence to Report 設定を書かないとあらゆるものが出力されます(本来はそれで良いが)。 ちなみにカテゴリー(Bad Practice)の単位でしぼりたかったものの何故かできませんでした。 SpotBugs Mavenプラグインの使い方 — spotbugs 4.8.3 ドキュメント
ここにはその記載があるにもかかわらず。
あと公式サイトがeffortとthresholdに何がかけるのか書いてない気がしますのでそこがつらい。

EclipseでMaven Buildの実行を追加する

あとは
mvn compile site

mvnw compile site
でいいのだが、大人の事情でSSL関連のエラー出るよーとかで、
いろいろ解決がめんどくさいのでEclipseからやる方法
(※制限された環境かだと素直にMavenをインストールしてコマンドラインからやったほうが楽ですが)

プロジェクト右クリック > Run As > Run Configuration
Maven buildの欄に新規追加
Name SpotBugs
Base directory: ${project_loc:[プロジェクト名]}
Goals: compile site
Profiles: pom.xml
プロジェクト名は置き換えてください。

あとはRun
だいぶかかるのでしばらく待つ
Spring Bootのプロジェクトなんだけどごっそり全部落とされてダウンロード地獄
しばらくたつと
target/site配下にspotbugs.htmlが出力される
※要リフレッシュ

警告された例

Primitive boxed just to call toString in ... [Of Concern(16), High confidence]

Integer.valueOf(1).toString() → String.valueOf(1)かInteger.toString(1)
今回の場合は後者でいい...的な警告だった。 Bug descriptions — spotbugs 4.8.3 documentation

参考サイト

いまだにJava 8 備忘録 - SpotBugsの使い方 - ふるてつのぶろぐ