Ist SonarQube Ersatz für Checkstyle, PMD, FindBugs?

105

Wir arbeiten an einem Webprojekt von Grund auf neu und betrachten die folgenden Tools zur Analyse statischen Codes.

  • Konventionen (Checkstyle)
  • Schlechte Praktiken (PMD)
  • Mögliche Fehler (FindBugs)

Das Projekt basiert auf Maven. Anstatt mehrere Tools für diesen Zweck zu verwenden, habe ich mir eine einzige flexible Lösung angesehen und bin auf SonarQube gestoßen.

Stimmt es, dass wir mit SonarQube die Ergebnisse von Checkstyle, PMD und Findbugs erzielen können?

Johnny
quelle

Antworten:

99

Sonar führt standardmäßig CheckStyle, FindBugs und PMD sowie einige andere "Plugins" wie Cobertura (Codeabdeckung) für Java-Projekte aus. Der Hauptvorteil besteht jedoch darin, dass der Verlauf in einer Datenbank gespeichert wird. Sie können dann den Trend sehen . Verbessern Sie die Codebasis oder machen Sie das Gegenteil? Nur ein Werkzeug mit Speicher kann Ihnen das sagen.

Sie sollten Sonar in Ihrem CI-System ausführen, damit auch Dinge ausgeführt werden können, deren Ausführung einige Zeit in Anspruch nimmt (z. B. CPD - Copy Paste Detector). Und du wirst deine Geschichte haben. Während Sie beispielsweise mit einem Eclipse-Plugin Verstöße früher erkennen - was großartig ist -, werden Sie versucht sein, es weniger häufig auszuführen, wenn es zu lange dauert, oder weniger "Qualitäts-Plugins" auszuführen (z. B. CPD überspringen oder Analyse der Codeabdeckung überspringen). Und du wirst keine Geschichte haben.

Außerdem generiert Sonar visuelle Berichte im "Dashboard" -Stil. Das macht es sehr leicht zu erfassen. Mit Sonar in Jenkins können Sie Entwicklern und Ihrem Management die Auswirkungen der Arbeit zeigen, die in den letzten Wochen und Monaten auf die Qualität der Codebasis ausgeführt wurde.

Olivier Gourment
quelle
Ich stimme diesen Vorteilen im Zusammenhang mit Industriebrachenprojekten zu. Greenfield-Projekte mit Null-Fehler-Richtlinien benötigen diesen Speicher nicht. Halten Sie Ihre Codebasis immer 100% sauber.
Christian Hujer
48

Sonar verwendet diese drei Tools als Plugins und aggregiert die Daten aller drei Tools, um einen Mehrwert zu erzielen, indem Diagramme und dergleichen dieser Tools angezeigt werden. Sie ergänzen also das Sonar.

MeBigFatGuy
quelle
1
yup Sonar verwendet alle drei
Frappuccino
27
Während dies bis Version 3.x zutraf, verzichtet Sonar 4.x von der Verwendung von mindestens PMD und CheckStyle zugunsten seines eigenen internen Squid-Analysators, da es ihnen mehr Freiheit gibt, den Regelsatz zu erweitern und Probleme zu beheben diese Projekte für eine Weile plagen. Zum Beispiel haben sie bereits mehr als 150 PMD-Regeln veraltet und werden sie schließlich vollständig entfernen.
Haylem
1
Interessanter Beitrag über den Grund, warum sie diese Regeln abgelehnt haben : sonarqube.org/… .
Jhack
33

Ja und nein. Neben den anderen Antworten.

SonarQube ist derzeit auf dem Weg, PMD, Checkstyle und Findbugs zu verwerfen und Java-Code ( SonarJava ) mithilfe eigener Technologie zu analysieren . Sie tun dies, weil sie ihre Zeit nicht damit verbringen möchten, diese Bibliotheken (z. B. für Java 8) zu reparieren, zu aktualisieren (oder darauf zu warten), die beispielsweise veraltete Bibliotheken verwenden.

Sie haben auch einen neuen Satz von Plugins für Ihre persönliche IDE namens SonarLint .

Keiki
quelle
8

Sonar ist großartig, aber wenn Sie die genannten Tools separat verwenden möchten und dennoch schöne Grafiken haben möchten, können Sie das Analysis Collector Plugin als Teil Ihres Jenkins CI-Builds verwenden. Ein kleiner Vorteil davon ist, dass Sie Ihre PMD / Findbugs / Checkstyle-Konfiguration in Ihr SCM einchecken und in Ihren Maven-Build integrieren können, anstatt sich auf einen separaten Sonar-Server zu verlassen.

Artbristol
quelle
5

Sonar ist viel mehr als nur diese Tools. Der größte Vorteil ist die GUI, mit der Sie alles einfach konfigurieren können. Die angebotenen Statistiken sind sehr detailliert (Codezeilen usw.). Und es bietet sogar großartige Unterstützung für die Testabdeckung usw. :)

Hier können Sie einen guten Blick darauf werfen: http://nemo.sonarsource.org/

oers
quelle
3

Ich würde diese Tools zusätzlich zum Sonar weiterhin verwenden, da sie beim Erstellen eines Maven fehlschlagen können, wenn jemand gegen eine Regel verstößt. Wo als Sonar eher retrospektiv ist.

Usman Ismail
quelle
3

... ein paar Jahre später: nein, das ist es nicht! SonarQube setzt voraus, dass alle Regeln mit einem eigenen Analysegerät abgedeckt werden können. Es gibt jedoch weiterhin Regeln von PMD oder CheckStyle, die nicht von SonarQube abgedeckt werden. Siehe zum Beispiel: PMD ReturnFromFinallyBlock.

Deamon
quelle
Es scheint auch PMD-Verletzung zu fehlen: Verwenden Sie explizites Scoping anstelle der privaten Ebene des Standardpakets?
user7294900
Nee. Die Regeln werden unterschiedlich benannt, sind jedoch vorhanden: Sprunganweisungen sollten nicht in "finally" -Blöcken auftreten, und die Sichtbarkeit von Mitgliedsvariablen sollte angegeben werden .
Petr Bodnár
2

Nun, zumindest seit SonarQube 6.3+ scheint es, dass Findbugs (im Moment) nicht mehr als Plugin unterstützt wird. Sonarsource arbeitet daran, Findbugs-Regeln durch ein eigenes Java-Plugin zu ersetzen.

Sie haben sogar eine Liste für den Ersetzungsstatus jeder Regel hier: http://dist.sonarsource.com/reports/coverage/findbugs.html

Markus
quelle