Calcola le metriche del codice [chiuso]


87

Sono disponibili strumenti che calcoleranno le metriche del codice (ad esempio numero di righe di codice, complessità ciclomatica, accoppiamento, coesione) per il tuo progetto e nel tempo produrranno un grafico che mostra le tendenze?


Dipende dalla lingua, quale lingua stai usando?
Valentin Rocher,

Risposte:


67

Nel mio ultimo progetto ho usato SourceMonitor . È un ottimo strumento gratuito per l'analisi della metrica del codice.
Ecco un estratto dal sito ufficiale di SourceMonitor:

  • Raccoglie le metriche in un singolo passaggio rapido attraverso i file di origine.
  • Misura le metriche per il codice sorgente scritto in C ++, C, C #, VB.NET, Java, Delphi, Visual Basic (VB6) o HTML.
  • Include metriche a livello di metodo e funzione per C ++, C, C #, VB.NET, Java e Delphi.
  • Salva le metriche nei punti di controllo per il confronto durante i progetti di sviluppo software.
  • Visualizza e stampa le metriche in tabelle e grafici.
  • Funziona all'interno di una GUI standard di Windows o all'interno degli script utilizzando file di comandi XML.
  • Esporta le metriche in file XML o CSV (valori separati da virgole) per ulteriori elaborazioni con altri strumenti.

Per .NET oltre a NDepend, che è semplicemente lo strumento migliore, posso consigliare vil .

I seguenti strumenti possono eseguire l'analisi delle tendenze:


SourceMonitor sembra essere uno strumento solo per Windows. Esiste qualcosa di simile per altri sistemi operativi (Linux, BSD, Mac)?
Mnementh

Mnementh, sono sviluppatore di Windows, non conosco nessuno di questi strumenti per i ragazzi di FOSS. Forse puoi provare a eseguire SourceMonitor con l'emulatore Wine?
aku

2
Ora esiste uno strumento di tipo NDepend per C ++, CppDepend
Goosey

SourceMonitor è solo per uso non commerciale.
Scott 混合 理论

2
@Kevin 混合 理论 leggi attentamente la licenza: puoi usarla in qualsiasi ambiente in cui non puoi venderla. "Cioè, puoi usare questo eseguibile come parte dei tuoi sforzi di sviluppo software (commerciale o altro) ma non puoi venderlo ..."
Natalie Adams

12

Sonar è sicuramente uno strumento da tenere in considerazione, soprattutto per i progetti Java. Tuttavia gestirà anche codice PHP o C / C ++, Flex e Cobol.

Ecco uno screenshot che mostra alcune metriche su un progetto:

testo alternativo http://sonar.codehaus.org/wp-content/uploads/2009/05/squid-metrics.png

Nota che puoi provare lo strumento utilizzando il loro sito demo su http://nemo.sonarsource.org


Apparentemente SO non mi permette di aggiustare il collegamento - il collegamento dovrebbe essere: nemo.sonarsource.org
Natalie Adams


8

Stavo anche cercando uno strumento / plug-in per la metrica del codice per il mio IDE, ma per quanto ne so non ce ne sono (per eclipse cioè) che mostrano anche un grafico della complessità in un periodo di tempo specificato. Tuttavia, ho trovato il plug-in delle metriche di eclipse , in grado di gestire:

  • Complessità ciclomatica di McCabe
  • Accoppiamenti efferenti
  • Mancanza di coesione nei metodi
  • Linee di codice nel metodo
  • Numero di campi
  • Numero di livelli
  • Numero di locali nel campo di applicazione
  • Numero di parametri
  • Numero di dichiarazioni
  • Metodi ponderati per classe

E durante l'utilizzo, non ho perso anche l'opzione grafica che stai cercando.
Penso che, se non trovi alcun plugin / strumento in grado di gestire la rappresentazione grafica nel tempo, dovresti cercare lo strumento che più ti si addice e che ti offre tutte le informazioni di cui hai bisogno; anche se le informazioni fornite sono solo per la build corrente del tuo progetto.

Come nota a margine, il plug-in delle metriche di eclipse ti consente di esportare i dati in un file esterno (il link va a un esempio), quindi se usi uno strumento di controllo del codice sorgente, e dovresti !, puoi sempre esportare i dati per lo specifico crea e archivia il file insieme al codice sorgente, in questo modo hai ancora un modo (di base) per tornare indietro nel tempo e controllare le differenze.


4

tieni presente che ciò che misuri è ciò che ottieni. loc non dice nulla sulla produttività o sull'efficienza.

valuta un programmatore per righe di codice e otterrai .. righe di codice. lo stesso argomento vale per altre metriche.

otoh .. http://www.crap4j.org/ è una metrica molto conservativa e utile. pone la complessità in relazione alla copertura.


2
Valuta un programmatore per righe di commenti e otterrai ... righe di commenti.
EML


3

Per quanto riguarda lo strumento NDepend , viene fornito con 82 metriche di codice diverse, dal numero di righe di codice, al metodo Rank (popolarità), complessità ciclomatica, mancanza di coesione dei metodi, copertura percentuale (estratta da NCover o VSTS), profondità di ereditarietà .. .

Con il suo sistema di regole, NDepend può anche trovare problemi e stimare il debito tecnico che è una metrica di codice interessante (quantità di sforzo di sviluppo per risolvere i problemi rispetto alla quantità di tempo di sviluppo rovinato all'anno per lasciare che i problemi non risolti).

Tutte queste metriche sono dettagliate qui .


2

Se ti trovi nello spazio .NET, CodeRush di Developer Express fornisce LOC, Cyclomatic Complexity e (piuttosto eccellente, IMHO) Maintenance Complexity analisi del codice in tempo reale.

(Ci scusiamo per il link Maintenance Complexity; sta andando alla cache di Google. L'originale sembra essere offline ATM).


2

Atlassian FishEye è un altro ottimo strumento per il lavoro. Si integra con il tuo sistema di controllo del codice sorgente (attualmente supporta CVS, SVN e Perforce) e analizza tutti i tuoi file in questo modo. L'analisi è piuttosto semplice e il prodotto stesso è commerciale (ma a prezzi molto ragionevoli, IMO).

Puoi anche ottenere un componente aggiuntivo chiamato Crucible che facilita le revisioni del codice tra pari.


2

Per Visual Studio .NET (almeno C # e VB.NET) trovo che StudioTools gratuito sia estremamente utile per le metriche. Aggiunge anche una serie di funzionalità trovate in strumenti commerciali come ReSharper .


2

Code Analyzer è uno strumento semplice che genera questo tipo di metriche.

testo alternativo
(fonte: teel.ws )


3
Anche se la GUI sembra carina, le metriche che vengono generate sembrano abbastanza inutili, ad esempio "Linee di spazi vuoti per file"?
kizzx2




0

Sul fronte PHP, credo che ad esempio phpUnderControl includa metriche tramite phpUnit (se non sbaglio).

Tieni presente che le metriche sono spesso errate. Ad esempio, un programmatore che sta lavorando su problemi banali produrrà più codice e lì per avere un aspetto migliore sui tuoi grafici, rispetto a un programmatore che risolve i problemi complessi.


0

Se stai cercando un'analisi delle tendenze, significa davvero qualcosa da misurare oltre lo SLOC?

Anche se stai solo eseguendo un grep per i punti e virgola finali e contando il numero di righe restituite, ciò che stai cercando è la coerenza nella tecnica di misurazione SLOC. In questo modo la misurazione odierna può essere confrontata in modo significativo con quella del mese scorso.

Non riesco davvero a vedere cosa darebbe una tendenza della complessità ciclometrica McCabe? Penso che CC dovrebbe essere utilizzato di più per un'istantanea di qualità per fornire feedback agli sviluppatori.

Modifica: Ooh. Ho solo pensato a un paio di altre misurazioni che potrebbero essere utili. Commenti come percentuale di SLOC e copertura del test. Nessuno dei quali vuoi lasciarti sfuggire. Ritornare per aggiornare uno di questi non è mai così divino come farli "nella foga del momento!"

HTH.

Saluti,

rapinare


0

Scitools 'Understand ha la capacità di generare molte metriche di codice per te. Non ho molta esperienza con le funzionalità di metrica del codice, ma le funzionalità di analisi statica in generale erano buone e il prezzo era molto ragionevole. Il supporto è stato eccellente.



0

Per Java puoi provare il nostro strumento, QualityGate , che calcola più di 60 metriche del codice sorgente, tiene traccia di tutte le modifiche nel tempo e fornisce anche una valutazione complessiva per la manutenibilità del codice sorgente.

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.