

Для корректной работы SpotBugs необходимо использовать Java версии 8 и выше. |
- Ant
- Maven
- Gradle
- Eclipse
<plugin>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs-maven-plugin</artifactId>
<version>4.2.2</version>
<dependencies>
<dependency>
<groupId>com.github.spotbugs</groupId>
<artifactId>spotbugs</artifactId>
<version>4.2.0</version>
</dependency>
</dependencies>
</plugin>
Также в разделе плагинов добавляем:
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>2.8</version>
</plugin>
Основные команды SpotBugs
Ну а теперь давайте рассмотрим основные команды для SpotBugs, вызываемые либо через консоль Мавена:

1. mvn spotbugs:help
Отображает справочную информацию для пользовательского интерфейса командной строки SpotBugs. Пример результата вызова:

2. mvn spotbugs:check
Данная команда запускает анализ и сообщает о неудачной сборке, если обнаруживает какие-либо ошибки из спектра spotbugs. Пример результата запуска команды:
3. mvn spotbugs:spotbugs
Данная команда анализирует целевой проект с помощью SpotBugs. Без запуска данной команды, команда по отображению результатов фактически будет бесполезна, т.к. она и производит сам анализ. После запуска данной команды создаётся файл spotbugsXml.xml, в котором и лежат результаты анализа для дальнейшего отображения. Также следует отметить, что запуск команды mvn spotbugs:spotbugs сам по себе ничего не даст: сперва нужно запустить стандартную команду для компиляции проекта mvn clean compile, и только после неё — команду для анализа проекта. Предыдущая рассмотренная команда, mvn spotbugs:check, также анализирует и создаёт файл spotbugsXml.xml, но в отличие от mvn spotbugs:spotbugs она ещё и показывает результат анализа на нижней панели. Для анализа таким путём также сперва нужно запустить mvn clean compile, а только потом — mvn spotbugs:check.4. mvn spotbugs:gui
Пожалуй, данная команда самая интересная: она запускает графический интерфейс SpotBugs для проверки результатов анализа, в котором вы можете подробно рассмотреть, какие недостатки есть в вашем кода и где они находятся. Но, как я и упомянул выше, для правильной отработки данной команды необходим файл spotbugsXml.xml в папке target, который создаётся после описанных выше манипуляций. При запуске данной команды получаем следующее графическое отображение:
Типы ошибок
Давайте же рассмотрим подробнее возможные типы ошибок:Bad practice
Нарушения рекомендованной практики написания кода.
Correctness
Предполагаемая ошибка кода, приводящая к тому, что код не соответствует замыслу разработчика. Помогает достичь низкого уровня ложных срабатываний.
Experimental
Данный архетип описывает экспериментальные и не полностью проверенные шаблоны ошибок (доверять замечаниям с данным типом ошибки следует с большой осторожностью).
Internationalization
Тип описывает недостатки кода, связанные с интернационализацией и локализацией.
Malicious code vulnerability
Данный тип говорит о том что ваш код уязвим для атак со стороны ненадежного кода.
Multithreaded correctness
Тип описывает недостатки кода, связанные с потоками, блокировками.
Bogus random noise
Данный тип предназначен для использования как средство контроля в экспериментах по интеллектуальному анализу данных, а не для поиска реальных ошибок в программном обеспечении.
Performance
Архетип говорит о том, что ваш код не обязательно неверен, но может быть неэффективным и нуждается в некой оптимизации.
Security
Вероятно, вы используете ненадежный входной функционал, у которого могут быть уязвимости, дыры в системы безопасности, допустимые к использованию удаленно.
Dodgy code
Под данный тип попадает код, который вводит в заблуждение, является аномальным или написан таким образом, что приводит к ошибкам.

Файлы фильтров
Для отлова шаблонов “плохого кода” в SpotBugs используются фильтры. По сути фильтр сопоставляет экземпляры ошибок по набору критериев. Собственно, вы можете составлять собственные вариации шаблонов плохого кода, которые SpotBugs нужно отловить (создать кастомные файлы фильтра). Также с помощью данных файлов фильтров вы можете задавать ошибки, которые нужно исключать при проверке. Возможно, у вас в проекте что-то будет считаться хорошим решением, что по умолчанию фиксируется в анализаторе как плохая практика. Файл фильтра — это XML-документ с FindBugsFilter элементом верхнего уровня, у которого есть некоторое количество дочерних элементов Match. Каждый элемент Match представляет собой предикат, который применяется к сгенерированным экземплярам ошибок. Подробнее о создании файла фильтра можно почитать в этой документации.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ