Знакомство со статическим анализатором PVS-Studio для Java

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
На протяжении многих лет команда PVS-Studio развивает одноименный статический анализатор. На данный момент анализатор представляет собой сложное программное решение и предоставляет возможность анализа таких языков программирования, как C, C++, C# и Java на платформах Windows, Linux и macOS. Совсем недавно в ряд поддерживаемых языков программирования была добавлена поддержка языка Java. Если анализатор PVS-Studio за долгие годы уже зарекомендовал себя среди C++ и C# разработчиков, то для Java-аудитории PVS-Studio еще новичок. Многие даже не слышали про анализатор, а кто слышал, тот мало знаком со всеми его возможностями. Поэтому в этой статье хотелось бы познакомить вас с PVS-Studio Java, рассказать о способах запуска и его возможностях.

Рисунок 2



Общие сведения


Статический анализатор кода PVS-Studio Java состоит из двух основных частей: ядра, выполняющего анализ, и плагинов для интеграции в сборочные системы (Gradle, Maven) и IDE (IntelliJ IDEA).

Плагины получают структуру проекта (наборы исходных файлов и classpath), после чего передают эту информацию в ядро. Кроме того, плагины отвечают за развёртывание ядра для анализа — оно будет автоматически скачано при первом запуске.

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

Анализ можно проводить, если ваш компьютер удовлетворяет следующим системным требованиям:
  • Операционная система: Windows, Linux, macOS;
  • Минимальная версия Java для запуска анализатора: Java 8 (64-битная). Примечание: анализируемый проект может использовать любую версию Java;
  • Минимальная версия IntelliJ IDEA: 2017.2.


Плагин для Maven


Если проект, над которым Вы работаете, основан на сборочной системе Maven, то можно воспользоваться плагином pvsstudio-maven-plugin. Для этого необходимо добавить в проектный файл pom.xml следующее:
<pluginRepositories>
  <pluginRepository>
    <id>pvsstudio-maven-repo</id>
    <url>http://files.viva64.com/java/pvsstudio-maven-repository/</url>
  </pluginRepository>
</pluginRepositories>

<build>
  <plugins>
    <plugin>
      <groupId>com.pvsstudio</groupId>
      <artifactId>pvsstudio-maven-plugin</artifactId>
      <version>{VERSION_PVS_JAVA}</version>
      <configuration>
        <analyzer>
          <outputType>text</outputType>
          <outputFile>path/to/output.txt</outputFile>
          ....
        </analyzer>
      </configuration>
    </plugin>
  </plugins>
</build>

Перед тем, как запустить анализ, необходимо ввести лицензионные данные:
mvn pvsstudio:pvsCredentials "-Dpvsstudio.username=USR" "-Dpvsstudio.serial=KEY"

После этого информация о лицензии будет сохранена в %APPDATA%/PVS-Studio-Java/PVS-Studio.lic в ОС Windows или в ~/.config/PVS-Studio-Java/PVS-Studio.lic в macOS и Linux.

После этого можно запустить анализ:
$ mvn pvsstudio:pvsAnalyze

В блоке <analyzer> можно производить настройку анализатора. Список всех настроек можно посмотреть здесь.

Плагин для Gradle


Если проект, над которым Вы работаете, основан на сборочной системе Gradle, то можно воспользоваться плагином pvsstudio-gradle-plugin. Для этого необходимо добавить в проектный файл build.gradle следующее:
buildscript {
  repositories {
    mavenCentral()
    maven {
      url uri('http://files.viva64.com/java/pvsstudio-maven-repository/')
    }
  }
  dependencies {
    classpath group: 'com.pvsstudio',
              name: 'pvsstudio-gradle-plugin',
              version: '{VERSION_PVS_JAVA}'
  }
}

apply plugin: com.pvsstudio.PvsStudioGradlePlugin
pvsstudio {
  outputType = 'text'
  outputFile = 'path/to/output.txt'
  ....
}

Перед тем, как запустить анализ, необходимо ввести лицензионные данные:
./gradlew pvsCredentials "-Ppvsstudio.username=USR" "-Ppvsstudio.serial=KEY"

После этого информация о лицензии, также, как и с Maven плагином, будет сохранена в %APPDATA%/PVS-Studio-Java/PVS-Studio.lic в ОС Windows или в ~/.config/PVS-Studio-Java/PVS-Studio.lic в macOS и Linux.

После этого можно запустить анализ:
$ ./gradlew pvsAnalyze

В блоке 'pvsstudio' можно производить настройку анализатора. Список всех настроек можно посмотреть здесь.

Плагин для IntelliJ IDEA


Анализатор PVS-Studio Java можно также использовать в виде плагина к IntelliJ IDEA. В таком случае разбор структуры проекта производится средствами этой IDE, а плагин предоставляет удобный графический интерфейс для работы с анализатором.

Плагин PVS-Studio для IDEA можно установить из:
  • официального репозитория плагинов JetBrains;
  • из репозитория на сайте viva64.com;
  • через установщик PVS-Studio для Windows, доступный на странице загрузки.

После того, как Вы установили плагин, необходимо ввести лицензионные данные:

1) Analyze -> PVS-Studio -> Settings

Picture 26


2) Вкладка Registration:

Picture 28


Теперь можно запустить анализ текущего проекта:

Picture 30


Лицензирование


Анализатор PVS-Studio ориентирован на команды разработчиков и по сути является проприетарным B2B продуктом. Чтобы ознакомиться с возможностями анализатора, вы можете запросить триальный ключ.

Если вы развиваете открытые проекты, или, например, являетесь студентом, то вы можете воспользоваться одним из бесплатных вариантов лицензирования PVS-Studio.

Подавление ложных предупреждений


Для борьбы с ложными срабатываниями в анализаторе предусмотрен набор различных механизмов:

1. При помощи специальных комментариев в коде:
void f() {
    int x = 01000; //-V6061
}

2. При помощи suppress файла.

3. При помощи аннотаций @SuppressWarnings(....)

Анализатор знает о некоторых аннотациях и может не выдавать предупреждения на код, который уже был размечен. Например:
@SuppressWarnings("OctalInteger")
void f() {
    int x = 01000;
}


Заключение


То, что мы сейчас рассмотрели — только малая часть того, о чем можно было рассказать. Например, существует возможность интеграции с SonarQube и так далее. PVS-Studio Java — молодое направление, которое активно развивается:
  • добавляется новая функциональность,
  • расширяются возможности,
  • добавляются и совершенствуются диагностические правила,
  • и многое другое.

Чтобы полностью изучить существующие возможности анализатора и в дальнейшем не упустить появление новых, читайте блог PVS-Studio.



Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Maxim Stefanov. Get to Know the PVS-Studio Static Analyzer for Java
Источник: https://habr.com/ru/company/pvs-studio/blog/462275/


Интересные статьи

Интересные статьи

Доброго времени суток, друзья! Представляю вашему вниманию список из второй сотни вопросов по основам JavaScript из этого репозитория с краткими ответами и ссылками на «Совреме...
Когда я разбирался в том, как пользоваться методами JS-массивов .map(), .filter() и .reduce(), всё, что я читал, смотрел и слушал, казалось мне очень сложным. Эти концепции рассматривались как не...
Если вы последние лет десять следите за обновлениями «коробочной версии» Битрикса (не 24), то давно уже заметили, что обновляется только модуль магазина и его окружение. Все остальные модули как ...
Это — материалы, которые помогут разобраться в ITSM-трендах и инструментах. / Unsplash / Headway Пять ключевых трендов ITSM на этот год. Наш хабрапост, который мы написали не так давно (...
В «1С-Битрикс» считают: современный интернет-магазин должен быть визуально привлекательным, адаптированным для просмотра с мобильных устройств и максимально персонализированным с помощью технологии Бо...