3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Windowsにサイクロマティック複雑度の計測ツール「lizard」入れてみた

Last updated at Posted at 2019-08-03

目的

業務で簡単に品質等を確認したい

環境

OS:Windows10
Python
pip
lizard
jinja2

環境作成ではまりそうなポイント

Could not install packages due to an EnvironmentError: [WinError 5] アクセスが拒否されました 。: 'c:\\program files\\python37\\lib\\site-packages\\pip-19.0.3.dist-info\\entry_points.txt'
Consider using the `--user` option or check the permissions.

You are using pip version 19.0.3, however version 19.2.1 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

このようなエラーになった場合は、コマンドプロンプトを管理者権限で起動させてください。そうすることで以下のように成功します。管理者権限使えない環境については、--userオプションをつけてインストールする。

C:\WINDOWS\system32>python -m pip install --upgrade pip
Collecting pip
  Using cached https://files.pythonhosted.org/packages/62/ca/94d32a6516ed197a491d17d46595ce58a83cbb2fca280414e57cd86b84dc/pip-19.2.1-py2.py3-none-any.whl
Installing collected packages: pip
  Found existing installation: pip 19.0.3
    Uninstalling pip-19.0.3:
      Successfully uninstalled pip-19.0.3
Successfully installed pip-19.2.1

lizardのインストール

C:\WINDOWS\system32>pip install lizard
Collecting lizard
  Using cached https://files.pythonhosted.org/packages/7e/01/650cfb0e613217003fe29d7edba549b71731122a5dc6e61fc41ad6f58fb8/lizard-1.16.3-py2.py3-none-any.whl
Installing collected packages: lizard
Successfully installed lizard-1.16.3

操作方法

標準出力
今回はJavaのソースのCCNを計測してみます。

-l オプションの値は言語に応じて変更してください。

プロジェクトのルートフォルダへ移動してlizard実行

C:\spring-boot-rest-api-sample-master\web-demo-2\spring\demo-2>
lizard -l java
================================================
  NLOC    CCN   token  PARAM  length  location
------------------------------------------------
      43      8    307      1      48 MavenWrapperDownloader::main@55-102@.\.mvn\wrapper\MavenWrapperDownloader.java
       9      1     75      2       9 MavenWrapperDownloader::downloadFileFromURL@104-112@.\.mvn\wrapper\MavenWrapperDownloader.java
       5      1     37      2       5 IndexController::hello@18-22@.\src\main\java\com\web\demo\controller\IndexController.java
       5      1     37      2       5 IndexController::formHoge@25-29@.\src\main\java\com\web\demo\controller\IndexController.java
       5      1     37      2       5 IndexController::root@32-36@.\src\main\java\com\web\demo\controller\IndexController.java
       3      1     20      1       3 WebDemo2Application::main@11-13@.\src\main\java\com\web\demo\WebDemo2Application.java
       2      1      5      0       2 WebDemo2ApplicationTests::contextLoads@13-14@.\src\test\java\com\web\demo\WebDemo2ApplicationTests.java
4 file analyzed.
==============================================================
NLOC    Avg.NLOC  AvgCCN  Avg.token  function_cnt    file
--------------------------------------------------------------
     69      26.0     4.5      191.0         2     .\.mvn\wrapper\MavenWrapperDownloader.java
     28       5.0     1.0       37.0         3     .\src\main\java\com\web\demo\controller\IndexController.java
     10       3.0     1.0       20.0         1     .\src\main\java\com\web\demo\WebDemo2Application.java
     12       2.0     1.0        5.0         1     .\src\test\java\com\web\demo\WebDemo2ApplicationTests.java

=============================================================================================
No thresholds exceeded (cyclomatic_complexity > 15 or length > 1000 or parameter_count > 100)
==========================================================================================
Total nloc   Avg.NLOC  AvgCCN  Avg.token   Fun Cnt  Warning cnt   Fun Rt   nloc Rt
------------------------------------------------------------------------------------------
       119      10.3     2.0       74.0        7            0      0.00    0.00

メソッドごとのCCN→ファイルごとのCCN平均→全ファイルのCCN平均 の順で出力されます。

「メソッドごとのCCN」について、各列の意味は以下の通りです。

説明
NLOC      Number Line Of Code コードの行数(コメントを除く)
CCN Cyclomatic Complexity Number サイクロマティック複雑度
token -
PARAM PARAMeter メソッドの引数の数
length - NLOCから空行を除いた行数
location - {メソッド名}@{開始行}-{終了行}@{ファイルパス}

CSV出力

lizard -l java --csv > resule_lizard.csv

image.png

HTML出力

pip install jinja2
Collecting jinja2
  Downloading https://files.pythonhosted.org/packages/1d/e7/fd8b501e7a6dfe492a433deb7b9d833d39ca74916fa8bc63dd1a4947a671/Jinja2-2.10.1-py2.py3-none-any.whl (124kB)
     |████████████████████████████████| 133kB 242kB/s
Collecting MarkupSafe>=0.23 (from jinja2)
  Downloading https://files.pythonhosted.org/packages/65/c6/2399700d236d1dd681af8aebff1725558cddfd6e43d7a5184a675f4711f5/MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl
Installing collected packages: MarkupSafe, jinja2
Successfully installed MarkupSafe-1.1.1 jinja2-2.10.1

HTML形式で出力する場合、jinja2というツールが必要なためpipでインストールする

lizard -l java --html > resule_lizard.html

image.png

まとめ

今回はJavaファイルのみの検証でしたが、JSファイルの検証等もできたので
いろいろ試してみてください

image.png

参考

https://qiita.com/uhooi/items/a1a96a2d7f5e081e2049
https://qiita.com/uhooi/items/c77a53a4c7ac232a1ba1

https://github.com/terryyin/lizard

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?