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

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

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

14 ответов

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

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

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

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

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

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

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

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

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

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

http://www.ndepend.com/

НТН.

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

Также см. Вопрос " Выбор инструмента статического анализа кода", если вы ищете инструменты на основе C/UNIX.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам