В этой статье расскажу о том, что появилось в PVS-Studio за последние три года, и чем это полезно пользователям анализатора. Статья модульная: можно не читать от начала до конца, а посмотреть только те части, которые интересны.
PVS-Studio — статический анализатор, который ищет ошибки и дефекты безопасности в коде на C, C++, C# и Java. Инструмент помогает искать проблемы на ранних этапах разработки, когда исправить их проще и дешевле. Так разработчики тратят меньше времени на отладку, а менеджеры экономят деньги.
Больше информации — на странице продукта.
Что нового: кратко
Ниже кратко описываю основные улучшения, которые появились в продукте с начала 2020 до конца 2022. Подробности вынес в соответствующие разделы.
Общее
Плагины PVS-Studio доступны в большем количестве IDE: Visual Studio, Visual Studio Code, Rider, CLion, IntelliJ IDEA, Qt Creator.
Фильтр "Best Warnings" упростит знакомство с анализатором. Он в один клик (буквально) отсортирует предупреждения анализатора, оставив те, которые вероятнее всего указывают на ошибку. Отфильтрованных предупреждений будет не больше 10, так что посмотреть их получится быстро.
Анализаторы для всех поддерживаемых языков (C, C++, C#, Java) работают на Windows, Linux и macOS. Под Apple ARM на данный момент работает только консольный C++ анализатор (через Rosetta).
С++ анализатор умеет выполнять межмодульный анализ: это поможет находить больше проблем. В C# аналогичная функциональность тоже есть.
Анализатором можно проверять коммиты, pull и merge requests. Для этого используется режим проверки списка файлов.
Результаты работы PVS-Studio можно конвертировать в новые форматы: TeamCity, SARIF, GitLab, MISRA Compliance.
Анализатор работает с кодом на C++20, C# 11 и Java 11. Более старые версии языков также поддерживаются.
На момент написания статьи в PVS-Studio больше 1 000 диагностических правил, выявляющих различные проблемы в коде.
Security
Полностью покрыт список угроз веб приложениям OWASP Top 10 2021: на каждую категорию есть минимум одно диагностическое правило PVS-Studio.
Диагностики PVS-Studio размечены согласно CWE, OWASP ASVS и SEI CERT Coding Standards.
C# анализатор выполняет анализ компонентного состава ПО (SCA).
Embedded
В PVS-Studio появились диагностики, которые выявляют отклонения от стандартов безопасной разработки от MISRA и AUTOSAR.
В режиме работы Wrap Compilers утилиты CLMonitor и C and C++ Compiler Monitoring UI не пропускают запуски компиляторов. Это решает проблему, когда утилиты не анализировали часть кода, если процесс компиляции отрабатывал быстро.
Анализатор работает с большим количеством компиляторов для встраиваемых систем: IAR ARM, MPLAB XC8, QNX, C6000-CGT.
GameDev
PVS-Studio работает с проектами как на Unreal Engine 4, так и на Unreal Engine 5.
Анализатор лучше понимает типы, специфичные для Unreal Engine и Unity.
В проектах на Unreal Engine можно использовать baselining и больше настроек анализатора. Для Unity все эти возможности тоже есть.
Что нового: подробно
Security
Поиск дефектов безопасности — одно из основных направлений развития анализатора. В PVS-Studio появляются новые механизмы (например, taint-анализ), которые помогают находить в коде больше потенциальных уязвимостей. Диагностики анализатора размечаются согласно CWE, SEI CERT и OWASP ASVS — это упростит работу с результатами анализа экспертам информационной безопасности.
PVS-Studio покрывает все категории списка самых критичных угроз безопасности — OWASP Top 10 2021. Это значит, что на каждую категорию списка есть минимум одно диагностическое правило, которое ловит соответствующие проблемы. Какие, например? SQL-инъекции, XSS, использование устаревших криптографических алгоритмов, хранение паролей в исходном коде и т. п.
Пользователи PVS-Studio, работающие с C# проектами, теперь могут искать зависимости проектов от уязвимых компонентов. Для этого PVS-Studio выполняет анализ компонентного состава ПО (SCA): изучает, какие компоненты используются в приложении, и ищет среди них те, которые содержат известные уязвимости.
Полезные ссылки:
Таблицы соответствия диагностик PVS-Studio списку потенциальных уязвимостей и стандартам безопасной разработки:
- Common Weakness Enumeration (CWE)
- OWASP ASVS (Application Security Verification Standard)
- SEI CERT Coding Standards
Среди всех дефектов безопасности выделяют наиболее опасные и распространённые. Узнать о том, как PVS-Studio помогает в борьбе с ними, можно здесь:
Embedded
Ещё одно направление развития анализатора — проверка кода для встраиваемых систем. Здесь сразу несколько аспектов: поддержка стандартов безопасной разработки (MISRA, AUTOSAR), нового окружения и компиляторов, используемых в embedded-разработке.
Компиляторы
В мире embedded-разработки используется множество различных компиляторов, которые анализатор должен поддерживать. Поддержка кода под новые компиляторы позволит большему количеству разработчиков использовать анализатор. Это — одно из направлений, в котором мы работаем. Например, за 3 года PVS-Studio научился понимать код для следующих компиляторов: IAR ARM, MPLAB XC8, QNX, C6000-CGT.
Полный список поддерживаемых компиляторов находится на странице продукта (раздел "Поддерживаемые языки и компиляторы").
Поддержка стандартов безопасной разработки
Стоимость ошибок в коде для встраиваемых систем велика. Чтобы снизить вероятность ошибки, придумали стандарты безопасной разработки. Следуя их рекомендациям, разработчики смогут писать код, который легче читать и сопровождать. Такой код меньше подвержен ошибкам и более безопасен.
Чтобы искать отклонения от стандартов безопасной разработки, в PVS-Studio было добавлено несколько десятков специальных диагностик. По ссылкам можно посмотреть, отклонения от каких правил безопасной разработки ищут диагностики анализатора:
При работе со стандартами MISRA может понадобиться отчёт MISRA Compliance. Если понадобится, почитайте в статье, как его получить.
Улучшения системы мониторинга компиляции
Важное улучшение, о котором хочется упомянуть, касается утилит CLMonitor и C and C++ Compiler Monitoring UI. Они проверяют C и C++ проекты на Windows независимо от сборочной системы. Для сбора необходимой информации используется перехват процессов компиляции.
У утилит был недостаток, который наиболее заметен при разработке ПО для встраиваемых систем. Если код компилировался быстро, время жизни процесса было коротким. Из-за этого система могла пропускать вызовы компилятора, и как следствие — анализировался не весь код проекта.
Если раньше вы сталкивались с подобными проблемами, рекомендую попробовать новый режим — Wrap Compilers. Он перехватывает все запуски компиляторов вне зависимости от того, насколько быстро компилируется код. А значит и проблем с тем, что анализируется не весь код, возникнуть не должно.
GameDev
Ошибки в игровой индустрии не так критичны, как в случае со встраиваемыми системами, но всё равно могут обходиться дорого. Поэтому статический анализ актуален и в сфере разработки игр.
Мы улучшаем интеграцию PVS-Studio с двумя игровыми движками: Unreal Engine и Unity.
Unity
С проектами на Unity PVS-Studio работает так же, как и с другими C# проектами: в том же окружении (командная строка, Visual Studio, Rider) и с полным набором функций — можно скрывать предупреждения на legacy-код, подавлять ложные предупреждения и т. п.
Касательно Unity мы фокусируемся на том, что учим анализатор понимать Unity-специфичные типы: как ведут себя методы, проверки на null в Unity-стиле и т. п. Это помогает находить больше возможных ошибок и выдавать меньше ложноположительных предупреждений.
Документация по анализу Unity проектов.
Unreal Engine
Проекты на Unreal Engine используют собственную сборочную систему — Unreal Build Tool. Из-за этого некоторые функции анализатора, доступные для Visual C++ проектов, для UE-проектов были недоступны (например, отключение предупреждений на legacy-код).
Мы постоянно улучшаем интеграцию с проектами на Unreal Engine. Наиболее значимые обновления:
- PVS-Studio теперь умеет проверять проекты не только на UE 4, но и на UE 5;
- можно cкрывать предупреждения на legacy-код — так начать использовать анализатор будет проще;
- запускать анализ проектов можно не только из консоли, утилиты C and C++ Compiler Monitoring UI и Visual Studio, но и из JetBrains Rider;
- доступно больше настроек PVS-Studio;
- анализатор лучше понимает специфичные для движка типы (в частности — аналоги контейнеров из стандартной библиотеки C++).
Документация по анализу Unreal Engine проектов.
Общее
Диагностические правила
За 3 года в PVS-Studio было добавлено около 300 диагностических правил, а общее их количество уже превышает 1 000.
Диагностики ищут в коде:
- ошибки общего плана (разыменование нулевых указателей, неправильное использование функций и т. п.);
- дефекты безопасности (SQL-инъекции, XSS, XXE и т. п.);
- отклонения от стандартов безопасной разработки (MISRA, AUTOSAR);
- ошибки, актуальные для 64-битных платформ;
- и т. п.
Полный список диагностик доступен на этой странице.
Самые интересные предупреждения анализатора
При первом запуске анализатора на проекте он может выдать большое количество предупреждений. Чтобы просмотреть их все, может понадобиться много времени. Можно ли как-то посмотреть те, которые вероятнее всего указывают на ошибку? Да. Для этого в PVS-Studio есть специальный механизм — "Best Warnings". Это фильтр, который отбирает среди всех предупреждений наиболее интересные. Их будет не больше 10 — посмотреть их получится быстро.
Больше информации об этом фильтре я собрал в заметке "PVS-Studio: 2 фишки для быстрого старта".
Поддерживаемые стандарты языков программирования
Стандарты языков программирования и платформы, с которыми работает PVS-Studio:
- C++20;
- C# 11 и .NET 7;
- Java 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;
- Visual Studio Code;
- Rider;
- CLion;
- IntelliJ IDEA;
- Qt Creator.
В документации есть руководства по использованию анализатора в каждой из перечисленных IDE.
Анализ коммитов, pull и merge requests
Полный анализ проекта нужно выполнять регулярно. Однако часто нужно проверить только часть кода. Например, при работе в IDE разработчик поправил несколько файлов: логично проверить не весь проект, а только изменённые файлы. Так анализ пройдёт быстрее, и не придётся смотреть предупреждения на код, с которым разработчик не работал. Для этого сценария в PVS-Studio есть режим инкрементального анализа.
Иногда бывает другая задача — проверка изменённого кода в рамках CI. Это актуально для проверки коммитов, pull и merge requests. Раньше такой возможности не было, в одном из прошлых релизов мы её добавили. Как настроить этот тип анализа, описали в документации.
Межмодульный анализ
В режиме межмодульного анализа PVS-Studio учитывает информацию не только из анализируемой, но и связанных единиц трансляции. Анализ получается более глубоким, что даёт возможность находить больше проблем в коде.
В C# анализаторе межмодульный по умолчанию включён, а в C++ анализаторе — выключен. Чтобы включить, нужно выставить соответствующее значение опции "Intermodular Analysis Cpp".
Форматы отчётов для других инструментов
Результаты анализа PVS-Studio можно конвертировать в форматы, используемые в других инструментах. Например, проверяете код с помощью PVS-Studio, результаты преобразуете в формат для TeamCity и дальше работаете с ними в том числе в этой CI-системе.
Новые поддерживаемые форматы: TeamCity, SARIF, GitLab, MISRA Compliance. Полный список форматов — в документации об утилитах конвертации.
Заключение
Полная история изменений хранится на странице истории релизов. Если интересно своевременно узнавать, что нового появляется в анализаторе, подписывайтесь на рассылки пресс-релизов.
Что-то из статьи нашло отклик и захотелось попробовать анализатор? Загрузите его с этой страницы.
Комментарии (3)
phoaw
31.01.2023 20:18+1вы уже готовы отчет по исходникам яндекса дать?)
foto_shooter Автор
31.01.2023 20:21Не проверяем слитые исходники.
Вот как Яндекс заопенсорсит что-нибудь — это пожалуйста. :)
foto_shooter Автор
Если вы следите за пресс-релизами или подписаны на рассылки, то вероятно знаете большую часть описанного. Как вариант — предлагаю пробежаться по разделу "Что нового: кратко".
И в опросе проголосуйте, пожалуйста. :)