Сравнение возможностей статических анализаторов кода PVS-Studio и CppCat

PVS-Studio vs CppCat Наша компания разрабатывает два анализатора кода для проверки проектов на языке Си/Си++: PVS-Studio и CppCat. В статье рассказывается, чем отличаются функциональные возможности этих инструментов.PVS-Studio, CppCat PVS-Studio и CppCat это инструменты статического анализа кода. Они сокращают стоимость нахождения многих ошибок и опечаток.Первым нашим программным продуктом является анализатор PVS-Studio. Мы старались делать его максимально простым для изучения и использования. Но сохранить простоту нам не удалось, хотя мы приложили к этому много усилий.

Развиваясь, PVS-Studio обрастал всё новыми функциональными возможностями. Это неизбежно привело к осложнению интерфейса и настроек. Реализация пожеланий заказчиков привела к появлению нескольких сценариев использования, что дополнительно усложняет изучение инструмента.

Отказаться от функциональности нельзя. Но хотелось вновь сделать инструмент простым, лёгким и недорогим. Так появился облегченный анализатор CppCat.

CppCat предоставляет основной набор функций, позволяющий использовать его в повседневной работе. Анализатор легко попробовать и освоить.

Начните своё знакомство именно с анализатора CppCat. Если какой-то функциональности не будет хватать, то тогда посмотрите в сторону PVS-Studio. Эта статья поможет понять, какие функции есть в CppCat и PVS-Studio.

Краткое сравнение функциональности Таблица 1. Функциональные возможности анализаторов CppCat и PVS-Studio.Таблица 1. Функциональные возможности анализаторов CppCat и PVS-Studio.Подробное сравнение функциональности CppCat, PVS-Studio. Проверка решения или отдельных файлов PVS-Studio и CppCat интегрируются в среду разработки Visual Studio и позволяют проверять исходный код приложений, написанный на языках: C, C++, C++/CLI, C++/CX.Можно проверить как решение (solution) целиком, так и отдельные файлы.

PVS-Studio дополнительно позволяет проверить один проект или набор файлов, выбранных в дереве проекта.

CppCat, PVS-Studio. Диагностики общего назначения Оба анализатора реализуют набор диагностических правил общего назначения. Эти диагностики позволяют выявлять следующие классы ошибок: адрес локальной переменной возвращается из функции; арифметические переполнения, потеря значимости; выход за границы массива; двойное освобождение ресурсов; мёртвый код; нарушение «Закона Большой Двойки». недостижимый код; неинициализированные переменные; неиспользуемые переменные; некорректные операции сдвига; неопределённо/неуточнённое поведение; неправильная работа с типом HRESULT; неправильное представление о работе функции/класса; опечатки (этот вид анализа проработан особенно хорошо); отсутствие виртуального деструктора; оформление кода не совпадает с логикой его работы; ошибки из-за Copy-Paste; ошибки при работе с исключениями; переполнение буфера; проблемы безопасности; путаница с приоритетом операций; разыменование нулевого указателя; целочисленное деление на 0; циклы, выполняющие больше или меньше итераций, чем задумывалось; и многое другое. CppCat, PVS-Studio. Автоматический анализ файлов после компиляции (инкрементальный анализ) Запуск анализаторов PVS-Studio и CppCat может осуществляться автоматически. Этот режим включён по умолчанию. При обнаружении потенциально опасного кода, анализаторы уведомляют об этом всплывающим сообщением.CppCat, PVS-Studio. Интеграция с Visual Studio 2010, 2012, 2013 PVS-Studio и CppCat интегрируются в среду разработки Visual Studio 2010, 2012, 2013.PVS-Studio умеет интегрироваться и в другие среды, про что будет рассказано ниже.

В CppCat мы решили не поддерживать Visual Studio 2005, 2008. Собранная с помощью PVS-Studio статистика показывает, что достаточно мало разработчиков продолжают использовать эти среды. Среды VS2005, VS2008 используется как правило в больших, сложных проектах, где переход на новые версии средств разработки сложен и дорогостоящ. Для интеграции в процесс разработки, функциональности CppCat скорее всего окажется недостаточно и потребуется использовать PVS-Studio.

При этом вы можете в одной из поддерживаемых версий Visual Studio указать использовать toolset от Visual Studio 2008. Тогда CppCat будет проверять проекты от Visual Studio 2008, работая, например, в среде Visual Studio 2013.

PVS-Studio. Специализированные диагностики: 64-bit, OpenMP, микрооптимизации PVS-Studio предлагает несколько дополнительных наборов правил: Диагностика 64-битных ошибок. Этот набор правил будет полезен при разработке 64-битных проектов, работающих с большими объемами памяти. Статический анализ является эффективным инструментом поиска многих 64-битных ошибок. Да, анализатор выдаёт много ложных срабатываний при поиске 64-битных проблем. Однако, потраченное время с лихвой компенсируется отсутствием трудноуловимых багов, охотиться за которыми можно неделями. OpenMP-ошибки. Если в программе используется технология OpenMP, то этот набор правил позволяет обнаружить в коде ряд ошибок приводящих к состоянию гонок, неопределенному поведению и так далее. Данный вид диагностик оказался не востребованным. Со временем, мы планируем отказаться от них. Микрооптимизации. Статический анализ кода дает возможность обнаружить фрагменты, к которым можно применить микро-оптимизации. Это не замена инструментам профилирования, таким как Parallel Amplifier, CodeTune. Это небольшое дополнение к ним. PVS-Studio. Командная работа PVS-Studio предоставляет ряд функций, полезных при командной работе над большим проектом. Сохранение отчёта в различных форматах. Возможность задать в настройках путь до папки с проектом, в результате чего в сохранённом отчёте будут относительные пути. Это позволит открыт сохранённый отчет на другом компьютере с другим расположением проекта на диске. Возможность интеграции с системой отслеживания ошибок. PVS-Studio. Интеграция в системы автоматизации сборки, интеграция с MSBuild, command-line версия PVS-Studio поддерживает различные сценарии использования. Выбор конкретного сценария зависит от типа проекта и желаемых результатов. Поскольку все варианты предусмотреть невозможно, мы помогаем наших клиентам интегрировать PVS-Studio в их процесс разработки, настроить ночные запуски на сервере и так далее. При необходимости мы адаптируем PVS-Studio под задачи клиентов или разрабатываем дополнительные утилиты. Все эти вопросы решаются в индивидуальном порядке.Основные режимы:

PVS-Studio. Интеграция с Visual Studio 2005, 2008 PVS-Studio поддерживает интеграцию в Visual Studio 2005, 2008.PVS-Studio. Интеграция с Embarcadero RAD Studio 2009 — XE5 PVS-Studio поддерживает интеграцию Embarcadero RAD Studio следующих версий: Embarcadero RAD Studio XE5 (C, C++, C++11, в том числе 64-битный компилятор); Embarcadero RAD Studio XE4 (C, C++, C++11, в том числе 64-битный компилятор); Embarcadero RAD Studio XE3 Update 1 (C, C++, C++11, в том числе 64-битный компилятор); Embarcadero RAD Studio XE2 (C, C++, C++0x); Embarcadero RAD Studio XE (C, C++); Embarcadero RAD Studio 2010 (C, C++); Embarcadero RAD Studio 2009 (C, C++). Примечание. Анализ проектов, разрабатываемых в Embarcadero RAD Studio не пользуется популярность и возможно со временем мы откажемся от поддержки этих сред.PVS-Studio. Слабые диагностики общего назначения Диагностики PVS-Studio разделены на 3 группы приоритетов. Третий уровень — это диагностики, которые дают очень много ложных срабатываний или выявляют несущественные недочёты в коде. Эти диагностики отключены в PVS-Studio по умолчанию, но при желании их можно посмотреть. Анализатор CppCat эти сообщения не показывает совсем.PVS-Studio. Standalone версия PVS-Studio Standalone сочетает в себе 3 основные функции: Просматривать без запуска Visual Studio IDE результаты анализа (.plog-файл), сохраненные на другой машине. Анализировать уже препроцессированные *.i файлы (полученные каким-либо образом). Система мониторинга компиляции. Анализатор отслеживает запуск компилятора и собирает всю необходимую для последующего анализа информацию. Это позволяет проверить проект, компилируемый с помощью любой системы сборки. Запуск процесса отслеживания может осуществляться как вручную, так и из командного файла. PVS-Studio. Диагностики по заказу пользователей В PVS-Studio мы реализуем диагностики, которые не представляют интереса для большинства разработчиков, но нужны некоторым из наших пользователей. Новые диагностики обсуждаются и реализуются в частном порядке.PVS-Studio. Специфический функционал, расширенные настройки PVS-Studio предоставляет более детальные настройки, чем CppCat. Вот некоторые из них: Управление запуском препроцессора. По умолчанию CppCat и PVS-Studio в начале запускают для препроцессирования файлов Clang. Если произошла ошибка, то для препроцессирования запускается CL.exe (Visual C++). В PVS-Studio можно указать, чтобы использовался только Clang или CL. Можно проверять только те файлы, которые изменялись за указанный период времени. Количество потоков для параллельного анализа. Можно отключить отдельные диагностики. Открывать документацию на русском или английском языке. И так далее. Подавление ложных срабатываний В таблице не показана функциональность: подавление ложных срабатываний. Механизмы для работы с ложными срабатываниями есть и в PVS-Studio и в CppCat, но подходы разные. Поэтому этот пункт мы решили рассмотреть отдельно.В CppCat и в PVS-Studio применяются разные подходы. В CppCat пользователь увидит предопределённый список диагностических сообщений. Отсутствие выбора не является недостатком, как может показаться. Выбраны диагностики с хорошим соотношением полезных сообщений к ложным сообщениям. Почему это так важно, даётся ответ здесь (см. ответ на вопрос «Почему я проверяю свой код и ничего не нахожу?»).

PVS-Studio генерирует очень много сообщений. В нём есть диагностики, сделанные по заказу, есть 64-битные диагностики, которые генерируют много ложных срабатываний и так далее. Поэтому, в PVS-Studio имеется механизм включения/выключения отдельных диагностик или групп диагностик. При этом, мы не считаем наличие таких механизмов преимуществом. Их наличие является вынужденным.

PVS-Studio позволяет:

включать/выключать группы диагностик (64-bit, OpenMP, микрооптимизации, заказные диагностики); включать/выключать отдельные диагностики; включать/выключать предупреждения, относящиеся к различным уровням; включать/выключать показ предупреждений, размеченных как ложные. Теперь по поводу подавления отдельных ложных срабатываний.Оба анализатора предоставляют следующие механизмы борьбы с ложными срабатываниями:

подавление ложного срабатывания в конкретной строке с помощью комментария вида »//-Vxxx»; подавление ложных предупреждений, встречающихся в определённых макросах; подавление ложных предупреждений в тех строках кода, где встречается заданный паттерн; подавление предупреждений в определённых папках или файлах. PVS-Studio дополнительно позволяет: исключать файлы по маске; исключать диагностические сообщения, в которых встречается определённый текст. Более подробно все эти механизмы рассмотрены в документации.Дополнительные ссылки PVS-Studio для Visual C++. Альтернатива PVS-Studio за $250. Сравнение анализаторов кода: CppCat, Cppcheck, PVS-Studio, Visual Studio. Эта статья на английском Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. Comparing Functionalities of PVS-Studio and CppCat Static Code Analyzers.

© Habrahabr.ru