Есть ли Findbugs и / или PMD-эквивалент для C / C ++? - PullRequest
18 голосов
/ 16 сентября 2009

Недавно меня спросили об альтернативах Coverity Prevent для кодовой базы, включающей в себя C / C ++ и Java. Очевидно, что на стороне Java бесплатные инструменты включают Findbugs (анализ скомпилированного кода) и PMD (статический анализ кода). Они очень мощные, особенно когда вы начинаете исследовать интеграцию с IDE (которые, опять же, бесплатны).

Однако, когда вы начинаете переходить в область C / C ++ с различными компиляторами, архитектурами и т. Д., Все становится рискованно

Я предложил множество инструментов для Java, включая Findbugs и PMD. То, что я ищу, является лучшим вариантом для стороны C / C ++, когда рассматривается использование следующих метрик:

  1. Цена: бесплатно лучше, но лучше можно выиграть. Однако модели ценообразования, которые взимают плату за строку кода, ужасны.
  2. Набор функций: как этот инструмент делает мою жизнь лучше? Каким образом он обнаруживает мои ошибки до того, как я их проверю, до того, как мы отправим код и т. Д .?
  3. Удобство использования: могу ли я использовать инструмент на своем столе? Могу ли я поделиться отчетами и / или результатами? Могу ли я интегрировать инструмент с Fogbugz (который мы используем в моей группе)? Могу ли я интегрировать инструмент в CruiseControl (или аналогичный)?

Идеальный инструмент - это то, что будет таким же полезным и удобным, как комбинация Findbugs и PMD с идентичным набором функций, все за ноль долларов за место.

Ответы [ 5 ]

3 голосов
/ 02 декабря 2009

PC-Lint - это путь. В отличие от большинства других инструментов, он имеет полное межфункциональное и межмодульное отслеживание значений, а также поддерживает все волосатые края компиляции / разбора шаблонов. Я купил личную копию для себя около 9 лет назад, просто потому что это так дешево. Я часто использовал его в проектах с открытым исходным кодом. PC-Lint не лицензируется на основе LOC, не звонит домой, и нет сервера лицензий. Это очень много о системе чести и очень много глупостей. За 9 лет я обнаружил в нем некоторые проблемы (а их было немного и далеко), но они почти всегда решались в течение нескольких недель.

Мудро с открытым исходным кодом, есть SMatch, основанный на методах анализа мета-компиляции Coverity, который винный проект использует довольно сильно для большого эффекта. Подинструмент PMD cpd (copy Paste Detector) работает на C ++ и работает очень быстро. Для цикломатической сложности есть pmccabe, который легко установить через apt-get (в Linux; в Windows я скомпилирую исходный код в cygwin).

PC-Lint действительно требуется некоторая конфигурация, чтобы она работала хорошо, максимум день или два. Другие инструменты работают не так глубоко, так что вы можете просто взяться за дело, выполнив команду, подобную «find. -Name .c | xargs pmccabe | sort -n | tail -n 20»

3 голосов
/ 16 сентября 2009

C ++ - достаточно сложный язык, поэтому инструменты для него (такие как инструменты рефакторинга или статического анализа) не так хороши, как Java или C #.

Gimpel Software's PC-lint - самая близкая вещь к стандартному инструменту проверки ошибок для C ++, о котором я знаю. Он коммерческий с разумной ценовой моделью. Я не знаю, насколько хорошо он интегрируется с другими инструментами.

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

3 голосов
/ 16 сентября 2009

На ум приходят Splint для C и Cppcheck для C ++.

Если вы хотите найти больше опций, эта функция этих инструментов - «статический анализ кода». Это может помочь вам найти больше инструментов для C и / или C ++. Также вас может заинтересовать ответ на вопрос «Какие инструменты статического анализа с открытым исходным кодом C ++ доступны?»

0 голосов
/ 05 октября 2013

Я использую flawfinder.py, который сканирует 160 опасных функций в C / C ++. http://www.dwheeler.com/flawfinder/

Если вам нужен порт ruby ​​на основе flawfinder, вы можете использовать vulnxpose.rb. https://github.com/nanotechz9l/Source-code-analyzer

Оба эти инструмента сканируют файлы исходного кода C / C ++ на наличие известных уязвимостей, включая переполнение буфера, состояние гонки, слабую криптографию, настройки chroot-тюрьмы ... и многое другое).

Rick

0 голосов
/ 16 сентября 2009

Я использовал Klocwork и Rational Software Analyzer в прошлом, и они оба работают хорошо, хотя оба являются коммерческими / несвободными.

...