Чи є заміна SonarQube для Checkstyle, PMD, FindBugs?


105

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

  • Конвенції (контрольний стиль)
  • Погані практики (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
yup sonar використовує всі три
frappuccino

27
хоча це було вірно до версії 3.x, Sonar 4.x відходить від використання принаймні PMD та CheckStyle на користь власного внутрішнього аналізатора Squid, оскільки це дає їм більше свободи для розширення набору правил та виправлення проблем, які були мучить ці проекти на деякий час. Наприклад, вони вже застаріли понад 150 правил PMD і згодом цілком видалять їх.
хайлем

1
Цікавий пост про причину того, що вони зневажили ці правила: sonarqube.org/… .
Джак

33

Так і ні. Окрім інших відповідей.

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

Вони також отримали новий набір плагінів для вашого персонального IDE під назвою SonarLint .


8

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


5

Сонар набагато більше, ніж ці інструменти поодинці. Найбільшою перевагою є gui, який дозволяє вам легко налаштувати що-небудь. Запропонована ним статистика дуже детальна (рядки коду тощо). І навіть пропонує чудову підтримку для тестового покриття тощо :)

Тут ви можете добре поглянути: http://nemo.sonarsource.org/


3

Я б все-таки користувався цими інструментами на додаток до сонару, оскільки вони можуть вийти з ладу у Maven Build, коли хтось порушує правило. Де як сонар є більш ретроспективним.


3

... через кілька років: ні, це не так! SonarQube передбачає можливість покрити всі правила власним аналізатором, але все ж є правила PMD або CheckStyle, які не охоплені SonarQube. Див. Наприклад: PMD ReturnFromFinallyBlock.


Здається, також відсутнє порушення PMD: Використовувати чітке визначення розміру замість приватного рівня пакету за замовчуванням?
user7294900


2

Ну принаймні, оскільки SonarQube 6.3+, здається, що Findbugs (на даний момент) більше не підтримується як плагін. Sonarsource працює над заміною Findbugs-правил власним Java-плагіном.

Тут навіть є список статусу заміни кожного правила тут: http://dist.sonarsource.com/reports/coverage/findbugs.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.