В службу поддержки PVS-Studio часто поступают предложения от пользователей по улучшению продукта.
Мы с радостью реализуем многие из них.
Одно из последних подобных предложений было связано с улучшением утилиты автоматического оповещения разработчиков (Blame Notifier).
Нас попросили научить его извлекать дату/ревизию кода, для которого анализатор выдал сообщение, используя информацию о виновниках из системы контроля версий.
Данная модификация позволила нам расширить возможности утилиты, о которых мы поговорим в этой статье.
С чего все началось
Один из наших клиентов написал в поддержку, что ему нужно различать новые и ранее найденные предупреждения анализатора.Из переписки выяснилось, что ему нужно сосредоточиться на предупреждениях о новом или только что измененном коде.
Мы поспешили сообщить, что это возможно осуществлять С помощью СонарКуб в сочетании с нашим плагином.
Ответ клиента не заставил себя долго ждать.
Он отметил, что использовать для этих целей сторонний и достаточно массовый инструмент, такой как SonarQube, нецелесообразно.
Поскольку клиент имеет большую кодовую базу, мы предложили логически разделить использование статического анализатора на до и после реализации статического анализа, временно подавляя ранее найденные предупреждения с помощью нашего механизм подавление.
После этого анализатор будет выдавать предупреждения только для нового или измененного кода.
А вдобавок к этому рассказали о внедрении Blame Notifier, позволяющего немедленно оповещать всех причастных лиц о новых предупреждениях.
Клиента предложение заинтересовало, но из-за того, что он хотел видеть в отчете как старые, так и новые предупреждения, такой режим работы показался пользователю не очень удобным.
Кроме того, он дал отзыв об Blame Notifier: «Было бы здорово, если бы предупреждения в оповещениях были более информативными, например, с добавлением даты и номера версии».
И тут нас осенило.
Раньше мы думали, что для более умных и информативных оповещений нужно создать собственную базу данных.
На основании этого мы могли отслеживать жизненный цикл каждого оповещения и, соответственно, определять, какие из них являются новыми.
Но после комментария клиента мы пришли к выводу, что система контроля версий — это та самая база данных, из которой мы можем получить всю необходимую актуальную информацию.
Ведь привязываясь к номерам ревизий коммитов, мы также можем вычислить их привязку ко времени модификации соответствующих строк кода.
Тем более, что эту информацию мы уже получаем через вину – остается только ею воспользоваться.
Мы предложили клиенту следующий вариант:
- Вы получите итоговый отчет анализатора со всеми предупреждениями;
- Уведомитель об авторстве можно настроить так, чтобы в отчет HTML включался только недавно измененный код. Кроме того, предупреждения будут содержать дату и номер версии.
О утилите
Цель Blame Notifier — автоматизировать процесс оповещения разработчиков, чей код получил предупреждение от PVS-Studio, например, после ночных сборок.Утилита позволяет сформировать HTML-отчет как для конкретного разработчика только с его предупреждениями, так и для суперпользователя, который получает полный отчет со всеми предупреждениями.
Полный отчет по умолчанию представляет оповещения, сгруппированные по разработчикам, которые, в свою очередь, сортируются в алфавитном порядке.
Эта функция чрезвычайно полезна, поскольку она немедленно сообщает о новых сигналах тревоги от анализатора всем заинтересованным сторонам.
Как можно догадаться из названия этой утилиты, она работает на основе информации о виновности, полученной для проверенных анализатором файлов из системы контроля версий пользователя.
Те, кто незнаком с этой утилитой, могут узнать о ней больше в этом статья .
Что нового
Из информации о вине, помимо имени разработчика, теперь извлекается дата и ревизия последнего изменения в коде, на которое жалуется PVS-Studio. Дополнительная извлеченная информация позволила нам добавить в утилиту новые опции:- --sortByDate (-S) – позволяет сформировать HTML-отчет с отсортированными предупреждениями по дате изменения исходного кода, вызвавшего предупреждение анализатора.
Предупреждения на конкретную дату группируются, в свою очередь, по разработчику.
- --days (-d) – HTML-отчет содержит предупреждения для кода, дата изменения которого меньше N дней с даты запуска текущей утилиты.
Извлечение даты/версии поддерживается для следующих систем контроля версий: SVN, Git и Mercurial. Формат HTML-отчета утилиты по умолчанию выглядит следующим образом:
Новый HTML-отчет, отсортированный по дате:
Как это можно применить
Новые опции позволяют моделировать поведение SonarQube при загрузке отчета анализатора с помощью «сонара-сканера».Подробнее об этом.
Примечание.
Если вы уже используете PVS-Studio совместно с SonarQube, то описанное ниже приложение будет для вас неактуально, поскольку соответствующая обработка новых предупреждений уже встроена в SonarQube. Но если вы используете PVS-Studio отдельно и нет возможности/желания использовать SonarQube, то это может вас заинтересовать.
Начнем с того, что SonarQube использует подход к качеству кода, который называется «Чисто, как вы кодируете».
Суть его в том, что разработчики должны уделять повышенное внимание надежности и безопасности нового кода, который только что был добавлен или изменен.
Устаревший код, который годами доказывал свою эффективность в «производстве», отодвигается на второй план и фокусируется на том, что происходит «сегодня», тем самым предотвращая возникновение новых проблем.
И периодически возвращаться к давно существовавшим проблемам и исправлять их.
Более подробную информацию об этом подходе можно найти в блог Разработчики SonarQube. Этот подход реализуется следующим образом.
На главной странице проекта есть выделенная область с новыми проблемами за настраиваемый период времени.
Для новых задач настраивается «Ворота качества» — так называемый индикатор соответствия нового кода заданным пороговым метрикам.
Например:
- количество новых ошибок;
- количество новых уязвимостей;
- коэффициент технического долга;
- покрытие нового кода тестами;
- .
и другие.
Визуальное представление подхода «Чисто как код» интуитивно понятно.
Вот пример того, как это выглядит в SonarQube 7.9.4:
SonarQube — профессиональный инструмент, предоставляющий функционал, позволяющий удобно и эффективно контролировать качество программного продукта.
Например:
- разбивает проблемы в коде на существующие и недавние;
- предоставляет различные показатели и графики;
- позволяет фильтровать проблемы по критериям;
- позволяет просматривать предупреждения, обнаруженные средствами контроля качества кода, непосредственно в проверяемом коде прямо из веб-браузера;
- .
и многое другое.
Но что делать, если вы еще не используете SonarQube? Если у вас есть возможность, вы можете его установить, но для этого необходимо предварительно провести процедуру развертывания, установки и первоначальной настройки SonarQube, что вполне может вызвать определенные трудности.
Например, когда:
- запуск сервера SonarQube;
- настройка «Профили качества»;
- настройка «Ворота качества»;
- с помощью «сонара-сканера»;
- .
и так далее.
И тут на помощь приходит наша утилита Blame Notifier. Он уже может заменить некоторые возможности SonarQube в области уведомления разработчиков.
Благодаря новым возможностям утилиты теперь можно моделировать облегченную версию подхода «Очищай как код», где основным показателем качества кода будет появление новых предупреждений анализатора.
В этом режиме в рассылке будут предупреждения для кода, дата модификации которого меньше N дней с даты текущего запуска утилиты.
Давайте повторим поведение SonarQube. Для этого укажите для опции «-d» 10 дней и отсортируйте предупреждения (-S) по дате изменения кода, вызвавшего предупреждение.
В этом случае HTML-отчет будет выглядеть следующим образом:
Как видите, в отчете содержится 11 новых предупреждений за последние 10 дней.
Выглядит это почти так же, как в SonarQube, но получить такую отчетность гораздо проще.
У такого «облегченного» подхода, конечно, есть свои недостатки:
- качество нового кода оценивается по одной метрике;
- триггеры для кода, дата изменения которого находится за пределами рассматриваемого периода, не будут включены в HTML-отчет. Для этого вам необходимо получить полный отчет за все время с помощью дополнительного запуска «виновника» без ограничения возможностей.
- и, конечно же, нет возможности перемещаться по тестируемому коду напрямую с помощью веб-браузера.
Заключение
Внедрение технологии статического анализа в разработку предполагает не только запуск анализатора и получение отчета.Обычно со статическим анализатором идут вспомогательные утилиты/плагины, использование которых позволяет легко и удобно поддерживать качество вашего кода.
Например, к PVS-Studio имеется множество плагинов (для Визуальная Студия , СонарКуб , Дженкинс , Gradle/Maven/IntelliJ ИДЕЯ ), утилита для более удобного преобразования отчетов ПлогКонвертер , утилита уведомления разработчика уведомитель о вине .
Команда PVS-Studio, опираясь на свой опыт и отзывы пользователей, постоянно совершенствует свой продукт. Чтобы не пропустить все изменения и быть в курсе работы инструмента, не забывайте подписываться блог на официальном сайте.
Новый режим работы Blame Notifier позволяет «облегченно» выполнять часть функционала, который ранее был доступен в нашем продукте только в связке с SonarQube. Однако хотелось бы еще раз повторить – мы никоим образом не призываем вас отказаться от использования SonarQube. Новый режим значительно упрощает опробование данного подхода к работе со статическим анализом.
Мы считаем, что этот режим будет актуален для многих команд. Если у вас есть предложения по улучшению нашего продукта, не стесняйтесь отложить их и немедленно писать нас.
Если вы хотите поделиться этой статьей с англоязычной аудиторией, воспользуйтесь ссылкой для перевода: Максим Стефанов.
Новые возможности PVS-Studio для уведомления разработчиков о найденных ошибках .
Теги: #DevOps #pvs-studio #sonarqube #статистический анализ #статический анализ
-
Стандартные Шаги Выполнения Запроса
19 Oct, 24 -
Арифметика 2.0?
19 Oct, 24 -
Спрашивай О Чем Угодно. Авито. Андроид
19 Oct, 24 -
Ff + Forms + Linux = Дружба
19 Oct, 24