Dieser Beitrag gibt einen groben Überblick über einige Werkzeuge zum Ermitteln von Code Coverage Kennzahlen in .Net Projekten für C#, sofern die Tests mit NUnit geschrieben wurden. Code Coverage im Software Entwicklungsprozess angemessen eingesetzt hilft einen ersten Überblick über die Testqualität und Abdeckung des eigenen Codes zu erhalten. Dieser Überblick ist unter Umständen dann erforderlich, wenn man ein bestehendes System zur Weiterentwicklung übernimmt oder an einem System im Team gearbeitet wird und man selbst keinen Überblick mehr über die Testabdeckung hat. Code Coverage angemessen einsetzen bedeutet aber auch die Aussagekraft der Kennzahlen nicht zu überstrapazieren. So sei hier ausdrücklich davor gewarnt Code Coverage Kennzahlen als „die alleinigen“ Kennzahlen für die Codequalität zu verwenden. Denn eine hohe Testabdeckung sagt noch lange nichts über die Qualität des Codes bzw. der Tests aus und eine fehlende Testabdeckung sagt nur etwas darüber aus, dass eine bestimmte Testart bspw. automatisierte Komponenten-/Unittests nicht angewendet werden.
Doch dazu muss man erst mal die Code Coverage Kennzahlen ermitteln. Je nachdem zu welcher Kategorie von .Net Entwickler man sich zählen darf, ist die Umsetzung nicht ganz trivial.
Der Lucky Developer
Alle diejenigen die zu den Lucky Developer gehören, können sich glücklich schätzen. Sie genießen das Privileg Visual Studio Enterprise 2015 zu nutzen. Der Weg zur Code Abdeckung ist für sie ein kurzer und schmerzloser. Visual Studio öffnen > Test > Analyze Code Coverage (Ein genauer Wegweiser lässt sich zum Glück hier finden: https://msdn.microsoft.com/en-us/library/dd537628.aspx). Wenn es nun ein Lucky Developer richtig auf die Spitze treiben will so hat er die Möglichkeit seine Test Abdeckung auch im Rahmen des TFS Build zu messen, mehr dazu findet er hier: https://msdn.microsoft.com/de-de/library/jj159530.aspx#Anchor_1. Eine Unterstützung auf der Konsole findet der versierte Lucky Developer natürlich auch, Beispiel gefällig? Bitteschön: https://msdn.microsoft.com/en-us/library/jj155800(v=vs.140).aspx und hier noch ein kleiner Konfigurationshinweis: https://msdn.microsoft.com/en-us/library/jj635153.aspx
Der „Could be Worse“ Developer
Ist man nicht ganz so privilegiert wie die Lucky Developer, darf man sich vielleicht aber noch zu den „Could be Worse“ Developer zählen. Diese können sich auf die Unterstützung durch freundliche Anbieter von Code Coverage Werkzeugen verlassen. Mitunter können sich diese Lösungen auch gerne mit der Visual Studio Coverage Lösung messen, doch eines haben Sie alle gemeinsam, sie haben den Auftrag für ihre Schöpfer Knete zu beschaffen. Eine gute Figur im Feld der kostenpflichten Code Coverage Lösungen machen die folgenden Freunde:
Der Poor Dog Developer
Doch was machen nun alle die ohne das nötige Kleingeld für ein Visual Studio Enterprise 2015 oder eine der freundlichen Lösungen von Drittanbietern mit dem Kapitalbeschaffungsauftrag? Zunächst finden diese sich in der Gruppe der „Poor Dog Developer“ wieder doch auch für diese Gruppe hat das Universum der .Net Code Coverage Lösungen ein Angebot parat: OpenCover. Auch hier gibt es eine Visual Studio Integration (OpenCover UI), doch deren Reifegrad ist nicht zu vergleichen mit dem der kostenpflichtigen Lösungen. Daneben kann man mit den OpenCover Ergebnisse einen ganz netten Report über das Tool „Report Generator“ erzeugen. Packt man den Aufruf nun noch in ein nettes Skript so ergibt sich hier eine brauchbare Lösung die selbst dem weniger privilegierten Poor Dog Developer noch aus der Patsche hilft.
Die Werkzeuge im direkten Überblick
Ist der Geldbeutel nicht das einzige ausschließende Kriterium bei der Auswahl des Code Coverage Werkzeuges, so kann vielleicht der folgende Überblick bei einer engeren Auswahl des Werkzeuges Unterstützen:
Werkzeug | VS Premium / Ultimate | NCover | NCrunch | Dot Cover | OpenCover |
Hersteller | Microsoft | Gnoso | Remco Software Ltd. | Jetbrains s.r.o. | Open Source |
Lizenz- kosten | 3.273 € (Upgrade Lizenz) – 7.643 € (Neue Lizenz) Visual Studio 2015 Enterprise mit 1 J. MSDN Abo | 658 $ pro Jahr | 159 $ – 289 $ neue Lizenzen / 79 $ – 144 $ Upgrade Lizenz | 399 € pro Jahr (neue Lizenzen) / 299 € pro Jahr Upgrade Lizenz | Kostenlos (Open-Source) |
Code Highlighting in Visual Studio | Ja | Ja | Ja | Ja | Über ein extra VS Plugin „OpenCover UI“ |
Coverage Report Formate | Visual Studio Integration, Excel | Visual Studio Integration, Über nCover Command Line Tool folgende Formate: HTML | XML Reports | Visual Studio Integration, über NCrunch Console Tool folgende Formate: HTML | XML Reports | Visual Studio Integration, Über dotCover Console Runner für folgende Formate: HTML | JSON | XML | NDependXML | Über „Report Generator“ HTML Reports |
TFS Build / MS Build Integration | Ja | Ja, über eigene Build Tasks bzw. TFS XAML Build Prozess | Ja, über das NCrunch Console Tool | Ja, über TFS XAML Build Prozess bzw. über den dotCover Console Runner | Ja, über ein eigenes Batch-Script möglich. |
Besonder-heiten? | – | Mit „Code Central“ und „Collector“ können die Metriken von mehreren Entwicklern gesammelt werden. | Performance Kennzahlen, Parallele Testausführung / Multi Prozessor Support des Test Runner | Nur in Verbindung mit Resharper Ultimate erhältlich | – |
Fazit
Fast für jeden ist etwas zu finden in der Welt der C# – Code Coverage. Je nach Größe des eigenen bzw. des projektbezogenen Geldbeutels gestaltet sich der Weg zu einer hilfreichen und ansprechend visualisierten Code Coverage ganz unterschiedlich. Bei allen kostenpflichtigen ist die Einstiegshürde niedrig und ein angemessener Funktionsumfang wird geboten für das Erheben und Arbeiten mit Kennzahlen zur Testabdeckung.
Im Bereich der frei verfügbaren Lösung OpenCover ist der Einstieg schon etwas kniffeliger da hier gleich drei einzelne Tools installiert werden müssen (OpenCover, OpenCover UI und Report Generator) damit in etwa ein vergleichbarer Funktionsumfang erreicht wird wie bei den kostenpflichtigen Lösungen. Ist die Einstiegshürde aber erstmal einmal genommen, ist der Funktionsumfang ausreichend zum gelegentlichen Ermitteln von Kennzahlen zur Testabdeckung.