Сравнение статических анализаторов кода: CppCat, Cppcheck, PVS-Studio и Visual Studio
Сравнение статических анализаторов кода: CppCat, Cppcheck, PVS-Studio и Visual Studio
3 минут
Авторы: Андрей Карпов, Евгений Рыжков, Павел Еремеев, Святослав Размыслов
Перевод статьи
Мы провели тщательное сравнение четырех анализаторов кода C / C ++: CppCat, Cppcheck, PVS-Studio и встроенный анализатор Visual Studio. Это серьезное, масштабное исследование, на которое мы потратили около 170 человеко-часов и которое, на наш взгляд, дает хорошее представление об общем состоянии дел в статическом анализе на сегодняшний день. К сожалению, мы больше не разрабатываем и не поддерживаем статический анализатор кода CppCat.
О сравнении
Для исследования мы отобрали более десяти тестовых проектов с открытым исходным кодом.
Каждый анализатор использовался с рекомендованными настройками уровней серьезности диагностических сообщений:
- CppCat: вся диагностика включена (без уровней серьезности);
- Cppcheck: ошибки и предупреждения;
- PVS-Studio: 1-й и 2-й уровень общей диагностики;
- Visual Studio: стандартные рекомендуемые правила Microsoft.
Мы внимательно изучили отчеты об анализе и выбрали те предупреждения, которые, казалось, указывают на настоящие ошибки или фрагменты кода, которые, по крайней мере, требуют тщательного изучения. Обобщенные результаты представлены в данной статье.
Подробно методика сравнения описана в статье: «Как мы сравнивали анализаторы кода: CppCat, Cppcheck, PVS-Studio и Visual Studio». В этой статье вы также найдете список тестовых проектов, список выбранных нами диагностических сообщений, примеры обнаруженных ошибок и так далее. Вы также узнаете из этой статьи, почему мы не предоставили информацию о количестве ложных срабатываний.
Результаты сравнения
Результаты сравнения анализаторов CppCat, Cppcheck, PVS-Studio и встроенного анализатора Visual Studio представлены в трех таблицах:
Таблица 1 - Количество обнаруженных подлинных ошибок (числовая форма)
Таблица 2 - Количество обнаруженных подлинных ошибок (процентная форма)
Таблица 3 - Время анализа (в минутах)
Время анализа
Мы не считаем время анализа важным показателем для сравнения. Но люди часто задаются вопросом о производительности наших инструментов, поэтому мы решили включить эти цифры в статью.
Как видите, Cppcheck - самый быстрый анализатор. Но обратите внимание, что в таблице показано общее время анализа. В некоторых проектах Cppcheck работал медленнее, чем другие анализаторы. Так что реальная скорость анализа, скорее, зависит от конкретного проекта.
CppCat на самом деле немного быстрее PVS-Studio, так как в нем меньше диагностических правил, которые нужно проверять. Но разница действительно незначительна (несколько десятков секунд), поэтому показывать ее в таблице мы сочли бессмысленной.
Диагностика
Наша команда отобрала в общей сложности 965 уникальных фрагментов кода, которые требуют изучения и исправления.
Как видно из таблицы, CppCat и PVS-Studio показали одинаковые результаты. Причина в том, что анализатор PVS-Studio с рекомендованными настройками использует тот же набор диагностик, что и CppCat.
Общее количество дефектов, обнаруженных анализаторами, составляет 742 для CppCat и PVS-Studio каждый; 193 для Cppcheck; 116 для Visual Studio.
Таким образом, CppCat и PVS-Studio выявляют в 4 раза больше ошибок, чем Cppcheck, и в 6 раз больше ошибок, чем встроенный анализатор Visual Studio.
Заключение
Анализаторы CppCat и PVS-Studio зарекомендовали себя лидерами по количеству выявленных истинных и потенциальных дефектов.