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

Этот вопрос на Cyclomatic Complexity заставил меня больше задуматься о статический анализ кода. Иногда бывает полезно анализировать сложность и непротиворечивость кода, и я бы хотел заняться этим больше. Какие инструменты вы рекомендуете (для каждого языка) для такого анализа? В Википедии есть большой список инструментов, но какие из них люди пробовали раньше?

Изменить: Как отмечает Дэвид, это не совсем незаданный вопрос, когда речь идет о Инструменты на основе C / UNIX.


person Community    schedule 21.08.2008    source источник


Ответы (13)


Я настраивал систему сборки Hudson с непрерывной интеграцией (CI) для моих проектов iPhone с Objective-C (приложения для iOS) и составил разнообразный список инструментов, которые можно использовать для анализа моих проектов во время сборки:

  • Статический анализатор Clang: бесплатный современный автономный инструмент, который выявляет больше проблем, чем версия Clang, включенная в Xcode 4. Активный проект. - посетите http://clang-analyzer.llvm.org

  • Doxygen: бесплатный инструмент для создания документации, который также создает диаграммы зависимостей классов. Активный проект - посетите http://www.doxygen.nl.

  • HFCCA (цикломатический анализатор сложности без заголовков): бесплатный скрипт Python для расчета сложности кода, но без файлов заголовков и препроцессоров. Поддерживает вывод в формате XML для сборок Hudson / Jenkins. Активный проект. - посетите http://code.google.com/p/headerfile-free-cyclomatic-complexity-analyzer

  • CLOC (счетчик строк кода): бесплатный инструмент для подсчета файлов, строк кода, комментариев и пустых строк. Поддерживает различие, поэтому вы можете видеть различия между сборками. Активный проект. - посетите http://cloc.sourceforge.net.

  • SLOCcount (количество строк исходного кода): бесплатный инструмент для подсчета строк кода и оценки затрат и времени, связанных с проектом. Не выглядит активным. - посетите http://sourceforge.net/projects/sloccount и http://www.dwheeler.com/sloccount

  • AnalysisTool: бесплатный инструмент для анализа кода, который измеряет сложность кода, а также создает диаграммы зависимостей. Не активен. Кажется, не работает с Xcode 4, но я бы хотел, чтобы он работал. - посетите http://www.karppinen.fi/analysistool.

person Community    schedule 13.05.2011

Для C и Objective-C вы также можете использовать LLVM / Clang Статический анализатор.

Он с открытым исходным кодом и находится в активной разработке.

person Chris Hanson    schedule 23.08.2008

Для .Net мы используем NDepend. Это отличный инструмент, который можно интегрировать в сборку (мы используем CCNet).

http://www.ndepend.com/

HTH.

person BZ.    schedule 21.08.2008

Для C ++ я использую CppCheck. Вроде нормально работает.

person Community    schedule 26.04.2010

Я часто использую плагин PMD для Eclipse. Это довольно мило и легко настраивается. CheckStyle также хорош, если вам нужен более строгий стиль.

person TimK    schedule 21.08.2008

Checkstyle, Findbugs и PMD хорошо работают на Java. В настоящее время я очень доволен работой PMD в NetBeans. У него довольно простой графический интерфейс для управления тем, какие правила вы хотите запускать. Также очень легко запустить средство проверки для одного файла, всего пакета или всего проекта.

person Bill the Lizard    schedule 21.08.2008

Очевидно, что ответ зависит от языков программирования. UNO подходит для программ на языке C.

@ Томас Оуэнс: Думаю, вы имели в виду Сплинт.

person Chris Conway    schedule 21.08.2008

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

person Craig H    schedule 21.08.2008

Мы используем Coverity Prevent в Palm для анализа кода C и C ++, и он отлично справился с обнаружением некоторых скрытых ошибки в нашем коде. Он также находит множество проблем, которые вряд ли будут обнаружены, но их легко пометить как «не исправит» или «не проблема» в базе данных кода, которую генерирует инструмент. Это дорого, но компания иногда работает над проектами с открытым исходным кодом и предоставляет отчеты сопровождающим. Если вы хотите, у них есть технический документ об использовании нами продукта. чтобы узнать больше о нашем опыте.

person Ben Combee    schedule 30.09.2008

Мои админы действительно дешевы, поэтому я могу использовать только действительно дешевые инструменты:

1) CCCC (счетчик кода C / C ++): различные результаты, связанные с количеством строк (по сравнению со строками комментариев, цикломатической сложностью, информационным потоком, ...) 2) Semian: самый быстрый поисковик дублирования кода, который я когда-либо пробовал. 3) LOC Metrix: не очень полезен, но может помочь выявить точку зрения.

person Community    schedule 26.04.2010

Мы используем QAC от Programming Research для нашего кода C. Работает нормально.

Недавно мы говорили о проверке некоторых из более продвинутых и статических / динамических анализаторов кода, таких как Prevent или инструмент анализа от GrammaTech.

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

person cschol    schedule 23.08.2008

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

person Thomas Owens    schedule 21.08.2008

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

Однако для быстрого ответа вот мои фавориты для каждого языка:

person Community    schedule 06.05.2011
comment
Спасибо, Эндрю, я не знал CodePro. Вроде здорово! - person alcor; 14.03.2013