ふにゃるん

2007-08-26 少し涼しい時間帯が出てきた

ソースコードのメトリクス(品質測定)を行うツール 14:03  ソースコードのメトリクス(品質測定)を行うツールを含むブックマーク

前回は、ccccってツールを試したんですが、id:akiramei さんの8/21のネタで、SourceMonitorが紹介されており、もう少し調べてみる事に。


Source Monitor

id:akiramei さん。…元は どっとねっとメモさんが紹介されていたツールです。


ウィザード形式で、解析するフォルダを指定できるのは便利ですね。

2
2 posted by (C)wacky


選択できるプログラム言語は、以下の通りです。

3
3 posted by (C)wacky

一通りの有名な言語を選択できるのは、嬉しいですね。


読み込ませると、以下のようなメトリクス収集をしてくれます。

6
6 posted by (C)wacky

7
7 posted by (C)wacky

グラフ表示してくれるのは、かなり嬉しいかも。


コードの複雑度の判定基準は、"Complexity"のようです。このパラメータが"McCabeのサイクロマチック数"で合っているのかな?と思って、色々チェックしてみたんですが、「合って」いる模様です。

↓ここで、SourceMonitorについての各種コメントがあります。


ちょっと気になるのは、自分のコードを読み込ませると、何の問題も無かったんですが、先日発表された IronLisp のコードを読み込ませると、「解析できないよ」エラーが時折発生しました。

う〜ん、コードの書き方によっては、解析に失敗するのかな?


DevCodeMetrics

::memoletさんで紹介されていた LOCツール です。


コンソール版、Web版、Windowsフォームでグラフ表示版と、ナイス(死語)なUIを持っていたので、「おぉっ!」と思ったんですが、よくよく見ると、".c"が解析対象です。

1
1 posted by (C)wacky


ただ、どんなメトリクス収集をしているか、図入りで説明しているページがあって、参考になりました。


これを見ると、コード行数を計測するのに、 LOC 以外に、 eLOC(有効コード行数) って指標もあるんですね。へぇ。


Visual Studio 2008

現在開発中のVS2008ですが、こちらのBlogを見ると、メトリクス収集をしてくれるので期待大。

さて、次は、コードメトリクスです。VSTS 2008 からの新機能となりますが、これも VSTS で実現できます。コードメトリクスでは、コードの保守容易性(Maintainability Index)、循環的複雑度(Cyclomatic Complexity)、継承の深さ(Depth of Inheritance)、クラス結合度(Class Coupling)、コード行(Line Of Code)を示してくれます。またこれらは3段階(緑、黄、赤)で、コードのエレガントさを表してくれます。


そういえば、この間 読んだ、元マイクロソフト所属の方が書かれた書籍で、マイクロソフトでは「LOC」や「複雑度」をメトリクス収集の一つに含んでいると書いてあったような。

マイクロソフトのテスト部隊は世界最強みたいなんで(書籍では、開発1に対してテスト2の割合で人を割り当てていると書かれていたと思います。ありえね〜)、かなり期待したいですね。


まとめ

.NET系では、SourceMonitorでOKかな?という気がします。

後は、今後出る Visual Studio 2008 に期待ですかね。

2007/09/11: 追記

コメントで、id:murasuke さんから指摘頂いていますが、「McCabeのサイクロマチック数」と言っても、計算の仕方に違い(工夫)があるようで、Source Monitorが参考にしているやり方だと、標準?のやり方より、若干複雑度が高めに出るようです。

という訳で、当たり前の話ですが、

  • 昨日はAのツール使ってxxメトリクス集計
  • 今日はBのツール使ってxxメトリクス集計

ってのは、同じxxメトリクス集計だろうが、やっちゃいけないよ=情報に意味が無くなるから。って事ですね。

C.JohnC.John 2007/09/06 20:48 SourceMonitorのライセンスがよく分かりません。
SourceMonitor自体を売ったらダメって部分は理解できたのですが、
商用で開発しているソフトに対して使うことも不可なのでしょうか?

あとVisual Studio 2008のコードメトリクスはTeamSystemのエディション(1ライセンス40万くらい?)にしか搭載されないようなので一般人には縁の無い話かと・・・

murasukemurasuke 2007/09/09 21:19 初めまして。ツッコミすいません。私も「McCabeのサイクロマチック数」なのか気になってSourceMonitorのヘルプを読んだのですが、「Code Complete」の定義で数えていると書いてありました。McCabeの定義ではIF...Thenごとに1を加算ですが、Code Completeの定義ではIf...Thenの中の条件(And, Or)ごとに1を加算するため、複雑度がすこし多めにでるようです。
http://www.aivosto.com/project/help/pm-complexity.html

WackyWacky 2007/09/11 23:32 こんばんは。

C.Johnさん
> 商用で開発しているソフトに対して...
う〜ん、英語ダメなので、私も細かい事になると非常に怪しいです。
C.Johnさんが指摘されているのは、”That is, you may ...”の所ですよね?
翻訳Webと首っ引きで眺める限り、
・開発には使うだろうけど、Source Monitorを単体or含めて売らないでよ
って意味じゃないかな〜と、勝手に想像してます。


murasukeさん
> McCabeのサイクロマチック数
計算の仕方、微妙に違うんですね。
何か、
・単純に行数を数えるLOC
・有効な行数を数えるeLOC
の関係と似てますね。

いや〜、勉強になります。
(もしかしたら、大手企業だと、メトリクス集計について、独自のノウハウ(計算式とか)があるのかなぁ)