この記事は、ソフトウェアテストの技法のひとつ「コードメトリックスの評価」を紹介する記事です。
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 をいただく、コードのバグ探しをしても見落としてしまう、このあたりの恐れが高そうです。
リファクタリングの指針としても気にしてよいポイントですね。