2012年2月6日月曜日

rubyコードの複雑さを数値化する

○はじめに
今日は、Rubyで書いたコードのメトリクスを測定するreekと言うツールを紹介します。

メトリクスの測定とはコードの複雑さ(汚さ)を計る事です。
複雑なコードは理解しにくいため、変更しにくく、バグが発生しやすいです。
メトリクスを測定して、複雑なコードを発見しリファクタリングすることで製品の品質が向上します。

○具体的に何をしてくれる?
メトリクス測定ツールは具体的に何をしてくれるのでしょうか?
例えばreekの場合は、コードの中に以下のような"汚い"部分が無いか探してくれます。
  • 大きすぎるクラス、メソッド
  • "a", "b"みたいな、何が入っているのか分かりにくい変数名
  • rdoc用のコメントが無いクラス・・・
    などなど
そして「汚い部分が何カ所あったか」と「どこがどんな風に汚いのか」を表示してくれます。
例えばこんな感じです。
./foo.rb -- 6warings    :
  #=>foo.rbに6カ所汚い部分があった
  Foo has no descriptive comment (IrresponsibleModule)
  #=>Fooクラスがどんなクラスなのか説明するコメントが無い
  Foo has the variable name 'a' (UncommunicativeName)
  #=>Fooクラスに'a'と言う説明的でない名前の変数がある
  Foo#bar has apporox 11 statements(LongMethod) 
  #=>Fooクラスのbarメソッドが長過ぎる
  ・・・
#以降は私が書いた補足です。

プログラムが機械的に解析した結果なので、完璧では無い事も多いのですが、コードの汚さの目安として使ったり、どこをリファクタリングしたら良いのかの基準にする事ができます。

では、さっそくreekを使ってみましょう。

○インストール
コマンドラインで以下を実行すればインストールできます。
$ gem install reek

○実行
reekは、1ファイルを対象にメトリクスを測定することも出来ますし、複数のファイルを一度に測定する事も出来ます。

なお、もちろんRubyで書かれたRuby on Railsのコードに対して測定する事も出来ます。

①一つのファイルのメトリクスを測定
$ reek ./foo.rb
→foo.rbファイルのメトリクスを測定

②複数のファイルのメトリクスを同時に測定
$ reek rails_app_example/app/controller/
→controllerディレクトリの中にある全てのファイルのメトリクスを測定します。

以上の通り簡単な手順ですので、ぜひお試しください。

○まとめ
  • reekはRubyで書いたコードのメトリクスを測定するツール
  • メトリクス測定とはコードの汚さを測定する事
  • メトリクスは完璧ではないけど、リファクタリングすべき場所の目安になる
  • reekでrubyコードのメトリクスを計ろう!

0 件のコメント:

コメントを投稿