Вышел новый релиз PVS-Studio — 7.30. Были добавлены пользовательские аннотации, появились новые возможности, различные улучшения работы PVS-Studio с Unreal Engine, и ещё много других изменений! Больше подробностей в этой заметке.
Загрузить актуальную версию PVS-Studio можно здесь.
Поддержка пользовательских аннотаций в C++ анализаторе
В C++ анализаторе PVS-Studio был реализован механизм пользовательских аннотаций — способ разметки типов и функций в формате JSON с целью дать анализатору дополнительную информацию.
Этот режим позволяет пометить функцию как опасную для использования, определить собственный тип как nullable и многое другое. Благодаря этой информации анализатор может находить больше ошибок в коде.
Больше об этом режиме можно узнать в документации.
Улучшение работы с Unreal Engine
В этом релизе мы постарались улучшить опыт работы при использовании PVS-Studio с Unreal Engine. Было внесено множество улучшений, доступных начиная с версии UE 5.4:
Реализована многофайловая навигация по предупреждениям, содержащимся в отчёте анализатора PVS-Studio;
Исправлена ошибка, приводящая к падению анализа в Unreal Engine 5.3 при запуске анализа через флаг компиляции -StaticAnalyzer=PVSStudio.
Поддержка отключения стандартного вывода Unreal Build Tool в консоль при проведении анализа. Это может значительно сократить время постобработки отчёта анализатора в проектах с большим количеством предупреждений;
Анализ автоматически сгенерированных файлов .gen.cpp теперь по умолчанию отключён. Включение анализа таких файлов возможно через специальную настройку;
Добавлена настройка, позволяющая запускать анализатор только на файлах проекта, пропуская модуль ядра Unreal Engine. Использование этой настройки позволяет значительно ускорить процесс анализа.
Новые возможности C++ анализатора
Для C++ анализатора PVS-Studio был реализован анализ стандартного типа bool, появившегося в стандарте C23 языка С. Это улучшило поддержку MISRA Essential Type Model, а также диагностик, основанных на MISRA Essential Type Model.
Для C++ анализатора PVS-Studio была улучшена работа со стандартной библиотекой С++, а также добавлена поддержка большего количества интринзиков компилятора, например, __add_lvalue_reference, __add_pointer, __add_rvalue_reference и других.
Была добавлена поддержка GNU RISC-V GCC Toolchain для платформы RISC-V для C++ анализатора PVS-Studio.
Доработка системы анализа отдельных файлов
Была расширена система анализа отдельных файлов с помощью флага --sourceFiles и повторной генерации кэша зависимостей проекта.
Теперь данный режим устойчив к ситуациям, когда кэш зависимостей находится в состоянии, не соответствующем структуре проекта. Такое может случиться, например, в случае использования множественных веток в системе контроля версий.
Помимо этого, была добавлена возможность запуска с полным обновлением кэша: это позволяет проводить анализ с полностью корректным кэшем зависимостей в случае, если поддержание его в актуальном состоянии было невозможно.
Больше об этом режиме можно узнать в документации.
Новые диагностики
C, С++
V1105. Suspicious string modification using the 'operator+='. The right operand is implicitly converted to a character type.
V1106. Qt. Class inherited from 'QObject' does not contain a constructor that accepts a pointer to 'QObject'.
V1107. Function was declared as accepting unspecified number of parameters. Consider explicitly specifying the function parameters list.
C#
V3196. Parameter is not utilized inside the method body, but an identifier with a similar name is used inside the same method.
V3197. The compared value inside the 'Object.Equals' override is converted to a different type that does not contain the override.
V3198. The variable is assigned the same value that it already holds.
Java
V6110. Using an environment variable could be unsafe or unreliable. Consider using trusted system property instead.
V6111. Potentially negative value is used as the size of an array.
V6112 . Calling the 'getClass' method repeatedly or on the value of the '.class' literal will always return the instance of the 'Class' type.
Анонс нового вебинара
Недавно мы провели наш новый вебинар на тему "Трудности при интеграции SAST, как с ними справляться", где разобрали основные проблемы, возникающие при интеграции SAST-инструментов на legacy-проект.
Запись вебинара доступна здесь
Но это была лишь первая часть, на которой мы разобрались с теорией, а значит пора переходить к практике!
Мы анонсируем продолжение темы интеграция SAST-решений в новом вебинаре "Базовые сценарии интеграции SAST-решения в legacy-проект на примере PVS-Studio". На нём мы рассмотрим базовый сценарий интеграции PVS-Studio, постараемся не утонуть в сообщениях анализатора и покажем, как можно интегрировать PVS-Studio в CI систему.
Вебинар пройдёт 18 апреля в 14:00 (МСК). Зарегистрироваться можно здесь.
Статьи
Для тех, кто пишет на C++:
Как не надо проверять размер массива в С++
Почему проверять результат вызова malloc c помощью assert плохая идея
Проверяем Blender
Притча о нулевом указателе для ленивых C программистов
Для тех, кто пишет на C#:
Непобедимый null: копаемся в исходном коде nopCommerce
Быстро и легко ищем баги в играх на Unity (для C# разработчиков)
Для тех, кто пишет на Java:
Что скрывается в коде игрового движка, написанного на Java?
Применение ООП на практике
Статьи общей тематики:
Статический анализатор подталкивает писать чистый код
Настраиваем статический анализ Unreal Engine проекта
Баги, которые наделали немало шума
Не исправил, а проработал принятие: как некоторые баги в играх стали фичами
Как сломать крышку унитаза и стать спортивнее за счёт компании: поездки PVS-Studio 2023 года
Доклады
В этом релизе наша команда очень активно участвовала в различных мероприятиях. Мы проводили доклады, подкасты и даже интервью! Давайте пройдёмся по самым интересным:
Как статический анализ дополняет TDD
Разные методологии предотвращения и поиска ошибок не конкурируют, а дополняют друг друга. TDD — отличная методология, но и у неё есть недостатки, которые может компенсировать статический анализ кода.
Об этом и многом другом вам расскажет сооснователь PVS-Studio Андрей Карпов в своём докладе:
Подкаст linkmeup
А ещё Андрей Карпов заглянул на подкаст linkmeup, где побеседовал на тему стартапов, форс-мажоров и IT-сферы в России.
Послушать можно тут:
Интервью с Евгением Рыжковым
В этом релизе сооснователь PVS-Studio Евгений Рыжков поучаствовал в интервью с Егором Бугаенко — автором серии книг "Элегантные объекты". Обсудили тему статического анализа, ситуацию на рынке и перспективы технологии.
Предлагаем послушать:
Хотите проверить свой проект с помощью PVS-Studio? Начните с этой страницы.
Если вы хотите получать новости о новых релизах, можете подписаться на рассылку от команды PVS-Studio по ссылке.
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Gleb Aslamov. PVS-Studio 7.30: enhanced integration with Unreal Engine, new C++ analyzer features, and more.
Источник новости: habr.com