2012年5月6日日曜日

Objective-C のコードの循環的複雑度を測るツール


職場で Objective-C のコード (つまり iPhone アプリ) を書いているのですが、
その循環的複雑度 (Cyclomatic Complexity) を測りたいなあと思い立ち、
無料で使えるツールが無いかなあと思って探したところ、次のツールが見つかりました。

headerfile-free-cyclomatic-complexity-analyzer
http://code.google.com/p/headerfile-free-cyclomatic-complexity-analyzer/

2012/05/06現在、最新は hfcca14.py です。
拡張子でお分かりの通り、Pythonで書かれたツールです。
Objective-C を使っているなら、たいていの場合 MacOS X 上 で作業しているでしょうから、
その場合は Python がそもそも入っているので問題なく使えると思います。
使い方は上記のページで大体わかると思いますが、

python hfcca14.py filename.m

てな感じでやるだけです。ディレクトリ指定や複数指定ももちろん可能です。
オプションはいろいろありますが、出力結果のしきい値を変更する -C は特に重要です。
あるしきい値 (デフォルトは15) 以上の複雑度を持つ関数が存在する場合、
実行結果に警告として表示されるのですが、例えばしきい値を 20 としたい場合には、

python hfcca14.py -C 20 filename.m

とかやればOKです。

"header-file-free" と書いてあるように、このツールは若干簡易的な測り方をしているようで、
ヘッダファイルは無視されますし、
また#defineで書かれたマクロなどの展開を(デフォルトでは)行わないようです。
まあ、実用上はそれで十分かなと思います。

あと、裏話ですが、Objective-C サポートしているといいつつ、
Objective-C 特有の関数シグニチャの解析が微妙だったせいで、
実行結果で表示される関数名がめちゃくちゃだったので、
作者にそれを修正するパッチ送ったら採用してくれました(それが上記の最新版です)。

これ以外にも色々探したのですが、
中々 Objective-C をサポートしているツールが見つからないんですよね。
他によいものがあればぜひお教え下さい。


0 件のコメント:

コメントを投稿