Вебинар: Go vet не поможет... Как сделать свой анализатор кода для Go? - 28.09
"Лаборатория Касперского" использует PVS-Studio в разработке операционной системы KasperskyOS с 2016 года. За это время некоторые обращения разработчиков в нашу поддержку превратились в новые функции анализатора, доступные теперь всем пользователям PVS-Studio. Разбираем пять таких случаев и показываем, как обратная связь корпоративного клиента влияет на развитие продукта.

"Лаборатория Касперского" разрабатывает микроядерную операционную систему KasperskyOS в соответствии с принципом Secure by Design (конструктивная безопасность). Этот принцип предполагает, что защищённость системы закладывается на уровне её архитектуры.
К качеству и надёжности операционной системы предъявляются высокие требования, а доверенные компоненты проходят тщательную проверку, одним из этапов которой является статический анализ кода.
Статический анализ кода — один из инструментов проверки, которые команда разработки KasperskyOS применяет наряду с фаззингом, динамическим анализом, полуформальными методами (CBMC) и пентестами. Например, такой набор методов использовался при разработке и повышении защищённости ELF-парсера.
Но для команды важно не просто запускать анализатор и исправлять найденные ошибки. Статический анализ встроен в процесс разработки, поэтому он должен обеспечивать дополнительную функциональность:
Не все эти задачи можно было полностью решить стандартными возможностями анализатора. После обращения в поддержку и обсуждения возможных вариантов решения, эти запросы стали поводом для доработки функциональности.
Статический анализ — один из самых "дешёвых" способов повысить качество кода, поэтому его широко можно применять даже в сторонних компонентах, где полное фаззинг-тестирование и пентестирование редко достижимо. При этом статический анализ не всегда хорошо воспринимается разработкой, так как его находки — лишь догадки, а не стопроцентные баги. Поэтому для средств статического анализа настолько критично ответственное отношение вендоров к качеству их продукта: планомерное снижение ложноположительных срабатываний, отсутствие деградаций при релизе, цикл обратной связи на проблемы пользователей.
За последнее время в PVS-Studio были реализованы несколько доработок, инициированных командой разработки KasperskyOS. Рассмотрим пять из них подробнее.
В процессе разработки и верификации KasperskyOS важно контролировать полноту статического анализа кода, используемые настройки и иметь возможность воспроизвести полученные результаты. Для этого разработчикам необходимо видеть, какой код был проанализирован, с какими настройками выполнялся анализ, а также сохранять конфигурацию, параметры запуска и другие условия, влияющие на его результаты.
Похожая задача была актуальна и для PVS-Studio. Существующее логирование не всегда позволяло получить всю необходимую информацию о параметрах анализа на стороне клиента, что усложняло диагностику проблем и увеличивало объём информации, которую технической поддержке приходилось запрашивать у пользователей.
Инициатива команды разработки KasperskyOS совпала с этой потребностью и дала дополнительный импульс созданию единой системы диагностического логирования.
Новая система собирает фактические параметры и окружение запуска, результат выполнения, а также сведения о проанализированных и пропущенных файлах. Результат сохраняется в виде структурированного лога в формате JSON, удобного для чтения, автоматической обработки и передачи в техническую поддержку. Впервые система стала доступна пользователям в релизе PVS-Studio 7.41, вышедшем 10 февраля 2026 года.
Систему логирования получилось разработать как универсальное решение, которое можно было бы использовать для разных компонентов PVS-Studio. Первая реализация появилась в кроссплатформенном анализаторе C и C++ проектов, а в последующих релизах расширенное логирование добавили в анализаторы C++ и C# для MSBuild-проектов.
Обращение команды разработки KasperskyOS стало ориентиром при создании системы логирования, помогло сформулировать практические требования и определить сценарии, которые она должна была покрывать.
"У нас очень строгий контроль за выполнением требований SDL (Secure Development Lifecycle)/РБПО, поэтому мы не можем допустить ситуации, когда по какой-либо причине — из-за ошибки программиста или сбоя в скриптах запуска — будет выполнен неполный прогон статического анализа. Поэтому наличие артефактов-доказательств полноты статического анализа для нас критично. А машиночитаемый формат позволяет автоматизировать обработку, в том числе и для создания "карты покрытия" статическим анализом."
Максим Жуков
Старший разработчик группы разработки тулчейнов KasperskyOS, "Лаборатория Касперского"
Многие статические анализаторы позволяют подавлять отдельные предупреждения прямо в коде с помощью специальных комментариев. Со временем таких подавлений становится всё больше, а часть из них теряет актуальность. Это особенно заметно по мере развития анализатора: исправляются ложные срабатывания, уточняется логика старых диагностических правил, появляются новые, при этом комментарии подавления в коде никуда не исчезают. В результате в кодовой базе могут оставаться подавления, которые уже не влияют на результаты анализа.
Команда разработки KasperskyOS предложила решить эту проблему: нужен был механизм, который помогал бы находить такие комментарии и поддерживать кодовую базу в актуальном состоянии.
В PVS-Studio разработали функциональность для поиска устаревших маркеров подавления. Она помогает выявлять комментарии, которые больше не нужны анализатору, и удалять их из кода. Это упрощает сопровождение кодовой базы и снижает риск того, что актуальное предупреждение останется скрытым за неактуальным подавлением.
Новая утилита pvs-fp-cleaner позволила количественно оценить масштаб проблемы неактуальных маркеров на реальных проектах. Команда разработки KasperskyOS поделилась результатами проверки своей кодовой базы: из 250 маркеров подавления 74 оказались неактуальными. То есть почти треть существующих подавлений уже не влияла на результаты анализа.
Команда разработки KasperskyOS оценила результат так:
"Считаю, что это отличный результат. Данная утилита не только улучшает читаемость кода, но и поднимает "боевой дух" команды — ведь чем больше анализатор "фолзит", тем больше у конкретного разработчика желания подавить предупреждение, не вдаваясь в подробности. Всячески приветствуем движение PVS-Studio не только в сторону новых детектов, но и улучшения качества срабатывания старых."
Анна Мелехова
Старший архитектор отдела развития архитектуры KasperskyOS, "Лаборатория Касперского"
Для команды разработки KasperskyOS было важно задавать разные настройки анализа отдельным частям проекта без необходимости запускать анализатор несколько раз с разными конфигурациями.
По запросу команды разработки KasperskyOS в pvs-studio-analyzer добавили автоматический поиск и применение файлов конфигурации .pvsconfig в каталогах проекта. Теперь для каждой единицы трансляции анализатор учитывает конфигурации из соответствующего каталога и его родительских директорий.
Дополнительно появилась возможность изолировать настройки отдельных каталогов от родительских. Это позволяет, например, задать отдельные правила для сторонних библиотек и не применять к ним настройки, действующие для остального проекта.
Новая возможность вошла в PVS-Studio 7.36 и в дальнейшем стала частью стандартного функциональности pvs-studio-analyzer.
CodeChecker — инструмент для сбора, просмотра и управления результатами статического анализа. CodeChecker сам не проводит анализ, но совместим с различными инструментами. Команда разработки KasperskyOS использует его в своей работе с результатами анализа, поэтому ей было важно иметь возможность загружать туда отчёты PVS-Studio.
По запросу команды разработки KasperskyOS в PVS-Studio реализовали загрузку отчётов в CodeChecker. Теперь результаты анализа PVS-Studio можно просматривать и обрабатывать вместе с результатами других анализаторов в привычном для команды интерфейсе.
"Мы используем CodeChecker как единую точку анализа и разбора предупреждений от статического анализатора. Это позволяет перекрёстно проверять файлы несколькими инструментами, увеличивая возможность нахождения критичных проблем в коде. Также при таком подходе проще делиться сработками с коллегами, т.к. это полноценный веб-сервис. Ещё одно большое преимущество — можно отслеживать тенденцию по багам в виде графиков."
Максим Жуков
Старший разработчик группы разработки тулчейнов KasperskyOS, "Лаборатория Касперского"
В статическом анализе аннотации позволяют дополнить пользовательские функции информацией, которой нет в самом коде.
В команде разработки KasperskyOS обратили внимание на необходимость расширить возможности пользовательских аннотаций. В частности, для их сценариев было важно описывать пары функций, которые работают с памятью по принципу "выделение — освобождение".
В результате в анализаторе C и C++ расширили систему аннотаций для диагностического правила V611. Оно находит ситуации, когда память выделяется и освобождается несовместимыми способами. По умолчанию анализатор не знает о пользовательских функциях, выполняющих роль аллокаторов и деаллокаторов, поэтому теперь их можно описать с помощью пользовательских аннотаций.
Отдельным направлением стала работа над новыми диагностическими правилами. Команда разработки KasperskyOS подробно разбирала технические сценарии, в которых существующих проверок было недостаточно, и вместе с разработчиками PVS-Studio определяла, какие дополнительные условия должен учитывать анализатор. В результате появились новые диагностики для таких сценариев:
Одна из особенностей обращения в поддержку PVS-Studio — возможность напрямую взаимодействовать с разработчиками анализатора. Это позволяет оперативно решать текущие вопросы (например, разбирать конкретные ложные срабатывания), а также обсуждать случаи, когда для определённого сценария стандартных возможностей анализатора оказывается недостаточно.
Опыт корпоративных клиентов особенно ценен для развития продукта: анализатор используется на крупных и сложных кодовых базах, поэтому в поддержку поступают реальные технические сценарии, требования и обратная связь, которые помогают выявлять новые задачи для развития PVS-Studio. То, что возникает как потребность в конкретном проекте, может в результате привести к изменению самого анализатора.
При этом результат такой работы не ограничивается конкретным клиентом. Реализованные изменения входят в стандартные релизы PVS-Studio и становятся доступны всем пользователям. Так практический опыт корпоративных клиентов становится частью развития продукта в целом.
"Мне нравится взаимодействие с командой PVS-Studio в первую очередь за достаточную вовлеченность в процесс разбора найденных ошибок."
Максим Жуков
Старший разработчик группы разработки тулчейнов KasperskyOS, "Лаборатория Касперского"
Если вы рассматриваете внедрение статического анализа и хотите узнать больше о возможностях PVS-Studio, обсудите ваши задачи с нашей командой. На ВКС можно задать вопросы, подробнее познакомиться с анализатором и обсудить его интеграцию в ваш процесс разработки.
Оставьте заявку на ВКС с командой PVS-Studio или напишите нам по электронной почте, чтобы получить подробную информацию о возможностях анализатора, ценах и условиях лицензирования.
0