« ミクミキサー(AG03-MIKU)のセッティング | トップページ | SlideShareのスライドを保存したい »

2015.06.07

SourceMonitor Version 3.5を導入してみた

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

おいコラ!
サウンド関連のプログラムをするんじゃなかったのか?
という話もあるんですが、気になって調べたことを忘れないうちに
ブログに書いちゃおうってことでSourceMonitorの話です。

えっと、まずは何でSourceMonitorを使ってみようとしたか
というところから書きますね。


ゲームプログラマのためのコーディング技術

実は最近、上の本を立ち読みしました。
(買ってないんかい! というツッコミは無しです

この本、第1章は、マーチン・ファウラー著の
リファクタリングの本のC++版みたいな感じでした。

新装版 リファクタリング―既存のコードを安全に改善する― (OBJECT TECHNOLOGY SERIES)

リファクタリングについては、かげさんは
VisualStudioにリファクタリングメニューが導入される前からやっているので
というか個人的にVB6やVBA用のリファクタリングツールとかを作っていたので
C++だと、そうだよね~というのはあったんですが
新しい収穫は、あまり無かったです。

第2章は、オブジェクト指向設計について書かれていたので
こちらもあまり収穫は無かったです。

第3章は、ソースコードの品質計測ということで
いくつかのツールは知っていたのですが、
参考文献を見るとSourceMonitorについての記載があったので
気になって調べてみたッて感じです。

現在、初音ミク冒険記の開発では、ソースを修正してテストした後、
ソースをバージョン管理のSubversion(以下、SVN)に登録(コミット)してます。

このコミットの時にTraclightningで管理しているチケット番号にリンクさせている他に
Jenkinsに連動してます。

具体的にはJenkinsが10分おきにSVNのコミット状況を監視していて
VC++のソースがコミットされたらCppCheckとStepCounterが自動的に動きます。
(初音ミク冒険記だとシナリオでLuaや開発ツールがC#なので、そっちの時はまた別の処理が動く)

CppCheckについては、このブログでも以下の記事で紹介しています。
今更だけど、Cppcheckを使って初音ミク冒険記のソースを静的テストしてみた JenkinsからのCppcheck このところずっとJenkinsのCppCheckが動いていない気がした原因が判明

StepCounterについては、
Jenkinsの設定をいろいろと変更してみた、が、あと一歩が分かんない でもチラッと紹介していますが
ソース単位で実行行数、コメント行数、空行数を表示できます。

このように一応、ソースの品質管理としての指標は
少しだけど収集していたんですが、
「サイクロマチック複雑度」とか「メソッドのネストの深さ」は分からなかったのです。

サイクロマチック複雑度については
Wikipediaの「循環的複雑度」に掲載されています。

で、どうやらこの辺りの情報収集ができるのがSourceMonitorらしかったので
導入してみました。

■SourceMonitor Version 3.5のダウンロード
http://www.campwoodsw.com/sourcemonitor.html

■導入方法
「大人になったら肺呼吸」というサイトで
C言語やJavaのメトリクス計測ができるSourceMonitorを試してみたよ。」という記事があったので参考にしました。

そういえば、このサイトはCppCheckの導入時にも参考にさせてもらいました。

■メトリクス(計測値の意味)
SourceMonitorは英語のツールなんですが
上記の導入方法の記事では、各項目の意味の説明が残念ながら無かったので
メトリクス計測 SourceMonitor 紹介」という記事を参考にさせてもらいました。

■かげさんが調べた時の参考情報
ソースコードの品質向上のための効果的で効率的なコードレビュー C/C++開発環境

■使ってみた印象
stepcounterで取得している情報の内、空行の扱いがオプションになっていますが
それ以外の情報は取得できています。

下図は、初音ミク冒険記では計測不要と判断した項目を抜いた状態のものです。
Sourcemonitor01

% Branchesが、分岐率
Max Complexityが、最も複雑なメソッドの複雑度
Max Depthが、ネスト階層
Ave Complexityが、サイクロマチック複雑度
です。

<サイクロマチック複雑度>
•10 以下であればよい構造
•30 を越える場合,構造に疑問
•50 を越える場合,テストが不可能(テストするのが難しい)
•75 を越える場合,いかなる変更も誤修正を生む原因を作る

ということで実は上図は、サイクロマチック複雑度が10以上のものを出しています。
結構あるな・・・

確かにショップやオプション関連は分岐も多くて複雑なんだが
かげさん的に一番複雑に感じている
myGame.cppがココには出てこないのが意外でした。

まぁ、上図には微妙に入らないくらいの位置にはなっているんですが・・・

30を超えているソースで今後のメンテでも複雑になりそうなのは
myOption.cpp(オプションメニュー)
myItem.cpp(アイテムメニュー)
myManual.cpp(各種説明メニュー)
myMapEditHookWinProc.cpp(マップクリエーター関連)
といったところかな?

ショップメニューは、ある程度完成形のつもりをしているので
とりあえず放置でも良さそうな気がしている。

ネスト階層が5以上のところは、メソッドの抽出で関数を小分けにした方が
ソースの見通しが良くなりそうだなと思う。

なお、Jenkinsでこのツールの出力情報を取得するプラグインもあるようなんだが
上図で示したようなソースのレベルとか、
もっと詳細なソース内の関数レベルの情報は取得できないようで
トップレベルのベースディレクトリの中全体のレベルのものしか表示できないみたい。

一応、このツールはコマンドラインで情報収集することができるっぽいので
うまくJenkinsと連携させられると良いんだけどな。


 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

このエントリーへのリンク

このエントリーのリンクを入れるHTML:

トラックバック

この記事へのトラックバックの一覧です: SourceMonitor Version 3.5を導入してみた:

コメント

このブログの新着コメントをRSSリーダに登録する為のxml




←名前とメールアドレスは必須です。
URLも記入すれば、URLのみが公開されます。
メールアドレスのみですと、メールアドレスが公開されてしまいますので、御注意ください。

↓コメント本文では、「a href」「b」「i」「br/」「p」「strong」「em」「ul」「ol」「li」「blockquote」「pre」のタグが使えます。絵文字をクリックすると、本文にタグを挿入できます。