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

в 9:25, , рубрики: java, pvs-studio, static code analysis, Блог компании PVS-Studio

На протяжении многих лет команда 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 можно установить из:

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

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.

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

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Maxim Stefanov. Get to Know the PVS-Studio Static Analyzer for Java

Автор: stefanbuzz

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js