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

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

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

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

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

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

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


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

>
>
Как в PVS-Studio мы решали одну инженер…

Как в PVS-Studio мы решали одну инженерную задачу в течение нескольких лет

03 Авг 2011

Сначала я хотел назвать эту заметку "Как PVS-Studio позволяет ДЕШЕВО внедрить статический анализ кода в процесс разработки", но не решился из-за двусмысленного толкования слова "дешево". Поэтому я расскажу об одной инженерной проблеме, которую мы постоянно должны были решать для того, чтобы люди пользовались нашим продуктом. Забегая вперед, скажу, что, как мне кажется, мы ее решили.

0107-Engineering_task_ru/image1.png

Итак, разработав в начале 2007 года первую версию статического анализатора кода (который тогда назывался Viva64 и выявлял 64-битные ошибки), мы столкнулись с проблемой внедрения инструмента у клиентов. Наш клиент – это компания, в которой как минимум несколько десятков разработчиков, и хотя бы несколько сотен тысяч строк кода. Любой статический анализатор на такой код выдаст кучу предупреждений. Например, мы своим инструментом получали до нескольких тысяч сообщений на один проект.

Да, конечно же, здесь проблема с ложными срабатываниями анализатора. Однако у любого анализатора есть ложные срабатывания и от них никуда не деться. Встал вопрос – что делать с большим количеством сообщений, которые получает пользователь? То есть проблема выглядит так. Потенциальный пользователь скачивает программу (trial), запускает ее и получает десять тысяч сообщений. Естественно, его это печалит, затем uninstall и мы потеряли клиента.

Первое что мы сделали – это сразу же убрали дублирующиеся сообщения. Анализатор проверяет проекты на C/C++ и бывает, что ошибка в .h-файле может выдаваться при проверке нескольких .cpp-файлов, которые его используют. У нас это не дублируется. Затем мы добавили возможности фильтрации результатов анализа (и постоянно их совершенствовали): фильтрация по коду ошибки, по тексту сообщения, возможность не проверять файлы по маске и т.п. Все это позволяло существенно снизить количество сообщений, но только после настройки. Пользователь в первый раз все так же получал гору сообщений. Таким образом, фильтрация сообщений – это важный инструмент, но он не решал исходную проблему – трудность внедрения инструмента в процесс разработки.

Затем в анализаторе появился новый механизм "Mark as False Alarm". Это вставка в код комментариев специального вида (//-V112) для подавления сообщений анализатора. Разметив код таким образом в дальнейшем можно получать сообщения о проблемах только в тех фрагментах кода, где такой разметки пока нет. В идеале это только новый код. Хотя проблема внедрения анализатора в процесс разработки команды стала чуть более простой, все равно, нужно чтобы несколько человек из команды сначала разметили код, избавив от явно мусорных сообщений.

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

Поэтому мы пошли дальше и сделали новую супер возможность "Incremental Analysis after Build". Теперь анализатор запускается сразу после компиляции и проверяет только те файлы, которые были "задеты" правками пользователя. В отличие от проверки файлов за несколько дней (когда могли проверяться правки команды разработчиков), теперь пользователь видит ТОЛЬКО ошибки в том коде, который он непосредственно трогает.

Программист теперь не будет беспокоиться о большом объеме кода, который он не трогает. Возможно этому коду уже более 5 лет. Он практически не модифицируется и большинство дефектов в нем уже исправлено. Этот код не надо бросаться проверять в первую очередь и анализатор этого и не делает. Программист будет видеть предупреждения только в свежем коде. А уж если у него будет дополнительное время, он всегда сможет проверить проект целиком, заглянув в самые редко посещаемые места.

Да, все равно есть ложные срабатывания анализатора. Да, все равно не потеряли свою актуальность фильтры. Но важное другое. Стоимость ВНЕДРЕНИЯ (затраты сил людей на ввод в эксплуатацию) статического анализатора нам удалось сократить до нуля. То есть теперь человек скачивает статический анализатор, устанавливает его и СРАЗУ же начинает получать выгоду от него без каких-либо дополнительных действий.

Однако не хватало завершающего штриха. Всё бы хорошо, но вот только то, что анализатор нашёл ошибки, было очень плохо заметно. Смена цвета иконки окна PVS-Studio (как мы сделали сначала) не так заметна, а в Visual Studio 2005 это и вовсе не наработает. Решением стало всплывающее уведомление.

0107-Engineering_task_ru/image2.png

Конечно, мы все не любим всякие назойливые всплывающие уведомления. Но в данном случае оно будет явно полезно программисту, и будет появляться редко, при условии, что он не злоупотребляет ошибками в коде.

Таким образом, инженерная задача по внедрению статического анализа в процесс разработки была решена. Поэтому в PVS-Studio 4.34 режим Incremental Analysis after Build будет по умолчанию включен.

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

Популярные статьи по теме
Эффект последней строки

Дата: 31 Май 2014

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

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

Дата: 21 Ноя 2018

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

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

Дата: 30 Янв 2019

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

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

Дата: 19 Май 2017

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

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

Дата: 22 Дек 2018

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

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

Дата: 22 Окт 2018

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

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

Дата: 14 Апр 2016

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

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

Дата: 16 Окт 2017

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

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

Дата: 17 Янв 2019

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

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

Дата: 20 Мар 2017

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

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

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

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

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