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