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

StackOverflow https://stackoverflow.com/questions/27009

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

Есть еще какие-нибудь идеи?

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

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

Чтобы снизить количество ложноположительных срабатываний, CQLinq предлагает уникальные возможности для определения набора JustMyCode ( просто код) с помощью специальных кодовых запросов с префиксом нотмикод.Более подробные пояснения об этой функции можно найти здесь здесь.Вот, например, два нотмикод запросы по умолчанию:

Чтобы снизить количество ложноположительных срабатываний, с помощью 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top