LoginSignup
59
53

More than 5 years have passed since last update.

Rubyプロジェクトの循環的複雑度を計測する

Last updated at Posted at 2016-01-21

循環的複雑度(Cyclomatic Complexity)とは

プログラムの複雑度を測るのに使われる。プログラムのソースコードから、線形的に独立した経路の数を直接数える。(Wikipediaより)

とある。分岐等の数を計測し、どれだけリスクが低いプログラムかを定量的に評価でき、一般的に下記のような線引きがあるようである。

複雑的循環度 評価
~ 10 シンプルでよい構造。バグが入りにくい
21 ~ 構造的にリスクを伴う複雑さ。バグ入りやすい
50 ~ この域になるとテストが不可能になる
75 ~ 98%の確率でバグが入る

ということで、ためしにRubyのソースを計測してみた。

Rubyプロジェクトで循環的複雑度を計測する

インストール

今回はgithubで公開されているSaikuroというツールを使って計測を行ってみる。
https://github.com/metricfu/Saikuro

gem install metric_fu-Saikuro

使い方

いたってシンプル。
このコマンドを実行すれば解析後の結果をhtmlとして出力してくれる。

$ saikuro -c -i {対象ディレクトリ} -o {解析結果出力先ディレクトリ}
Parsing xxxxxx.rb
Parsing yyyyyy.rb
Parsing zzzzzz.rb
$

複数のディレクトリを一気にやることも可能。

$ saikuro -c -i {対象ディレクトリ1} -i {対象ディレクトリ2} -o {解析結果出力先ディレクトリ}
Parsing xxxxxx.rb
Parsing yyyyyy.rb
Parsing zzzzzz.rb
・・・
$

実行後に-oで指定したディクトリにhtmlファイルが出力される。

xxxx.rb_cyclo.html
index_cyclo.html

実行結果

上記で解析したhtmlファイルを開くとこのような感じになる。
index_cyclo.html
index.png

  • Errors and Warnings
    ErrorとWarningが出ているクラスの一覧(複雑度が高いやつっぽい?)

  • Analyzed Files
    解析したファイル一覧

indexのリンクから更に細かい部分が確認できる
cyclo_1.png

cyclo_2.png

循環的複雑度は、低ければ低いほどメンテナンス性やテスタビリティが高くなるため、定期的に計測をしてみたい。

59
53
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
59
53