...

понедельник, 26 мая 2014 г.

Сравнение возможностей статических анализаторов кода 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 предлагает несколько дополнительных наборов правил:

  1. Диагностика 64-битных ошибок. Этот набор правил будет полезен при разработке 64-битных проектов, работающих с большими объемами памяти. Статический анализ является эффективным инструментом поиска многих 64-битных ошибок. Да, анализатор выдаёт много ложных срабатываний при поиске 64-битных проблем. Однако, потраченное время с лихвой компенсируется отсутствием трудноуловимых багов, охотиться за которыми можно неделями.

  2. OpenMP-ошибки. Если в программе используется технология OpenMP, то этот набор правил позволяет обнаружить в коде ряд ошибок приводящих к состоянию гонок, неопределенному поведению и так далее. Данный вид диагностик оказался не востребованным. Со временем, мы планируем отказаться от них.

  3. Микрооптимизации. Статический анализ кода дает возможность обнаружить фрагменты, к которым можно применить микро-оптимизации. Это не замена инструментам профилирования, таким как Parallel Amplifier, CodeTune. Это небольшое дополнение к ним.




PVS-Studio. Командная работа




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

  1. Сохранение отчёта в различных форматах.

  2. Возможность задать в настройках путь до папки с проектом, в результате чего в сохранённом отчёте будут относительные пути. Это позволит открыт сохранённый отчет на другом компьютере с другим расположением проекта на диске.

  3. Возможность интеграции с системой отслеживания ошибок.




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 основные функции:

  1. Просматривать без запуска Visual Studio IDE результаты анализа (.plog-файл), сохраненные на другой машине.

  2. Анализировать уже препроцессированные *.i файлы (полученные каким-либо образом).

  3. Система мониторинга компиляции. Анализатор отслеживает запуск компилятора и собирает всю необходимую для последующего анализа информацию. Это позволяет проверить проект, компилируемый с помощью любой системы сборки. Запуск процесса отслеживания может осуществляться как вручную, так и из командного файла.




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 дополнительно позволяет:

  • исключать файлы по маске;

  • исключать диагностические сообщения, в которых встречается определённый текст.


Более подробно все эти механизмы рассмотрены в документации.

Дополнительные ссылки





  1. PVS-Studio для Visual C++.

  2. Альтернатива PVS-Studio за $250.

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


Эта статья на английском




Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. Comparing Functionalities of PVS-Studio and CppCat Static Code Analyzers.

This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий