© saicle/Shutterstock.com
Kolumne: Quality Time

Mist finden und bereinigen


Die Code Coverage ist eine der viel beschworenen Metriken in Softwareprojekten. Teams, die gerade erst mit dem automatisierten Testen anfangen, sind frustriert über das geringe Wachstum des Messwerts; übereifrige Unit-Tester ziehen alle Register, um noch das letzte Quäntchen zur Einhundertprozentmarke herauszuholen. In diesen und vielen anderen Fällen ist die Code Coverage jedoch maßlos überbewertet. Daher möchte ich diese Kolumne nutzen, um eine sinnvollere Kombinationsmetrik vorzustellen, die auf der Code Coverage basiert: den CRAP-Index [1].

Code Coverage spielt typischerweise beim automatisierten Testen eine Rolle: „Wie viel produktiver Code wird durch Tests abgedeckt?“, fragen sich Entwickler, Teamleiter und Manager, und meinen eigentlich „Wie gut ist unser Code getestet?“. Die Code Coverage ist aber völlig ungeeignet, diese Frage zu beantworten. Denn auch wenn eine bestimmte Codezeile ein- oder mehrfach in den Tests ausgeführt wird, bleiben viele Fragen unbeantwortet: „War der entsprechende Test sinnvoll? Hat er überprüft, dass die Codezeile das tut, was sie soll? Bei Bedingungen in Schleifen oder Verzweigungen: Welcher Teil war true/false, und welche Bestandteile wurden ggf. nicht getestet?“ Die Code Coverage als Gütekriterium für die Testabdeckung zu verwenden, ist also nicht sinnvoll.

Wesentlich interessanter sind die Codezeilen, die nicht von Tests abgedeckt wurden. Das verrät uns die Code Coverage ebenfalls und gibt damit einen ersten Hinweis darauf, für welche Codebereiche noch Tests entwickelt werden sollten. Für diesen Zweck ist in Ausnahmefällen sogar eine Kombination der Code Cov­er­age mit Behat-Tests sinnvoll [2]. Aber bitte gehen Sie jetzt nicht gleich an Ihre Tests und versuchen, jeden Getter auch noch abzudecken. Denn das ist weder wirtschaftlich haltbar, noch macht es als Entwickler Spaß, solchen Code zu testen.

Es stellt sich also die Frage, wie jene Codestellen herausgefiltert werden können, bei denen ein Test lohnenswert ist. Hier bietet der Change-Risk-Anti-Patterns-Index (CRAP-Index) einen guten Ansatz: Die Metrik kombiniert die Code-Coverage-Werte auf Methodenebene mit deren Codekomplexität (gemessen anhand der Cyclomatischen Komplexität [3]). Ohne Sie mit ausufernden Formeln zu langweilen, ist das Ergebnis wie folgt: Für komplexe Methoden, die nicht von Tests abgedeckt sind, explodiert der CRAP-Index exponentiell. Ist Code allerdings gut von Tests abgedeckt, so steigt der CRAP-Index nur gemächlich mit der Komplexität. Komplexe...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang