Сегодня важный день – после 28 релизов шестой версии мы выпускаем PVS-Studio 7.00, где ключевым новшеством является поддержка языка Java. Однако за 2018 год накопилось много других важных изменений, касающихся С++, С#, инфраструктуры и поддержки стандартов кодирования. Поэтому предлагаем вашему вниманию заметку, которая обобщает основные изменения, произошедшие в PVS-Studio за последнее время.
PVS-Studio — это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в среде Windows, Linux и macOS.
Возможности анализатора хорошо демонстрирует обширная коллекция ошибок в коде, найденных нами в процессе проверки различных отрытых проектов.
Начнём мы с изменения, из-за которого, собственно, и было решено сменить номер версии с 6.x на 7.x. Это поддержка в анализаторе языка Java, к которому мы давно готовились.
Java
Самое важное в Java анализаторе то, что он появился :). Приглашаем Java разработчиков скачать инструмент и проверить проекты, над которыми они работают.
Мы сделали доступными для пользователей самые популярные способы интеграции анализатора в сборочную систему:
- Плагин для Maven.
- Плагин для Gradle.
- Плагин для IntelliJ IDEA.
В случае использования самописных сборочных систем имеется возможность запускать анализатор напрямую, перечислив исходники и classpath.
Подробную информацию о всех способах запуска анализатора вы можете найти на странице документации "Как запустить PVS-Studio Java".
Мы не могли обойти стороной платформу контроля качества кода SonarQube, так популярную среди Java разработчиков, поэтому добавили поддержку языка Java в наш плагин для SonarQube.
C, C++
В 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 были поддержаны:
- Windows. IAR Embedded Workbench, C/C++ Compiler for ARM C, C++
- Windows/Linux. Keil µVision, DS-MDK, ARM Compiler 5/6 C, C++
- Windows/Linux. Texas Instruments Code Composer Studio, ARM Code Generation Tools C, C++
- Windows/Linux/macOS. GNU Arm Embedded Toolchain, Arm Embedded GCC compiler, C, C++
Две заметки на тему поддержки embedded систем:
- Статический анализатор кода PVS-Studio 6.22 адаптирован для ARM-компиляторов (Keil, IAR).
- В PVS-Studio появилась поддержка GNU Arm Embedded Toolchain.
Расширение пользовательских аннотаций
Иногда в проектах используются собственные реализации разных системных функций, например, memcpy, malloc и т.п. Анализатор очень хорошо умеет искать ошибки с использованием стандартных функций, но в пользовательском коде было невозможно применять такие алгоритмы до недавнего времени. Теперь с помощью аннотации V_FUNC_ALIAS вы можете ставить имена своих функций в соответствие системным.
Формат комментария:
//V_FUNC_ALIAS, implementation:sysf, function:f, namespace:ns, class:c
- Ключ implementation — задает имя стандартной функции, для которой определяется псевдоним.
- Ключ function — задает имя псевдонима. Сигнатура функции, имя которой указано в этом ключе, должна совпадать с сигнатурой функции, указанной в ключе implementation.
- Ключ class — имя класса. Может отсутствовать.
- Ключ namespace — имя пространства имен. Может отсутствовать.
Рассмотрим пример:
//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# анализатора, как и 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 является опциональным и включается исследователями безопасности кода при изучении результатов анализа.
Плагины SonarQube
1. Полное обновление
Мы переписали наши плагины с использованием нового API. Это позволило добавить новый функционал и обеспечить совместимость с SonarQube 7.x. Минимальной поддерживаемый версией теперь является SonarQube 6.7 LTS.
2. PVS-Studio для Java
В новую версию плагинов добавлена поддержка диагностик для языка Java. Теперь вы можете добавить PVS-Studio к другим инструментам контроля качества своего Java-проекта.
3. Стандарт MISRA
Недавно мы объявляли о поддержке стандартов MICRA 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 является кросс-платформенным и мультиязыковым продуктом, поэтому все переработки были направлены на написание более общих и понятных инструкций по работе на той или иной системе.
SAST
До недавнего времени в своих статьях мы позиционировали 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 решение".
Также предлагаем познакомиться с публикациями:
- Как PVS-Studio может помочь в поиске уязвимостей?
- Стреляем в ногу, обрабатывая входные данные.
- Предоставляем анализатор PVS-Studio экспертам безопасности.
PVS-Studio Free
В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub или Bitbucket. Им предоставляется возможность бесплатного использования статического анализатора PVS-Studio для развития открытых проектов.
Подробности: "Бесплатный PVS-Studio для тех, кто развивает открытые проекты".
macOS
В 2018 году PVS-Studio научился работать под управлением macOS. К этому событию наша команда приурочила проверку XNU Kernel: "Релиз PVS-Studio для macOS: 64 weaknesses в Apple XNU Kernel".
XNU — это ядро компьютерных операционных систем, разрабатываемое компанией Apple и используемое в ОС семейства OS X (macOS, iOS, tvOS, watchOS).
Дополнительные ссылки
Несколько ссылок на интересные статьи, опубликованные нашей командой в 2018 году:
- 31 февраля
- В очередной раз анализатор PVS-Studio оказался внимательнее человека
- Статический анализ в видеоигровой индустрии: топ-10 программных ошибок
- Toп 10 ошибок в C++ проектах за 2017 год
- Chromium: шестая проверка проекта и 250 багов
- LibreOffice: страшный сон бухгалтера
- Как PVS-Studio оказался внимательнее, чем три с половиной программиста
Чтобы быть в курсе наших новых публикаций, приглашаем подписаться на нас:
- Twitter: pvsstudio_rus
- ВКонтакте: Анализатор PVS-Studio
- Facebook: @StaticCodeAnalyzer
- Instagram: @pvsstudio_rus
- Telegram: PVS-Studio rus
- RSS: viva64-blog-ru
PVS-Studio:
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov, Svyatoslav Razmyslov. PVS-Studio 7.00.
Автор: Andrey2008