Перейти к основному содержимому

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

· 4 мин. чтения

Задача: Наибольшая подстрока палиндром

Для заданной строки s, верните наибольшую подстроку палиндром входящую в s. Подстрока — это непрерывная непустая последовательность символов внутри строки. Стока является палиндромом, если она читается одинаково в обоих направлениях...

ANDROMEDA 42

1. Обзор

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

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

2. ПМД

Начнем с ПМД.

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

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

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

./02f854bf6ce2d32bc81b6f9a4cae57ab.png

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

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

./f4db86c47eb3beee5f34d9120f0cce19.png

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

./10936416560694a5f9e9d18a036b741c.png

./9cc7ee23ffbace1b20397121e056df4e.png

Также возможно изменить конфигурацию сканирования PMD — мы можем сделать это в меню, в разделе «Окно» -> «Настройки» -> «PMD», чтобы открыть страницу конфигурации. Здесь мы можем настроить параметры сканирования, набор правил, настройки отображения результатов и т. д.

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

./d2d3106c18c4633a731a47ab77dca45e.png

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

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

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

./2c997c43bd8a4db052af2647d58a43a8.png

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

./7364ef1fc6e940cd0e2f92b423c1b62f.png

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

3. ДжаКоКо

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

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

JaCoCo можно установить прямо из магазина . Ссылка для установки также размещена на официальном сайте, доступном здесь .

./6601c4e1286f84c49eeca3b993bbca65.png

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

./25beec5189e0edf3a5f7d5c3792e7ef7.png

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

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

./26f4018e5a2f23cdacdf5bbc7912d5c0.png

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

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

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

./b39f09c233afcd80c672e50858ff3bbc.png

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

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

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

./1f89473ee5979ede9da88f0b6f899ed6.png

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

./1b6560692376534898a0a350698cc863.png

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

./0e77dcf05f718df3d0d4a9315b3e3083.png

4. Кобертура

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

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

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

5. Вывод

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

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