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

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

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

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

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

** На сайте установлена reCAPTCHA и применяются
Политика конфиденциальности и Условия использования Google.
Ваше сообщение отправлено.

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


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

>
>
Как мы тестируем анализаторы кода PVS-S…

Как мы тестируем анализаторы кода PVS-Studio и CppCat

08 Июл 2014

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

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

Итак, на текущий день у нас есть два инструмента для анализа исходного кода в C/C++ проектах. Каждый из них позволяет указывать на потенциальные проблемы в коде. Всем практикующим разработчикам давно известен тот факт, что всех ошибок избежать невозможно. Способов успешно справляться с этой проблемой много, и каждая команда разработчиков выбирает тот, который наиболее подходит для текущего поддерживаемого и/или разрабатываемого проекта. Естественно, у каждого подхода есть свои достоинства и недостатки — важно пойти по пути наименьшего сопротивления и выбрать наиболее подходящий их них. Некоторые "покрывают" весь код тестами и буквально "тащат" за собой новый код вместе с новыми тестами, увеличивая время на разработку в разы. Конечно, если на это есть деньги и время, это наиболее надежный вариант, но в реальной жизни это бывает крайне редко, потому что ни менеджерам проектов, ни заказчикам не хочется платить лишние деньги, а объяснять пользу от этого людям, которые далеки от программирования напоминает попытку кошки поладить с собакой. Есть более разумный подход: TDD (Test-Driven Development ), в котором сначала пишутся тесты, а потом код. Так можно быть уверенным в том, что мы хотим протестировать только то, что нам интересно. Тот факт, что некоторые тесты никогда "не отваливаются" всегда наводит на мысль, что их слишком много. Немного подумав, можно прийти к выводу, что для библиотек и собственных каркасов разработки наиболее подходят модульное тестирование, а для бизнес-логики — интеграционное. Это наиболее безболезненный и надежный подход для обеих сторон: разработчиков и заказчиков.

К сожалению, так бывает не всегда и приходится искать совершенно другие варианты тестирования своих продуктов. Так случается, когда есть очень много (или хотя бы более одного) компонентов, которые не укладываются в общую архитектуру и могут совершенно независимо существовать друг от друга. CppCat и PVS-Studio — как раз тот самый случай. Конечно, мы можем запустить отладку для Visual Studio experimental instance, но подобный вариант не дает нам полной картины происходящего, другими словами — не подходит.

Но тестировать нужно! Поэтому у нас есть изолированное оконное приложение, которое позволяет убедится в полной корректности работы наших анализаторов (Рисунок 1).

Следует заметить, что это далеко не единственный метод тестирования, который мы используем, еще три года назад мы писали, об используемых практиках при разработке анализатора.

Некоторое время тестер работал только для PVS-Studio. Он работал хорошо и нас это вполне устраивало. С появлением CppCat появилась необходимость в его расширении для работы в двух режимах. Писать для этого отдельное Stand-Alone приложение не стоит, поэтому нам пришлось интегрировать два режима работы в одном месте. Следует заметить, что это не создание нового режима тестирования, а всего лишь модификация одного из многих способов, описанных в статье по ссылке выше.

0266_How_we_test_ru/image1.png

Рисунок 1 – Общий интерфейс тестера

Предлагаю немного погрузиться в ключевые моменты интерфейса программы для более полного понимания процесса:

0266_How_we_test_ru/image2.png

Рисунок 2 – Текущие настройки запуска

Выпадающий список с текущими настройками для запуска тестера (Рисунок 2) позволяет нам указать, какие в данный момент режимы запуска мы хотим использовать. Все они хранятся в обычных xml-файлах. Существует несколько режимов запуска: настройки, адаптированные для запуска тестера в Visual Studio 2010 IDE; настройки, которые используют только препроцессор и компилятор с Visual C++; настройки по умолчанию, и т. д.

0266_How_we_test_ru/image3.png

Рисунок 3 – Список проектов

Список проектов (Рисунок 3.) позволяет нам выбрать типовые проекты для тестирования наших анализаторов.

0266_How_we_test_ru/image4.png

Рисунок 4 – Режим запуска

С режимом запуска (Рисунок 4) все понятно: он позволяет указать, какой анализатор мы хотим использовать в данных момент для прогона тестов.

0266_How_we_test_ru/image5.png

Рисунок 5 – Хронология тестовых запусков

Хронология тестовых запусков (Рисунок 5) позволяет выбрать из выпадающего списка предыдущие тесты и посмотреть, что могло измениться на текущий момент.

0266_How_we_test_ru/image6.png

Рисунок 6 – Параметры запуска

Параметры запуска (Рисунок 6) позволяют указать интегрированные среды разработки, в которых нужно запускать анализ. Переключатель на панели Tasks позволяет указать, что мы хотим сделать: запустить тесты или сгенерировать эталоны (Об эталонах мы поговорим чуть позже)

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

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

В ближайшем будущем, мы планируем переработать "с нуля" данный тестер, ориентируясь на Usability и максимальную независимость от поведения работа анализаторов. Цель– большее удобство использования внутреннего инструмента тестирования, а соответственно повышение качества наших инструментов для пользователя.

Популярные статьи по теме
PVS-Studio для Java

Дата: 17 Янв 2019

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

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

Дата: 30 Янв 2019

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

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

Дата: 22 Дек 2018

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

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

Дата: 21 Ноя 2018

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

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

Дата: 16 Окт 2017

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

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

Дата: 31 Июл 2017

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

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

Дата: 14 Апр 2016

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

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

Дата: 31 Май 2014

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

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

Дата: 19 Май 2017

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

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

Дата: 22 Окт 2018

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

PVS-Studio, как и другие статические анализаторы кода, часто выдаёт ложные срабатывания. Но не стоит спешить считать странные срабатывания ложными. Это короткая история о том, как PVS-Studio вновь ок…

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

Следующие комментарии

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