Развитие анализатора PVS-Studio ускоряется, и, скорее всего, теперь каждый релиз мы будем сопровождать текстом, чтобы пользователи не пропустили изменения, которые могут быть им полезны. Что интересно, теперь мы не перечисляем всё что добавилось или улучшилось. Скорее, теперь наоборот стоит задача выделить в новости самое главное, чтобы текст не превращался в скучный список изменений. Итак, вашему вниманию предлагается пресс-релиз для PVS-Studio версии 7.09.
Данный раздел не связан с новой версией PVS-Studio, но хочется отметить приятное для нас событие, которое как раз состоялось незадолго до выхода релиза.
6 августа 2020 года компания Forrester Research выпустила исследование под названием Now Tech: Static Application Security Testing, Q3 2020, в которое анализатор PVS-Studio попал как SAST-специализированное решение. Компания Forrester является одним из ведущих исследователей влияния новых и инновационных технологий на бизнес процессы и рынок, поэтому попадание PVS-Studio в данное исследование является хорошим подтверждением (как для наших пользователей, так и для нас самих) актуальности данного направления развития нашего продукта. Отчёт об исследовании доступен для покупки подписчикам и клиентам Forrester Research.
Постоянные читатели нашего блога, наверное, помнят, что мы используем собственный движок для разбора C и C++ кода. В этом есть как свои преимущества, так и недостатки. Язык C++ сейчас быстро развивается и стало понятно, что требуется серьезная переработка ядра анализатора. В противном случае постепенно анализатор начнёт всё хуже разбирать сложные шаблоны и путаться при выведении типов некоторых объектов. Это немного отвлекло нашу команду от разработки новых диагностик. Зато, проделав запланированные работы, мы сможем сократить количество потребляемой памяти, улучшить поддержку C++20 и сделать множество других улучшений. В свою очередь, эти изменения в будущем позволят сделать механизм анализа потока данных многопроходным и это существенно улучшит точность многих уже существующих диагностик.
Новые диагностики общего назначения:
Микрооптимизации:
Отдельно рассмотрим новую диагностику V012: Some warnings could have been disabled.
Некоторые способы подавления ложных срабатываний позволяют полностью отключать диагностики анализатора. В результате часть сообщений будет не просто отмечена как ложные срабатывания, а могут совсем не появиться в отчете.
Чтобы выяснить, какие механизмы участвуют в отключении диагностик, можно включить добавление специальных сообщений в отчёт анализатора.
pvs-studio-analyzer analyze ... --cfg source.cpp.PVS-Studio.cfg
В результате, в отчете анализатора появятся сообщения с кодом V012 и информацией об источниках отключения диагностик. IDE плагины PVS-Studio поддерживают навигацию к причине отключения диагностик в файлах исходного кода и файлах конфигурации правил (.pvsconfig). Пути до файлов конфигурации, содержащих правила исключения срабатываний анализатора, также будут добавлены в отчёт анализатора, в виде сообщений V012.
В C# анализаторе PVS-Studio, для Visual Studio и Rider плагинов расширены возможности навигации по исходным файлам. Теперь для межпроцедурных срабатываний добавлена возможность перехода на потенциально опасные участки кода внутри методов, когда анализатор ругается на вызов такого метода.
Также для C# анализатора PVS-Studio добавлена поддержка переопределения уровней значимости предупреждений в файлах настройки диагностик (.pvsconfig). В C++ анализаторе такая возможность существует уже давно.
Предупреждения анализатора имеют три уровня достоверности: High, Medium, Low. В зависимости от используемых в коде конструкций, анализатор оценивает достоверность предупреждений и присваивает им соответствующий уровень в отчёте.
В некоторых проектах поиск определённых типов ошибок может быть очень важен, независимо от степени достоверности предупреждения. Бывает и обратная ситуация, когда сообщения малополезны, но совсем их отключать не хочется. В таких случаях для диагностик можно вручную задать уровень High/Medium/Low. Для этого следует использовать специальные комментарии, которые можно добавить в файл конфигурации диагностик.
В конфигурационном файле (.pvsconfig) можно написать:
//V_LEVEL_1::3001
//V_LEVEL_2::3010,3020,3030
//V_LEVEL_3::3002
Новые диагностики:
Больше всего новых диагностик в этом релизе добавлено для языка Java. Кстати, на тему создания Java диагностик мы написали небольшую заметку: Под капотом PVS-Studio для Java: разработка диагностик.
Новые диагностики:
С момента предыдущего релиза мы опубликовали в нашем блоге несколько заметок, посвященных интеграции PVS-Studio в процесс разработки. Думаем, они могут оказаться полезными DevOps специалистам и программистам, внедряющих у себя в компании методологию статического анализа кода.