Eclipseで静的解析(Checkstyle,SpotBugs)

静的解析(Checkstyle,SpotBugs)を行うサンプルです。このサンプルを用いて後にJenkins連携確認を行っています。

Eclipseのプロジェクト構成

以下のような構成でMavenプロジェクトを作成しています。

pom.xml

使用しているpom.xmlは、こちらの記事のものとなります。

ソースコード

StyleNg.java

package com.itbibo.example.checkstyle;

import org.apache.commons.lang3.StringUtils;

public class StyleNg {

  /**
   * helloStyle.
   * @param args value
   */
  public int helloStyle(String[] args) {
    String message = "Hello %replace%!";
    String target;
    int ret = 0;

    if (args.length > 0) {
      target = args[0];
    } else {
      target= "Commons";
      ret = 1;
    }

    System.out.println(StringUtils.replace(message, "%replace%", target));
    return ret;
  }
}

SpotBugsCode.java

package com.itbibo.example.spotbugs;
public class SpotBugsCode {
  // Unused field SpotBugs
  private int abc;
  private String ip = "127.0.0.1";
  /**
   * spotBugsTest.
   *
   */
  public void unusedTest() {
    String[]field = {"a", "b", "c", "s", "e"};
    //concatenates strings
    String s = "";
    for (int i = 0; i < field.length; ++i) {
      s = s.concat(field[i]);
    }
    System.out.println(ip);
  }
}

JUnit用テストコード

無くても確認できます。JUnit、カバレージに対応する場合に使用します。

StyleNgTest.java

package com.itbibo.example.checkstyle;

import static org.assertj.core.api.Assertions.assertThat;

import org.junit.jupiter.api.Test;

public class StyleNgTest {

  @Test
  public void test1() {
    StyleNg sty = new StyleNg();
    String[] ag= {"Style"};
    assertThat(sty.helloStyle(ag)).isEqualTo(0);
  }

  @Test
  public void test2() {
    StyleNg sty = new StyleNg();
    String[] ag= {};
    assertThat(sty.helloStyle(ag)).isEqualTo(1);
  }
}

SpotBugsCodeTest.java

package com.itbibo.example.spotbugs;

import org.junit.jupiter.api.Test;

public class SpotBugsCodeTest {

  @Test
  public void nullTest1() {
    SpotBugsCode hoge = new SpotBugsCode();
    hoge.unusedTest();
  }
}

Checkstyle

CheckstyleをMavenで

Maven installが手軽ですが、JUnitのTEST NGがあると実行されません。

ここでは「-Dmaven.test.failure.ignore=true」のオプションを付けて実行してみました。

実行結果は以下のような感じです。

SpotBugs

デフォルトで警告が出ているので。。。

※「private int abc;」のところです。

バグを検索しても表示されず。。。

カーソルを当ててみました。

ここはあまり重要視していないので、飛ばします。。。(Jenkins連携の題材なので)

SpotBugsをMavenで

「CheckstyleをMavenで」を参照してください。以下のようなログが出力されているかと思います。

Jenkinsジョブの設定

Jenkinsジョブの設定については、こちらの記事を参照してください。

タイトルとURLをコピーしました