Для корректной работы 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, вызываемые либо через консоль Мавена:(чтобы вызвать консоль, нужно нажать на значок m), Либо через терминал idea:1. mvn spotbugs:help
Отображает справочную информацию для пользовательского интерфейса командной строки SpotBugs. Пример результата вызова:Как мы видим, если запустить команду: mvn spotbugs:help -Ddetail=true -Dgoal=<goal-name> можно узнать подробнее о настройках цели. Или запустить: mvn spotbugs:help -Ddetail=true и узнать подробнее обо всех четырех целях. Например, я запустил mvn spotbugs:help -Ddetail=true -Dgoal=help и получил следующее описание:2. mvn spotbugs:check
Данная команда запускает анализ и сообщает о неудачной сборке, если обнаруживает какие-либо ошибки из спектра spotbugs. Пример результата запуска команды:Тут мы видим, как 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, который создаётся после описанных выше манипуляций. При запуске данной команды получаем следующее графическое отображение:Тут вы можете настраивать фильтрацию по имени класса, группировать по категориям плохого кода и так далее. Возможные недостатки делятся на типы, которые в свою очередь делятся на конкретные подробные шаблоны ошибок (400+).Типы ошибок
Давайте же рассмотрим подробнее возможные типы ошибок:Bad practice
Нарушения рекомендованной практики написания кода.
Correctness
Предполагаемая ошибка кода, приводящая к тому, что код не соответствует замыслу разработчика. Помогает достичь низкого уровня ложных срабатываний.
Experimental
Данный архетип описывает экспериментальные и не полностью проверенные шаблоны ошибок (доверять замечаниям с данным типом ошибки следует с большой осторожностью).
Internationalization
Тип описывает недостатки кода, связанные с интернационализацией и локализацией.
Malicious code vulnerability
Данный тип говорит о том что ваш код уязвим для атак со стороны ненадежного кода.
Multithreaded correctness
Тип описывает недостатки кода, связанные с потоками, блокировками.
Bogus random noise
Данный тип предназначен для использования как средство контроля в экспериментах по интеллектуальному анализу данных, а не для поиска реальных ошибок в программном обеспечении.
Performance
Архетип говорит о том, что ваш код не обязательно неверен, но может быть неэффективным и нуждается в некой оптимизации.
Security
Вероятно, вы используете ненадежный входной функционал, у которого могут быть уязвимости, дыры в системы безопасности, допустимые к использованию удаленно.
Dodgy code
Под данный тип попадает код, который вводит в заблуждение, является аномальным или написан таким образом, что приводит к ошибкам.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ