Оригинал: pvs-studio.com

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

Случайно наткнулись на эту статью? Не знаете, что такое PVS-Studio?
PVS-Studio — это статический анализатор, который ищет ошибки и дефекты безопасности в коде C, C++, C# и Java. Инструмент помогает находить проблемы на более ранних этапах жизненного цикла разработки — когда их проще и дешевле исправить. В результате разработчики тратят меньше времени на отладку, а менеджеры экономят деньги.

Более подробную информацию вы можете найти на странице товара.

Что нового: краткий обзор

Ниже мы обсудим основные улучшения, добавленные с начала 2020 года по конец 2022 года. Вы можете выбрать любую интересующую вас тему, чтобы найти более подробную информацию.

Общие

Вы можете использовать плагины PVS-Studio во многих IDE: Visual Studio, Visual Studio Code, Rider, CLion, IntelliJ IDEA, Qt Creator.

Фильтр «Лучшие предупреждения» упрощает ваш первый опыт. Механизм позволяет легко сортировать предупреждения анализатора. Всего одним кликом (буквально) вы получаете предупреждения, которые, скорее всего, указывают на ошибку. Есть только 10 отфильтрованных предупреждений, поэтому вы можете просмотреть их быстро.

Анализаторы для всех поддерживаемых языков (C, C++, C#, Java) работают в Windows, Linux и macOS. На данный момент под Apple ARM (через Rosetta) работает только CLI-версия анализатора C++.

Анализатор C++ может выполнять межмодульный анализ — это помогает найти больше проблем. Аналогичная функция есть и в C#.

В анализаторе также предусмотрен режим проверки списка файлов. Это помогает проверять коммиты, запросы на извлечение и запросы на слияние.

Результаты PVS-Studio можно конвертировать в новые форматы: TeamCity, SARIF, GitLab, MISRA Compliance.

Анализатор работает с кодом, написанным на C++20, C# 11 и Java 11. Он также поддерживает более ранние версии языков.

На момент написания статьи в PVS-Studio было более 1000 диагностических правил, выявляющих различные проблемы в коде.

Безопасность

Список рисков безопасности веб-приложений OWASP Top 10 2021 полностью покрыт: для каждой категории существует как минимум одно диагностическое правило PVS-Studio.

Диагностика PVS-Studio отображается в соответствии со стандартами кодирования CWE, OWASP ASVS и SEI CERT.

Анализатор C# выполняет анализ состава программного обеспечения (SCA).

Встроенный

PVS-Studio предоставляет диагностику, выявляющую отклонения от стандартов безопасного кодирования MISRA и AUTOSAR.

В режиме Wrap Compilers утилиты CLMonitor и интерфейс мониторинга компиляторов C и C++ перехватывают все вызовы компиляторов. Раньше утилиты не могли анализировать часть кода, если процесс компиляции завершался быстро.

Анализатор работает с большим количеством компиляторов для встраиваемых систем: IAR ARM, MPLAB XC8, QNX, C6000-CGT.

Разработка игр

PVS-Studio работает с проектами на Unreal Engine 4 и Unreal Engine 5.

Анализатор лучше понимает типы, специфичные для Unreal Engine и Unity.

В проектах Unreal Engine вы можете использовать базовый уровень и другие настройки анализатора. Все эти функции также доступны для Unity.

Что нового: подробно

Безопасность

Одним из основных направлений развития анализатора является поиск дефектов безопасности. В PVS-Studio появились новые механизмы (например, анализ испорченности), которые помогают находить больше потенциальных уязвимостей в коде. Диагностические правила анализатора сопоставлены по CWE, SEI CERT и OWASP ASVS — это упрощает работу с результатами анализа для специалистов по кибербезопасности.

PVS-Studio охватывает все категории наиболее критичных угроз безопасности — OWASP Top 10 2021. Это означает, что для каждой категории списка есть как минимум одно диагностическое правило, которое находит соответствующие проблемы. Какие? SQL-инъекции, XSS, устаревшие криптографические алгоритмы, жестко запрограммированные пароли в исходном коде и т. д.

Пользователи PVS-Studio, работающие с C#-проектами, теперь могут искать зависимости проекта от уязвимых компонентов. Для этого PVS-Studio проводит анализ состава программного обеспечения (SCA): находит, какие компоненты использует приложение, и ищет среди них известные уязвимости.

Полезные ссылки:

Таблицы соответствия диагностики PVS-Studio списку потенциальных уязвимостей и стандартам безопасной разработки:

Среди всех дефектов безопасности есть наиболее опасные и распространенные. Подробнее о том, как PVS-Studio помогает бороться с ними, можно узнать здесь:

Встроенный

Еще одно направление развития анализатора — проверка кода для встраиваемых систем. Здесь есть несколько аспектов: поддержка стандартов разработки безопасности (MISRA, AUTOSAR) и наборы инструментов, используемые при разработке встраиваемых систем.

Компиляторы

В мире разработки встраиваемых систем существует множество различных компиляторов, которые должен поддерживать анализатор. Поддержка кода для новых компиляторов позволяет большему количеству разработчиков использовать анализатор. Это одно из направлений, в котором мы работаем. Например, PVS-Studio теперь понимает код следующих компиляторов: IAR ARM, MPLAB XC8, QNX, C6000-CGT.

Полный список поддерживаемых компиляторов вы можете найти на странице продукта (раздел Поддерживаемые языки и компиляторы).

Поддержка стандартов безопасности

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

Мы добавили в PVS-Studio несколько десятков специальных диагностических правил для поиска отклонений от стандартов разработки безопасности. Вот ссылки для просмотра, какие отклонения от правил разработки безопасности ищет диагностика анализатора:

При работе со стандартами MISRA вам может понадобиться отчет о соответствии MISRA. Если вам нужна дополнительная информация, прочитайте следующую статью, объясняющую, как получить отчет.

Улучшенная система мониторинга компилятора

Важное усовершенствование, о котором я хотел бы упомянуть, касается утилит CLMonitor и UI мониторинга компилятора C и C++. Они проверяют проекты C и C++ в Windows независимо от системы сборки. Для сбора необходимой информации анализатор перехватывает вызовы компиляторов.

Утилиты имели недостаток, наиболее заметный при разработке программного обеспечения для встраиваемых систем. Если код компилировался быстро, время жизни процесса было коротким. Из-за этого система могла пропускать вызовы компилятора, и в результате анализировался не весь код проекта.

Если вы уже сталкивались с подобными проблемами, рекомендую попробовать новый режим — Wrap Compilers. Он перехватывает все вызовы компиляторов независимо от того, насколько быстро компилируется код. Это значит, что не должно быть проблем с тем, что анализируется не весь код.

Разработка игр

Ошибки в индустрии GameDev не так критичны, как в индустрии встраиваемых систем, но они все же могут дорого обойтись. Вот почему статический анализ также полезен в GameDev.

Мы улучшаем интеграцию PVS-Studio с двумя игровыми движками: Unreal Engine и Unity.

Единство

PVS-Studio работает с проектами Unity так же, как и с другими проектами C# — в той же среде (командная строка, Visual Studio, Rider) с полным набором функций — можно скрывать предупреждения об унаследованном коде, подавлять ложные предупреждения и т. д.

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

Вот документация, объясняющая, как запустить анализ проектов Unity с помощью PVS-Studio.

Нереальный движок

Проекты Unreal Engine используют собственную систему сборки — Unreal Build Tool. Поэтому некоторые функции анализатора, доступные для проектов Visual C++, ранее были недоступны для проектов UE (например, отключение предупреждений об унаследованном коде).

Мы постоянно улучшаем интеграцию с проектами Unreal Engine. Вот наиболее значительные улучшения:

  • PVS-Studio теперь может проверять проекты не только на UE 4, но и на UE 5;
  • можно скрыть предупреждения об унаследованном коде — так будет проще начать пользоваться анализатором;
  • вы можете запускать анализ проекта не только из CLI, утилиты C и C++ Compiler Monitoring UI и Visual Studio, но и из JetBrains Rider;
  • доступно больше настроек PVS-Studio;
  • анализатор лучше понимает специфичные для движка типы (в частности, аналоги контейнеров стандартной библиотеки C++).

Вот документация, объясняющая, как запустить анализ проектов Unreal Engine с помощью PVS-Studio.

Общий

Правила диагностики

За 3 года в PVS-Studio было добавлено около 300 диагностических правил, а их общее количество сейчас превышает 1000.

Вот что ищет диагностика в коде:

  • общие ошибки (разыменование нулевого указателя, некорректное использование функций и т.д.);
  • дефекты безопасности (SQL-инъекции, XSS, XXE и т. д.);
  • отклонения от норм развития безопасности (MISRA, AUTOSAR);
  • ошибки, актуальные для 64-битных платформ;
  • и т. д.

Полный список диагностик доступен здесь.

Самые интересные предупреждения анализатора

Запустив анализатор на проекте в первый раз, можно получить большое количество предупреждений. Вам может потребоваться некоторое время, чтобы просмотреть их все. Итак, есть ли способ просмотреть предупреждения, которые, скорее всего, указывают на ошибку? Да. PVS-Studio предоставляет специальный механизм под названием «Лучшие предупреждения». Это фильтр, который выбирает самые интересные предупреждения среди всех. Предупреждений не больше 10 — так что можно быстро их просмотреть.

Подробнее об этом фильтре читайте в следующей заметке: «PVS-Studio: 2 возможности для быстрого старта».

Поддерживаемые стандарты кодирования

Вот стандарты кодирования и платформы, которые поддерживает PVS-Studio:

  • C++20;
  • С# 11 и .NET 7;
  • Ява 11.

PVS-Studio также работает с более ранними версиями языков программирования.

Кроссплатформенная интеграция

Сейчас анализаторы для всех языков (C, C++, C#, Java) работают на 3-х основных платформах: Windows, Linux и macOS.

Анализаторы Java и C#, а также плагины для Rider, CLion и IntelliJ IDEA пока нельзя использовать на процессорах Apple ARM (M1, M2 и т. д.). Сейчас мы собираем отзывы пользователей, чтобы понять спрос на это. Итак, если вы хотите, чтобы PVS-Studio поддерживал эти процессоры — дайте нам знать.

Интеграция с IDE

Мы стремимся сделать PVS-Studio доступным в различных средах. Одно из направлений — разработка плагинов для IDE. Теперь вы можете использовать плагины PVS-Studio для следующих IDE:

  • визуальная студия;
  • Код Visual Studio;
  • Райдер;
  • КЛион;
  • IntelliJ ИДЕЯ;
  • Создатель Qt.

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

Анализ коммитов, запросов на включение и мерж-реквестов

Анализ проекта лучше проводить регулярно. Однако разработчикам часто требуется проверить только часть кода. Например, при работе в IDE разработчик изменил несколько файлов. В этом случае имеет смысл проверять не весь проект, а только измененные файлы. Поэтому в PVS-Studio предусмотрен режим инкрементного анализа. Это помогает быстрее проводить анализ, а разработчикам не нужно просматривать предупреждения для незнакомого им кода.

Иногда перед разработчиками стоит другая задача — проверить измененный код в рамках CI. Это актуально для проверки коммитов, пулл-реквестов и мерж-реквестов. Ранее анализатор не предоставлял такой возможности. Мы добавили его в одном из первых релизов. Информацию о том, как настроить данный вид анализа, вы можете найти в документации.

Межмодульный анализ

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

В анализаторе C# межмодульный анализ включен по умолчанию. В анализаторе C++ этот режим по умолчанию отключен. Для его включения необходимо установить соответствующее значение опции Межмодульный анализ Cpp.

Форматы отчетов для других инструментов

Результаты анализа PVS-Studio можно преобразовать в форматы, используемые в других инструментах. Итак, вы проверяете код с помощью PVS-Studio, конвертируете результаты в формат для TeamCity, а затем работаете с ними (с ними можно работать и в этой CI-системе).

Новые поддерживаемые форматы: TeamCity, SARIF, GitLab, MISRA Compliance. Чтобы просмотреть полный список форматов, прочтите документацию о том, как просматривать и конвертировать результаты анализатора.

Заключение

С полной историей изменений вы можете ознакомиться на странице истории релизов. Если вы хотите быть в курсе новинок анализатора, вы можете подписаться на нашу рассылку новостей.

Вы нашли эту статью вдохновляющей? Почему бы вам не попробовать анализатор? Не медлите и скачайте его с этой страницы.