Сравнение анализаторов кода: CppCat, Cppcheck, PVS-Studio, Visual Studio

Андрей Карпов
Статей: 374



К сожалению, мы больше не развиваем и не поддерживаем проект CppCat. Вы можете почитать здесь о причинах.

Мы провели подробное сравнение четырёх анализаторов Си/Си++ кода: CppCat, Cppcheck, PVS-Studio и статический анализатор, встроенный в Visual Studio 2013. Это серьезное исследование, на которое нами было потрачено около 170 человеко-часов и которое, на наш взгляд, хорошо отражает картину, существующую на данный момент.

Picture 1

О сравнении

Для исследования было проверено более десяти open-source проектов.

Был выставлен рекомендуемый уровень подробности диагностических сообщений:

  • CppCat: все диагностики (нет уровней);
  • Cppcheck: Errors и Warnings;
  • PVS-Studio: 1 и 2 уровень диагностик общего назначения;
  • Visual Studio: Microsoft Native Recommended Rules.

В результате, были получены отчёты, которые мы внимательно проанализировали. Были выбраны те сообщения, которые, по нашему мнению, указывают на ошибки в коде или в любом случае заслуживают пристального внимания. Результаты были обобщены и представлены в этой статье.

Подробно методология сравнения описана в статье: "Как мы сравнивали анализаторы кода CppCat, Cppcheck, PVS-Studio, Visual Studio". В ней же можно будет найти названия проверенных проектов, какие именно диагностические сообщения были выбраны, примеры найденных ошибок и так далее. Там же описана причина, почему не удалось указать информацию о количестве ложных срабатываний.

Результаты сравнения

Результаты сравнения анализаторов CppCat, Cppcheck, PVS-Studio и Visual Studio представлены в следующих трех таблицах:

Таблица 1 – Количество обнаруженных реальных проблем, в штуках

Таблица 1 – Количество обнаруженных реальных проблем, в штуках

Таблица 2 – Количество обнаруженных реальных проблем, в процентах

Таблица 2 – Количество обнаруженных реальных проблем, в процентах

Таблица 3 – Время работы анализаторов, в минутах

Таблица 3 – Время работы анализаторов, в минутах

Время

Мы не считаем время анализа существенным параметром сравнения. Но про скорость работы регулярно задают вопросы, поэтому мы включили замеры времени в эту статью.

Как видно, наиболее быстрым является Cppcheck. Но следует учитывать, что это суммарное время. На отдельных проектах, другие анализаторы работают быстрее, чем Cppcheck. Всё зависит от проекта.

CppCat работает на самом деле чуть-чуть быстрее, чем PVS-Studio, так как осуществляет меньше проверок. Но разница столь незначительна (десятки секунд), что отмечать это в таблице нет смысла.

Диагностики

Всего наша команда выделила в проектах 965 уникальных фрагментов кода, заслуживающих пристального внимания.

В таблице показано, что CppCat и PVS-Studio показали идентичные результаты. Дело в том, что при рекомендованных настройках анализатор PVS-Studio, выдаёт те же сообщения, что и CppCat.

Итого анализатор CppCat, как и PVS-Studio обнаруживает 742 опасных места в коде проектов. Cppcheck - 193, Visual Studio - 116.

Можно сказать, что анализаторы CppCat и PVS-Studio обнаруживают в 4 раза больше ошибок, чем Cppcheck и в 6 раз больше, чем анализатор из Visual Studio.

Заключение

Анализаторы CppCat и PVS-Studio показали себя явными лидерами в количестве найденных дефектов и потенциальных дефектов.

Дополнительно



Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

goto PVS-Studio;


Найденные ошибки

Проверено проектов
354
Собрано ошибок
13 290

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;