﻿# 10 лет с PVS\-Studio: как обратная связь команды разработки KasperskyOS влияет на развитие анализатора

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

![1414_draft_kaspersky_case_ru/image1.png](https://import.viva64.com/docx/blog/1414_draft_kaspersky_case_ru/image1.png)

## О клиенте

"Лаборатория Касперского" разрабатывает микроядерную операционную систему KasperskyOS в соответствии с принципом Secure by Design \([конструктивная безопасность](https://pvs-studio.ru/ru/blog/video/11596/)\)\. Этот принцип предполагает, что защищённость системы закладывается на уровне её архитектуры\.

К качеству и надёжности операционной системы предъявляются высокие требования, а доверенные компоненты проходят тщательную проверку, одним из этапов которой является статический анализ кода\.

## Задачи

Статический анализ кода — один из инструментов проверки, которые команда разработки KasperskyOS применяет наряду с фаззингом, динамическим анализом, полуформальными методами \(CBMC\) и пентестами\. Например, такой набор методов использовался при [разработке и повышении защищённости ELF\-парсера](https://os.kaspersky.ru/blog/security-of-elf-parser-in-kasperskyos/)\. 

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

* контролировать полноту анализа, его параметры и давать возможность воспроизвести результаты;
* поддерживать код в актуальном состоянии, своевременно выявляя устаревшие подавления предупреждений;
* гибко настраивать анализ для разных частей проекта;
* собирать и разбирать результаты разных анализаторов в едином интерфейсе;
* учитывать специфику кода KasperskyOS — в том числе с помощью пользовательских аннотаций и дополнительных диагностических правил\.

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

### Требования к статическому анализатору

> Статический анализ — один из самых "дешёвых" способов повысить качество кода, поэтому его широко можно применять даже в сторонних компонентах, где полное фаззинг\-тестирование и пентестирование редко достижимо\. При этом статический анализ не всегда хорошо воспринимается разработкой, так как его находки — лишь догадки, а не стопроцентные баги\. Поэтому для средств статического анализа настолько критично ответственное отношение вендоров к качеству их продукта: планомерное снижение ложноположительных срабатываний, отсутствие деградаций при релизе, цикл обратной связи на проблемы пользователей\.

## Решение 

За последнее время в PVS\-Studio были реализованы несколько доработок, инициированных командой разработки KasperskyOS\. Рассмотрим пять из них подробнее\.

### Система диагностического логирования 

В процессе разработки и верификации KasperskyOS важно контролировать полноту статического анализа кода, используемые настройки и иметь возможность воспроизвести полученные результаты\. Для этого разработчикам необходимо видеть, какой код был проанализирован, с какими настройками выполнялся анализ, а также сохранять конфигурацию, параметры запуска и другие условия, влияющие на его результаты\.

Похожая задача была актуальна и для PVS\-Studio\. Существующее логирование не всегда позволяло получить всю необходимую информацию о параметрах анализа на стороне клиента, что усложняло диагностику проблем и увеличивало объём информации, которую технической поддержке приходилось запрашивать у пользователей\. 

Инициатива команды разработки KasperskyOS совпала с этой потребностью и дала дополнительный импульс созданию единой системы диагностического логирования\.

Новая система собирает фактические параметры и окружение запуска, результат выполнения, а также сведения о проанализированных и пропущенных файлах\. Результат сохраняется в виде [структурированного лога](https://pvs-studio.ru/ru/docs/manual/7185/) в формате JSON, удобного для чтения, автоматической обработки и передачи в техническую поддержку\. Впервые система стала доступна пользователям в релизе PVS\-Studio 7\.41, вышедшем 10 февраля 2026 года\.

Систему логирования получилось разработать как универсальное решение, которое можно было бы использовать для разных компонентов PVS\-Studio\. Первая реализация появилась в кроссплатформенном анализаторе C и C\+\+ проектов, а в последующих релизах расширенное логирование добавили в анализаторы C\+\+ и C\# для MSBuild\-проектов\.

Обращение команды разработки KasperskyOS стало ориентиром при создании системы логирования, помогло сформулировать практические требования и определить сценарии, которые она должна была покрывать\. 

> "У нас очень строгий контроль за выполнением требований SDL \(Secure Development Lifecycle\)/РБПО, поэтому мы не можем допустить ситуации, когда по какой\-либо причине — из\-за ошибки программиста или сбоя в скриптах запуска — будет выполнен неполный прогон статического анализа\. Поэтому наличие артефактов\-доказательств полноты статического анализа для нас критично\. А машиночитаемый формат позволяет автоматизировать обработку, в том числе и для создания "карты покрытия" статическим анализом\."
>
> Максим Жуков
>
> Старший разработчик группы разработки тулчейнов KasperskyOS, "Лаборатория Касперского"

### Функциональность очистки кодовой базы от устаревших маркеров подавлений

Многие статические анализаторы позволяют подавлять отдельные предупреждения прямо в коде с помощью специальных комментариев\. Со временем таких подавлений становится всё больше, а часть из них теряет актуальность\. Это особенно заметно по мере развития анализатора: исправляются ложные срабатывания, уточняется логика старых диагностических правил, появляются новые, при этом комментарии подавления в коде никуда не исчезают\. В результате в кодовой базе могут оставаться подавления, которые уже не влияют на результаты анализа\.

Команда разработки KasperskyOS предложила решить эту проблему: нужен был механизм, который помогал бы находить такие комментарии и поддерживать кодовую базу в актуальном состоянии\.

В PVS\-Studio разработали [функциональность](https://pvs-studio.ru/ru/docs/manual/7184/) для поиска устаревших маркеров подавления\. Она помогает выявлять комментарии, которые больше не нужны анализатору, и удалять их из кода\. Это упрощает сопровождение кодовой базы и снижает риск того, что актуальное предупреждение останется скрытым за неактуальным подавлением\.

Новая утилита `pvs-fp-cleaner` позволила количественно оценить масштаб проблемы неактуальных маркеров на реальных проектах\. Команда разработки KasperskyOS поделилась результатами проверки своей кодовой базы: из 250 маркеров подавления 74 оказались неактуальными\. То есть почти треть существующих подавлений уже не влияла на результаты анализа\.

Команда разработки KasperskyOS оценила результат так:

> "Считаю, что это отличный результат\. Данная утилита не только улучшает читаемость кода, но и поднимает "боевой дух" команды — ведь чем больше анализатор "фолзит", тем больше у конкретного разработчика желания подавить предупреждение, не вдаваясь в подробности\. Всячески приветствуем движение PVS\-Studio не только в сторону новых детектов, но и улучшения качества срабатывания старых\."
>
> Анна Мелехова
>
> Старший архитектор отдела развития архитектуры KasperskyOS, "Лаборатория Касперского"

### Отдельные настройки для разных частей проекта 

Для команды разработки KasperskyOS было важно задавать разные настройки анализа отдельным частям проекта без необходимости запускать анализатор несколько раз с разными конфигурациями\.

По запросу команды разработки KasperskyOS в `pvs-studio-analyzer` добавили автоматический поиск и применение файлов конфигурации `.pvsconfig` в каталогах проекта\. Теперь для каждой единицы трансляции анализатор учитывает конфигурации из соответствующего каталога и его родительских директорий\.

Дополнительно появилась возможность изолировать настройки отдельных каталогов от родительских\. Это позволяет, например, задать отдельные правила для сторонних библиотек и не применять к ним настройки, действующие для остального проекта\.

Новая возможность вошла в PVS\-Studio 7\.36 и в дальнейшем [стала частью стандартного функциональности pvs\-studio\-analyzer](https://pvs-studio.ru/ru/docs/manual/6630/#ID452DECAF04)\.

### Интеграция с CodeChecker

CodeChecker — инструмент для сбора, просмотра и управления результатами статического анализа\. CodeChecker сам не проводит анализ, но совместим с различными инструментами\. Команда разработки KasperskyOS использует его в своей работе с результатами анализа, поэтому ей было важно иметь возможность загружать туда отчёты PVS\-Studio\.

По запросу команды разработки KasperskyOS в PVS\-Studio реализовали загрузку отчётов в CodeChecker\. Теперь результаты анализа PVS\-Studio можно просматривать и обрабатывать вместе с результатами других анализаторов в привычном для команды интерфейсе\.

> "Мы используем CodeChecker как единую точку анализа и разбора предупреждений от статического анализатора\. Это позволяет перекрёстно проверять файлы несколькими инструментами, увеличивая возможность нахождения критичных проблем в коде\. Также при таком подходе проще делиться сработками с коллегами, т\.к\. это полноценный веб\-сервис\. Ещё одно большое преимущество — можно отслеживать тенденцию по багам в виде графиков\."
>
> Максим Жуков
>
> Старший разработчик группы разработки тулчейнов KasperskyOS, "Лаборатория Касперского"

### Расширение системы пользовательских аннотаций

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

В команде разработки KasperskyOS обратили внимание на необходимость расширить возможности пользовательских аннотаций\. В частности, для их сценариев было важно описывать пары функций, которые работают с памятью по принципу "выделение — освобождение"\.

В результате в анализаторе C и C\+\+ [расширили](https://pvs-studio.ru/ru/docs/manual/6743/#IDE589B8437D) систему аннотаций для диагностического правила [V611](https://pvs-studio.ru/ru/docs/warnings/v611/)\. Оно находит ситуации, когда память выделяется и освобождается несовместимыми способами\. По умолчанию анализатор не знает о пользовательских функциях, выполняющих роль аллокаторов и деаллокаторов, поэтому теперь их можно описать с помощью пользовательских аннотаций\.

### Диагностические правила, добавленные в анализатор по запросу

Отдельным направлением стала работа над новыми диагностическими правилами\. Команда разработки KasperskyOS подробно разбирала технические сценарии, в которых существующих проверок было недостаточно, и вместе с разработчиками PVS\-Studio определяла, какие дополнительные условия должен учитывать анализатор\. В результате появились новые диагностики для таких сценариев:

* [V1077](https://pvs-studio.ru/ru/docs/warnings/v1077/)\. Conditional initialization inside the constructor may leave some members uninitialized\.
* [V1112](https://pvs-studio.ru/ru/docs/warnings/v1112/)\. Comparing expressions with different signedness can lead to unexpected results\.
* [V2021](https://pvs-studio.ru/ru/docs/warnings/v2021/)\. Using assertions may cause the abnormal program termination in undesirable contexts\.
* [V2022](https://pvs-studio.ru/ru/docs/warnings/v2022/)\. Implicit type conversion from integer type to enum type\.

## Путь от обращения до изменения

Одна из особенностей обращения в поддержку PVS\-Studio — возможность напрямую взаимодействовать с разработчиками анализатора\. Это позволяет оперативно решать текущие вопросы \(например, разбирать конкретные ложные срабатывания\), а также обсуждать случаи, когда для определённого сценария стандартных возможностей анализатора оказывается недостаточно\.

Опыт корпоративных клиентов особенно ценен для развития продукта: анализатор используется на крупных и сложных кодовых базах, поэтому в поддержку поступают реальные технические сценарии, требования и обратная связь, которые помогают выявлять новые задачи для развития PVS\-Studio\. То, что возникает как потребность в конкретном проекте, может в результате привести к изменению самого анализатора\.

При этом результат такой работы не ограничивается конкретным клиентом\. Реализованные изменения входят в стандартные релизы PVS\-Studio и становятся доступны всем пользователям\. Так практический опыт корпоративных клиентов становится частью развития продукта в целом\.

> "Мне нравится взаимодействие с командой PVS\-Studio в первую очередь за достаточную вовлеченность в процесс разбора найденных ошибок\."
>
> Максим Жуков
>
> Старший разработчик группы разработки тулчейнов KasperskyOS, "Лаборатория Касперского"

## Заключение

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

[Оставьте заявку на ВКС с командой PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/request-demo/) или [напишите нам по электронной почте](https://pvs-studio.ru/ru/order/), чтобы получить подробную информацию о возможностях анализатора, ценах и условиях лицензирования\.