sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

Visual Studio をつかってコードメトリックスを取得・評価する

この記事は、ソフトウェアテストの技法のひとつ「コードメトリックスの評価」を紹介する記事です。

Visual Studio は 2010 からコードメトリックスを分析する機能が追加されています。これは「バグが入っている可能性が高いところ」に検討をつける、探るための技法です。

コードメトリックスを分析すれば、記述したソースコードの「保守容易性指数」と「サイクロマネティック複雑度」という値を取得することができます。

品質管理の基本のひとつに、品質が「高い or 低い」とは「何が」その評価を保証したり“担保”していますか? という問いに答えられる、というのがあります。
その答えのひとつが、「メトリックスの値による、定量的な品質指標」ということになります。

ざっくりと「バグが入りそうなところは少ないです or 多いです」という指標値を定量的に示す値(テクニック)が「保守容易性指数」と「サイクロマネティック複雑度」です。

コードメトリックスの使いかた

Visual Studio の「分析」から「ソリューションのコードメトリックスを計算」を選択します。

こんな感じで、「コードメトリックスの結果」が表示されます。(これは、GCP の TextToSpeech のサンプルコードを分析しました)

これだけだとコードが短すぎるので、もう少し骨太なコードを分析するとこんな感じです。

メトリックスの値に慣れていないと、ズラズラっとよくわからない値が表示がされている感じですね。
評価方法を理解しておきましょう。

「コードメトリックスの結果」のアイコンには、結果を「エクセルでリストを開く」機能があります。これがすごく便利です。

保守容易性指数とは?

コードのメンテナンスのしやすさを表す指標値です。(Visual Studioコードメトリックス値」より)

値の範囲 コメント
20 ~ 100 保守しやすい
10 ~ 19 注意する
0 ~ 9 保守しづらい

値は 100 に近いほど保守しやすく 0 に近いほど保守しづらいのが特徴です。
基本的には大きい値がよい指標値です。

具体的な仕様は Microsoft の Code Analysis Team Blog の「Maintainability Index Range and Meaning」の記事で説明があります。

サイクロマネティック複雑度とは?

コードの構造の複雑さを測定した指標値です。

書籍「知識ゼロから学ぶソフトウェアテスト 【改訂版】」では、カーネギーメロン大学の「Cyclomatic Complexity Table4」を指標として示しています。

値の範囲 コメント
1 ~ 10 a simple program, without much risk
11 ~ 20 more complex, moderate risk
21 ~ 50 complex, high risk program
greater than 50 untestable program (very high risk)

値は 0 に近いほど複雑度が低く、大きい値ほど複雑度が高いのが特徴です。
基本的には小さい値がよい指標値です。

じゃあ、この値をどうするの?

それを決めるのが品質管理や、ソフトウェアテストです。
一律のクリア基準というものは存在していません。
このあたりは知識です。まず、参考書を読むとよいと思います。

よくある指針は上に書いたとおりですね。
もしも、気に入らない値が出力されるなら「コーディングがあまり良くない恐れがある」くらいはわかります。(実際にバグがあるかどうかは、テストしてみないとわかりません)

ただ、テストするにも保守容易性指数の低いコードは、保守しづらいと指摘されているとおり、拡張性が低かったり腐りやすいコードになっているのかもしれません。

サイクロマネティック複雑度が高い場合は、十分なテストが困難であることが示されているのかもしれません。ブラックボックステストくらいしかできず(カバレッジ化が困難)、レビューなら NG をいただく、コードのバグ探しをしても見落としてしまう、このあたりの恐れが高そうです。

リファクタリングの指針としても気にしてよいポイントですね。

参考