13

Чистим Java код используя SonarQube и PMD

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

Какие технологии помогают анализировать код на ошибки и уязвимости?

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

  • SonarQube

  • FindBugs

  • PMD

  • SpotBugs

  • Checkstyle

  • Snyk

  • JArchitect

  • Graudit

В данной статье мы рассмотрим SonarQube и PMD.

SonarQube настройка, установка, запуск.

SonarQube - довольно популярное решение, хотя, по моему мнению, изначальные правила проверок лучше немного перенастроить. SonarQube предоставляет бесплатную версию, которая может быть запущена из-под Docker в одну команду. Все, что вам потребуется, это сервер с 2 ГБ оперативной памяти (но чем больше, тем лучше). Как настраивать и арендовать сервер я писал вот тут.

Запускаем Sonar используя Docker.

Запускаем докер одной командой:

docker run -d --name sonarqube -p 9002:9000 -p 9092:9092 sonarqube

Первый логин проходит под admin/admin

После запуска следует подождать примерно пять минут и затем открыть ваш сервер. Первый вход потребует использования имени и пароля admin/admin, после чего система попросит изменить пароль. На данном этапе мы пропустим этот шаг.

Процесс создания проекта и генерации токена.

Существуют разные способы интеграции с SonarQube. Самый простой — интегрировать зависимость в Maven/Gradle вашего проекта и затем выполнить одну команду в командной консоли. Ниже я постараюсь упростить процесс генерации токена и проекта до шести команд:

6 шагов для генерации имени проекта, ключа и токена. Все они нужны для отправки вашего кода сонару

После выполнения всех 6 шагов у нас есть:

  • Имя проекта pikabu

  • Имя ключа pikabu

  • имя токена

Чтобы Sonar проводил более подробную аналитику, рекомендуется установить плагины. Для этого перейдите в раздел Administration => Marketplace и выберите плагины по вашему желанию:

Плагины имеют много общих правил и настроить профиль без пересечений это головная боль.

Плагины имеют много общих правил и настроить профиль без пересечений это головная боль.

Настраиваем Maven и добавляем Sonar плагин.

Для настройки мавен проекта достаточно добавить плагин в pom.xml:

<plugin>
<groupId>org.sonarsource.scanner.maven</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>3.9.1.2184</version>
</plugin>

Теперь мы готовы к анализу нашего кода.

Напишем код с наиболее популярными ошибками в Java.

Я приведу далеко не все классические ошибки, но для оценки базовой функциональности этого будет достаточно:

Несколько популярных ошибок среди триллиона возможных.

Все настроено. Погнали.

Если в файле pom.xml добавлен Sonar плагин, и имя проекта, ключ и токен готовы, после сборки проекта можно запустить команду для передачи результатов в SonarQube:

mvn sonar:sonar -Dsonar.projectKey=pikabu -Dsonar.projectName=pikabu -Dsonar.host.url=http://IP_СЕРВЕРА:9002 -Dsonar.login=sqp_4d542b25...

Анализируем результаты

После запуска заходим в проект (в моем случае pikabu) и нажимаем Overall Code

Я подключил слишком много правил поэтому среди найденных проблем есть дубликаты.

Я подключил слишком много правил поэтому среди найденных проблем есть дубликаты.

Результаты

  • Обнаружено 6 багов.

  • Покрытие составляет 0% (для более точного анализа покрытия, рекомендуется интегрировать Jococo плагин).

  • Выявлено 49 вонючих строк кода.

Поскольку я включил более 1000 правил (по умолчанию их всего 400), некоторые проблемы среди 49 являются просто дубликатами. Давайте рассмотрим самые важные, а именно баги:

Часть проблем была найдена, но не все.

Часть проблем была найдена, но не все.

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

Также можно выбрать файл и посмотреть всю аналитку:

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

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

Какие выводы можно сделать?

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

  • Сонар однозначно отлавливает много багов но не все.

  • Во много качество сонара определяется настроеными правилами (Quality profiles) которые затем и используются во время анализа. Подружить их все - довольно непросто.

  • Слишком большое количество правил руинит весь смысл анализа.

Двигаемся дальше. PMD анализатор кода.

бесплатный, опенсорный.

бесплатный, опенсорный.

Sonar не является чем-то уникальным. Давайте рассмотрим другое бесплатное решение - PMD. Кстати, правила PMD могут быть скачены и запущены в Sonar, но с первой попытки у меня это не получилось из-за проблемы с соответствием версий PMD/SONAR/JAVA.

Ставим PMD

Чтобы поставить PMD достаточно скачать с их сайта pmd-dist-7.0.0-rc4-bin.zip и распаковать. Затем добавить в PATH bin папку и запусить команду:

>pmd check -d C:\cleancode -R rulesets/java/quickstart.xml -f html -r report.html

В команде C:\cleancode является папкой проекта где лежит ваш Java код. Результатом работы будет созданный report.html. Вот результаты его работы:

Коротко и по делу.

Коротко и по делу.

И так результаты PMD мне зашли. Он нашел почти все проблемы, часть которых Sonar пропустил (точнее тысяча правил которые я подключил из стандартных наборов).

Всем кому интересна разработка на Java и смежный мир технологий добро пожаловать в мой телеграм канал. Всем спасибоо за внимание.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества