Является ли SonarQube заменой Checkstyle, PMD, FindBugs?

105

Мы работаем над веб-проектом с нуля и смотрим на следующие инструменты статического анализа кода.

  • Условные обозначения (Checkstyle)
  • Плохая практика (PMD)
  • Возможные ошибки (FindBugs)

Проект построен на Maven. Вместо того, чтобы использовать для этой цели несколько инструментов, я искал одно гибкое решение и наткнулся на SonarQube.

Верно ли, что мы можем добиться результатов от Checkstyle, PMD и Findbugs с помощью SonarQube?

Джонни
источник

Ответы:

99

Sonar будет запускать CheckStyle, FindBugs и PMD, а также несколько других «плагинов», таких как Cobertura (покрытие кода) по умолчанию для проектов Java. Однако главная добавленная стоимость заключается в том, что он хранит историю в базе данных. Затем вы можете увидеть тенденцию . Вы улучшаете кодовую базу или делаете наоборот? Это может сказать только инструмент с памятью.

Вы должны запустить Sonar в своей системе CI, чтобы могли работать даже те вещи, выполнение которых требует некоторого времени (например, CPD - детектор копирования и вставки). И у вас будет своя история. В то время как с плагином Eclipse, например, вы обнаружите нарушения раньше - и это здорово - но у вас возникнет соблазн запускать его реже, если он начинает занимать слишком много времени или запускать менее качественные плагины (например, пропуск CPD или пропуск анализа покрытия кода). И у тебя не будет истории.

Также Sonar генерирует визуальные отчеты в стиле «приборной панели». Что делает его очень простым для понимания. С помощью Sonar в Jenkins вы сможете показать разработчикам и своему руководству влияние проделанной работы на качество кода за последние несколько недель и месяцев.

Оливье Гурман
источник
Я согласен с этими преимуществами в контексте коричневых проектов. Для новых проектов с политикой нулевого дефекта эта память не требуется. Просто постоянно держите свою базу кода в чистоте на 100%.
Кристиан Худжер,
48

Sonar использует эти 3 инструмента в качестве подключаемых модулей и объединяет данные всех трех, обеспечивая дополнительную ценность, показывая графики и тому подобное из этих инструментов. Таким образом, они дополняют сонар.

ЯБольшойЖирныйГай
источник
1
да сонар использует все три
фраппучино
27
хотя это было верно до версии 3.x, Sonar 4.x отходит от использования по крайней мере PMD и CheckStyle в пользу собственного внутреннего анализатора Squid, поскольку это дает им больше свободы для расширения набора правил и исправления проблем, которые были преследуют эти проекты какое-то время. Например, они уже устарели более чем 150 правил PMD и в конечном итоге полностью удалят их.
haylem
1
Интересный пост о причине отказа от этих правил: sonarqube.org/… .
Jhack
33

Да и нет. В дополнение к другим ответам.

SonarQube в настоящее время отказывается от PMD, Checkstyle и Findbugs и использует собственную технологию для анализа кода Java (называемую SonarJava ). Они делают это, потому что не хотят тратить свое время на исправление, обновление (или ожидание этого) тех библиотек (например, для Java 8), которые, например, используют устаревшие библиотеки.

Они также получили новый набор плагинов для вашей личной IDE под названием SonarLint .

кейки
источник
8

Sonar - это замечательно, но если вы хотите использовать упомянутые инструменты отдельно и при этом иметь хорошие графики, вы можете использовать плагин Analysis Collector как часть вашей сборки Jenkins CI. Небольшое преимущество этого заключается в том, что вы можете проверить свою конфигурацию PMD / Findbugs / Checkstyle в SCM и интегрировать ее в свою сборку Maven, вместо того, чтобы полагаться на отдельный сервер Sonar.

artbristol
источник
5

Сонар - это гораздо больше, чем просто эти инструменты. Самым большим преимуществом является графический интерфейс, который позволяет легко настраивать что угодно. Предлагаемая статистика очень подробна (строки кода и т. Д.). И он даже предлагает отличную поддержку тестового покрытия и т. Д. :)

Здесь вы можете хорошенько посмотреть: http://nemo.sonarsource.org/

Oers
источник
3

Я бы по-прежнему использовал эти инструменты в дополнение к сонару, потому что они могут привести к сбою сборки maven, когда кто-то нарушит правило. Куда как эхолот более ретроспективно.

Усман Исмаил
источник
3

... несколько лет спустя: нет, это не так! SonarQube предполагает возможность охватить все правила собственным анализатором, но все еще есть правила PMD или CheckStyle, не охватываемые SonarQube. См., Например: PMD ReturnFromFinallyBlock.

Deamon
источник
Кажется, также отсутствует нарушение PMD: использовать явную область видимости вместо частного уровня пакета по умолчанию?
user7294900 02
Нет. Правила называются по-разному, но они присутствуют: операторы перехода не должны встречаться в блоках "finally" и должна быть указана видимость переменных-членов .
Петр Боднар,
2

Ну, по крайней мере, начиная с SonarQube 6.3+, похоже, что Findbugs (на данный момент) больше не поддерживается как плагин. Sonarsource работает над заменой правил Findbugs собственным Java-плагином.

У них даже есть список статуса замены каждого правила здесь: http://dist.sonarsource.com/reports/coverage/findbugs.html

Маркус
источник