Domanda

Quali strumenti di analisi del codice si usa il tuo Java progetti?

Sono interessato a tutti I tipi

  • analisi statica del codice di strumenti (FindBugs, PMD, e tutti gli altri)
  • codice di copertura di strumenti (Cobertura, Emma e tutti gli altri)
  • qualsiasi altro strumentazione-strumenti
  • niente altro, se mi manca qualcosa

Se del caso, anche stato quello di costruire strumenti che si utilizzano e come questi strumenti si integrano con le vostre idee e costruire strumenti.

Se uno strumento è disponibile solo un modo specifico (come un IDE plugin, o, per dire, uno strumento di creazione di plugin) che l'informazione è anche degno di nota.

È stato utile?

Soluzione

Per gli strumenti di analisi statica io uso spesso CPD, PMD, FindBugs, e Checkstyle.

CPD è il PMD "Copia/Incolla di un Rivelatore di strumento.Stavo usando PMD per un po ' prima ho notato che il "Trovare il Codice Duplicato" link sul PMD pagina web.

Vorrei sottolineare che questi strumenti possono a volte essere estesa al di là della loro "out-of-the-box" set di regole.E non solo perché sono open source in modo che si può riscrivere a loro.Alcuni di questi strumenti sono dotati di applicazioni o di "ganci" che permettono loro di essere esteso.Per esempio, PMD viene fornito con il "designer" strumento che consente di creare nuove regole.Inoltre, Checkstyle ha il DescendantToken di controllo che ha delle proprietà che consentono una notevole personalizzazione.

Integrare questi strumenti con una Formica di costruzione a base di.Si può seguire il link per vedere il mio ha commentato configurazione.

Oltre alla semplice integrazione nel costruire, utile per configurare gli strumenti per essere in qualche modo "integrato", in un paio di altri modi.Vale a dire, la generazione di report e di avviso di soppressione di uniformità.Vorrei aggiungere questi aspetti di questa discussione (che probabilmente dovrebbe avere il "statico-analisi" tag anche):come sono le persone, la configurazione di tali strumenti per la creazione di un "unificata" soluzione?(Ho chiesto a questa domanda separatamente qui)

Primo, per la segnalazione di report, ho trasformare l'output in modo che ogni attenzione è il formato semplice:

/absolute-path/filename:line-number:column-number: warning(tool-name): message

Questo è spesso chiamato il "Emacs formato", ma anche se non si sta usando Emacs, è ragionevole formato di omogeneizzare i rapporti.Per esempio:

/project/src/com/example/Foo.java:425:9: warning(Checkstyle):Missing a Javadoc comment.

Mio avviso la trasformazione del formato sono fatto dal mio script Ant con Ant filterchains.

Il secondo "integrazione" che faccio è per avviso di soppressione.Per impostazione predefinita, ogni strumento supporta commenti o annotazioni (o entrambi) che è possibile inserire nel codice del silenzio un messaggio di avviso che si desidera ignorare.Ma queste diverse avviso soppressione richieste non hanno un aspetto uniforme che sembra un po ' sciocco.Quando hai la soppressione avviso, si sta sopprimendo un avviso, quindi perché non scrivere sempre "SuppressWarning?"

Per esempio, PMD, la configurazione predefinita sopprime avviso la generazione di linee di codice con la stringa "NOPMD"in un commento.Inoltre, PMD supporta Java @SuppressWarnings annotazione.Devo configurare il PMD utilizzare i commenti contenenti "SuppressWarning(PMD."invece di NOPMD in modo che PMD soppressioni sono simili.Compilare in particolare la regola che è violato quando si utilizza lo stile di commento soppressione:

// SuppressWarnings(PMD.PreserveStackTrace) justification: (false positive) exceptions are chained

Solo la "SuppressWarnings(PMD."in parte è significativo per un commento, ma è coerente con PMD di supporto per la @SuppressWarning annotazione che fa riconoscere le singole violazioni di regole per nome:

@SuppressWarnings("PMD.CompareObjectsWithEquals") // justification: identity comparision intended

Allo stesso modo, Checkstyle sopprime avviso generazione tra coppie di osservazioni (n annotazione, il supporto è fornito).Per impostazione predefinita, i commenti a girare Checkstyle off e contengono le stringhe CHECKSTYLE:OFF e CHECKSTYLE:ON, rispettivamente.La modifica di questa configurazione (con Checkstyle del "SuppressionCommentFilter") per utilizzare le stringhe "BEGIN SuppressWarnings(CheckStyle."e "END SuppressWarnings(CheckStyle."ti controlli più l'aspetto di PMD:

// BEGIN SuppressWarnings(Checkstyle.HiddenField) justification: "Effective Java," 2nd ed., Bloch, Item 2
// END SuppressWarnings(Checkstyle.HiddenField)

Con Checkstyle commenti, particolari check violazione (HiddenField) è significativo perché ogni controllo ha la sua propria "BEGIN/END"commento di coppia.

FindBugs supporta anche l'avviso di generazione di soppressione con un @SuppressWarnings annotazione, in modo che nessun ulteriore configurazione è necessaria per ottenere un certo livello di uniformità con gli altri strumenti.Purtroppo, Findbugs per sostenere un custom @SuppressWarnings annotazione perché il built-in di Java @SuppressWarnings l'annotazione ha un SOURCE la politica di conservazione, che non è abbastanza forte per mantenere l'annotazione nel file di classe in cui FindBugs bisogno.Ho qualificare completamente FindBugs avvertenze soppressioni per evitare la concomitanza con Java @SuppressWarnings annotazione:

@edu.umd.cs.findbugs.annotations.SuppressWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR")

Queste tecniche rende le cose sembrano ragionevolmente coerente attraverso gli strumenti di.Si noti che, avendo ogni avviso di soppressione contengono la stringa "SuppressWarnings"la rende facile per eseguire una semplice ricerca per trovare tutte le istanze di tutti gli strumenti per un'intera base di codice.

Altri suggerimenti

Io uso una combinazione di Cobertura, Checkstyle, (Ecl)Emma e Findbugs.

EclEmma è un impressionante Plugin di Eclipse che mostra la copertura del codice colorare la sorgente java nell'editor (screenshot) - la copertura è generato mediante l'esecuzione di un test JUnit.Questo è molto utile quando si sta cercando di capire quali linee sono ricoperti da una particolare classe, o se si desidera solo per vedere che le linee sono coperti da un singolo test.Questo è molto più user friendly e utile che la generazione di un report e poi guardando attraverso il report per vedere quali classi hanno una scarsa copertura.

Il Checkstyle e Findbugs plugin di Eclipse sono utili, inoltre, generano avvisi nell'editor tipo.

Maven2 ha relazione plugin che operano con strumenti di cui sopra per generare rapporti a tempo di compilazione.Usiamo questo per ottenere complessivo di rapporti di progetto, che sono più utili quando si vuole aggregare numeri.Questi sono generati dal nostro CI costruisce, che corrono utilizzando Continuum.

Tutte le seguenti possiamo utilizzare e integrare easiy in entrambi i nostri Maven 2.x costruisce e Eclipse/7 RAD:

  • Test JUnit/TestNG
  • Analisi del codice - FindBugs, PMD
  • Codice di copertura - Clover

Inoltre, nel nostro Maven costruisce abbiamo:

  • JDepend
  • Tag checker (TODO, FIXME, ecc)

Inoltre, se si sta utilizzando Maven 2.x, CodeHaus ha una collezione di pratici Maven plugin in loro Mojo progetto.

Nota:Clover è out-of-the-box di integrazione con il Bambù CI server (dato che sono entrambi Atlassian prodotti).Ci sono anche Bambù plugin per FindBugs, PMD, e CheckStyle ma, come è noto, è libero di Hudson, il server CI ha anche di questi.

Io uso l'analisi statica costruito in IntelliJ IDEA.Perfetta integrazione.

Io uso la copertura del codice, costruito in Intellij IDEA (sulla base di EMMA).Di nuovo, perfetta integrazione.

Questa soluzione integrata è affidabile, potente e facile da usare rispetto ad mettendo insieme gli strumenti da vari produttori.

Checkstyle è un altro che ho usato in una precedente azienda...è principalmente per la verifica dello stile, ma può fare un po di analisi statica troppo.Inoltre, Clover per la copertura del codice, anche se essere consapevoli che non è uno strumento gratuito.

Stiamo usando FindBugs e Checkstyle così come il Trifoglio per la Copertura del Codice.

Penso che sia importante avere un qualche tipo di analisi statica, di sostegno e di sviluppo.Purtroppo è ancora poco diffuso che questi strumenti sono importanti.

Usiamo FindBugs e JDepend integrato con Ant.Usiamo JUnit, ma non stiamo utilizzando qualsiasi strumento di copertura.

Io non lo uso integrato di Rational Application Developer (IDE sto utilizzando per lo sviluppo di applicazioni J2EE) perché mi piace come neat appare quando si esegue javac nella console di Windows.:P

Ho avuto buona fortuna con la Cobertura.Si tratta di un strumento di copertura del codice, che può essere eseguito tramite il tuo script ant come parte della vostra corporatura normale e può essere integrato in Hudson.

Il nostro team di PMD e Cobertura, in realtà i nostri progetti sono maven progetti e non c'è molto semplice per includere i plug-in per l'analisi del codice.La vera domanda sarebbe per il progetto specifico che l'analisi è necessario utilizzare, la mia opinione è che si poteva utilizzare lo stesso plugin per ogni progetto.

nel nostro progetto abbiamo l'uso del Sonar di fronte checkstyle, pmd....insieme con l'IC (Bambù, Hudson) si ottiene anche una bella storia della nostra qualità di origine e quello di dirigere andiamo.Mi piace Sonar, perché è uno strumento centrale nell'CI Stack che fa per voi, e si può facilmente personalizzare le regole per ogni progetto.

Struttura 101 è buona analisi del codice e trovare il ciclico dipendenze del pacchetto.

Io sono alla ricerca di risposte per conoscere nuovi strumenti e consolidare questa conoscenza in una domanda/thread, quindi dubito ci sarà 1 vera risposta a questa domanda.

La mia risposta alla mia domanda è che usiamo:

  • Findbugs a cercare gli errori più comuni cattivo/codice eseguito da maven, e, inoltre, si integra facilmente in Eclipse
  • Cobertura per la copertura di rapporti di conduzione da maven

Hudson ha anche un compito-scanner plugin che consente di visualizzare un numero di TODO e Fixme, così come mostrare dove si trovano nel file di origine.

Tutti sono integrati con Maven 1.x nel nostro caso, e legato in Hudson, che corre il nostro costruisce check-in, così come altre cose notturni e settimanali.Hudson grafici di tendenza nostri test JUnit, copertura, findbugs, nonché i compiti aperti.C'è anche un Hudson plugin che i report e i grafici nostro compilare avvertenze.Abbiamo anche diversi test di performance con i loro propri grafici delle prestazioni e l'utilizzo della memoria nel tempo utilizzando la Hudson trame di plugin.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top