PVS-Studio в 2022 году

lczrqi5o-4jfseavcwdfjrsg96k.png

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


Unreal Engine

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

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

С файлами подавления предупреждений теперь можно работать через плагины PVS-Studio для Visual Studio и JetBrains Rider (подробнее об этом читайте в документации). Также мы сделали pull-request, позволяющий использовать больше настроек анализатора при работе с UE-проектами.

Кроме того, проекты на Unreal Engine теперь можно проверять не только на Windows, но и на Linux. Разобраться со всем этим поможет обновленная документация по использованию PVS-Studio для проверки Unreal Engine проектов.


Best Warnings

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

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

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

2wboxpxz7t5dmecgslk_evujdv8.gif

Фильтр «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 выглядит следующим образом:

kfx8v6ti8igdm8ku_6en1hhrgi0.png

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

bkazfytm5vc9vd5dwyyf8xj3rcg.png

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

Подробнее об использовании плагинов можно узнать в документации: Qt Creator и Visual Studio Code.


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

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

Например, вы разрабатываете кроссплатформенное приложение на основе CMake на трёх платформах: Windows, Linux и macOS — и хотите проанализировать его с помощью PVS-Studio. Это стало возможно благодаря CMake-модулю.

Обращения в поддержку помогли понять, что модуль некорректно работает на Windows. Поэтому в начале 2022 года мы это исправили, и теперь вы можете более тесно интегрировать анализатор в проект на основе CMake сразу на нескольких платформах (а также изучить документацию на этот сценарий использования).

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


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

Также мы обновили утилиту кроссплатформенного анализа. Так сложилось, что она имеет различные названия в зависимости от платформы: pvs-studio-analyzer (для Linux и macOS) и CompilerCommandsAnalyzer (для Windows). Теперь она лучше определяет компиляторы, используемые в проекте. Кроме того, появилась возможность указать имя и тип компилятора явно, что особенно полезно в сфере embedded-разработки, где у компиляторов может быть множество разных имён. Сценарии использования утилит, флаги запуска и коды возврата подробно описали в новом разделе документации.

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

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


Security

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

Приложение может быть уязвимо, если использует зависимости c уязвимостями. Для поиска таких «уязвимых» компонентов приложения при разработке внедряют анализ компонентного состава ПО (SCA, Software Composition Analysis).

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

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

Напомним, OWASP Top 10 — это регулярно обновляемый список наиболее распространённых и опасных угроз защищённости Web-приложений. А ознакомиться с классификацией предупреждений PVS-Studio, согласно OWASP, вы можете здесь.


Web

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

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

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


Embedded

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

Реализовали новый режим мониторинга компиляции. Теперь совершенно неважно, быстро компилируется код или нет — анализатор в любом случае отлавливает все процессы компиляции. Кстати, о том, как мы справились с этой проблемой, и о новом режиме в целом подробно рассказали в статье.

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


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

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

Если вам интересны как наши мотивы для столь масштабного обновления С++ анализатора, так и сам процесс, приглашаем вас узнать об этом подробнее в посвящённой этому статье.

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

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

80ovyuuz_lsdicujmujxuk-thoc.png

Для С и С++ анализатора: V1077, V1078, V2017, V1079, V1080, V1081, V1082, V834, V835, V1083, V1084, V1085, V1086, V1087, V1088, V1089, V1090, V1091, V1092, V836, V2018, V2019

Для С# анализатора: V3174, V5617, V5618, V5619, V5620, V5621, V3175, V3176, V5622, V5623, V3177, V5624, V5625, V3178, V3179, V3180, V3181, V3182, V3183, V5626, V5627, V5628.


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

ijlvqnxx1o-y6hprn3dyo7uvfuq.png

Мы продолжаем делать работу с отчётами PVS-Studio удобнее. В 2022 году мы добавили возможность конвертации результатов анализатора в отчёт, совместимый с GitLab Code Quality. Теперь вы сможете следить за качеством кода в рамках экосистемы GitLab. В документации описали, как это сделать.


Интерактивы

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

Мы также создали два развлекательных квиза, чтобы наконец ответить на самые насущные вопросы — «Кто ты в мире С++?» и «Кто ты в мире С#?» (по прохождению которых, кстати, ещё и подарок получить можно). А в преддверии Нового Года и Рождества у нас вышел особый квиз с одним из самых ярких персонажей этого года в главной роли — багом!

Если же захотелось настоящей активности — попробуйте нашу игру и проживите обычный рабочий день программиста, полный дедлайнов, багов и кофе-брейков.


Заключение

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

Например, именно в 2022 году мы наконец запустили рассылку наших пресс-релизов и лучших статей из блога. Подпишитесь, чтобы всегда быть в курсе развития нашего продукта.

Подробнее обо всех изменениях, вошедших в релизы PVS-Studio в 2022 году, можно узнать здесь.

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

© Habrahabr.ru