Какие инструменты статического анализа доступны для С#?

Какие инструменты доступны для статического анализа с кодом С#? Я знаю о FxCop и StyleCop. Есть ли другие? Раньше я сталкивался с NStatic, но он был в разработке для того, что кажется навсегда - он выглядит довольно скользким от того, что я мало видел из этого, так что было бы хорошо, если бы он когда-либо видел свет дня.

Вдоль этих же строк (это прежде всего мой интерес к статическому анализу), инструменты для тестирования кода для многопоточности (тупики, условия гонки и т.д.) также кажутся немного скудными. Typemock Racer только что появился, поэтому я буду смотреть на это. Что-нибудь кроме этого?

Оценены реальные мнения о инструментах, которые вы использовали.

Ответ 1

Инструменты обнаружения нарушения кода:

  • Fxcop, отличный инструмент от Microsoft. Проверьте соответствие .net Framework руководствам.

    Изменить октябрь 2010 года: больше не доступен в качестве отдельной загрузки. Теперь он включен в Windows SDK и после установки может быть найден в Program Files\Microsoft SDKs\Windows\[v7.1]\Bin\FXCop\FxCopSetup.exe

    Редактировать февраль 2018 года. Эта функциональность теперь интегрирована в Visual Studio 2012 и более поздних версиях как Анализ кода.

  • Clocksharp, основанный на анализе исходного кода (до С# 2.0)
  • Mono.Gendarme, похожий на Fxcop, но с лицензией с открытым исходным кодом (на основе Mono.Cecil)
  • Smokey, похожий на Fxcop и Gendarme, основан на Mono.Cecil. Больше не в разработке, основной разработчик теперь работает с командой Жандарма.
  • Coverity Prevent ™ для С#, коммерческий продукт
  • PRQA QA · С#, коммерческий продукт
  • PVS-Studio, коммерческий продукт
  • CAT.NET, надстройка для Visual Studio, которая помогает выявить недостатки безопасности
  • CodeIt.Right
  • SpeС#
  • Pex

Метрические инструменты качества:

  • NDepend, отличный визуальный инструмент. Полезно для метрик кода, правил, различий, связей и исследований зависимостей.
  • Nitriq, бесплатно, может легко написать свои собственные метрики/ограничения, хорошие визуализации. Редактировать февраль 2018 года: ссылки на скачивание теперь неактивны. Изменить 17 июня 2019 года: ссылки не умерли.
  • RSM Squared, основанный на анализе исходного кода
  • Метрики С#, используя полный анализ С#
  • SourceMonitor, старый инструмент, который иногда получает обновления
  • Code Metrics, надстройка Reflector
  • Vil, старый инструмент, который не поддерживает .NET 2.0. Изменить январь 2018 года: ссылка теперь не работает

Проверка инструментов стиля:

  • StyleCop, инструмент Microsoft (запускается из Visual Studio или интегрируется в проект MSBuild). Также доступно как расширение для Visual Studio 2015 и С# 6.0
  • Агент Смит, плагин проверки стиля кода для ReSharper

Обнаружение дублирования:

  • Simian, на основе исходного кода. Работает с множеством языков.
  • CloneDR, обнаруживает параметризованные клоны только на границах языка (также обрабатывает многие языки, кроме С#)
  • Детектив-клон плагин для Visual Studio. (Он использует ConQAT внутри)
  • Atomiq, на основе исходного кода, много языков, классная визуализация "колеса"

Общие инструменты рефакторинга

  • ReSharper - отличные возможности анализа и рефакторинга кода на С#

Ответ 2

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

С помощью NDepend можно написать Правило кода над запросами LINQ (что мы называем CQLinq). По умолчанию предлагается 200 правил кода CQLinq. Сила CQLinq заключается в том, что написать правило кода прямо и немедленно получить результаты. Предлагаются средства для просмотра согласованных элементов кода. Например:

CQLinq code rule

Кроме того, NDepend поставляется со многими другими статическими аналитиками, такими как функции. К ним относятся:

Ответ 3

  • Gendarme - это статический анализатор с открытым исходным кодом (похожий на FXCop, но находит много разных проблем).
  • Clone Detective - хороший плагин для Visual Studio, который находит дубликат кода.
  • Также, говоря о Mono, я нахожу акт компиляции с компилятором Mono (если ваш код достаточно независим от платформы, для достижения цели, к которой вы, возможно, захотите стремиться) найдет множество неперечисленных переменных и других предупреждений, которые Visual Студия полностью пропускает (даже если уровень предупреждения установлен на 4).

Ответ 4

Вы видели CAT.NET?

Из рекламного блока -

CAT.NET - инструмент для анализа двоичного кода что помогает идентифицировать общие варианты некоторые преобладающие уязвимости что может привести к общей атаке векторы, такие как межсайтовый скриптинг (XSS), SQL Injection и XPath Инъекции.

Я использовал раннюю бета-версию, и, похоже, это несколько вещей, на которые стоит обратить внимание.

Ответ 5

Помимо превосходного списка от madgnome, я бы добавил дубликат кода, который основан на командной строке (но свободен):

http://sourceforge.net/projects/duplo/

Ответ 7

Axivion Bauhaus Suite - это инструмент статического анализа, который работает с С# (а также C, С++ и Java).

Он предоставляет следующие возможности:

  • Визуализация архитектуры программного обеспечения (включение зависимостей)
  • Исполнение архитектурных правил, например. слоирование, подсистемы, правила вызова.
  • Обнаружение клонов - выделение копии и вставки (и измененного кода)
  • Обнаружение мертвого кода
  • Обнаружение цикла
  • Показатели программного обеспечения
  • Проверка стиля кода

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

Ответ 8

Klocwork имеет инструмент статического анализа для С#: http://www.klocwork.com

Ответ 9

Программное обеспечение Optimyth только что запустило службу статического анализа в облаке www.checkinginthecloud.com. Просто надежно загрузите свой код, запустите анализ и получите результаты. Нет проблем.

Он поддерживает несколько языков, включая С#, более подробную информацию можно найти на wwww.optimyth.com