LoginSignup
66
71

More than 5 years have passed since last update.

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

Posted at

概要

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

66
71
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
66
71