Чем отличаются такие инструменты, как clang-tidy или cppcheck, от klocwork?

Есть ли принципиальная разница между этими инструментами? В конце концов, klocwork относительно дорог, а остальные бесплатны? Оба выполняют статический анализ кода по некоторым правилам.

Есть ли различия в качестве правил? Это зависит только от правил? Каков ваш опыт?


person Christian    schedule 12.07.2019    source источник


Ответы (4)


Вы получаете то, за что платите, как в глубине проверки, так и в отслеживании дефектов и подавлении ложных срабатываний. cppcheck и статический анализатор Clang заслуживают внимания и находят разумное количество неглубоких, но серьезных ошибок даже в хорошей кодовой базе. (Сначала мы запускаем анализатор Clang с максимально развернутым файлом настроек с помощью https://github.com/jonreid/XcodeWarnings. cppcheck иногда находит некоторые пропущенные им ошибки, но похожие по характеру.)

Klocwork и его конкурент Coverity находят гораздо более глубокие ошибки в C/C++, иногда поражающие своей глубиной анализа. Однако компания Coverity была перенята и за последнее десятилетие мало продвинулась в своих средствах проверки C/C++; но они все еще стоят того, чтобы их запускать. (Их средства проверки JVM — нет.) В последнее время я не использовал Klocwork, но они также перестали быть независимыми. (Подробности см. в моей статье доктора Доббса, http://www.drdobbs.com/testing/deploying-static-analysis/240003801)

(pablo285, и у Klocwork, и у Coverity есть хорошо задокументированные API, позволяющие вам писать свои собственные средства проверки.)

person Flash Sheridan    schedule 13.07.2019
comment
Спасибо за указание на это, я исправил свою ошибку соответственно. Кстати. комментирование моего сообщения или предложение редактирования было бы более подходящим местом для предложения исправления, чем размещение его в вашем ответе. В любом случае, хороший ответ, голосование. - person pablo285; 15.07.2019
comment
Klockwork захватил Coverity? Вы проверили магический квадрант для статического анализа. Coverity (Synopsys) в топе, остальные далеко позади, а Klockwork даже не упоминается. microfocus.com/en-us/ активы/безопасность/ - person qsp; 21.01.2021
comment
› «Klockwork захватил Coverity?» Нет. › «Вы проверили магический квадрант на предмет статического анализа?» Нет, Gartner вообще не впечатляет в этой области. › «Заводной механизм даже не упоминается». Так же. - person Flash Sheridan; 22.01.2021

В LLVM есть инструмент для статического анализа под названием статический анализатор Clang.

Статический анализатор Clang и cppcheck имеют открытый исходный код (позволяет вам писать свои собственные проверки/модифицировать существующие), а klockwork является проприетарным (имеет API для написания собственных проверок).

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

Clang-tidy немного отличается, он называет себя инструментом «линтера», и хотя его можно использовать для статического анализа, он также обеспечивает автоматическое исправление некоторых дефектов, которые он может найти. Внутренне clang-tidy использует абстрактное синтаксическое дерево для представления вашего кода. Чтобы построить этот AST, код должен быть компилируемым с помощью clang, что может быть (возможно, серьезным) недостатком в некоторых кодовых базах.

Список проверок clang-tidy, обеспечивающих автоматические исправления, см. в этом ответе.

person pablo285    schedule 12.07.2019

Я считаю, что движок clang-tidy или cppcheck выполняет построчный анализ. Механизм Klocwork, с другой стороны, выполняет межпроцедурный анализ. Klocwork также может обнаруживать проблемы, связанные с файлами, а также то, что не может обнаружить большинство других инструментов. Klocwork очень эффективен в обнаружении критических обнаружений, таких как утечка памяти, переполнение буфера, исключения NULL, блокировка, проблемы с параллелизмом и т. д.,

мы оценили несколько анализаторов статического кода и остановились на Klocwork.

Я расскажу вам, почему мы выбрали Klocwork, а не любые другие инструменты SCA,

  1. Количество чекеров для обнаружения возможных уязвимостей. Klocwork имеет более 1000+ средств проверки для обнаружения дефектов/проблем кодирования.
  2. Klocwork может работать на рабочем столе разработчика. Таким образом, это избавляет от ошибок кода во время разработки. (Он также имеет возможность пост-регистрации)
  3. klocwork имеет прямой подключаемый модуль, доступный для Visual Studio, Eclipse, Intellij IDEA, Wind River, CCS и IDE на основе Eclipse. У Klocwork также есть собственная IDE. (Если вы используете какие-либо другие IDE, кроме тех, которые поддерживает плагин Klocwork, вы можете использовать Klocwork IDE. Klocwork IDE может работать с любым редактором или IDE, которые у вас есть)
  4. Klocwork поддерживает проверку почти всех отраслевых стандартов, таких как Misra, Autosar, CERT, CWE, DISA-STIG, OWASP и т. д.,
  5. Вы можете написать свои собственные средства проверки в Klocwork, чтобы поддерживать/проверять свои внутренние правила кодирования.
  6. Эффективность в поиске проблем с уязвимостями.
  7. Отчетность и показатели (более 100 форматов отчетов и более 400 показателей)
  8. Фильтрация проблем — удаление стороннего кода в отчете, создание отчета модуля, отчета команды и т. д.,
  9. Быстрота — несмотря на то, что они создают AST на основе ваших собственных настроек сборки, движок Klocwork работает быстро и эффективно.
  10. Автоматика – Автоматизация – Автоматизация. Сборка Klocwork может быть автоматизирована, поскольку у нее есть богатые инструменты командной строки. Кроме того, у Klocwork есть прямой плагин для Jenkins и Teamcity.
  11. Простое развертывание — архитектура клиент-сервер
  12. Документация – Документация и демонстрационные видеоролики Klocwork доступны онлайн (открыто). Вы просто открываете Google и говорите «Список средств проверки Klocwork C и C++», и вы получите список средств проверки Klocwork с надлежащим объяснением.
  13. Поддержка – служба поддержки Klocwork очень удобна в использовании.
  14. Лицензирование – Простое лицензирование. Никаких скрытых платежей.

Я бы сказал, возьмите бесплатную оценку Klocwork и протестируйте ее на своем проекте. Я уверен, вам понравится.

person Tamil Selvan    schedule 13.06.2020

да, есть принципиальная разница между clang-tidy или cppcheck по сравнению с klocwork.

Оболочка Klocwork будет следить за вашей сборкой и создавать файл спецификации сборки на основе настроек сборки вашего имени компилятора, включая настраиваемые системные вызовы. используя этот файл спецификации сборки, Klocwork выполняет межпроцедурный анализ и создает абстрактный синтаксис 3 в бэкенде. тогда он попытается покрыть 100% кода и 100% пути. Так анализ Klocwork будет более точным и сможет выявить настоящие дефекты в коде.

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

person Sivanesh Waran    schedule 26.10.2020