目的
業務で簡単に品質等を確認したい
環境
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
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
まとめ
今回はJavaファイルのみの検証でしたが、JSファイルの検証等もできたので
いろいろ試してみてください
参考
https://qiita.com/uhooi/items/a1a96a2d7f5e081e2049
https://qiita.com/uhooi/items/c77a53a4c7ac232a1ba1