Знакомство со статическим анализатором PVS-Studio для Java
На протяжении многих лет команда PVS-Studio развивает одноименный статический анализатор. На данный момент анализатор представляет собой сложное программное решение и предоставляет возможность анализа таких языков программирования, как C, C++, C# и Java на платформах Windows, Linux и macOS. Совсем недавно в ряд поддерживаемых языков программирования была добавлена поддержка языка Java. Если анализатор PVS-Studio за долгие годы уже зарекомендовал себя среди C++ и C# разработчиков, то для Java-аудитории PVS-Studio еще новичок. Многие даже не слышали про анализатор, а кто слышал, тот мало знаком со всеми его возможностями. Поэтому в этой статье хотелось бы познакомить вас с PVS-Studio Java, рассказать о способах запуска и его возможностях.
Общие сведения
Статический анализатор кода 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 следующее:
pvsstudio-maven-repo
http://files.viva64.com/java/pvsstudio-maven-repository/
com.pvsstudio
pvsstudio-maven-plugin
{VERSION_PVS_JAVA}
text
path/to/output.txt
....
Перед тем, как запустить анализ, необходимо ввести лицензионные данные:
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
В блоке
Плагин для 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
2) Вкладка Registration:
Теперь можно запустить анализ текущего проекта:
Лицензирование
Анализатор 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