SourceMonitor便利そう

会社ではだいたい毎日コーディングをやっているが、自分のコードの品質が果たして良いのか悪いのか分からない感じになっている。そんなに酷いコードを書かないようにしているけれど、うちの部署にはコードレビューという手続きが確立されていないので、客観的に見て良いコードか悪いコードかわかりにくい。

一般的にメンテナンスのしやすいコード、テストのしやすいコードが良いコードといわれている。シンプルで分かりやすいコード、条件分岐が多すぎないコードが良いとされ、複雑なコードは悪いとされる。この良し悪しを計測し数値化する「メトリクス計測」という手法がある。

「メトリクス計測」のソフトの中でも、SourceMonitorというフリーソフトをお勧めしたい。このソフトは行数やコメントの割合、複雑度(McCabeのサイクロマティック数)などを計測するツールだ。この中でも複雑度として計測される値は、C1分岐網羅に必要なケース数に近く、これが大きすぎると実質的に単体テストの実施が不可能になると考えられる。

10 以下であればよい構造

30 を越える場合,構造に疑問

50 を越える場合,テストが不可能

75 を越える場合,いかなる変更も誤修正を生む原因を作る

(http://forza.cocolog-nifty.com/blog/2009/01/post-ca39.html より引用)

これは判断基準としては分かりやすい。

実際に、卒業研究で作成したプログラムを計測してみると、複雑度(Complexity)が最も大きかったのが、ファイルIOを担当するクラスの、チェックを行う関数だった。

卒論のプログラムをSourceMonitorで分析した結果

ソースを抜粋してみると確かにこれは酷い。もう自分でも読めない感じ。でも数式を素直にプログラムしただけなので、やむを得ない部分もあるかもしれない。

            bool changed;
            do
            {
                changed = false;
                for (int i = 0; i < length; i++)
                {
                    for (int j = 0; j < length; j++)
                    {
                        if (table[i, j])
                        {
                            for (int k = 0; k < length; k++)
                            {
                                changed |= !table[i, k] && table[j, k];
                                table[i, k] |= table[j, k];
                            }
                        }
                    }
                }

            } while (changed);

 

ちなみに、このソフトは対応している言語も、C++、 C、 C#、 VB.NET、 Java、 Delphiと幅広く、関数レベルでの分析は出来ないがVB6、HTMLにも対応している。フリーソフトとしては十分すぎる機能だろう。

ダウンロードは以下から。

http://www.campwoodsw.com/sourcemonitor.html

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です