2009-06-27 40 views
13

Volevo chiedere se si conoscono alcune librerie C# libere (dll) che calcolano le metriche CK (principalmente complessità ciclomatica).Libreria di calcolo metriche C# (gratuito)

Avrei bisogno di questo per un progetto che ho intenzione di fare. So che ci sono già alcune soluzioni finite che calcolano le metriche CK e le mostrano in varie forme, ma quello di cui ho bisogno è uno che potrei usare dalla mia applicazione. Quindi, prima di iniziare e scriverne uno, prima volevo chiederti.

Grazie

+0

Avete mai trovato una libreria? O come hai risolto questo problema? – RoflcoptrException

+0

No, questo era parte di un'idea del programma che avevo, ma sfortunatamente il mio tempo attuale non mi consente di continuare e creare l'app. Pertanto, anche io non ho indagato su ulteriori ricerche per una libreria appropriata – Juri

+0

ok grazie. quindi devo cercare ulteriormente;) – RoflcoptrException

risposta

15

DrivenMetrics è uno strumento da riga di comando C# open source. Le funzionalità principali sono isolate dal client della console della riga di comando come libreria (il progetto principale è disponibile here).

Anche se abbastanza semplice, può soddisfare le tue necessità: è gratuito, conta il numero di linee e calcola la complessità ciclomatica (numero di potenziali percorsi di codice) dei metodi.

Questo viene eseguito tramite l'analisi diretta dell'IL grazie a Mono.Cecil (la stessa libreria su cui si basa NDepend). Questo permette l'analisi da eseguire su gruppi costruiti da codice scritto in C#, VB.Net, ...

  • Il progetto è stato annunciato here.
  • La sorgente del codice è disponibile su github.
  • Una versione a pacchetto è anche available.
  • Funziona sia su Windows che su Mono.

UPDATE:

Un'altra opzione sarebbe la sorprendenteGendarme, uno strumento di analisi statica del progetto Mono.

Come esempio di utilizzo, il codice seguente mostra la complessità ciclomatica di ogni metodo in un assieme.

ModuleDefinition module = ModuleDefinition.ReadModule(fullPathToTheAssembly); 

foreach (var type in module.Types) 
{ 
    foreach (var me in type.Methods) 
    { 
     if (!me.HasBody || me.IsGeneratedCode() || me.IsCompilerControlled) 
      continue; 
     var r = AvoidComplexMethodsRule.GetCyclomaticComplexity(me); 

     Console.WriteLine("{0}: {1}", me.ToString(), r); 
    } 
}
  • Il progetto è descritto here
  • Il codice sorgente è disponibile su github
  • stampa confezionati sono anche available
  • Funziona sia su Windows e Mono
+0

! Questo sembra davvero fantastico! Ma dove sei in grado di eseguirlo? Ho controllato la fonte principale, la ho compilata e ho ottenuto 3 ddls. Poi ho fatto riferimento a questo 3 DDL nel mio progetto. Ma allora cosa fare? Non riesco a vedere alcuna documentazione su questo. – RoflcoptrException

+0

@Roflcoptr: dai un'occhiata alla Driven.Metrics.Tests.Core.Metrics.ILCyclomicComplexityTests class nei progetti DrivenMetrics.Tests. Questa classe di test mostrerà come caricare un assembly (nel metodo Setup()), come selezionare un metodo da analizzare e come applicare un ILCyclomicComplextityCalculator per calcolare il CC del metodo (vedere il metodo ShouldDetermineCyclomicComplexityForFooSecond() per esempio). – nulltoken

+0

scusa ho sbagliato a formulare la mia domanda penso: D mi stavo chiedendo come posso usare questo. Ho incluso il file DrivenMetrics.dll nei riferimenti del mio progetto. Questo dovrebbe fare il trikc giusto? – RoflcoptrException

3

Sto usando SourceMonitor, che è un'applicazione freeware di bello che misura la complessità del codice e altre metriche per una varietà di lingue, tra cui C#. Lo guidiamo dalla riga di comando per produrre output XML, quindi usiamo LINQ to XML per estrarre e ordinare i dati a cui siamo interessati. Quindi usiamo NVelocity per creare report HTML.

So che non è una libreria gestita, ma potresti trovare che può fare ciò che ti serve.

+0

thx per le informazioni. Ma il problema è che la mia app non è considerata solo per uso personale, ma potenzialmente per gli altri e quindi è un po 'scomoda se devono installarla per poter utilizzare la mia app. Ma lo prenderò in considerazione, grazie – Juri

-1

Con 82 code metrics supportato NDepend è il codice metriche Roll's Royce tooling per sviluppatori .NET (tuttavia è uno strumento commerciale).

0

'isn Sono libero ma ho avuto esperienze positive con NCover per questo tipo di cosa Si integrano anche abbastanza bene con molti strumenti di CI là fuori.