SonarQube sostituisce Checkstyle, PMD, FindBugs?


105

Stiamo lavorando a un progetto web da zero e stiamo esaminando i seguenti strumenti di analisi statica del codice.

  • Convenzioni (stile di controllo)
  • Cattive pratiche (PMD)
  • Potenziali bug (FindBugs)

Il progetto è costruito su Maven. Invece di utilizzare più strumenti per lo scopo, stavo cercando un'unica soluzione flessibile e mi sono imbattuto in SonarQube.

È vero che possiamo ottenere i risultati di Checkstyle, PMD e Findbugs con SonarQube?

Risposte:


99

Sonar eseguirà CheckStyle, FindBugs e PMD, così come alcuni altri "plugin" come Cobertura (copertura del codice) per impostazione predefinita per i progetti Java. Il principale valore aggiunto, tuttavia, è che memorizza la cronologia in un database. Puoi quindi vedere la tendenza . Stai migliorando la base del codice o stai facendo il contrario? Solo uno strumento dotato di memoria può dirtelo.

Dovresti eseguire Sonar nel tuo sistema CI in modo che anche le cose che richiedono un po 'di tempo per essere eseguite (come CPD - rilevatore di copia incolla) possano essere eseguite. E avrai la tua storia. Mentre con un plug-in Eclipse, ad esempio, rileverai le violazioni prima, il che è fantastico , ma sarai tentato di eseguirlo meno spesso se inizia a impiegare troppo tempo o di eseguire meno "plug-in di qualità" (come saltare CPD o saltare l'analisi della copertura del codice). E non avrai la storia.

Inoltre, Sonar genera rapporti visivi , in stile "Dashboard". Il che lo rende molto facile da afferrare. Con Sonar in Jenkins, sarai in grado di mostrare agli sviluppatori e al tuo management gli effetti del lavoro svolto sulla qualità del codice di base nelle ultime settimane e mesi.


Sono d'accordo con questi vantaggi nel contesto dei progetti brown field. I progetti greenfield con politiche zero difetti non necessitano di quella memoria. Mantieni sempre pulita la tua base di codice al 100%.
Christian Hujer

48

Sonar utilizza questi 3 strumenti come plugin e aggrega i dati di tutti e tre dando valore aggiunto mostrando grafici e simili da questi strumenti. Quindi sono complementari al sonar.


1
sì il sonar li usa tutti e tre
frappuccino

27
mentre questo era vero fino alla versione 3.x, Sonar 4.x sta abbandonando l'utilizzo di almeno PMD e CheckStyle a favore del proprio analizzatore Squid interno, perché dà loro più libertà di estendere il set di regole e risolvere i problemi che sono stati affliggendo questi progetti per un po '. Ad esempio, hanno già deprecato più di 150 regole PMD e alla fine lo rimuoveranno completamente.
haylem

1
Post interessante sul motivo per cui hanno deprecato quelle regole: sonarqube.org/… .
Jhack

33

Sì e no. Oltre alle altre risposte.

SonarQube è attualmente in procinto di deprecare PMD, Checkstyle e Findbugs e utilizzare la propria tecnologia per analizzare il codice Java (chiamato SonarJava ). Lo fanno perché non vogliono passare il loro tempo a riparare, aggiornare (o aspettare) quelle librerie (ad esempio per Java 8), che ad esempio utilizzano librerie obsolete.

Hanno anche ottenuto un nuovo set di plugin per il tuo IDE personale chiamato SonarLint .


8

Sonar è ottimo, ma se vuoi usare gli strumenti menzionati separatamente e avere comunque dei bei grafici, puoi usare il plug- in Analysis Collector come parte della build CI di Jenkins. Un leggero vantaggio di questo è che puoi controllare la tua configurazione PMD / Findbugs / Checkstyle nel tuo SCM e averlo integrato nella tua build Maven, piuttosto che fare affidamento su un server Sonar separato.


5

Sonar è molto più di questi strumenti da soli. Il vantaggio più grande è la gui, che ti consente di configurare qualsiasi cosa facilmente. Le statistiche che offre sono molto dettagliate (righe di codice, ecc.). E offre anche un ottimo supporto per la copertura dei test, ecc. :)

Qui puoi dare una buona occhiata: http://nemo.sonarsource.org/


3

Vorrei comunque utilizzare questi strumenti oltre al sonar perché possono fallire la costruzione di Maven quando qualcuno viola una regola. Dove come sonar è più retrospettivo.


3

... qualche anno dopo: no, non lo è! SonarQube suppone di essere in grado di coprire tutte le regole con il proprio analizzatore, ma ci sono ancora regole da PMD o CheckStyle non coperte da SonarQube. Vedere ad esempio: PMD ReturnFromFinallyBlock.


Sembra che manchi anche la violazione PMD: utilizzare l'ambito esplicito invece del livello privato del pacchetto predefinito?
user7294900


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.