- PVSM.RU - https://www.pvsm.ru -

PVS-Studio 7.00

PVS-Studio C#JavaC++Сегодня важный день – после 28 релизов шестой версии мы выпускаем PVS-Studio 7.00, где ключевым новшеством является поддержка языка Java. Однако за 2018 год накопилось много других важных изменений, касающихся С++, С#, инфраструктуры и поддержки стандартов кодирования. Поэтому предлагаем вашему вниманию заметку, которая обобщает основные изменения, произошедшие в PVS-Studio за последнее время.

PVS-Studio [1] — это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в среде Windows, Linux и macOS.

Возможности анализатора хорошо демонстрирует обширная коллекция ошибок [2] в коде, найденных нами в процессе проверки [3] различных отрытых проектов.

Начнём мы с изменения, из-за которого, собственно, и было решено сменить номер версии с 6.x на 7.x. Это поддержка в анализаторе языка Java, к которому мы давно готовились [4].

Java

Самое важное в Java анализаторе то, что он появился :). Приглашаем Java разработчиков скачать инструмент и проверить проекты, над которыми они работают.

Мы сделали доступными для пользователей самые популярные способы интеграции анализатора в сборочную систему:

  • Плагин для Maven.
  • Плагин для Gradle.
  • Плагин для IntelliJ IDEA.

В случае использования самописных сборочных систем имеется возможность запускать анализатор напрямую, перечислив исходники и classpath.

Подробную информацию о всех способах запуска анализатора вы можете найти на странице документации "Как запустить PVS-Studio Java [5]".

Мы не могли обойти стороной платформу контроля качества кода SonarQube, так популярную среди Java разработчиков, поэтому добавили поддержку языка Java в наш плагин для SonarQube [6].

C, C++

В 2018 году наша команда активно поработала над развитием C++ анализатора. Появилось много новых диагностик, а также усовершенствованы алгоритмы [7], позволяющие собирать и обрабатывать информацию, извлекаемую из синтаксического дерева.

CWE, CERT

Сообщения C++ анализатора (как и C# анализатора) были классифицированы согласно Common Weakness Enumeration (CWE [8]). CWE — это система классификации потенциальных и подтверждённых уязвимостей. Она поддерживается сообществом с целью выявления проблем программного обеспечения и создания автоматизированных инструментов, которые могут использоваться для выявления и устранения этих проблем.

Дополнительно сообщения были классифицированы согласно CERT C Coding Standard и CERT C++ Coding Standard. SEI CERT Coding Standards [9] — это набор стандартов написания программного обеспечения (ПО) на языках C, C++, Java и Perl, разрабатываемых координационным центром CERT (CERT Coordination Center, CERT/CC) для повышения надёжности и безопасности ПО.

Классификация C и C++ диагностик согласно этим предупреждениям позволяет использовать PVS-Studio как SAST решение [10].

MISRA

В 2018 году статический анализатор кода PVS-Studio начал классифицировать свои предупреждения согласно стандартам MISRA C и MISRA C++. Благодаря поддержке этих стандартов анализатор стало возможным эффективно использовать для улучшения безопасности, переносимости и надежности программ для встраиваемых систем.

Подробнее: "PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++ [11]".

Поддержка 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 систем:

  1. Статический анализатор кода PVS-Studio 6.22 адаптирован для ARM-компиляторов (Keil, IAR) [12].
  2. В PVS-Studio появилась поддержка GNU Arm Embedded Toolchain [13].

Расширение пользовательских аннотаций

Иногда в проектах используются собственные реализации разных системных функций, например, 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 [8]). Соответствие C# диагностик с идентификаторами CWE приведены здесь [14] (см. диагностики с номерами 3xxx).

Мы планируем вернуться к более активному развитию C# анализатора в 2019 году. Планируется разработка новых диагностик и усовершенствование механизма анализа потока данных (Data-Flow Analysis).

Конвертеры отчётов

Утилиты PlogConverter.exe и plog-converter входят в дистрибутивы PVS-Studio для Windows и Linux/macOS соответственно. Также исходных код этих утилит доступен на GitHub [15].

С появлением PVS-Studio для Java мы переработали подсветку кода для C, C++, C# и добавили Java в формате FullHtml (для веб-браузера [16]).

Также для отчёта в этом формате был добавлен столбец MISRA:

Picture 5

Как и CWE ID, столбец MISRA является опциональным и включается исследователями безопасности кода при изучении результатов анализа.

Плагины SonarQube

1. Полное обновление

Мы переписали наши плагины с использованием нового API. Это позволило добавить новый функционал и обеспечить совместимость с SonarQube 7.x. Минимальной поддерживаемый версией теперь является SonarQube 6.7 LTS.

2. PVS-Studio для Java

В новую версию плагинов добавлена поддержка диагностик для языка Java. Теперь вы можете добавить PVS-Studio к другим инструментам контроля качества своего Java-проекта.

3. Стандарт MISRA

Недавно мы объявляли о поддержке [11] стандартов MICRA C и MISRA C++. В новых плагинах тоже появилась их поддержка. Например, был добавлен параметр (в дополнение к CWE):

sonar.pvs-studio.misra=active

который включает добавление идентификатора MISRA к предупреждениям анализатора:

Picture 2

Независимо от этого параметра будет доступен поиск по тегам misra и pvs-studio#misra в результатах анализа. Информация о количестве найденных предупреждений MISRA добавилась и в метрики, о которых пойдёт речь далее.

4. Новые метрики

В меню Projects -> Your Project -> Measures доступны различные метрики кода, среди которых теперь есть различная информация от PVS-Studio:

Picture 3

По каждой из метрик можно строить графики и следить за динамикой появления тех или иных групп предупреждений анализатора.

4. Multiline-переходы

Некоторые диагностики анализатора выдают предупреждения на несколько строчек файла. Иногда они находятся очень далеко друг от друга. В новой версии мы добавили multiline-переходы:

Picture 6

SonarQube также поддерживает переходы между разными файлами. Позже мы добавим и такие переходы для диагностик, в которых есть межмодульный анализ.

6. Документация

Документация [6] претерпела большие изменения. PVS-Studio является кросс-платформенным и мультиязыковым продуктом, поэтому все переработки были направлены на написание более общих и понятных инструкций по работе на той или иной системе.

SAST

До недавнего времени в своих статьях мы позиционировали PVS-Studio как инструмент для выявления ошибок в коде. При этом мы почти не рассматривали PVS-Studio в контексте безопасности. В этом году мы исправили эту ситуацию и взглянули на инструмент с точки зрения тестирования защищённости приложений и DevSecOps практик.

PVS-Studio является средством статического тестирования защищённости приложений (Static Application Security Testing, SAST). Другими словами, анализатор PVS-Studio выявляет не только опечатки, мёртвый код и другие ошибки, но и потенциальные уязвимости.

Для удобства специалистов, которые будут использовать PVS-Studio как SAST инструмент, анализатор отображает свои предупреждения на Common Weakness Enumeration [8], SEI CERT Coding Standards [17]. Таблицы соответствий диагностик PVS-Studio различным стандартам:

  1. Соответствие CWE [14]
  2. Соответствие SEI CERT [18]

Более подробно данная тема раскрыта в статье "PVS-Studio как SAST решение [19]".

Также предлагаем познакомиться с публикациями:

  1. Как PVS-Studio может помочь в поиске уязвимостей? [20]
  2. Стреляем в ногу, обрабатывая входные данные [21].
  3. Предоставляем анализатор PVS-Studio экспертам безопасности [22].

PVS-Studio Free

В канун празднования нового 2019 года команда PVS-Studio решила сделать приятный подарок всем контрибьюторам open-source проектов, хостящихся на GitHub или Bitbucket. Им предоставляется возможность бесплатного использования статического анализатора PVS-Studio для развития открытых проектов.

Подробности: "Бесплатный PVS-Studio для тех, кто развивает открытые проекты [23]".

macOS

В 2018 году PVS-Studio научился работать под управлением macOS. К этому событию наша команда приурочила проверку XNU Kernel: "Релиз PVS-Studio для macOS: 64 weaknesses в Apple XNU Kernel [24]".

XNU — это ядро компьютерных операционных систем, разрабатываемое компанией Apple и используемое в ОС семейства OS X (macOS, iOS, tvOS, watchOS).

Дополнительные ссылки

Несколько ссылок на интересные статьи, опубликованные нашей командой в 2018 году:

  1. 31 февраля [25]
  2. В очередной раз анализатор PVS-Studio оказался внимательнее человека [26]
  3. Статический анализ в видеоигровой индустрии: топ-10 программных ошибок [27]
  4. Toп 10 ошибок в C++ проектах за 2017 год [28]
  5. Chromium: шестая проверка проекта и 250 багов [29]
  6. LibreOffice: страшный сон бухгалтера [30]
  7. Как PVS-Studio оказался внимательнее, чем три с половиной программиста [31]

Чтобы быть в курсе наших новых публикаций, приглашаем подписаться на нас:

  1. Twitter: pvsstudio_rus [32]
  2. ВКонтакте: Анализатор PVS-Studio [33]
  3. Facebook: @StaticCodeAnalyzer [34]
  4. Instagram: @pvsstudio_rus [35]
  5. Telegram: PVS-Studio rus [36]
  6. RSS: viva64-blog-ru [37]

PVS-Studio:

  1. Страница продукта [1]
  2. Скачать [38]
  3. Документация [39]
  4. Клиенты [40]

Автор: Andrey2008

Источник [41]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/maven/305430

Ссылки в тексте:

[1] PVS-Studio: https://www.viva64.com/ru/pvs-studio/

[2] коллекция ошибок: https://www.viva64.com/ru/examples/

[3] проверки: https://www.viva64.com/ru/inspections/

[4] готовились: https://www.viva64.com/ru/b/0572/

[5] Как запустить PVS-Studio Java: https://www.viva64.com/ru/m/0044/

[6] плагин для SonarQube: https://www.viva64.com/ru/m/0037/

[7] алгоритмы: https://www.viva64.com/ru/b/0592/

[8] CWE: https://cwe.mitre.org/

[9] SEI CERT Coding Standards: https://wiki.sei.cmu.edu/

[10] SAST решение: https://www.viva64.com/ru/sast/

[11] PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++: https://www.viva64.com/ru/b/0596/

[12] Статический анализатор кода PVS-Studio 6.22 адаптирован для ARM-компиляторов (Keil, IAR): https://www.viva64.com/ru/b/0561/

[13] В PVS-Studio появилась поддержка GNU Arm Embedded Toolchain: https://www.viva64.com/ru/b/0588/

[14] здесь: https://www.viva64.com/ru/cwe/

[15] GitHub: https://github.com/viva64

[16] для веб-браузера: https://www.viva64.com/ru/b/0539/

[17] SEI CERT Coding Standards: https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards

[18] Соответствие SEI CERT: https://www.viva64.com/ru/cert/

[19] PVS-Studio как SAST решение: https://www.viva64.com/ru/b/0577/

[20] Как PVS-Studio может помочь в поиске уязвимостей?: https://www.viva64.com/ru/b/0514/

[21] Стреляем в ногу, обрабатывая входные данные: https://www.viva64.com/ru/b/0599/

[22] Предоставляем анализатор PVS-Studio экспертам безопасности: https://www.viva64.com/ru/b/0510/

[23] Бесплатный PVS-Studio для тех, кто развивает открытые проекты: https://www.viva64.com/ru/b/0600/

[24] Релиз PVS-Studio для macOS: 64 weaknesses в Apple XNU Kernel: https://www.viva64.com/ru/b/0566/

[25] 31 февраля: https://www.viva64.com/ru/b/0550/

[26] В очередной раз анализатор PVS-Studio оказался внимательнее человека: https://www.viva64.com/ru/b/0582/

[27] Статический анализ в видеоигровой индустрии: топ-10 программных ошибок: https://www.viva64.com/ru/b/0570/

[28] Toп 10 ошибок в C++ проектах за 2017 год: https://www.viva64.com/ru/b/0565/

[29] Chromium: шестая проверка проекта и 250 багов: https://www.viva64.com/ru/b/0552/

[30] LibreOffice: страшный сон бухгалтера: https://www.viva64.com/ru/b/0586/

[31] Как PVS-Studio оказался внимательнее, чем три с половиной программиста: https://www.viva64.com/ru/b/0587/

[32] pvsstudio_rus: https://twitter.com/pvsstudio_rus

[33] Анализатор PVS-Studio: https://vk.com/pvsstudio_rus

[34] @StaticCodeAnalyzer: https://www.facebook.com/StaticCodeAnalyzer/

[35] @pvsstudio_rus: https://www.instagram.com/pvsstudio_rus/

[36] PVS-Studio rus: https://t.me/pvsstudio_rus

[37] viva64-blog-ru: http://feeds.feedburner.com/viva64-blog-ru

[38] Скачать: https://www.viva64.com/ru/pvs-studio-download/

[39] Документация: https://www.viva64.com/ru/m/

[40] Клиенты: https://www.viva64.com/ru/customers/

[41] Источник: https://habr.com/ru/post/436328/?utm_campaign=436328