久しぶりにjavaの cyclomatic complexity metrics の計測。
当初は、以前使用した sonarqube or pmd での計測を考えましたが、 sonarqube ver.9は elasticsearch を必要になっていましたし、 pmd も「循環複雑度のみの計測」が不明でしたので、今回は、checkstyle
参考url
- https://github.com/checkstyle/checkstyle
- https://gist.github.com/ryan0x44/c95718cc59e987dc2d44f629433d73b6
- https://techblog.zozo.com/entry/zozotown-android-metrics-measurement#Java
- https://qiita.com/opengl-8080/items/cb4122a19269e8e683a4
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]