Was ist Clover?

Das Code Coverage Tool dient der Messung und Analyse von Code Qualität. Mit Clover sorgen Sie für mehr Leistungsfähigkeit und Qualität Ihrer Tests. Anhand von Metriken zur Testabdeckung sind die Tests schneller durchführbar. Die Testergebnisse können anhand zahlreicher Informationen überprüft werden. Fehler lassen sich somit früh erkennen.

Code Coverage mit Clover

Clover wurde zur Messung von Codeabdeckung entworfen, in einer Weise, die nahtlos in Ihre Entwicklungsumgebung und -praktiken eingebunden werden kann. Clover´s IDE-Plugin bietet Entwicklern eine Möglichkeit, die Messung der Code Coverage schnell durchzuführen, ohne dabei die Entwicklungsumgebung (IDE) zu verlassen. Die Ant und Maven Integrationen erlauben es zudem, die Messung innerhalb eines automatischen Build und Continuous Integration Systems durchzuführen und die generierten Reports mit dem Team zu teilen.  

Was bedeutet Code Coverage?

Code Coverage ist der Prozentsatz des Codes, der durch automatisierte Test abgedeckt wird. Anhand von Code Coverage Measurement wird festgelegt, welche Statements in einem Code Body in einem Testlauf ausgeführt wurden und welche nicht. Im Allgemeinen sammelt ein Code Coverage System Informationen über das laufende Programm und kombiniert dies mit Quelleninformationen, um einen Bericht über die Codeabdeckung der Testsuite zu erzeugen.

Code Coverage ist Teil einer “Feedback-Loop” im Entwicklungsprozess. Wenn Tests entwickelt werden, hebt Code Coverage die Teile des Codes hervor, die nicht ausreichend geprüft werden können und zusätzliche Prüfungen erfordern. Diese Schleife wird fortgesetzt, bis die Abdeckung ein bestimmtes Ziel erfüllt hat.

Weshalb Code Coverage messen?

Es ist klar, dass Unit-Testing die Qualität und Vorhersagbarkeit Ihrer Software Releases verbessert. Wissen Sie jedoch, wie gut Ihre Unit-Tests tatsächlich Ihren Code testen? Wie viele Tests sind ausreichend? Brauchen Sie noch mehr Tests? Dies sind Fragen die die Code Coverage Messung versucht zu beantworten.

Die Code Coverage Messung hilft außerdem dabei, die Test Entropie so gering wie möglich zu halten. Da Ihr Code durch mehrere Freigabezyklen geht, kann es eine Tendenz zur Test-Atrophie geben.  Wenn neuer Code hinzugefügt wird, kann es sein, dass nicht die gleichen Teststandards zum Tragen kommen, wie es bei der Projektveröffentlichung der Fall war. Die Code Coverage Messung kann dazu beitragen, die benötigten Standards einzuhalten. Sie können sich sicher sein, dass, wenn Sie in die Produktion gehen, dass es nur minimale Probleme geben kann, da der Code nicht nur seine Tests bestanden hat, sondern auch noch gut getestet wurde.

Zusammengefasst kann man sagen, dass Code Coverage aus folgenden Gründen eingesetzt wird:

  • Kenntnis über die Testqualität
  • Kenntnis darüber, ob es genügend Tests gibt.
  • Erhaltung der Testqualität über den Lebenszyklus eines Projekts.

Code Coverage ist allerdings kein Allheilmittel. Für gewöhnlich folgt Code Coverage einer 80-20- Regel. Zunehmende Abdeckungswerte (Coverage) werden schwieriger, wenn neue Tests immer weniger inkrementell liefern. Wenn Sie defensive Programmierungsprinzipien verfolgen, können Tests schwierig sein, da Fehlerbedingungen oft auf vielen Ebenen Ihrer Software überprüft werden müssen. Coverage Messungen sind also kein Ersatz für gute Code Überprüfung und Programmierung.

Im Allgemeinen sollten Sie eine vernünftige und gleichmäßige Abdeckung über alle Module, aus denen sich Ihr Code ergibt, erzielen. Bei einer einzigen Gesamtabdeckung können nämlich große Lücken verborgen sein.

Wie funktioniert Code Coverage?

Es gibt viele Ansätze zur Code Coverage Messung.

Im Großen und Ganzen gibt es drei Ansätze, die in Kombination verwendet werden können:

Quellcode Instrumentierung

Dieser Ansatz fügt Instrumentationsanweisungen zu dem Quellcode hinzu und kompiliert den Code mit den bestehenden Entwicklungstools, um eine instrumentierte Anordnung zu erzeugen.

Intermediate Code Instrumentierung

Hierbei werden die kompilierten Klassen durch Hinzufügen von neuem Bytecode instrumentiert. Eine neue instrumentierte Klasse wird erzeugt.

Laufzeitinformationssammlung  

Dieser Ansatz sammelt Informationen aus der Laufzeitumgebung, bei der Ausführung des Codes, um Coverage Informationen zu ermitteln.

Clover verwendet Quellcode Instrumentierung. Auch wenn Entwickler erforderlich sind, um einen instrumentierten Build durchzuführen, erzeugt Quellcode Instrumentierung die genaueste Coverage für den geringsten Laufzeitaufwand.

Beachten Sie, dass Clover zwar sowohl Java als auch Groovy Quellcode instrumentieren kann, die Instrumentierungsstufe jedoch vor der Kompilierung mit Java und während der Kompilierung mit Groovy auftritt.

Wenn der zu prüfende Code ausgeführt wird, erfassen Code Coverage Systeme Informationen über die zugrundliegenden Anweisungen. Diese Informationen finden dann in Reports Verwendung. Zusätzlich zu diesen grundlegenden Mechanismen variieren die Coverage Ansätze bzgl. der Formen wie Coverage Informationen gesammelt werden. Es gibt viele Coveragen Formen, die über die grundlegenden Abdeckungen hinausgehen, wie z.B.:

  • Bedingte Coverage
  • Method Entry
  • Path Coverage

 

Arten der Coverage Messung

Clover misst drei grundlegende Arten der Coverage Analyse:

Statement Coverage

Messung, ob jedes Statement ausgeführt wurde

Branch (oder Decision) Coverage

Messung der möglichen Branches, die in Flow-Controll-Strukturen befolgt werden. Clover wertet während der Ausführung aus, wenn der boolesche Ausdruck in der Kontrollstruktur sowohl wahr als auch falsch ist.

Method       Coverage

Messung, ob eine Methode während der gesamten Ausführung überhaupt durchlaufen wird.