Сегодня важный день – после 28 релизов шестой версии мы выпускаем PVS-Studio 7.00, где ключевым новшеством является поддержка языка Java. Однако за 2018 год накопилось много других важных изменений, касающихся С++, С#, инфраструктуры и поддержки стандартов кодирования. Поэтому предлагаем вашему вниманию заметку, которая обобщает основные изменения, произошедшие в PVS-Studio за последнее время.
PVS-Studio - это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в среде Windows, Linux и macOS.
Возможности анализатора хорошо демонстрирует обширная коллекция ошибок в коде, найденных нами в процессе проверки различных отрытых проектов.
Начнём мы с изменения, из-за которого, собственно, и было решено сменить номер версии с 6.x на 7.x. Это поддержка в анализаторе языка Java, к которому мы давно готовились.
Самое важное в Java анализаторе то, что он появился :). Приглашаем Java разработчиков скачать инструмент и проверить проекты, над которыми они работают.
Мы сделали доступными для пользователей самые популярные способы интеграции анализатора в сборочную систему:
В случае использования самописных сборочных систем имеется возможность запускать анализатор напрямую, перечислив исходники и classpath.
Подробную информацию о всех способах запуска анализатора вы можете найти на странице документации "Как запустить PVS-Studio Java".
Мы не могли обойти стороной платформу контроля качества кода SonarQube, так популярную среди Java разработчиков, поэтому добавили поддержку языка Java в наш плагин для SonarQube.
В 2018 году наша команда активно поработала над развитием C++ анализатора. Появилось много новых диагностик, а также усовершенствованы алгоритмы, позволяющие собирать и обрабатывать информацию, извлекаемую из синтаксического дерева.
CWE, CERT
Сообщения C++ анализатора (как и C# анализатора) были классифицированы согласно Common Weakness Enumeration (CWE). CWE - это система классификации потенциальных и подтверждённых уязвимостей. Она поддерживается сообществом с целью выявления проблем программного обеспечения и создания автоматизированных инструментов, которые могут использоваться для выявления и устранения этих проблем.
Дополнительно сообщения были классифицированы согласно CERT C Coding Standard и CERT C++ Coding Standard. SEI CERT Coding Standards - это набор стандартов написания программного обеспечения (ПО) на языках C, C++, Java и Perl, разрабатываемых координационным центром CERT (CERT Coordination Center, CERT/CC) для повышения надёжности и безопасности ПО.
Классификация C и C++ диагностик согласно этим предупреждениям позволяет использовать PVS-Studio как SAST решение.
MISRA
В 2018 году статический анализатор кода PVS-Studio начал классифицировать свои предупреждения согласно стандартам MISRA C и MISRA C++. Благодаря поддержке этих стандартов анализатор стало возможным эффективно использовать для улучшения безопасности, переносимости и надежности программ для встраиваемых систем.
Подробнее: "PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++".
Поддержка MISRA стала актуальной в связи с развитием в анализаторе поддержки различных embedded систем, о чём будет рассказано в следующем разделе статьи.
Embedded Development
В 2018 году в анализаторе PVS-Studio были поддержаны:
Две заметки на тему поддержки embedded систем:
Расширение пользовательских аннотаций
Иногда в проектах используются собственные реализации разных системных функций, например, memcpy, malloc и т.п. Анализатор очень хорошо умеет искать ошибки с использованием стандартных функций, но в пользовательском коде было невозможно применять такие алгоритмы до недавнего времени. Теперь с помощью аннотации V_FUNC_ALIAS вы можете ставить имена своих функций в соответствие системным.
Формат комментария:
//V_FUNC_ALIAS, implementation:sysf, function:f, namespace:ns, class:c
Рассмотрим пример:
//V_FUNC_ALIAS, implementation:memcpy, function:MyMemCpy
Теперь анализатор будет обрабатывать вызовы функции MyMemCpy так же, как вызовы memcpy. Например, на такой код будет выдаваться предупреждение V512:
int buf[] = { 1, 2, 3, 4 };
int out[2];
MyMemCpy (out, buf, 4 * sizeof(int)); // Warning!
В этом году существенных изменений C# анализатора не было. Были отдельные улучшения диагностик и правки недочётов. Сообщения C# анализатора, как и C++ анализатора были классифицированы согласно Common Weakness Enumeration (CWE). Соответствие C# диагностик с идентификаторами CWE приведены здесь (см. диагностики с номерами 3xxx).
Мы планируем вернуться к более активному развитию C# анализатора в 2019 году. Планируется разработка новых диагностик и усовершенствование механизма анализа потока данных (Data-Flow Analysis).
Утилиты PlogConverter.exe и plog-converter входят в дистрибутивы PVS-Studio для Windows и Linux/macOS соответственно. Также исходных код этих утилит доступен на GitHub.
С появлением PVS-Studio для Java мы переработали подсветку кода для C, C++, C# и добавили Java в формате FullHtml (для веб-браузера).
Также для отчёта в этом формате был добавлен столбец MISRA:
Как и CWE ID, столбец MISRA является опциональным и включается исследователями безопасности кода при изучении результатов анализа.
1. Полное обновление
Мы переписали наши плагины с использованием нового API. Это позволило добавить новый функционал и обеспечить совместимость с SonarQube 7.x. Минимальной поддерживаемый версией теперь является SonarQube 6.7 LTS.
2. PVS-Studio для Java
В новую версию плагинов добавлена поддержка диагностик для языка Java. Теперь вы можете добавить PVS-Studio к другим инструментам контроля качества своего Java-проекта.
3. Стандарт MISRA
Недавно мы объявляли о поддержке стандартов MISRA C и MISRA C++. В новых плагинах тоже появилась их поддержка. Например, был добавлен параметр (в дополнение к CWE):
sonar.pvs-studio.misra=active
который включает добавление идентификатора MISRA к предупреждениям анализатора:
Независимо от этого параметра будет доступен поиск по тегам misra и pvs-studio#misra в результатах анализа. Информация о количестве найденных предупреждений MISRA добавилась и в метрики, о которых пойдёт речь далее.
4. Новые метрики
В меню Projects -> Your Project -> Measures доступны различные метрики кода, среди которых теперь есть различная информация от PVS-Studio:
По каждой из метрик можно строить графики и следить за динамикой появления тех или иных групп предупреждений анализатора.
4. Multiline-переходы
Некоторые диагностики анализатора выдают предупреждения на несколько строчек файла. Иногда они находятся очень далеко друг от друга. В новой версии мы добавили multiline-переходы:
SonarQube также поддерживает переходы между разными файлами. Позже мы добавим и такие переходы для диагностик, в которых есть межмодульный анализ.
6. Документация
Документация претерпела большие изменения. PVS-Studio является кросс-платформенным и мультиязыковым продуктом, поэтому все переработки были направлены на написание более общих и понятных инструкций по работе на той или иной системе.
До недавнего времени в своих статьях мы позиционировали PVS-Studio как инструмент для выявления ошибок в коде. При этом мы почти не рассматривали PVS-Studio в контексте безопасности. В этом году мы исправили эту ситуацию и взглянули на инструмент с точки зрения тестирования защищённости приложений и DevSecOps практик.
PVS-Studio является средством статического тестирования защищённости приложений (Static Application Security Testing, SAST). Другими словами, анализатор PVS-Studio выявляет не только опечатки, мёртвый код и другие ошибки, но и потенциальные уязвимости.
Для удобства специалистов, которые будут использовать PVS-Studio как SAST инструмент, анализатор отображает свои предупреждения на Common Weakness Enumeration, SEI CERT Coding Standards. Таблицы соответствий диагностик PVS-Studio различным стандартам:
Более подробно данная тема раскрыта в статье "PVS-Studio как SAST решение".
Также предлагаем познакомиться с публикациями:
В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub или Bitbucket. Им предоставляется возможность бесплатного использования статического анализатора PVS-Studio для развития открытых проектов.
Подробности: "Бесплатный PVS-Studio для тех, кто развивает открытые проекты".
В 2018 году PVS-Studio научился работать под управлением macOS. К этому событию наша команда приурочила проверку XNU Kernel: "Релиз PVS-Studio для macOS: 64 weaknesses в Apple XNU Kernel".
XNU - это ядро компьютерных операционных систем, разрабатываемое компанией Apple и используемое в ОС семейства OS X (macOS, iOS, tvOS, watchOS).
Несколько ссылок на интересные статьи, опубликованные нашей командой в 2018 году:
Чтобы быть в курсе наших новых публикаций, приглашаем подписаться на нас:
PVS-Studio: