За окном январь 2025 года, а это значит, пора подвести итоги за 2024 год! В этой статье вы узнаете, чем занималась команда PVS-Studio в прошлом году: новые плагины, интеграции, фичи и многое другое!
PVS-Studio — это статический анализатор, выявляющий ошибки и потенциальные уязвимости в коде программ на C, C++, C# и Java. Инструмент помогает контролировать качество кода и обеспечить безопасность проекта.
Больше информации — на странице продукта.
Поддержка анализа Java проектов в Visual Studio Code
В 2023 году появился плагин PVS-Studio для Visual Studio Code. Он прошёл довольно большой путь от простого средства просмотра отчётов до появления возможности проведения анализа C++ и C# проектов. Но на этом его путь не заканчивается!
В 2024 году наша команда поддержала анализ Java проектов в плагине PVS-Studio для Visual Studio Code! Теперь функционал плагина для Java включает:
Улучшение разметки ложноположительных срабатываний и другие исправления для Visual Studio
В плагине PVS-Studio для Visual Studio в 2024 году появился режим, который при разметке ложноположительных срабатываний учитывает хэш исходной строки кода, на которой произошло срабатывание.
Хэши использовались и ранее, например, для навигации и работы suppress-файлов. Новый же вариант их использования позволяет понять, менялась ли строка с того момента, как срабатывание на ней было размечено как ложноположительное. Если строка изменялась, отметка ложноположительного срабатывания перестанет подавлять предупреждение.
std::string(4, std::string().at(0)); //-V530 //-VH"920700501"
Примечание. О новой функции разметки ложноположительных срабатываний можно прочитать в соответствующем разделе документации по ссылке.
Помимо этого, в версии 7.33 мы исправили проблемы с использованием плагина PVS-Studio с Visual Studio 2022 версий 17.12 и выше. Об этой проблеме, кстати, нам сообщил пользователь. Наша поддержка всегда готова помочь в решении различных проблем, поэтому не стесняйтесь сообщать нам, если вдруг что-то сломалось или появились идеи по улучшению анализатора!
Новые требования для IntelliJ IDEA, CLion и Rider
Для сохранения возможности поддерживать плагины и обеспечивать их стабильную работу в 2024 году минимальные поддерживаемые версии IDE от JetBrains для наших плагинов были подняты до версии 2022.2.
Помимо этого, в плагине PVS-Studio для CLion была добавлена поддержка файлов конфигурации диагностических правил .pvsconfig
.
Примечание. Подробнее о работе файлов .pvsconfig
можно прочитать в нашей документации по ссылке.
Доработка плагина для Qt Creator
Плагин PVS-Studio для Qt Creator, как и плагин для Visual Studio Code, появился в позапрошлом (2023) году. В 2024 году мы существенно расширили количество поддерживаемых плагином версий этой IDE:
Кроме добавления новых версий, мы также начали убирать из поддержки устаревшие. Первой из них оказалась Qt Creator 8.x, вышедшая в июле 2022 года. Для этой IDE мы решили поддерживать все официальные версии не старше двух лет.
Примечание. О плагине PVS-Studio для Qt Creator можно прочитать в нашей документации по ссылке.
"Удвоение" плагина для SonarQube
Плагин PVS-Studio для SonarQube в 2024 году разделился на два плагина.
API SonarQube изменился, из-за чего в списке срабатываний неправильно отображалась достоверность срабатываний. Для того, чтобы исправить это недоразумение, пришлось разделить плагин на два. Об этих изменениях можно прочитать в нашей статье по ссылке.
Примечание. О том, как использовать плагин PVS-Studio для SonarQube, можно прочитать в соответствующем разделе нашей документации.
Новая интеграция — CodeChecker
В 2024 году по запросу наших пользователей мы добавили поддержку отчётов PVS-Studio в веб-интерфейс для агрегации и просмотра отчётов анализаторов с открытым исходным кодом CodeChecker.
Примечание. Подробнее об использовании PVS-Studio в CodeChecker можно прочитать в соответствующем разделе документации по ссылке.
Новый функционал интеграции в Unreal Engine
В прошлом году для интеграции PVS-Studio в Unreal Engine мы добавили поддержку работы с системой распределённой сборки SN-DBS. Изменения появились с версии Unreal Engine 5.5.
Примечание. Подробнее об интеграции PVS-Studio с SN-DBS написано в соответствующем разделе документации.
Помимо этого, в работе анализатора PVS-Studio с Unreal Engine произошло ещё множество разных изменений, о которых мы писали в недавней статье, которую можно прочитать по ссылке.
Обновления в документации
На протяжении года мы продолжали совершенствовать нашу документацию. Помимо новых разделов, связанных с новыми функциями и диагностиками, также обновлялись и уже существующие.
Например, мы обновили и актуализировали раздел документации, посвящённый использованию анализатора в облачной CI-системе CircleCI, а в разделе документации об анализе C и C++ проектов на основе JSON Compilation Database появились пункты о работе со сборочными системами Bazel и SCons.
Анализ модифицированных файлов
Новый режим анализа модифицированных файлов вычисляет хэш файлов и записывает их в кэш зависимостей. При следующем запуске анализ будет проводиться только для тех файлов, хэш которых изменился за время с прошлого анализа.
Сейчас анализ модифицированных файлов доступен на Windows для MSBuild С, С++ и С# проектов с помощь утилиты PVS-Studio_Cmd
и на Linux/macOS для С# проектов с помощью утилиты pvs-studio-dotnet
.
Примечание. Подробнее о новом режиме анализа модифицированных файлов можно прочитать в нашей документации по ссылке.
PVS-Studio теперь на ARM!
Статический анализатор PVS-Studio работает на macOS с 2019 года, однако только на процессорах с архитектурой x86.
Но не после версии 7.34! В последнем релизе 2024 года появилась полноценная поддержка PVS-Studio на macOS для процессоров с архитектурой ARM.
Примечание. Скачать PVS-Studio можно на странице загрузок, а прочитать о том, как его установить, можно в соответствующем разделе документации по ссылке.
Используем анализатор по ГОСТ-Р 71207-2024
В апреле 2024 вышел ГОСТ-Р 71207-2024, посвящённый использованию статических анализаторов в процессе разработки безопасного программного обеспечения. Мы довольно много говорили об этой теме и даже выпустили целую серию вебинаров об этом стандарте.
В плагинах PVS-Studio для Visual Studio, Visual Studio Code, а также в утилите PlogConverter появилась возможность фильтровать ошибки по новым значениям параметра SAST ID, соответствующим классификации критических ошибок по ГОСТ-Р 71207-2024
Расширение системы анализа отдельных файлов на языке C и C++
В 2024 году мы расширили систему анализа отдельных файлов в утилите pvs-studio-analyzer
с помощью флага ‑‑source-files
. Теперь использование утилиты в условиях отличия кэша зависимостей компиляций для C и C++ файлов от структуры проекта стало более удобным.
Примечание. Подробнее о кэше зависимостей компиляции для C и C++ проектов можно прочитать в соответствующем разделе документации по ссылке.
Поддержка GNU RISC-V GCC Toolchain
А ещё мы добавили поддержку GNU RISC-V GCC Toolchain для платформы RISC-V для C и C++ анализатора PVS-Studio.
Сокращение объёма памяти при анализе инстанцирований шаблонов в C++
Мы постарались сократить объем памяти, необходимый для анализа инстанцирований шаблонов в C++. Благодаря усилиям нашей команды удалось значительно снизить среднее потребление ресурсов анализатором. На одном из проектов, который мы используем при тестировании продукта, потребление памяти снизилось на более чем 90%:
Попробуйте обновлённый анализатор PVS-Studio по ссылке!
Механизм пользовательских аннотаций
Ранее в анализаторе PVS-Studio существовали различные механизмы, которые помогали адаптировать анализатор под кодовую базу. Они позволяли настраивать диагностические правила под потребности пользователя.
Примечание. Подробнее о дополнительной настройке диагностических правил C и C++ анализатора можно прочитать в соответствующем разделе документации по ссылке.
Однако в этом году мы пошли дальше и реализовали механизм пользовательских аннотаций в файлах формата JSON. Этот формат отличается большей гибкостью, возможностью расширения и лучшей читаемостью по сравнению с предыдущим. Кроме того, использование этого метода для разметки пользовательских функций и типов позволяет аннотировать даже third-party код. Уже сейчас новая система пользовательских аннотаций позволяет, например, задать:
std::unique_ptr
, std::string
, std::vector
и т.д.;cheap-to-copy
, copy-on-write
и т.д. noreturn
), объявлена как устаревшая и т.д.;nullable
-объект должен быть валидным, параметр должен отличаться от другого параметра и т.д.;nullable
-объект всегда валидный и т.д.Чем могут помочь анализатору написанные вами аннотации? Ответ на этот вопрос можно найти в статье "Пользовательские аннотации кода для PVS-Studio".
Примечание. Подробнее о работе механизма пользовательских аннотаций можно прочитать в соответствующем разделе документации по ссылке.
Улучшения в работе анализатора
В этом году было проведено множество изменений, касающихся разбора кода на C++. Мы достигли следующих улучшений:
И внедрили новые возможности:
boost::unique_ptr
, boost::shared_ptr
;Диагностики общего назначения
По запросам пользователей
Cтандарт MISRA
Из них следующие диагностики классифицируются согласно ГОСТ Р 71207–2024 как критические:
За год мы успели выпустить 45 статей, посвящённых языку C++. Как оказалось, наиболее популярные из них — про массивы:
В течение года мы работали над особо крупным проектом, который приобретает популярность. И уже сейчас мы с радостью представляем полную версию электронной книги, посвящённой неопределённому поведению в C++. Книга, созданная в сотрудничестве специалиста по безопасности программного обеспечения Дмитрия Свиридкина и сооснователя PVS-Studio Андрея Карпова, станет ценным ресурсом для программистов.
"Путеводитель C++ программиста по неопределённому поведению" состоит из 12 частей, в каждой из которых собраны самые загадочные и экзотические аспекты неопределённого поведения. Авторы делятся практическими примерами и советами, позволяющими избежать распространённых ошибок при разработке. Книга будет не только полезной, но и увлекательной для всех, кто работает с языком C++.
Поддержка новой версии .NET
В 2024 году команда C# анализатора поддержала анализ проектов под .NET 9. Теперь он проводится с учётом всех нововведений.
Примечание. Если вам интересно узнать, что нового появилось в .NET 9, то можете ознакомиться с нашей обзорной статьёй нововведений.
Поддержка новых версий .NET и C# в PVS-Studio после их выпуска появляется достаточно оперативно. Чтобы не пропустить выход новой версии анализатора, приглашаем подписаться на рассылку пресс-релизов.
Пользовательские аннотации для C# анализатора
Как и в C++, в C# анализатор мы добавили возможность проставления пользовательских аннотаций в формате JSON.
Пользовательские аннотации — способ разметки типов и функций в формате JSON с целью дать анализатору дополнительную информацию. Благодаря этой информации анализатор может находить больше ошибок в коде. Такие аннотации необходимо поместить в специальный файл формата JSON.
Сейчас в C# части анализатора PVS-Studio пользовательские аннотации реализованы только для taint-анализа. Подобный способ разметки требуется для ГОСТ Р 71207–2024.
Теперь PVS-Studio предоставляет пользователям возможность размечать источники (процедуры-источники) и приёмники (процедуры-стоки) чувствительных данных. Таким образом, анализатор сможет точнее искать потенциальные уязвимости для конкретного проекта.
Стоит отметить, что в будущем мы планируем расширять возможности пользовательских C# аннотаций (не только для taint-анализа).
Примечание. Более детально о возможностях пользовательских C# аннотаций можно почитать в документации.
Настоящее и будущее Unity
В 2024 году особое внимание команды C# анализатора было направлено на Unity-специфичные диагностики.
Примечание. Если вам интересно, как статический анализ может помочь в поиске ошибок и оптимизации Unity-проектов, то приглашаем ознакомиться с вот этой статьёй.
Общий список новых Unity-специфичных диагностических правил:
В рамках исследования GameDev направления мы не забываем изучать новые версии Unity. Если вам интересно узнать, что нового в Unity 6, то приглашаем изучить нашу обзорную статью.
В 2025 году мы планируем добавить ещё больше диагностик, посвящённых оптимизации и ориентированных на Unity. Если у вас есть мысли по поводу того, какие правила были бы полезны при разработке под этот игровой движок, пожалуйста, напишите нам.
Различные улучшения
.plog
и .json
при работе из Visual Studio.Диагностики общего назначения
Микрооптимизации
Из них следующие диагностики классифицируются согласно ГОСТ Р 71207–2024 как критические:
За год C# команда выпустила более 20 статей, посвящённых проверке проектов и различных особенностей C#. Вот самые популярные из них:
А ещё у нас появилась новая постоянная рубрика — .NET Digest. В нём мы освещаем самые интересные новости и события в мире .NET! С последней частью можно ознакомиться тут.
Taint-анализ
Декабрьский релиз привнёс в Java анализатор механизм, позволяющий разрабатывать taint-диагностики. Это позволило нам начать значительно расширяться как SAST-решению.
Taint-анализ — это технология, позволяющая отслеживать распространение по программе данных, пришедших из внешнего контекста. Попадание таких данных в определённые ключевые точки способно привести к различным уязвимостям.
Первой taint-диагностикой в Java анализаторе стала V5309, в рамках которой происходит поиск потенциальных SQL-инъекций.
Если вам хочется немного углубиться в теорию о том, что из себя представляет анализ заражённых данных и как подобные механизмы реализуются, рекомендую прочитать нашу статью об этом.
Установка таймаута для анализа в IDEA
Мы добавили возможность устанавливать таймаут для анализа в нашем плагине для IDEA. Теперь вы можете устанавливать в плагине временной лимит, по прошествии которого анализ будет завершаться автоматически.
И это не всё. Уже в следующем релизе запланировано большое количество изменений и доработок в нашем IDEA плагине. Следите за обновлениями :)
Диагностики общего назначения
Из них следующие диагностики классифицируются согласно ГОСТ Р 71207–2024 как критические:
Также за 2024 год у нас вышли статьи, в которых мы описывали процесс создания диагностик. Рекомендую ознакомиться:
Мы постарались рассказать обо всех важных нововведениях в анализаторе за 2024 год, но даже так мы охватили лишь часть. Полный список изменений можно найти на странице истории релизов.
А если вам интересно своевременно узнавать об обновлениях в анализаторе, подписывайтесь на наши рассылки пресс-релизов (а ещё там появилась рассылка с IT-ивентами для разработчиков и дайджест статей).
А какие изменения вы бы хотели увидеть в PVS-Studio в 2025 году? Делитесь с нами своими идеями в комментариях!
Не забывайте обновляться до последней версии PVS-Studio! Все эти улучшения будут доступны в ней! Самую актуальную версию вы всегда можете найти здесь.
0