2009-06-27 23 views
13

Ich wollte fragen, ob Sie über einige freie C# -Bibliotheken (dlls) wissen, die CK-Metriken berechnen (hauptsächlich Cyclomatic Complexity).Kostenlose C# Metrik-Berechnungsbibliothek (DLL)

Ich würde das für ein Projekt brauchen, das ich vorhabe. Ich weiß, dass es bereits einige fertige Lösungen gibt, die CK-Metriken berechnen und sie in verschiedenen Formen anzeigen, aber was ich brauchen würde, wäre eine, die ich in meiner Anwendung verwenden könnte. Also bevor ich anfing und selbst zu schreiben, wollte ich dich zuerst fragen.

Dank

+0

Haben Sie schon einmal eine Bibliothek gefunden? Oder wie hast du dieses Problem gelöst? – RoflcoptrException

+0

Nein, das war Teil einer Programmidee, die ich hatte, aber leider erlaubt mir meine derzeitige Zeit nicht, fortzufahren und die App zu erstellen. Deshalb habe ich auch keine weitere Suche nach einer geeigneten Bibliothek durchgeführt – Juri

+0

ok danke. also muss ich weiter suchen;) – RoflcoptrException

Antwort

15

DrivenMetrics ist ein Open Source C# Befehlszeilenprogramm. Die Kernfunktionen sind vom Befehlszeilenkonsolen-Client als Bibliothek isoliert (Core-Projekt ist verfügbar here).

Auch ganz einfach, wenn es Ihre Notwendigkeit auch passen: es kostenlos ist, zählt die die Anzahl der Zeilen und berechnet die zyklomatische Komplexität (Anzahl der möglichen Codepfade) von Methoden.

Dies wird durch die direkte Analyse der IL dank Mono.Cecil durchgeführt (die gleiche Bibliothek NDepend beruht auf). Dies ermöglicht die Analyse auf Baugruppen aus Code in C# geschrieben, VB.Net, ...

  • Das Projekt angekündigt wurde here gebaut durchgeführt werden.
  • Die Codequelle ist , verfügbar unter github.
  • Ein verpacktes Release ist auch available.
  • Es funktioniert sowohl unter Windows und Mono.

UPDATE:

Eine andere Möglichkeit wäre die erstaunlichGendarme, ein statisches Analysewerkzeug aus dem Mono Projekt.

Als Beispiel für die Verwendung zeigt der folgende Code die zyklomatische Komplexität jeder Methode in einer Baugruppe.

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); 
    } 
}
  • Das Projekt wird here beschrieben
  • Der Quellcode auf github
  • Verpackte Versionen sind auch
  • Es funktioniert sowohl unter Windows und Mono available
+0

Danke! Das sieht wirklich gut aus! Aber wo kannst du es ausführen? Ich überprüfte die Hauptquelle, baute sie und bekam dann 3 ddls. Dann referenzierte ich diese 3 DDLs in meinem Projekt. Aber was dann zu tun? Ich kann keine Dokumentation zu diesem Thema sehen. – RoflcoptrException

+0

@ Roflcoptr: Sehen Sie sich die Driven.Metrics.Tests.Core.Metrics.ILCyclicomComplexityTests-Klasse in den DrivenMetrics.Tests-Projekten an. Diese Testklasse zeigt Ihnen, wie Sie eine Assembly laden (in der Methode Setup()), wie Sie eine zu analysierende Methode auswählen und wie Sie einen ILCyclicomComplexityCalculator anwenden, um den CC der Methode zu berechnen (siehe Methode ShouldDetermineCyclonicComplexityForFooSecond() für) Beispiel). – nulltoken

+0

Entschuldigung, ich habe meine Frage falsch formuliert Ich denke: D Ich habe mich gefragt, wie ich das benutzen kann. Ich habe die Datei DrivenMetrics.dll in die Referenzen meines Projekts aufgenommen. Das sollte das Trikc richtig machen? – RoflcoptrException

3

Ich verwende SourceMonitor, die eine schöne Freeware-Anwendung, die die Komplexität des Codes und andere Metriken für eine Vielzahl von Sprachen, darunter C# misst. Wir fahren es von der Kommandozeile aus, um eine XML-Ausgabe zu erzeugen, dann verwenden wir LINQ to XML, um die Daten zu extrahieren und zu sortieren, an denen wir interessiert sind. Anschließend verwenden wir NVelocity, um HTML-Berichte zu erstellen.

Ich weiß, es ist nicht eine verwaltete Bibliothek, aber Sie könnten finden, dass es tun kann, was Sie brauchen.

+0

Danke für die Info. Aber das Problem ist, dass meine App nicht nur für den persönlichen Gebrauch gedacht ist, sondern möglicherweise auch für andere. Daher ist es ein bisschen unpraktisch, wenn sie sie installieren müssen, um meine App nutzen zu können. Aber ich werde es berücksichtigen, thx – Juri

-1

Mit 82 code metrics unterstützt NDepend ist die Code-Metrik Roll's Royce Tool für .NET-Entwickler (aber es ist ein kommerzielles Werkzeug).

0

Es isn verfügbar ist 't frei, aber ich habe gute Erfahrungen mit NCover für diese Art gemacht der Sache. Sie integrieren sich auch ziemlich gut mit vielen CI-Tools da draußen.