Инструменты для анализа С++ codebase

Какие инструменты были бы наиболее полезны для анализа кодовой базы С++? Что они стоят?
Можем ли мы справиться со свободным и пробным программным обеспечением, или есть коммерческое программное обеспечение, которое хорошо и что мы действительно должны платить?

Основным объектом будет понимание проблем качества - памяти и т.д., а также для понимания кода (например, для определения архитектурных проблем), возможно, стандартов кодирования.

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

Ответ 1

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

Visual С++ построил в Code Analysis, который хорош для обнаружения некоторых ошибок и неправильного использования API Win32, но он не включен в бесплатную версию и (очевидно) зависит от Windows. Это был внутренний инструмент Microsoft под названием Prefast - аналогичный FxCop в .Net.

PC-Lint - это хорошо, но многословно и не бесплатно. Если вы можете получить файл конфигурации, чтобы поймать "полезные вещи" и игнорировать шум, это будет большим плюсом. Опять же, это для Windows, но я знаю, что есть версии для других платформ.

Ответ 3

Я слышал очень хорошие вещи о Valgrind. "автоматически обнаруживает множество ошибок в управлении памятью и потоками и подробно описывает ваши программы"

Ответ 4

Во втором номере программы дублирование кода. Вы можете использовать детектор клонов для поиска дубликатов. Многие детекторы клонов сравнивают только текстовые строки для точных совпадений; другие сравнивают потоки токенов и найдут почти точные совпадения, в которых различия просто изменены идентификаторами. Вы можете использовать CloneDR, чтобы найти дублирование, в котором вставляются или удаляются произвольные структуры langauge, используя грамматику langauge в качестве руководства. CloneDR работает на больших С++-системах, а также на многих других языках. По ссылке вы можете найти типичные отчеты об обнаружении клонов.

Популярная статическая проверка с широким спектром PCLint. Это проверяет множество распространенных ошибок кодирования, предопределенных инструментом. Я не знаю, насколько хорошо он обрабатывает "тайные" (компиляторы) диалекты С++.

Если вы хотите определить пользовательские проверки, вам понадобится полный парсинг переднего конца С++ и возможность произвольно настраивать ваши проверки. Наш DMS Software Reengineering Toolkit - это механизм, который можно настроить для этого. DMS С++ front end может быть настроен для обработки "тайных" диалектов С++, но уже охватывает ANSI, GCC3 и GCC4, MS Visual Studio 7 и 2005. Поскольку DMS является механизмом преобразования программ, его можно даже использовать для "улучшения" кода качество, заменив плохие конструкции лучшими.

В то время как не статический анализ, test coverage инструменты для измерения того, насколько хорошо вы протестировали ваш код, очень полезны при оценке качества кода. Просто потому, что все ваши тесты проходят, не означает, что вы хорошо протестировали; неисследованный код, возможно, может иметь любые/всевозможные проблемы.

Ответ 5

Theres CCCC: http://cccc.sourceforge.net/ - результат исследовательского проекта по метрикам.

Честно говоря, я не нашел большой пользы в таких вещах. Что вы надеетесь получить?

Ответ 6

Вы можете попробовать Vigilant Sentry, который анализирует C и С++ и ищет дополнительные ошибки в вашем программном обеспечении. Это включает утечку памяти или ресурсов, а также сбои, вызывающие повреждение памяти, между прочим.

Издание для малого бизнеса в настоящее время составляет всего 795 долларов (что является самым дешевым на рынке по стоимости), а предприятие составляет 4995 долларов США. Удачи вам в том, что вам нужно.