概要
metric_fu を利用して Ruby のボットフレームワーク Ruboty と Lita の循環複雑度を比較します
metric_fu について
metric_fu は Ruby の様々な静的解析ツールをまとめて提供してくれる gem です。
今回は、循環複雑度のみを参考にするため、 Saikuro の結果のみを確認します。
インストール
$ gem install metric_fu
$ gem install ruboty
$ gem install lita
- metric_fu の実行
対象プロジェクトのルートフォルダで、 metric_fu
を実行するだけです。
レポートは、デフォルトで %プロジェクトルート%/tmp/metric_fu/output/index.html に出力されます
$ cd /path/to/ruboty
$ metric_fu
******* STARTING METRIC cane
******* ENDING METRIC cane
******* STARTING METRIC churn
******* ENDING METRIC churn
******* STARTING METRIC flay
******* ENDING METRIC flay
******* STARTING METRIC flog
******* ENDING METRIC flog
******* STARTING METRIC saikuro
******* ENDING METRIC saikuro
******* STARTING METRIC reek
******* ENDING METRIC reek
******* STARTING METRIC roodi
******* ENDING METRIC roodi
******* STARTING METRIC stats
******* ENDING METRIC stats
******* STARTING METRIC hotspots
******* ENDING METRIC hotspots
******* SAVING REPORTS
前提
Name | Version |
---|---|
metric_fu | 4.11.4 |
ruboty | 1.2.2 |
lita | 4.3.2 |
循環複雑度
循環複雑度については下記参照。
Hatena - TbpgrBlog - \バグだー!/ システムに巣食うバグさんからみた快適さ、循環複雑度( Cyclomatic Complexity ) とは? \バグだー!/
循環複雑度とバグ混入率
循環的複雑度 | 複雑さ | バグ混入率 |
---|---|---|
10以下 | シンプルなプログラム。リスクがほとんどない | 25% |
40以上 | ほどほどの複雑さのコード。ややリスクがある | 50% |
50以上 | かなり複雑なコード。リスクがある | 70% |
75以上 | いかなる変更も誤修正を生む | 98% |
Ruboty
メソッドの循環複雑度です。
なんと、 Max で 4 しかない非常に良い構造であることが分かります。
メソッドの行数も、ほとんどは 2 行から 4 行程度で、
もっとも行数が多いメソッドですら、 11 行です。
Lita
メソッドの循環複雑度です。
Max で 9 と、 ruboty よりは複雑ですが、それでも「非常に良い構造」の範囲内です。
もっとも行数が多いメソッドは 30 行です。
しかし、一般的なスパゲッティコードなどと比べれば、かなり簡潔な処理でしょう。
総括
Ruby の bot フレームワークはどちらも複雑度が低く、簡潔なメソッド群で構成されている、
ということが分かりました。
中でも、 Ruboty の複雑度の低さ、行数の少なさは群を抜いています。
なんだかライブラリの利用者として安心感がありますね。