Как реализовать FxCop / статический анализ на базе существующего кода

Какие стратегии используются при реализации FxCop / статического анализа на существующих кодах с существующими нарушениями? Как наиболее эффективно уменьшить нарушения статического анализа?

4 ответа

Решение

Начните с либерального использования атрибута [SuppressMessage]. По крайней мере, в начале. Как только вы получите счетчик до 0 с помощью атрибута, вы добавите правило, что новые проверки не могут представлять нарушения FxCop.

Visual Studio 2008 имеет замечательную функцию анализа кода, которая позволяет вам гарантировать, что анализ кода выполняется при каждой сборке, и вы можете рассматривать предупреждения как ошибки. Это может немного замедлить работу, поэтому я рекомендую настроить сервер непрерывной интеграции (например, CruiseControl.NET) и запускать анализ кода при каждой регистрации.

Как только вы получите контроль и не будете вводить новые нарушения при каждой регистрации, начните обрабатывать целые классы нарушений FxCop за один раз с целью удаления использованных атрибутов SuppressMessageAttributes.

Чтобы отслеживать, какие из них вы действительно хотите сохранить, всегда добавляйте значение Justification к тем, которые вы действительно хотите подавить.

Перепишите свой код в мимолетном стиле!

Серьезно, в старой кодовой базе будут сотни ошибок, но именно поэтому у нас есть начинающие / интерновые программисты. Исправление нарушений FxCop - отличный способ получить представление о базе кода, а также научиться писать соответствующий код.NET.

Так что просто укусите пулю, выпейте много кофеина и просто переживите это за пару дней!

NDepend выглядит так, как будто он может делать то, что вам нужно, но я не уверен, может ли он быть интегрирован в автоматизированную сборку CruiseControl.Net, и не удастся выполнить сборку, если код не соответствует требованиям (именно это я и сделал). Я бы хотел, чтобы это случилось.

Есть другие идеи?

Альтернативой FxCop было бы использование инструмента NDepend. Этот инструмент позволяет писать правила кода для запросов C# LINQ (что мы называем CQLinq). Отказ от ответственности: я являюсь одним из разработчиков инструмента

По умолчанию предлагается более 200 правил кода. Настроить существующие правила или создать свои собственные правила просто благодаря хорошо известному синтаксису C# LINQ.

Чтобы сохранить количество ложных срабатываний на низком уровне, CQLinq предлагает уникальные возможности для определения, что такое набор JustMyCode, с помощью специальных запросов кода с префиксом notmycode. Больше объяснений об этой функции можно найти здесь. Вот, например, два запроса по умолчанию для 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.

Другие вопросы по тегам