2010-05-27 3 views
4

Мы используем FxCop и генерируем слишком много ложных срабатываний по нашему вкусу. Например, если частный метод вызывается с использованием отражения, то этот метод сообщается как потенциально неиспользуемый - понятный, и мы подавляем это предупреждение явно, используя атрибут SuppressMessage. Тем не менее, FxCop сообщает о том же предупреждении для методов, вызванных этим методом, о которых мы уже подавили предупреждения. Это глупо и создает слишком много шума.Слишком много ложных срабатываний при использовании FxCop

Имеются также ложные отчеты о переменных-членах, используемых в этих методах. Кроме того, есть проблемы с родовыми типами (я даже видел что-то об этом в MS connect).

В любом случае, мне интересно, знает ли кто-нибудь о том, собирается ли Microsoft обновить FxCop, потому что он, кажется, застрял в версии 1.36 в течение длительного времени.

BTW, я не использую StyleCop, потому что это слишком придирчивый, и у нас просто нет времени, чтобы изучить все сообщения zillion, чтобы подавить их все. Кроме того, отчет StyleCop, похоже, дополняет, а не заменяет FxCop.

Может быть, кто-нибудь может предложить хорошую альтернативу FxCop?

Мы используем VS2008 pro.

Спасибо.

+0

StyleCop существует для другой цели, чем FxCop, поэтому это не актуально. – AakashM

ответ

0

Visual Studio теперь поставляется с анализом кода вместо - встроенный FXCop:

Microsoft Visual Studio 2005 и Visual Studio 2008 Team System Editions развития и включают "Анализ кода", который основан на FxCop.

Вы можете написать custom rules в FXCop, если он не сделает то, что вы хотите.

4

Посмотрите на Gendarme, это очень похоже на fxCop, но из проекта Mono.

Жандарм - это расширяемый инструмент, основанный на правилах, для поиска проблем в приложениях и библиотеках .NET. Жандарм проверяет программы и библиотеки, содержащие код в формате ECMA CIL (Mono и .NET) и ищет общие проблемы с кодом, проблемы, которые компилятор обычно не проверяет или не проверял исторически. - http://www.mono-project.com/Gendarme

0

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

Для чего это необходимо, FxCop team are working on an update. Я предполагаю, что это займет время, так как используется new code analysis engine.

+0

Спасибо. Мы отключили многие правила, но я не хочу отключать правило, указывающее на неиспользуемый частный код. Однако это правило, которое также имеет наибольшее количество ложных срабатываний. – mark

+0

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

1

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

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

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

Чтобы сохранить количество ложных срабатываний низкая, с CQLinq вы также можете сосредоточиться правила приводят только код, добавленный или код рефакторинга, так как определенный baseline in the past. Смотрите правила, которые обнаруживают методы слишком сложно, добавлены или рефакторинг с базовой линии:

warnif count > 0 
from m in Methods 
where m.CyclomaticComplexity > 20 && 
     m.WasAdded() || m.CodeWasChanged() 
select new { m, m.CyclomaticComplexity } 

Наконец, обратите внимание, что с правилами кода NDepend могут быть проверены live in Visual Studio и при построении времени процесса, в generated HTML+javascript report.

+0

Интересно. Я должен найти время, чтобы исследовать его. – mark