radonを使用したPythonのソースコードのメトリックスの取得

Table of Content

概要

RadonはPythonのメトリックスを計測するプログラムである。
https://github.com/rubik/radon

これにより、Pythonのコードの複雑度や行数を取得することができる。
複雑度を計測することで、ソースコードの潜在的リスクを明確にして、リファクタリングやテストをすべき対象を明示できる。

インストール方法

python2.xまたはPython3.xで下記を実行する。

easy_install easy_install radon

使い方

Cyclomatic Complexityの計測

ccコマンドを使用することでCyclomatic Complexityの計測が行える。Cyclomatic Complexityは制御文が多いほど高くなる。
詳細は下記を参考のこと。
https://radon.readthedocs.org/en/latest/intro.html#cyclomatic-complexity

使用例:

radon cc -s ".\*.py"

無題.png

出力内容:
最初の記号はブロックタイプを表す

記号 説明
F 関数
M メソッド
C クラス

次の数値は計測対象のブロックの開始行列を表す

行:列

次は関数名などのブロック名を表す。

「-」以降はランクとCyclomatic Complexityの値となる

ランクはCyclomatic Complexityの値によって決まる。

CCの値 ランク リスク
1 - 5 A low - 単純なブロック
6 - 10 B low - よく構造化され、安定したブロック
11 - 20 C moderate - 少し複雑なブロック
21 - 30 D more than moderate - より複雑なブロック
31 - 40 E high - 複雑なブロック、憂慮すべき
41+ F very high - エラーが発生しやすい、不安定なブロック

オプション:
ccコマンドで使用できるオプションは次の通り

Option 説明
-s, --show Cyclomatic Complexityを表示する。
-n, --min 表示する最小のランクを設定する。この引数の後に A~Fを指定
-x, --max 表示する最大のランクを設定する。この引数の後に A~Fを指定
-a, --average Cyclomatic Complexityの平均を最後に表示する。この平均は-nや-xによるフィルタに影響をうける
--total-average すべてのデータの平均をうける-aと異なり、フィルタの影響を受けない
-e, --exclude 解析の対象から外すファイルのパスをコンマ区切りで指定する
-i, --ignore 無視するディレクトリをコンマ区切りで指定する。無視したディレクトリ以下は検査しない
-o, --order 並び順を指定する.
SCORE 複雑度順
LINES 行数順
ALPHA ブロック名順
-j, --json 結果をJSONで出力する
--no-assert 複雑度を計算する場合にasser()命令はカウントしない

Maintainability Indexの計測

miコマンドを使用することでMaintainability Indexを計測する。MaintainabilityはCyclomatic Complexityと行数から計算され、100を最高に高いほど、保守しやすい。

詳細は以下を参照
https://radon.readthedocs.org/en/latest/intro.html#maintainability-index

使用例:

radon mi -s ".\*.py"

出力内容:

C:\dev\py33>radon mi -s "test.py"
test.py - A (58.76)

ファイル名、ランク、MI scoreを表示する

ランクについては下記の通り

MI score Rank Maintainability
100 - 20 A 非常に高い
19 - 10 B 中程度
9 - 0 C 非常に低い

オプション:
miコマンドで使用できるオプションは次の通り

Option 説明
-s, --show Maintainability Indexを表示する。
-e, --exclude 解析の対象から外すファイルのパスをコンマ区切りで指定する
-i, --ignore 無視するディレクトリをコンマ区切りで指定する。無視したディレクトリ以下は検査しない
-m, --multi 複数行の文字列をコメントとみなして数えない

rawデータの計測

rawコマンドは以下の数値を出力する。

LOC :総行数
LLOC :Logical LOC。空行とかコメント行を除いたもの
SLOC :Source LOC .空行を除いたもの。
comments :コメント行
multi :複数行の文字列。コメントとみなされることがある
blank : 空行

オプション:
rawコマンドで使用できるオプションは次の通り

Option 説明
-s, --summary 計測した集計結果を表示する
-e, --exclude 解析の対象から外すファイルのパスをコンマ区切りで指定する
-i, --ignore 無視するディレクトリをコンマ区切りで指定する。無視したディレクトリ以下は検査しない
-j, --json 結果をJSONで出力する

プログラムからの利用

radonモジュールをpythonのコードにimportすることでpython上からradonが利用できる。

例:

import radon
from radon import raw
ret = radon.raw.analyze("""
if a==1:
  print (a)
if a==2:
  print (a)
""")
print(ret)

詳細についてはhelpで調べるか下記参照
https://radon.readthedocs.org/en/latest/api.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です