end0tknr's kipple - web写経開発

太宰府天満宮の狛犬って、妙にカワイイ

checkstyle によるjavaの 循環複雑度( Cyclomatic Complexity Metrics)計測

久しぶりにjavaの cyclomatic complexity metrics の計測。

当初は、以前使用した sonarqube or pmd での計測を考えましたが、 sonarqube ver.9は elasticsearch を必要になっていましたし、 pmd も「循環複雑度のみの計測」が不明でしたので、今回は、checkstyle

参考url

install

といっても、jarをdownloadするのみです。

$ cd ~/local
$ wget https://github.com/checkstyle/checkstyle/releases/download/checkstyle-10.5.0/checkstyle-10.5.0-all.jar

config

https://gist.github.com/ryan0x44/c95718cc59e987dc2d44f629433d73b6

上記urlを参考にルールファイルである checkstyle_rule.xml を作成

$ vi ~/local/checkstyle_rule.xml
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name = "Checker">
  <property name="charset" value="UTF-8"/>
  <module name="TreeWalker">
    <module name="CyclomaticComplexity">
      <property name="max" value="1"/>
    </module>
  </module>
</module>

実行

先程のxml閾値=1にしていますので、かなりの量のエラーが表示されますが、 以下の通りです。

$ java -jar /home/end0tknr/local/checkstyle-10.5.0-all.jar \
  -c /home/end0tknr/local/checkstyle_rule.xml \
  /home/end0tknr/tmp/X-CORE

[ERROR] /SBAG029ServiceImpl.java:76:5: Cyclomatic Complexity is 3 (max allowed is 1). [CyclomaticComplexity]
[ERROR] /SBAG032ServiceImpl.java:71:5: Cyclomatic Complexity is 4 (max allowed is 1). [CyclomaticComplexity]
[ERROR] /SBAG033ServiceImpl.java:86:5: Cyclomatic Complexity is 2 (max allowed is 1). [CyclomaticComplexity]
[ERROR] /SBAG033ServiceImpl.java:128:5: Cyclomatic Complexity is 2 (max allowed is 1). [CyclomaticComplexity]