Вы когда-нибудь сравнивали инструменты статического анализа Klocwork и Findbugs?

Мы используем Klocwork как инструмент статического анализа.

Klocwork - это коммерческий инструмент и имеет много преимуществ, но также имеет ограничения, такие как ложные срабатывания.

Интересно, кто когда-либо сравнивал Klocwork с другими инструментами с открытым исходным кодом, такими как Findbugs.

Как правило, коммерческие инструменты более надежны, чем инструменты с открытым исходным кодом.

Но я думаю, что Klocwork также имеет несколько надежных проблем в определенной бизнес-области, таких как Android.

Можете ли вы сказать, что Klocwork превосходит другие инструменты с открытым исходным кодом, особенно Findbugs в аспектах ложных срабатываний и ложных негативов?

Ответ 1

Несколько лет назад я провел сравнение между коммерческими и открытыми инструментами анализа статического кода (SCAT). Клоцворк был одним из них. Короче говоря, результатом было то, что в среде java коммерческие инструменты не предоставили (дополнительную) ценность, необходимую для обоснования их цены. В количестве найденных ошибок findbugs был намного лучше любого из этих инструментов. Только в покрытии обнаружены некоторые ошибки, которые не найдены ни у одного из других инструментов, и у них был самый низкий FPR. С другой стороны, обложка не обнаружила много ошибок, которые нашли findbugs - так что для нас все инструменты не оправдывали задействованные деньги. И если они настроены правильно, findbugs также обеспечивают очень низкий FPR. В более поздней версии обложка включала возможность интеграции findbugs в их решение. Mhhmmm, так почему они это сделали?: -)

Однако существуют сценарии, например. при использовании других языков программирования или сканирование межпрограммного языка (например, ваша кодовая база включает в себя другие языки программирования (например, C, С++, С#...)), или вам нужны некоторые дополнительные функции, предоставляемые этими инструментами, - тогда это может стоить в коммерческие инструменты. Но вы можете составить свой собственный разум, потому что каждое решение может быть проверено. Зайдите на их веб-страницу и загрузите/попросите пробную версию и попробуйте сами (возможно, в то же время все изменилось?).

Я проверил следующие инструменты:

Коммерческий:

OpenSource:

  • Findbugs
  • PMD
  • Checkstyle (хотя это не настоящий SCAT, а скорее как средство проверки стиля)

Итак, в конце концов, что мы сделали? Мы установили бесплатный сервер поддержки , который объединяет в себе множество инструментов, таких как findbugs, pmd, checkstyle, cobertura и т.п. Благодаря этому мы получили бесплатное решение, которое во многих аспектах лучше, чем доступные коммерческие инструменты. И если мне нужно будет отправиться на коммерческий маршрут, я бы, вероятно, внимательно посмотрел на покрытие (и никогда больше не смотрю на CAST).

[Обновление] Что касается вашего вопроса о производительности - findbugs способен сканировать огромные кодовые базы без проблем (если у вас возникли проблемы, отправьте его в список рассылки findbugs и они вам помогут). Я помню, что в то время findbugs также был одним из самых быстрых инструментов. Для покрытия, например, понадобилось почти 2 часа, чтобы закончить, тогда как findbugs было сделано менее чем за 10 минут. Другие инструменты, где между этими числами.

Что касается сканирования кода на C и С++, вы можете посмотреть Splint и cppcheck. Также есть некоторые другие полезные темы, обсуждающие эту тему. Но, как уже упоминалось, поскольку findbugs только для Java, и вы хотите обнаружить проблемы межпрограммного языка, коммерческие инструменты могут иметь преимущество. Итак, в конце концов, так как findbugs бесплатно - просто запустите его на своей кодовой базе и посмотрите, что происходит для вас - ваш проект может извлечь выгоду из этого!. Затем исправьте найденные ошибки, а затем выполните пробную версию с некоторыми коммерческих инструментов - и в зависимости от количества найденных ошибок и цены, которую вы заплатите, сделайте свой собственный вывод. Чтобы дать вам пример: один из инструментов стоит "Линии кода" /делится на 10 (в $). Но может быть, что в вашем случае вы получаете скидку; -)

[ОБНОВЛЕНИЕ II] Найден интересный магистерский тезис, обсуждающий эту тему. Основная часть - о findbugs, но в ней также упоминается klockwork и покрытие.