Инструменты статического анализа Java в Eclipse и IntelliJ IDEA

Инструменты статического анализа Java в Eclipse и IntelliJ IDEA

1. обзор

В нашемintroduction to FindBugs мы рассмотрели функциональность FindBugs как инструмента статического анализа и то, как его можно напрямую интегрировать в такие IDE, как Eclipse и IntelliJ Idea.

В этой статье мы рассмотрим несколько альтернативных инструментов статического анализа для Java и то, как они интегрируются с Eclipse и IntelliJ IDEA.

2. PMD

Начнем с PMD.

Этот зрелый и достаточно хорошо зарекомендовавший себя инструмент анализирует исходный код на предмет возможных ошибок, неоптимальных кодов и других плохих практик; он также рассматривает более сложные метрики, такие как цикломатическая сложность для анализируемой кодовой базы.

2.1. Интеграция с Eclipse

Плагин PMD может быть установлен непосредственно из Eclipse Marketplace. Плагин также можно загрузить вручнуюhere. После установки мы можем запустить проверку PMD непосредственно из самой IDE:

image

Стоит отметить, что мы можем запускать PMD на уровне проекта или на уровне отдельного класса.

Результаты показаны ниже - разными цветами для разных уровней обнаружения, которые варьируются от «предупреждения» до «блокировщика» в порядке возрастания серьезности:

image

Мы можем углубиться в детали каждой записи, щелкнув ее правой кнопкой мыши и выбрав «показать детали» в контекстном меню. Eclipse покажет краткое описание проблемы и возможные способы ее устранения:

image image

Также возможно изменить конфигурацию сканирования PMD - мы можем сделать это в меню, выбрав Window → Preferences → PMD, чтобы открыть страницу конфигурации. Здесь мы можем настроить параметры сканирования, набор правил, настройки отображения результатов и т. Д.

Если нам нужно деактивировать некоторые конкретные правила для проекта - мы можем просто удалить их из проверки:

image

2.2. Интеграция с IntelliJ

Конечно, в IntelliJ есть аналогичный плагин PMD, который можно загрузить и установить изJetBrains plugin store.

Аналогичным образом мы можем запустить плагин прямо в IDE - щелкнув правой кнопкой мыши источник, который нам нужно сканировать, и выбрав PMD-сканирование в контекстном меню:

image

Результаты отображаются сразу, но, в отличие от Eclipse, если мы попытаемся открыть описание, откроется браузер с общедоступной веб-страницей для поиска информации:

image

Мы можем настроить поведение плагина PMD на странице настроек, перейдя в Файл → Настройки → другие настройки → PMD, чтобы просмотреть страницу конфигурации. На странице настроек мы можем настроить набор правил, загрузив пользовательский набор правил с нашими собственными правилами тестирования.

3. JaCoCo

Двигаясь дальше - JaCoCo - инструмент покрытия тестов - используется для отслеживания покрытия модульных тестов в кодовой базе. Проще говоря, инструмент рассчитывает покрытие, используя ряд стратегий, например: линии, класс, методы и т. Д.

3.1. Интеграция с Eclipse

JaCoCo можно установить напрямуюfrom the marketplace. Ссылка для установки также размещена на официальном сайтеhere.

image

Инструмент может быть выполнен от уровня проекта до уровня отдельного метода. Плагин Eclipse использует разные цветовые схемы, чтобы точно определить, какая часть кода покрыта тестовыми примерами, а какая - нет.

image

Наш метод делит два предоставленных целочисленных параметра и возвращает результат. Если второй параметр равен нулю, он вернет максимальное значение для целочисленного типа данных.

В нашем тестовом примере мы тестируем только сценарий, в котором второй параметр равен нулю:

image

В этом случае мы видим, что линия 6 окрашена в желтый цвет. Только одна ветвь условия «если» проверяется и выполняется в нашем простом тесте. Поэтому он не полностью протестирован и отмечен желтым цветом.

Кроме того, строка 7 имеет зеленый цвет - это означает, что она полностью протестирована. Наконец, строка 9 выделена красным цветом, что означает, что эта линия вообще не тестировалась нашими модульными тестами.

We can see a summary of the test coverage, где отображается, сколько кода покрыто модульными тестами на уровне класса и на уровне пакета:

image

3.2. Интеграция с IntelliJ IDEA

JaCoCo по умолчанию входит в комплект последней версии IntelliJ IDEA, поэтому отдельно устанавливать плагин не требуется.

Выполняя модульные тесты, мы можем выбрать, какой бегунок покрытия нам нужно использовать. Мы можем запустить тестовые случаи либо на уровне проекта, либо на уровне класса:

image

Подобно Eclipse, JaCoCo отображает результаты, используя разные цветовые схемы для покрытия.

image

Мы можем увидеть сводку покрытия тестами, где он показывает, сколько кода покрыто модульными тестами на уровне классов и пакетов.

image

4. Cobertura

Наконец, стоит упомянуть Cobertura - он аналогичным образом используется для отслеживания покрытия модульными тестами в кодовой базе.

Последняя версия Eclipse не поддерживает плагин Cobertura на момент написания; плагин действительно работает с более ранними версиями Eclipse.

Точно так же IntelliJ IDEA не имеет официального плагина, который может выполнять покрытие Cobertura.

5. Заключение

Мы рассмотрели интеграцию с Eclipse и IntelliJ IDEA для трех широко используемых инструментов статического анализа. FindBug рассматривался в предыдущихintroduction to FindBugs.

Исходный код этого руководства можно найти вthe GitHub project - это проект на основе Maven, поэтому его должно быть легко импортировать и запускать как есть.