﻿# PVS\-Studio 7\.00

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

![0602_Release_7_ru/image1.png](https://import.viva64.com/docx/blog/0602_Release_7_ru/image1.png)

[PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/) \- это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C\+\+, C\# и Java\. Работает в среде Windows, Linux и macOS\. 

Возможности анализатора хорошо демонстрирует обширная [коллекция ошибок](https://pvs-studio.ru/ru/blog/examples/) в коде, найденных нами в процессе [проверки](https://pvs-studio.ru/ru/blog/inspections/) различных отрытых проектов\.

Начнём мы с изменения, из\-за которого, собственно, и было решено сменить номер версии с 6\.x на 7\.x\. Это поддержка в анализаторе языка Java, к которому мы давно [готовились](https://pvs-studio.ru/ru/blog/posts/java/0572/)\.

## Java

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

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

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

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

Подробную информацию о всех способах запуска анализатора вы можете найти на странице документации "[Как запустить PVS\-Studio Java](https://pvs-studio.ru/ru/docs/manual/6703/)"\.

Мы не могли обойти стороной платформу контроля качества кода SonarQube, так популярную среди Java разработчиков, поэтому добавили поддержку языка Java в наш [плагин для SonarQube](https://pvs-studio.ru/ru/docs/manual/0037/)\.

## C, C\+\+

В 2018 году наша команда активно поработала над развитием C\+\+ анализатора\. Появилось много новых диагностик, а также усовершенствованы [алгоритмы](https://pvs-studio.ru/ru/blog/posts/cpp/0592/), позволяющие собирать и обрабатывать информацию, извлекаемую из синтаксического дерева\.

**CWE, CERT**

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

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

Классификация C и C\+\+ диагностик согласно этим предупреждениям позволяет использовать PVS\-Studio как [SAST решение](https://pvs-studio.ru/ru/pvs-studio/sast/)\.

**MISRA**

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

Подробнее: "[PVS\-Studio: поддержка стандартов кодирования MISRA C и MISRA C\+\+](https://pvs-studio.ru/ru/blog/posts/cpp/0596/)"\.

Поддержка 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\)](https://pvs-studio.ru/ru/blog/posts/cpp/0561/)\.
1. [В PVS\-Studio появилась поддержка GNU Arm Embedded Toolchain](https://pvs-studio.ru/ru/blog/posts/cpp/0588/)\.

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

Иногда в проектах используются собственные реализации разных системных функций, например, _memcpy_, _malloc_ и т\.п\. Анализатор очень хорошо умеет искать ошибки с использованием стандартных функций, но в пользовательском коде было невозможно применять такие алгоритмы до недавнего времени\. Теперь с помощью аннотации _V\_FUNC\_ALIAS_ вы можете ставить имена своих функций в соответствие системным\.

Формат комментария:

```cpp
//V_FUNC_ALIAS, implementation:sysf, function:f, namespace:ns, class:c
```

* Ключ **implementation** \- задает имя стандартной функции, для которой определяется псевдоним\.
* Ключ **function** \- задает имя псевдонима\. Сигнатура функции, имя которой указано в этом ключе, должна совпадать с сигнатурой функции, указанной в ключе implementation\.
* Ключ **class** \- имя класса\. Может отсутствовать\.
* Ключ **namespace** \- имя пространства имен\. Может отсутствовать\.

Рассмотрим пример:

```cpp
//V_FUNC_ALIAS, implementation:memcpy, function:MyMemCpy
```

Теперь анализатор будет обрабатывать вызовы функции _MyMemCpy_ так же, как вызовы _memcpy_\. Например, на такой код будет выдаваться предупреждение V512:

```cpp
int buf[] = { 1, 2, 3, 4 };
int out[2];
MyMemCpy (out, buf, 4 * sizeof(int)); // Warning!
```

## C\#

В этом году существенных изменений C\# анализатора не было\. Были отдельные улучшения диагностик и правки недочётов\. Сообщения C\# анализатора, как и C\+\+ анализатора были классифицированы согласно Common Weakness Enumeration \([CWE](https://cwe.mitre.org/)\)\. Соответствие C\# диагностик с идентификаторами CWE приведены [здесь](https://pvs-studio.ru/ru/pvs-studio/sast/cwe/) \(см\. диагностики с номерами 3xxx\)\.

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

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

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

С появлением PVS\-Studio для Java мы переработали подсветку кода для C, C\+\+, C\# и добавили Java в формате FullHtml \([для веб\-браузера](https://pvs-studio.ru/ru/blog/posts/0539/)\)\.

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

![0602_Release_7_ru/image2.png](https://import.viva64.com/docx/blog/0602_Release_7_ru/image2.png)

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

## Плагины SonarQube

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

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

**2\. PVS\-Studio для Java**

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

**3\. Стандарт MISRA**

Недавно мы объявляли о [поддержке](https://pvs-studio.ru/ru/blog/posts/cpp/0596/) стандартов MISRA C и MISRA C\+\+\. В новых плагинах тоже появилась их поддержка\. Например, был добавлен параметр \(в дополнение к CWE\):

```cpp
sonar.pvs-studio.misra=active
```

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

![0602_Release_7_ru/image3.png](https://import.viva64.com/docx/blog/0602_Release_7_ru/image3.png)

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

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

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

![0602_Release_7_ru/image4.png](https://import.viva64.com/docx/blog/0602_Release_7_ru/image4.png)

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

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

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

![0602_Release_7_ru/image5.png](https://import.viva64.com/docx/blog/0602_Release_7_ru/image5.png)

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

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

[Документация](https://pvs-studio.ru/ru/docs/manual/0037/) претерпела большие изменения\. PVS\-Studio является кросс\-платформенным и мультиязыковым продуктом, поэтому все переработки были направлены на написание более общих и понятных инструкций по работе на той или иной системе\.

## SAST

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

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

Для удобства специалистов, которые будут использовать PVS\-Studio как SAST инструмент, анализатор отображает свои предупреждения на [Common Weakness Enumeration](https://cwe.mitre.org/), [SEI CERT Coding Standards](https://wiki.sei.cmu.edu/confluence/display/seccode/SEI+CERT+Coding+Standards)\. Таблицы соответствий диагностик PVS\-Studio различным стандартам:

1. [Соответствие CWE](https://pvs-studio.ru/ru/pvs-studio/sast/cwe/)
1. [Соответствие SEI CERT](https://pvs-studio.ru/ru/pvs-studio/sast/cert/)

Более подробно данная тема раскрыта в статье "[PVS\-Studio как SAST решение](https://pvs-studio.ru/ru/blog/posts/0577/)"\.

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

1. [Как PVS\-Studio может помочь в поиске уязвимостей?](https://pvs-studio.ru/ru/blog/posts/cpp/0514/)
1. [Стреляем в ногу, обрабатывая входные данные](https://pvs-studio.ru/ru/blog/posts/cpp/0599/)\.
1. [Предоставляем анализатор PVS\-Studio экспертам безопасности](https://pvs-studio.ru/ru/blog/posts/0510/)\.

## PVS\-Studio Free

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

Подробности: "[Бесплатный PVS\-Studio для тех, кто развивает открытые проекты](https://pvs-studio.ru/ru/blog/posts/0600/)"\.

## macOS

В 2018 году PVS\-Studio научился работать под управлением macOS\. К этому событию наша команда приурочила проверку XNU Kernel: "[Релиз PVS\-Studio для macOS: 64 weaknesses в Apple XNU Kernel](https://pvs-studio.ru/ru/blog/posts/cpp/0566/)"\.

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

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

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

1. [31 февраля](https://pvs-studio.ru/ru/blog/posts/cpp/0550/)
1. [В очередной раз анализатор PVS\-Studio оказался внимательнее человека](https://pvs-studio.ru/ru/blog/posts/cpp/0582/)
1. [Статический анализ в видеоигровой индустрии: топ\-10 программных ошибок](https://pvs-studio.ru/ru/blog/posts/cpp/0570/)
1. [Toп 10 ошибок в C\+\+ проектах за 2017 год](https://pvs-studio.ru/ru/blog/posts/cpp/0565/)
1. [Chromium: шестая проверка проекта и 250 багов](https://pvs-studio.ru/ru/blog/posts/cpp/0552/)
1. [LibreOffice: страшный сон бухгалтера](https://pvs-studio.ru/ru/blog/posts/cpp/0586/)
1. [Как PVS\-Studio оказался внимательнее, чем три с половиной программиста](https://pvs-studio.ru/ru/blog/posts/cpp/0587/)

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

1. Twitter: [pvsstudio\_rus](https://twitter.com/pvsstudio_rus)
1. ВКонтакте: [Анализатор PVS\-Studio](https://vk.com/pvsstudio_rus)
1. Telegram: [PVS\-Studio rus](https://t.me/pvsstudio_rus)
1. RSS: [viva64\-blog\-ru](http://feeds.feedburner.com/viva64-blog-ru)

PVS\-Studio:

1. [Страница продукта](https://pvs-studio.ru/ru/pvs-studio/)
1. [Скачать](https://pvs-studio.ru/ru/pvs-studio/download/)
1. [Документация](https://pvs-studio.ru/ru/docs/)
1. [Клиенты](https://pvs-studio.ru/ru/about/customers/)