既存の違反を含む既存のコード ベースに FxCop / 静的分析を実装するときに使用される戦略にはどのようなものがありますか? 静的解析違反を最も効果的に減らすにはどうすればよいでしょうか?
4 に答える
まず、[SuppressMessage] 属性を自由に使用してください。少なくとも最初は。属性を介してカウントを 0 にしたら、新しいチェックインで FxCop 違反が発生しないようにルールを設定します。
Visual Studio 2008 には優れたコード分析機能があり、すべてのビルドでコード分析を確実に実行し、警告をエラーとして扱うことができます。これにより処理が少し遅くなる可能性があるため、継続的インテグレーション サーバー (CruiseControl.NET など) をセットアップし、チェックインごとにコード分析を実行することをお勧めします。
制御下に置かれ、チェックインのたびに新しい違反が発生しなくなったら、使用した SuppressMessageAttributes を削除することを目標に、一度に FxCop 違反のクラス全体に取り組み始めます。
本当に保持したいものを追跡する方法は、本当に抑制したいものにジャスティフィケーション値を常に追加することです。
パッシングスタイルでコードを書き直してください!
真剣に、古いコード ベースには何百ものエラーがありますが、それが初心者/インターン プログラマーがいる理由です。FxCop 違反を修正することは、コード ベースの概要を把握し、準拠する .NET コードを記述する方法を学習するための優れた方法です。
だから、弾丸を噛んで、カフェインをたくさん飲んで、数日でそれを乗り越えてください!
NDependはあなたが求めていることを実行できるように見えますが、CruiseControl.Net自動ビルドに統合できるかどうかはわかりません.コードが要件を満たしていない場合はビルドに失敗します(これは私が起こりたい)。
他のアイデアはありますか?
FxCop の代わりにNDependツールを使用することもできます。このツールを使用すると、C# LINQ クエリ( CQLinqと呼ぶもの) に対してコード ルールを記述できます。免責事項: 私はツールの開発者の 1 人です。
デフォルトで200 以上の Code Rulesが提案されています。よく知られているC# LINQ 構文のおかげで、既存のルールのカスタマイズや独自のルールの作成は簡単です。
誤検知の数を低く抑えるために、CQLinq は、 notmycode で始まる特別なコード クエリを使用して JustMyCode セットを定義する独自の機能を提供します。この機能の詳細については、こちらを参照してください。たとえば、次の 2 つのnotmycodeデフォルト クエリを次に示します。
誤検知の数を低く抑えるために、CQLinq を使用すると、過去に定義されたベースライン以降、追加されたコードまたはリファクタリングされたコードのみにルールの結果を集中させることもできます。ベースライン以降に追加またはリファクタリングされた複雑すぎるメソッドを検出する次のルールを参照してください。
warnif count > 0
from m in Methods
where m.CyclomaticComplexity > 20 &&
m.WasAdded() || m.CodeWasChanged()
select new { m, m.CyclomaticComplexity }
最後に、NDepend コード ルールを使用すると、生成された HTML+javascript レポートで、Visual Studioとビルド プロセス時にライブで検証できることに注意してください。