Засоби статичного аналізу Java у Eclipse та IntelliJ IDEA

1. Огляд

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

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

2. ПМД

Почнемо з ПМД.

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

2.1. Інтеграція з Eclipse

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

Варто зазначити, що ми можемо запускати PMD на рівні проекту або на рівні індивідуального класу.

Результати показані нижче - з різними кольорами для різних рівнів знахідки, яка варіюється від "попередження" до "блокатора" у зростаючому порядку важкості:

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

Також можна змінити конфігурацію сканування PMD - ми можемо це зробити в меню під вікном -> Налаштування -> PMD, щоб запустити сторінку конфігурації. Тут ми можемо налаштувати параметри сканування, набір правил, налаштування відображення результатів тощо.

Якщо нам потрібно деактивувати деякі конкретні правила для проекту - ми можемо просто видалити їх із сканування:

2.2. Інтеграція з IntelliJ

Звичайно, IntelliJ має подібний плагін PMD - який можна завантажити та встановити з магазину плагінів JetBrains.

Подібним чином ми можемо запустити плагін прямо в IDE - клацнувши правою кнопкою миші потрібне для сканування джерело та вибравши сканування PMD у контекстному меню:

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

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

3. JaCoCo

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

3.1. Інтеграція з Eclipse

JaCoCo можна встановити безпосередньо з ринку. Посилання на встановлення також розміщено на офіційному веб-сайті, доступному тут.

Інструмент може виконуватися від рівня проекту до рівня окремого методу. Плагін Eclipse використовує різні колірні схеми, щоб визначити, яку частину коду охоплюють тестові приклади, а яку не:

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

У нашому тестовому випадку ми тестуємо лише той сценарій, коли другий параметр дорівнює нулю:

У цьому випадку ми бачимо, що рядок 6 забарвлений в жовтий колір. У нашому простому тесті перевірено та працює лише одна гілка умови „якщо”. Тому він не повністю перевірений і позначений жовтим кольором.

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

Ми можемо побачити короткий виклад покриття тесту, де він відображає, скільки коду охоплюється модульними тестами на рівні класу та рівнях пакетів:

3.2. Інтеграція з IntelliJ IDEA

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

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

Як і Eclipse, JaCoCo відображає результати, використовуючи різні кольорові схеми для покриття.

Ми можемо побачити короткий виклад тестового покриття, де він відображає, яка частина коду охоплена модульними тестами на рівні класу та рівнях пакетів.

4. Кобутура

Нарешті, варто згадати Cobertura - вона так само використовується для відстеження охоплення модульних тестів у кодовій базі.

Остання версія Eclipse не підтримує плагін Cobertura на момент написання статті; плагін працює з попередніми версіями Eclipse.

Аналогічно, IntelliJ IDEA не має офіційного плагіна, який може виконувати покриття Cobertura.

5. Висновок

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

Вихідний код цього підручника можна знайти в проекті GitHub - це проект на основі Maven, тому його слід легко імпортувати та запускати як є.