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

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

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

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

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

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

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


Если вы так и не получили ответ, пожалуйста, проверьте папку
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 и максимальную независимость от поведения работа анализаторов. Цель– большее удобство использования внутреннего инструмента тестирования, а соответственно повышение качества наших инструментов для пользователя.

Последние статьи:

Опрос:

Популярные статьи по теме
Как Apple и другие крупные компании настиг программный баг

Дата: 09 Ноя 2022

Автор: Ульяна Гришина

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

Дата: 30 Авг 2022

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

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

Дата: 26 Май 2022

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

Анализатор PVS-Studio умеет "схлопывать" повторяющиеся предупреждения. Предоставляет возможность задать baseline, что позволяет легко внедрять статический анализ в legacy-проекты. Стоит ли предостави…
15000 ошибок в открытых проектах

Дата: 24 Май 2022

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

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

Дата: 04 Май 2022

Автор: Сергей Хренов

Приветствую всех программистов, а также сочувствующих. Кто из нас хотя бы раз в жизни не оставлял комментарии в коде? Был ли это ваш код, а может, чужой? Что за комментарии вы написали: полезные или …

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

Следующие комментарии
Unicorn with delicious cookie
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо