Какие правила FxCop «должны следовать» для любого разработчика на C #? - PullRequest
28 голосов
/ 27 сентября 2008

Я планирую начать использовать FxCop в одном из наших текущих проектов. Но, когда я попробовал выбрать все доступные правила, похоже, мне нужно было внести много изменений в мой код. Будучи «членом команды», я не могу сразу начать вносить эти изменения, такие как изменение соглашения об именах и т. Д. В любом случае, я хотел бы начать использовать FxCop с минимальным набором правил и постепенно увеличивать набор правил по мере продвижения. Можете ли вы предложить мне некоторые должны иметь правила FxCop, которые я должен начать следовать. Или вы предлагаете лучший подход?

Примечание: большая часть моего кода написана на C #.

Ответы [ 10 ]

12 голосов
/ 27 сентября 2008

На наш самый важный код:

  • Обрабатывать предупреждения как ошибки (уровень 4)
  • FxCop должен пройти 100% (обычно игнорирование не допускается)
  • Жандарм используется в качестве ориентира (иногда конфликтует с FxCop)

Хотите верьте, хотите нет, FxCop очень многому научит вас, как писать лучший код ... отличный инструмент! Поэтому для нас все правила одинаково важны.

8 голосов
/ 27 сентября 2008

На мой взгляд, сделайте следующее:

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

  • Глобализация
  • Interoperability
  • Безопасность
  • Производительность
  • Портативность

Так как это, как правило, лишь несколько нарушений правил в существующем проекте по сравнению с другими категориями, но это может улучшить качество вашего приложения. Когда эти правила ясны, попробуйте исправить следующие категории:

  • Дизайн
  • Использование

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

Всегда сортируйте нарушения по уровням / категориям исправлений и начинайте с критических. Пропустите предупреждения на данный момент.

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

4 голосов
/ 27 января 2010

Некоторые из правил позволяют избежать ошибок или утечек:

  • Не перехватывать общие типы исключений (может быть для нас лучшим правилом. В зависимости от ситуации это может быть легко или сложно применять)
  • Проверка на NaN правильно (легко применить)
  • Одноразовые поля должны быть утилизированы (достаточно легко применять)
  • Dispose должен вызывать базовый dispose (довольно легко реализовать)
  • В одноразовых типах должен быть объявлен финализатор (довольно легко применять)

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

  • Свойства коллекции должны быть доступны только для чтения (в нашем случае это сложно реализовать)
  • Не выставлять общий список
  • член не должен выставлять определенные конкретные типы
  • Просмотр используемых параметров (Легко улучшает ваш API)

Кто-то в нашем проекте попробовал правила производительности без каких-либо улучшений. (На самом деле, эти правила касаются микрооптимизации, которая не дает результата, если идентификация узкого места показывает, что микрооптимизация необходима). Я бы предложил , а не , начиная с этих.

2 голосов
/ 14 декабря 2010

Минимальный fxcop, а также анализ кода (при использовании VS2010 Premium или Ultimate): http://msdn.microsoft.com/en-us/library/dd264893.aspx

2 голосов
/ 18 декабря 2008

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

2 голосов
/ 18 декабря 2008

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

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

NDepend перекрывается с FxCop для некоторых правил кода, но предлагает множество уникальных правил кода. Вот несколько правил, которые я бы классифицировал как must-follow :

Обратите внимание, что правила можно проверить в реальном времени в Visual Studio и во время процесса сборки в сгенерированном отчете HTML + javascript .

1 голос
/ 28 сентября 2008

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

Мы также написали пользовательское правило для глобализации, чтобы заменить существующее, потому что мы не хотели глобализировать строки, передаваемые в исключения.

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

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

1 голос
/ 27 сентября 2008

Мы - интернет-магазин, поэтому мы отказываемся от следующих правил:

  • Что-нибудь с Interop (мы не поддерживаем интеграцию COM, если клиент не платит за это!)
  • Подписание ключа (веб-приложения не должны требовать высокой степени безопасности)

В некоторых случаях мы откажемся от правила использования более высоких платформ в зависимостях, поскольку некоторые из наших CMS по-прежнему являются .NET 2.0, но это не означает, что уровни DAL / Business Layers не могут быть .NET 3.5 до тех пор, пока вы ' мы не пытаемся вернуть IQueryable (или что-нибудь еще .NET 3, 3.5).

0 голосов
/ 27 сентября 2008

Я полностью согласен со Sklivvz. Но для существующих проектов вы можете очистить категорию нарушений FxCop по категориям.

Время от времени Жандарм принимает новые правила, которые весьма полезны. Таким образом, вы можете использовать жандарм помимо этого.

0 голосов
/ 27 сентября 2008

Дизайн и правила безопасности - хорошее место для начала.

...