﻿# PVS\-Studio в 2022 году

На дворе январь 2023, а значит, самое время подвести итоги уже прошлого 2022 года\. Мы расскажем, чем занимались, и покажем, что нового появилось в анализаторе за это время\. Давайте вместе взглянем на то, как развивался анализатор PVS\-Studio в 2022 году :\)\.

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

## Unreal Engine

В прошлом году мы значительно улучшили интеграцию анализатора с игровым движком Unreal Engine\. PVS\-Studio теперь поддерживает Unreal Engine 5, а в Unreal Engine 5\.0\.3 был исправлен баг с поиском анализатора \(и теперь\-то всё точно работает\)\. 

Анализатор научился лучше работать со специфичными для UE типами: например, с аналогами контейнеров из стандартной библиотеки C\+\+\. Это помогло снизить количество ложноположительных предупреждений\. 

С файлами подавления предупреждений теперь можно работать через плагины PVS\-Studio для Visual Studio и JetBrains Rider \(подробнее об этом читайте в [документации](https://pvs-studio.ru/ru/docs/manual/0043/#ID1978F81CC4)\)\. Также мы сделали pull\-request, позволяющий использовать больше настроек анализатора при работе с UE\-проектами\. 

Кроме того, проекты на Unreal Engine теперь можно проверять не только на Windows, но и на Linux\. Разобраться со всем этим поможет обновленная [документация](https://pvs-studio.ru/ru/docs/manual/0043/) по использованию PVS\-Studio для проверки Unreal Engine проектов\.

## Best Warnings

Начать работу с PVS\-Studio поможет фильтр "Best Warnings", который мы существенно доработали в 2022 году\. 

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

Фильтр упрощает первичное ознакомление с отчётом анализатора\. Теперь можно буквально в один клик посмотреть самые интересные срабатывания, которые с наибольшей вероятностью являются реальными ошибками\. Предупреждений в подборке будет не больше 10, и вы сможете просмотреть их быстро\.

![](https://import.viva64.com/docx/blog/1025_PVS_2022_ru/image2.mp4)

Фильтр "Best Warnings" доступен в приложении "C and C\+\+ Compiler Monitoring UI", а также в плагинах PVS\-Studio для:

* Visual Studio;
* Rider;
* CLion;
* IntelliJ IDEA\.

Таким образом, фильтр "Best Warnings" позволяет мгновенно оценить эффективность инструмента при первом запуске анализатора\. 

## Плагины для Visual Studio Code и Qt Creator

В 2022 году мы добавили плагины PVS\-Studio для Visual Studio Code и Qt Creator\. Они значительно расширяют возможности кроссплатформенного использования анализатора\. 

Расширение PVS\-Studio для Visual Studio Code выглядит следующим образом:

![1025_PVS_2022_ru/image5.png](https://import.viva64.com/docx/blog/1025_PVS_2022_ru/image5.png)

А вот плагин для Qt Creator:

![1025_PVS_2022_ru/image7.png](https://import.viva64.com/docx/blog/1025_PVS_2022_ru/image7.png)

Сейчас в расширениях для Visual Studio Code и Qt Creator вы можете работать с отчётом PVS\-Studio: смотреть предупреждения, фильтровать их, сортировать в гриде и т\. п\. Запускать анализ пока нельзя, но мы планируем добавить эту возможность в следующих релизах\.

Подробнее об использовании плагинов можно узнать в документации: [Qt Creator](https://pvs-studio.ru/ru/docs/manual/6648/) и [Visual Studio Code](https://pvs-studio.ru/ru/docs/manual/6646/)\.

## Кроссплатформенная проверка C и C\+\+ проектов 

PVS\-Studio уже довольно давно поддерживает кроссплатформенный анализ проектов \(на основе compile\_commands\.json или трассировки\), но некоторые сценарии кроссплатформенного использования анализатора были недостаточно проработаны\. 

Например, вы разрабатываете кроссплатформенное приложение на основе CMake на трёх платформах: Windows, Linux и macOS — и хотите проанализировать его с помощью PVS\-Studio\. Это стало возможно благодаря [CMake\-модулю](https://github.com/viva64/pvs-studio-cmake-module)\. 

Обращения в поддержку помогли понять, что модуль некорректно работает на Windows\. Поэтому в начале 2022 года мы это исправили, и теперь вы можете более тесно интегрировать анализатор в проект на основе CMake сразу на нескольких платформах \(а также изучить [документацию](https://pvs-studio.ru/ru/docs/manual/6591/) на этот сценарий использования\)\. 

Помимо проверки проектов пользователям важно видеть предупреждения анализатора на свежем коде\. Для этого можно [отключить](https://pvs-studio.ru/ru/docs/manual/0032/) их выдачу анализатором на существующем коде\. К сожалению, с кроссплатформенным использованием данного механизма тоже были некоторые сложности\. Но мы их устранили:

* suppress\-файлы формата JSON теперь работают на всех трёх поддерживаемых платформах\. Больше не требуется иметь два набора файлов \- \*\.suppress для Windows и \*\.json для Linux/macOS;
* унифицировали алгоритм соответствия предупреждений в отчёте анализатора и этих же предупреждений в suppress\-файлах формата JSON на разных платформах\. Ранее если предупреждение одинаково выдавалось на всех платформах, то даже при подавлении на Windows оно бы по\-прежнему выдавалось на Linux/macOS, и наоборот\. Теперь будет достаточно подавить предупреждение на любой из поддерживаемых платформ\.

Также мы обновили утилиту кроссплатформенного анализа\. Так сложилось, что она имеет различные названия в зависимости от платформы: _pvs\-studio\-analyzer_ \(для Linux и macOS\) и _CompilerCommandsAnalyzer_ \(для Windows\)\. Теперь она лучше определяет компиляторы, используемые в проекте\. Кроме того, появилась возможность указать имя и тип компилятора явно, что особенно полезно в сфере embedded\-разработки, где у компиляторов может быть множество разных имён\. Сценарии использования утилит, флаги запуска и коды возврата подробно описали в [новом разделе документации](https://pvs-studio.ru/ru/docs/manual/6615/)\. 

К слову о кроссплатформенности\. Сейчас анализатор запускается на Windows, Linux и macOS на архитектуре х86\_64\. Запустить анализатор нативно на этих же операционных системах под ARM на текущий момент нельзя \(исключение – запуск C и C\+\+ анализатора на macOS под ARM с применением Rosetta\)\.

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

## Security

Мы продолжаем развивать PVS\-Studio в направлении выявления потенциальных уязвимостей на ранних этапах разработки ПО\. 

Приложение может быть уязвимо, если использует зависимости c уязвимостями\. Для поиска таких "уязвимых" компонентов приложения при разработке внедряют анализ компонентного состава ПО \([SCA, Software Composition Analysis](https://pvs-studio.ru/ru/pvs-studio/sca/)\)\. 

Анализатор PVS\-Studio теперь умеет искать зависимости с известными уязвимостями в C\# проектах\. Для этого он проверяет, из каких компонентов состоит приложение, и, если находит компоненты, имеющие дефекты безопасности, выдаёт предупреждения\.

В 2022 году мы покрыли последнюю категорию из OWASP Top 10 2021, реализовав SCA\. Теперь с помощью PVS\-Studio можно искать дефекты безопасности из всех категорий, перечисленных в OWASP Top 10 2021\. 

Напомним, OWASP Top 10 – это регулярно обновляемый список наиболее распространённых и опасных угроз защищённости Web\-приложений\. А ознакомиться с классификацией предупреждений PVS\-Studio, согласно OWASP, вы можете [здесь](https://pvs-studio.ru/ru/pvs-studio/sast/owasp/)\. 

## Web

В 2022 году мы активно развивали С\# анализатор в соответствии с потребностями пользователей – а многие из наших пользователей занимаются web\-разработкой\. Поэтому был расширен функционал PVS\-Studio в области анализа web\-проектов, и теперь анализатор проводит более глубокий анализ web\-приложений\. 

Анализатор лучше понимает методы из ASP\.NET Core\. Как следствие – PVS\-Studio способен находить ещё больше проблемных участков кода и при этом выдавать меньше ложноположительных срабатываний\. 

Кроме того, мы научили PVS\-Studio анализировать Blazor компоненты\. С помощью C\# анализатора теперь можно проверять блоки _@code_ в \.razor файлах\. 

## Embedded

В 2022 году устранили проблему, связанную с пропуском анализатором некоторых короткоживущих процессов при компиляции C и C\+\+ кода\. Процесс компиляции мог отрабатывать так быстро, что утилита мониторинга не успевала его отследить и запустить анализ на всех компилируемых файлах\. Чаще всего с этой проблемой сталкивались разработчики embedded\-проектов\. 

Реализовали [новый режим мониторинга компиляции](https://pvs-studio.ru/ru/docs/manual/0031/#wrapcompilers)\. Теперь совершенно неважно, быстро компилируется код или нет — анализатор в любом случае отлавливает все процессы компиляции\. Кстати, о том, как мы справились с этой проблемой, и о новом режиме в целом подробно рассказали в [статье](https://pvs-studio.ru/ru/blog/posts/cpp/0954/)\.  

Мы также продолжаем добавлять поддержку новых компиляторов и улучшать работу с уже имеющимися в анализаторе PVS\-Studio для языков С и С\+\+\. В 2022 году также добавили поддержку проверки проектов, собираемых с помощью C6000\-CGT – компилятора для встраиваемых систем от Texas Instruments\. Кроме того, улучшили определение целевой платформы для компиляторов семейства QNX Momentics QCC, а также поддержали работу С\+\+ анализатора с последними версиями компиляторов QNX\.

## Улучшение анализа

Наиболее фундаментальным улучшением С\+\+ анализатора в 2022 году стало обновление системы типов\. Сделав это, мы создали своеобразный "задел на будущее" для дальнейшей поддержки языка\. Теперь PVS\-Studio лучше понимает современный C\+\+: стандартную библиотеку, сложные языковые конструкции, шаблоны\. Диагностики стали точнее, а анализатор стал находить ещё больше проблем\. 

Если вам интересны как наши мотивы для столь масштабного обновления С\+\+ анализатора, так и сам процесс, приглашаем вас узнать об этом подробнее в посвящённой этому [статье](https://pvs-studio.ru/ru/blog/posts/cpp/0992/)\.

Мы продолжаем улучшать и обновлять наш C\# анализатор\. В 2022 году мы своевременно поддержали анализ проектов, использующих \.NET 7 и C\# 11\. 

В 2022 году мы добавили 44 новых диагностики для С\+\+ и С\# анализатора\. Наиболее наглядно развитие возможностей анализатора показано на графике количества диагностик\. 

![1025_PVS_2022_ru/image8.png](https://import.viva64.com/docx/blog/1025_PVS_2022_ru/image8.png)

Для С и С\+\+ анализатора: [V1077](https://pvs-studio.ru/ru/docs/warnings/v1077/), [V1078](https://pvs-studio.ru/ru/docs/warnings/v1078/), [V2017](https://pvs-studio.ru/ru/docs/warnings/v2017/), [V1079](https://pvs-studio.ru/ru/docs/warnings/v1079/), [V1080](https://pvs-studio.ru/ru/docs/warnings/v1080/), [V1081](https://pvs-studio.ru/ru/docs/warnings/v1081/), [V1082](https://pvs-studio.ru/ru/docs/warnings/v1082/), [V834](https://pvs-studio.ru/ru/docs/warnings/v834/), [V835](https://pvs-studio.ru/ru/docs/warnings/v835/), [V1083](https://pvs-studio.ru/ru/docs/warnings/v1083/), [V1084](https://pvs-studio.ru/ru/docs/warnings/v1084/), [V1085](https://pvs-studio.ru/ru/docs/warnings/v1085/), [V1086](https://pvs-studio.ru/ru/docs/warnings/v1086/), [V1087](https://pvs-studio.ru/ru/docs/warnings/v1087/), [V1088](https://pvs-studio.ru/ru/docs/warnings/v1088/), [V1089](https://pvs-studio.ru/ru/docs/warnings/v1089/), [V1090](https://pvs-studio.ru/ru/docs/warnings/v1090/), [V1091](https://pvs-studio.ru/ru/docs/warnings/v1091/), [V1092](https://pvs-studio.ru/ru/docs/warnings/v1092/), [V836](https://pvs-studio.ru/ru/docs/warnings/v836/), [V2018](https://pvs-studio.ru/ru/docs/warnings/v2018/), [V2019](https://pvs-studio.ru/ru/docs/warnings/v2019/)

Для С\# анализатора: [V3174](https://pvs-studio.ru/ru/docs/warnings/v3174/), [V5617](https://pvs-studio.ru/ru/docs/warnings/v5617/), [V5618](https://pvs-studio.ru/ru/docs/warnings/v5618/), [V5619](https://pvs-studio.ru/ru/docs/warnings/v5619/), [V5620](https://pvs-studio.ru/ru/docs/warnings/v5620/), [V5621](https://pvs-studio.ru/ru/docs/warnings/v5621/), [V3175](https://pvs-studio.ru/ru/docs/warnings/v3175/), [V3176](https://pvs-studio.ru/ru/docs/warnings/v3176/), [V5622](https://pvs-studio.ru/ru/docs/warnings/v5622/), [V5623](https://pvs-studio.ru/ru/docs/warnings/v5623/), [V3177](https://pvs-studio.ru/ru/docs/warnings/v3177/), [V5624](https://pvs-studio.ru/ru/docs/warnings/v5624/), [V5625](https://pvs-studio.ru/ru/docs/warnings/v5625/), [V3178](https://pvs-studio.ru/ru/docs/warnings/v3178/), [V3179](https://pvs-studio.ru/ru/docs/warnings/v3179/), [V3180](https://pvs-studio.ru/ru/docs/warnings/v3180/), [V3181](https://pvs-studio.ru/ru/docs/warnings/v3181/), [V3182](https://pvs-studio.ru/ru/docs/warnings/v3182/), [V3183](https://pvs-studio.ru/ru/docs/warnings/v3183/), [V5626](https://pvs-studio.ru/ru/docs/warnings/v5626/), [V5627](https://pvs-studio.ru/ru/docs/warnings/v5627/), [V5628](https://pvs-studio.ru/ru/docs/warnings/v5628/)\.

## Отчёты PVS\-Studio совместимы с GitLab Code Quality

![1025_PVS_2022_ru/image9.png](https://import.viva64.com/docx/blog/1025_PVS_2022_ru/image9.png)

Мы продолжаем делать работу с отчётами PVS\-Studio удобнее\. В 2022 году мы добавили возможность конвертации результатов анализатора в отчёт, совместимый с [GitLab Code Quality](https://docs.gitlab.com/ee/ci/testing/code_quality.html)\. Теперь вы сможете следить за качеством кода в рамках экосистемы GitLab\. В [документации](https://pvs-studio.ru/ru/docs/manual/0056/) описали, как это сделать\. 

## Интерактивы

В 2022 году нам хотелось порадовать друг друга различного рода интерактивами: играми и тестами\. Мы активно работали в этом направлении и создали игру, в которой вы можете посоревноваться с анализатором и проверить свою внимательность в поиске ошибок в коде на [С\+\+](https://quiz.pvs-studio.com/ru/cpp/) и [С\#](https://quiz.pvs-studio.com/ru/csharp/)\.

Мы также создали два развлекательных квиза, чтобы наконец ответить на самые насущные вопросы — "[Кто ты в мире С\+\+?](https://pvs-studio.ru/ru/blog/quest/who_you_are_in_cpp/)" и "[Кто ты в мире С\#?](https://pvs-studio.ru/ru/blog/quest/who_you_are_in_csharp/)" \(по прохождению которых, кстати, ещё и подарок получить можно\)\. А в преддверии Нового Года и Рождества у нас вышел [особый квиз](https://pvs-studio.ru/ru/blog/quest/save_the_holidays/) с одним из самых ярких персонажей этого года в главной роли – багом\! 

Если же захотелось настоящей активности – попробуйте нашу [игру](https://pvs-studio.ru/ru/blog/quest/endless/) и проживите обычный рабочий день программиста, полный дедлайнов, багов и кофе\-брейков\.

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

Что ж, мы постарались рассказать обо всех важных нововведениях в анализаторе за 2022 год, но некоторые прочие улучшения, увы, остались за кадром\. 

Например, именно в 2022 году мы наконец запустили рассылку наших пресс\-релизов и лучших статей из блога\. [Подпишитесь](https://pvs-studio.ru/ru/subscribe/), чтобы всегда быть в курсе развития нашего продукта\. 

Подробнее обо всех изменениях, вошедших в релизы PVS\-Studio в 2022 году, можно узнать [здесь](https://pvs-studio.ru/ru/docs/manual/0010/)\.

А какие изменения вы бы хотели увидеть в PVS\-Studio в 2023 году? Делитесь с нами своими идеями в комментариях\.