Тому рев'ю коду обов'язкова частина розробки. Щоб полегшити це завдання, використовуються різні засоби статичного аналізу коду . Про один із них ми поговоримо сьогодні. Для початку уточнимо один момент. У нас вже є Java-компілятор, який перевіряє код, то в чому ж його відмінність від статичного аналізу? Статичний аналізперевіряє байт-код Java (компільовані файли з розширенням .class) на наявність шаблонних помилок, тоді як компілятор Javaлише перевіряє вихідний код наявність синтаксичних помилок. Такі засоби допомагають знаходити погані рішення, код, що не використовується, неефективні рішення, можливі помилки і т.д. Вони полегшують життя ревьюєрів коду і дозволяють відловлювати те, що вони можуть пропустити або не врахувати під час перевірки. Якщо ви зовсім новачок і ще не працюєте в компанії на проекті, дані інструменти вам будуть особливо корисні, оскільки вони будуть висвітлювати недоліки вашого коду, і ви їх підсвідомо запам'ятовуватимете, щоб у майбутньому не допускати повтору. Ну а згодом ви самі зможете стати крутим ревьюєром, оскільки миттєво помічатимете всі недоліки коду. Сьогодні проведемо невеликий огляд статичного аналізатора SpotBugs .
SpotBugs- Це інструмент, який дозволяє досліджувати код для пошуку можливих проблем. Він здійснює статичний аналіз, переглядаючи код, щоб знайти певні антипатерни , які можуть викликати проблеми (наприклад, низьку продуктивність). Інструмент, який виконує ці перевірки автоматично, при кожній зміні врятує код від поступового погіршення. Якщо не налаштувати цей процес, непомітно для всіх, якийсь момент може стати занадто пізно, адже код міститиме сотні попереджень.
| Для коректної роботи 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
Під даний тип потрапляє код, який вводить в оману, є аномальним або написаний таким чином, що призводить до помилок.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ