Visual Studioのコード分析機能を利用してコードの品質を上げてみよ

コード分析

まずはプロジェクトの設定を行います。プロジェクトのプロパティページの「コード分析」タブで、「ルールセット」を既定の"Microsoft マネージ推奨規則"から"Microsoft のすべての規則"に変更します。

ちなみに組み込み済みのルールの詳細はこちら

「分析」メニューから「ソリューションでコード分析を実行」を選びます。

コード分析が終わると、「エラー一覧」ウィンドウに警告事項が並びます。154、多!

「コード」列に現れる"CA1062"とかをクリックすると、MSDNの該当ページが開くのでこれを参考にコードを修正していきましょう。これはがんばってみるしかないか。

全部が全部対処しなきゃいけないかって言うと、そうでないものもあると思います。そういう場合は「抑制」することで出ないようにすることが出来ます。
やり方は2種類あります(ソース内 or 抑制ファイル)が、今回は抑制ファイルで指定します。

「エラー一覧」で該当の警告を右クリックして「メッセージの非表示」⇒「抑制ファイル内」をクリックします。するとプロジェクト直下に「GlobalSuppressions.cs」が作られここに記述されます。中身は以下のようになっています。

[assembly: System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "SEQ", Scope = "member", Target = "SkillDB.Models.資格取得.#SEQ")]
// このファイルは、このプロジェクトに適用される SuppressMessage 
//属性を保持するために、コード分析によって使用されます。
// プロジェクト レベルの抑制には、ターゲットがないものと、特定のターゲット
//が指定され、名前空間、型、メンバーなどをスコープとするものがあります。
//
// このファイルに抑制を追加するには、[コード分析] の結果でメッセージを 
// 右クリックし、[メッセージの非表示] をポイントして、
// [抑制ファイル内] をクリックします。
// このファイルに手動で抑制を追加する必要はありません。

いちいちやるのも面倒だと思うので、ビルド時に実行するように設定しましょうかね。
プロジェクトのプロパティページの「コード分析」タブで、「ビルドに対するコード分析の有効化」にチェックを入れて保存!

コードメトリクスの計算

コードの保守容易性を測定するための機能があります。その名も「コードメトリクスの計算」。
MSによれば、下記のような機能だそうで。

この機能ではコードを静的に分析し、 メソッド(あるいはクラスや名前空間)ごとに、コードの行数や、クラスの結合度、継承の深さといった数値を計測します。また、サイクロマティック複雑度の計測を行い、それらの数値を勘案しながら、「保守容易性インデックス」という数値を計算します。
「保守容易性インデックス」は最大値が 100 となる指標であり、メソッドあたりのコードが長すぎたり、サイクロマティック複雑度が大きい(分岐が多い)コードに対しては、保守容易性の観点でペナルティ(マイナス値)を付けて計算する数値となります。

「分析」メニューの「ソリューションのコードメトリクスを計算」です。

保守容易性インデックスの値が低くて、サイクロマティック複雑度が高い場合、メソッドのコード行数が長かったり、if 文による分岐が多かったりするケースが見受けられるようです。
そのような場合は、VSのリファクタリング機能を利用して、ある程度意味のあるまとまりで別のメソッドとしてロジックを切り出して改善しましょう。
と言いながらVSのリファクタリング機能使ったことないんですけど。「編集」メニュー⇒リファクター⇒メソッドの抽出、かな?

コードクローン分析(コード複製分析)

プロジェクトにおいて点在している「似た」コードを素早く特定します。これにより、リファクタリング対象となるコードを効率的に見つけることが可能です。

「分析」メニューの「ソリューションのコードクローン分析」です。

ここで見つかったモノに対して、問題がないか確認しながら、リファクタして(メソッドとして抽出して)共通化していきましょう。

また、コードの一部を選択して、右クリックして、「ソリューション内で一致する複製を検索」することも出来るので、それもリファクタ対象ですね。がんばりましょう!