2007-08-26 少し涼しい時間帯が出てきた
■ ソースコードのメトリクス(品質測定)を行うツール 
前回は、ccccってツールを試したんですが、id:akiramei さんの8/21のネタで、SourceMonitorが紹介されており、もう少し調べてみる事に。
Source Monitor
- SourceMonitor
http://www.campwoodsw.com/sourcemonitor.html
id:akiramei さん。…元は どっとねっとメモさんが紹介されていたツールです。
ウィザード形式で、解析するフォルダを指定できるのは便利ですね。
選択できるプログラム言語は、以下の通りです。
一通りの有名な言語を選択できるのは、嬉しいですね。
読み込ませると、以下のようなメトリクス収集をしてくれます。
グラフ表示してくれるのは、かなり嬉しいかも。
コードの複雑度の判定基準は、"Complexity"のようです。このパラメータが"McCabeのサイクロマチック数"で合っているのかな?と思って、色々チェックしてみたんですが、「合って」いる模様です。
↓ここで、SourceMonitorについての各種コメントがあります。
- Mike Swanson's Blog : Code Review and Complexity
http://blogs.msdn.com/mswanson/articles/154460.aspx - Cyclomatic Code Complexity Analysis for Microsoft .NET Applications - The Code Project - .NET
http://www.codeproject.com/dotnet/Cyclomatic_Complexity.asp?df=100&forumid=218002&exp=0&select=1413776
ちょっと気になるのは、自分のコードを読み込ませると、何の問題も無かったんですが、先日発表された IronLisp のコードを読み込ませると、「解析できないよ」エラーが時折発生しました。
う〜ん、コードの書き方によっては、解析に失敗するのかな?
DevCodeMetrics
- DevCodeMetrics
http://devcodemetrics.sourceforge.net/index.htm
::memoletさんで紹介されていた LOCツール です。
コンソール版、Web版、Windowsフォームでグラフ表示版と、ナイス(死語)なUIを持っていたので、「おぉっ!」と思ったんですが、よくよく見ると、".c"が解析対象です。
ただ、どんなメトリクス収集をしているか、図入りで説明しているページがあって、参考になりました。
- About DevCodeMetrics
http://devcodemetrics.sourceforge.net/Metrics.htm
これを見ると、コード行数を計測するのに、 LOC 以外に、 eLOC(有効コード行数) って指標もあるんですね。へぇ。
Visual Studio 2008
現在開発中のVS2008ですが、こちらのBlogを見ると、メトリクス収集をしてくれるので期待大。
- Software Cafe : Team System によるコード分析とコードメトリクス
http://blogs.msdn.com/tomohn/archive/2007/07/28/Team-System-Code-Analisys-Metrics.aspx
さて、次は、コードメトリクスです。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メトリクス集計だろうが、やっちゃいけないよ=情報に意味が無くなるから。って事ですね。
- 98 http://www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=VB2005+APIドキュメント+作成&num=50
- 88 http://d.hatena.ne.jp/kmt-t/20070903/1188817796
- 72 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GFRD,GFRD:2007-27,GFRD:ja&q=iron+python+GUI
- 69 http://d.hatena.ne.jp/kmt-t/
- 37 http://www.google.co.jp/search?q=SandCastle&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox
- 36 http://www.google.co.jp/search?hl=ja&q=Sandcastle&btnG=Google+検索&lr=lang_ja
- 35 http://x7net.com/~access/index.php?option=com_smf&Itemid=33&topic=117.msg401
- 34 http://www.google.co.jp/search?sourceid=navclient&aq=t&hl=ja&ie=UTF-8&rlz=1T4ADBF_jaJP220JP220&q=幸せ置き場+孕ませ街道
- 27 http://www.google.co.jp/search?hl=ja&q=sandcastle&lr=
- 24 http://www.google.co.jp/search?hl=ja&q=コマンドプロンプト ログ&lr=





SourceMonitor自体を売ったらダメって部分は理解できたのですが、
商用で開発しているソフトに対して使うことも不可なのでしょうか?
あとVisual Studio 2008のコードメトリクスはTeamSystemのエディション(1ライセンス40万くらい?)にしか搭載されないようなので一般人には縁の無い話かと・・・
http://www.aivosto.com/project/help/pm-complexity.html
C.Johnさん
> 商用で開発しているソフトに対して...
う〜ん、英語ダメなので、私も細かい事になると非常に怪しいです。
C.Johnさんが指摘されているのは、”That is, you may ...”の所ですよね?
翻訳Webと首っ引きで眺める限り、
・開発には使うだろうけど、Source Monitorを単体or含めて売らないでよ
って意味じゃないかな〜と、勝手に想像してます。
murasukeさん
> McCabeのサイクロマチック数
計算の仕方、微妙に違うんですね。
何か、
・単純に行数を数えるLOC
・有効な行数を数えるeLOC
の関係と似てますね。
いや〜、勉強になります。
(もしかしたら、大手企業だと、メトリクス集計について、独自のノウハウ(計算式とか)があるのかなぁ)