概要
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"
出力内容:
最初の記号はブロックタイプを表す
記号 | 説明 |
---|---|
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