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

в 5:49, , рубрики: c++, c++11, cppcat, cppcheck, pvs-studio, visual c++, Visual Studio, visual studio 2013, Блог компании PVS-Studio, Си, статический анализ кода, метки: , , , , , , , , ,

Авторы: Евгений Рыжков (EvgeniyRyzhkov), Андрей Карпов (Andrey2008), Павел Еремеев (Paull), Святослав Размыслов (svyatoslavmc).

CppCat vs PVS-Studio vs Cppcheck vs Visual Studio

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

О сравнении

Для исследования было проверено более десяти 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 показали себя явными лидерами в количестве найденных дефектов и потенциальных дефектов.

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

  1. Евгений Рыжков, Андрей Карпов, Павел Еремеев, Святослав Размыслов. «Как мы сравнивали анализаторы кода CppCat, Cppcheck, PVS-Studio, Visual Studio» (на русском, на английском).

Прочитали статью и сразу хочется спросить?

Часто к нашим статьям задают одни и те же вопросы. Ответы на них мы собрали здесь: Ответы на вопросы читателей статей про PVS-Studio и CppCat, версия 2014. Пожалуйста, ознакомьтесь со списком.

Автор: Andrey2008

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js