Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
GBP
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

>
>
Сравнение возможностей статических анал…

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

26 Май 2014

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

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

0258_PVS-Studio_and_CppCat_ru/image1.png

PVS-Studio, CppCat

PVS-Studio и CppCat это инструменты статического анализа кода. Они сокращают стоимость нахождения многих ошибок и опечаток.

Первым нашим программным продуктом является анализатор PVS-Studio. Мы старались делать его максимально простым для изучения и использования. Но сохранить простоту нам не удалось, хотя мы приложили к этому много усилий.

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

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

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

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

Краткое сравнение функциональности

0258_PVS-Studio_and_CppCat_ru/image2.png

Таблица 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-битных проблем. Однако, потраченное время с лихвой компенсируется отсутствием трудноуловимых багов, охотиться за которыми можно неделями.
  • Микрооптимизации. Статический анализ кода дает возможность обнаружить фрагменты, к которым можно применить микро-оптимизации. Это не замена инструментам профилирования, таким как 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. Слабые диагностики общего назначения

Диагностики PVS-Studio разделены на 3 группы приоритетов. Третий уровень - это диагностики, которые дают очень много ложных срабатываний или выявляют несущественные недочёты в коде. Эти диагностики отключены в PVS-Studio по умолчанию, но при желании их можно посмотреть. Анализатор CppCat эти сообщения не показывает совсем.

PVS-Studio. Standalone версия

PVS-Studio Standalone сочетает в себе 3 основные функции:

  • Просматривать без запуска Visual Studio IDE результаты анализа (.plog-файл), сохраненные на другой машине.
  • Система мониторинга компиляции. Анализатор отслеживает запуск компилятора и собирает всю необходимую для последующего анализа информацию. Это позволяет проверить проект, компилируемый с помощью любой системы сборки. Запуск процесса отслеживания может осуществляться как вручную, так и из командного файла.

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

  • включать/выключать отдельные диагностики;
  • включать/выключать предупреждения, относящиеся к различным уровням;
  • включать/выключать показ предупреждений, размеченных как ложные.

Теперь по поводу подавления отдельных ложных срабатываний.

Оба анализатора предоставляют следующие механизмы борьбы с ложными срабатываниями:

  • подавление ложного срабатывания в конкретной строке с помощью комментария вида "//-Vxxx";
  • подавление ложных предупреждений, встречающихся в определённых макросах;
  • подавление ложных предупреждений в тех строках кода, где встречается заданный паттерн;
  • подавление предупреждений в определённых папках или файлах.

PVS-Studio дополнительно позволяет:

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

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

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

Популярные статьи по теме
Бесплатный PVS-Studio для тех, кто развивает открытые проекты

Дата: 22 Дек 2018

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

В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub, GitLab или Bitbucket. Им предоставляется возмо…
PVS-Studio ROI

Дата: 30 Янв 2019

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

Время от времени нам задают вопрос, какую пользу в денежном эквиваленте получит компания от использования анализатора PVS-Studio. Мы решили оформить ответ в виде статьи и привести таблицы, которые по…
Статический анализ как часть процесса разработки Unreal Engine

Дата: 27 Июн 2017

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

Проект Unreal Engine развивается - добавляется новый код и изменятся уже написанный. Неизбежное следствие развития проекта - появление в коде новых ошибок, которые желательно выявлять как можно раньш…
Характеристики анализатора PVS-Studio на примере EFL Core Libraries, 10-15% ложных срабатываний

Дата: 31 Июл 2017

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

После большой статьи про проверку операционной системы Tizen мне было задано много вопросов о проценте ложных срабатываний и о плотности ошибок (сколько ошибок PVS-Studio выявляет на 1000 строк кода)…
Любите статический анализ кода!

Дата: 16 Окт 2017

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

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

Дата: 21 Ноя 2018

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

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

Дата: 31 Май 2014

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

Я изучил множество ошибок, возникающих в результате копирования кода. И утверждаю, что чаще всего ошибки допускают в последнем фрагменте однотипного кода. Ранее я не встречал в книгах описания этого …
PVS-Studio для Java

Дата: 17 Янв 2019

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

В седьмой версии статического анализатора PVS-Studio мы добавили поддержку языка Java. Пришло время немного рассказать, как мы начинали делать поддержку языка Java, что у нас получилось и какие дальн…
Главный вопрос программирования, рефакторинга и всего такого

Дата: 14 Апр 2016

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

Вы угадали, ответ - "42". Здесь приводится 42 рекомендации по программированию, которые помогут избежать множества ошибок, сэкономить время и нервы. Автором рекомендаций выступает Андрей Карпов - тех…
Как и почему статические анализаторы борются с ложными срабатываниями

Дата: 20 Мар 2017

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

В своей предыдущей статье я писал, что мне не нравится подход, при котором статические анализаторы кода оцениваются с помощью синтетических тестов. В статье приводился пример, воспринимаемый анализат…

Комментарии (0)

Следующие комментарии
Этот сайт использует куки и другие технологии, чтобы предоставить вам более персонализированный опыт. Продолжая просмотр страниц нашего веб-сайта, вы принимаете условия использования этих файлов. Если вы не хотите, чтобы ваши данные обрабатывались, пожалуйста, покиньте данный сайт. Подробнее →
Принять