Domanda

C'era una domanda confrontando PMD e CheckStyle . Tuttavia, non riesco a trovare una ripartizione bel sulle differenze / analogie tra PMD e FindBugs. Credo che la differenza fondamentale è che PMD lavora sul codice sorgente, mentre FindBugs funziona su file bytecode compilati. Ma in termini di capacità, dovrebbe essere un o / o per scelta o se invece si completano a vicenda?

È stato utile?

Soluzione

sto usando entrambi. Penso che si completano a vicenda.

Come hai detto, PMD opere in codice sorgente e trova quindi problemi come: violazione delle convenzioni di denominazione, la mancanza di parentesi graffe, fuori luogo di controllo nullo, lista dei parametri lunga, costruttore inutili, manca pausa in switch, ecc PMD ti dice anche la Cyclomatic complessità del vostro codice che trovo molto utile (FindBugs non ti dice sulla complessità ciclomatica).

FindBugs lavora su bytecode. Qui ci sono alcuni problemi FindBugs reperti PMD non: metodo Equals () non riesce in sottotipi, metodo clone può restituire null, il confronto di riferimento di valori booleani, fusione impossibile, 32bit int spostato di un importo non nella gamma di 0-31, una collezione che contiene in sé, è uguale metodo restituisce sempre vero, un ciclo infinito, ecc.

Di solito ognuno di loro trova un diverso insieme di problemi. Utilizza entrambi. Questi strumenti mi hanno insegnato molto su come scrivere buon codice Java.

Altri suggerimenti

La caratteristica migliore di PMD, è il suo Regole XPath , in bundle con un designer regola che consente di costruire facilmente nuove regole da esempi di codice (simile a RegEx e XPath GUI costruttori). FindBugs è più forte, fuori dalla scatola, ma costruzione di regole e modelli specifici di progetto è molto importante.

Per esempio, ho incontrato un problema di prestazioni che coinvolge 2 cicli for innestati, risultando in un O (n ^ 2) tempo di esecuzione, che può essere facilmente evitato. Ho usato PMD per costruire un ad hoc di query , di rivedere altre istanze di nested cicli for - // ForStatement / Dichiarazione // ForStatement. Questo ha sottolineato altre 2 istanze del problema. Questa non è una regola di sorta generico.

PMD è

  • famoso
  • ampiamente utilizzato nell'industria
  • è possibile aggiungere le regole in XML
  • ti dà un'analisi dettagliata dei livelli di errori e livelli di avviso
  • si può anche eseguire la scansione del codice per "copiare e incollare le linee". codice duplicato. Questo dà una buona idea di attuazione java oops.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top