PVS-Studio - это инструмент для поиска ошибок в коде программ на языке C, C++, C#, Java. В релиз PVS-Studio 7.08 вошло много нового и интересного: C# анализатор, в дополнении к работе на ОС семейства Windows, теперь работает также на Linux и macOS; появился вывод результатов анализа в формате TeamCity; поддержана система Perforce в утилите автоматического оповещения разработчиков; появился плагин для среды разработки JetBrains Rider; в Java анализаторе PVS-Studio добавлена возможность поиска проблем совместимости Java SE API. Рассмотрим в статье эти нововведения более подробно.
В конце апреля мы запустили бета-тестирование C# анализатора для Linux и macOS. И достаточно успешно его провели – собрали фидбек, внесли ряд улучшений и исправлений.
И вот теперь, наконец, мы делаем релиз, в который вошёл C# анализатор для Linux и macOS! Таким образом, теперь C# анализатор, равно как C, C++, Java анализаторы, доступен под всеми поддерживаемыми PVS-Studio платформами - Windows, Linux и macOS.
Command-line утилита для анализа C# проектов под Linux \ macOS носит название pvs-studio-dotnet. Особенности установки и использования анализатора описаны в соответствующих разделах документации:
Параллельно с разработкой и тестированием C# анализатора под Linux и macOS мы также вели разработку плагина PVS-Studio для JetBrains Rider. И не менее радостно сообщить, что он также вошёл в релиз и доступен под всеми поддерживаемыми платформами: Windows, Linux, macOS.
Более подробно установка и использование плагина описывается в разделе документации "Работа PVS-Studio в JetBrains Rider".
В Windows версии анализатора, в command line утилите PVS-Studio_Cmd, добавлен новый режим работы проверки заданного списка файлов, полезный для настройки автоматической проверки pull \ merge request'ов и коммитов.
Вообще-то говоря, в предыдущих версиях анализатора уже был аналогичный режим, однако его использование было не самым удобным, особенно для C++ проектов.
Во-первых, в случае анализа как C++, так и C# проектов, для указания списка файлов на анализ (через флаг ‑‑sourceFiles) требовался XML файл. Т.е. его нужно было специальным образом формировать из списка файлов в PR, MR, commit'е, а это – какой-никакой дополнительный шаг.
Во-вторых, если было нужно анализировать исходные файлы на основе .h файлов (поменяли .h файл, нужно проанализировать все исходные файлы, куда он включался явно или косвенно), требовалось наличие артефактов сборочной системы (tlog-файлов), которые предварительно нужно было получить, проводя сборку проверяемого проекта.
Теперь использовать этот режим стало намного проще и удобнее – не нужны ни tlog файлы, ни специальные XML файлы. Достаточно просто использовать всё тот же флаг ‑‑sourceFiles, в который нужно передать простой текстовый файл со списком файлов на анализ. И всё, никаких tlog файлов! Для решения задачи хранения зависимостей анализатор теперь создаёт специальный кэш зависимостей между заголовочными и исходными файлами, вместо использования tlog файлов, что намного упрощает данный режим использования.
Более подробно данный режим описан в подразделе "Задание отдельных файлов для проверки" раздела документации "Проверка проектов Visual Studio / MSBuild / .NET Core из командной строки с помощью PVS-Studio".
Добавлено девять диагностических правил. Среди них, диагностика V6078 явно заслуживает больше внимания, и мы рассмотрим её отдельно в следующем разделе.
C, C++:
Java:
Доклад Dalia Abo Sheasha "Migrating beyond Java 8", услышанный нами на осенней конференции Joker 2019, вдохновил нас на реализацию нового диагностического правила, которое позволяет выявлять несовместимости в Java SE API между разными версиями Java.
На текущей момент уже вышла Java SE 14. Несмотря на это, многие компании продолжают использовать прежние версии Java (Java SE 6, 7, 8, ...). В связи с тем, что время идет, и Java все время обновляется, проблема совместимости различных версий Java SE API с каждым годом становится все актуальней.
Когда выходят новые версии Java SE, то они, как правило, обратно совместимы с более ранними версиями, то есть, например, приложение, разработанное на основе Java SE 8, должно без проблем запуститься на 11 версии Java. Однако на практике может возникать некоторая несовместимость в ряде классов и методов. Эта несовместимость заключаются в том, что некоторые API претерпевают изменения: удаляются, меняются в поведении, помечаются как устаревшие и многое другое.
Эта проблема только обострится, когда вы начнете задумываться о миграции своего проекта на более свежую Java SE. Или же когда в техническую поддержку вашего приложения будут все чаще и чаще приходить письма о том, что приложение некорректно себя ведет или вообще не может запуститься.
Чтобы помочь с решением этой проблемы, мы добавили в анализатор "большое" диагностическое правило V6078. Более подробно история разработки диагностики представлена в статье "Анализатор PVS-Studio: выявления потенциальных проблем совместимости Java SE API".
Почти одновременно с выходом релиза мы подружили PVS-Studio с Compiler Explorer. Конечно, к релизу это не имеет прямого отношения, но хочется ещё раз рассказать тем, кто пропустил эту новость.
Благодаря проекту Compiler Explorer вы можете быстро подготовить синтетические примеры C и C++ кода, и посмотреть, как на них поведёт себя анализатор PVS-Studio.
Посмотреть и попробовать: Online-примеры (C, C++).