Einführung in die Code-Coverage-Analyse

Alles erwischt

von Dapeng Wang

Unit-Tests zu schreiben und auszuführen gehören längst zum Alltag vieler Entwickler. Damit verfolgt man das Ziel sicherzustellen, dass der erstellte Code auch korrekt funktioniert. Jedoch lässt sich nur eine verlässliche Aussage über die Codebereiche machen, die auch im Test aufgerufen wurden. Dies bedeutet, dass der grüne Balken in JUnit allein noch nicht die Fehlerfreiheit des gesamten Systems gewährleisten kann, da viele Codebereiche nicht abdecket sind und ungetestet bleiben. Eine Technik mit dem Namen Code-Coverage-Analyse erlaubt, solch ungetestete Stellen im Code zu identifizieren. In diesem Artikel werden die Grundidee der Code-Coverage-Analyse sowie die verschiedenen Metriken in diesem Bereich vorgestellt. Nach einer kurzen Diskussion, wie ein Werkzeug für die Code-Coverage-Analyse implementieren kann, zeigt ein einfaches Beispiel seinen Einsatz.

Bei der Code-Coverage-Analyse geht es darum festzustellen, wie gut die Codebereiche abgedeckt sind bzw. welche Codebereiche gar nicht oder nicht ausreichend abgedeckt sind. Während Unit-Tests dazu dienen, die korrekte Funktionsweise der erstellten Software zu verifizieren und die Qualität des Gesamtsystems zu steigern, dient die Code-Coverage-Analyse dazu, die Qualität der Tests sicherzustellen und zu erhöhen. Dabei liefern die Werkzeuge Metriken darüber, welche Codebereiche bei der Ausführung (meistens durch Aufrufen von Unit-Tests) wie gut abgedeckt sind. Mit dieser Erkenntnis kann man dann gezielt neue Unit-Tests erstellen, welche speziell die bis dahin nicht abgedeckten Testfälle überprüfen. Damit lässt sich die Qualität der Testklassen sukzessive erhöhen, indem immer mehr Testfälle durch die Testklassen abgedeckt werden. Dies hat wiederum zur Folge, dass die Qualität des Gesamtsystems bei qualitativ besseren Testklassen auch indirekt erhöht wird.Code-Coverage ist eine typische Technik aus dem Bereich strukturellen Testens, ebenfalls unter den Namen White-Box-Testing oder Glass-Box-Testing bekannt. Im Gegensatz zu den Techniken für funktionales Testen (oder Black-Box-Testing), welche das zu testende System als Black Box betrachtet und die Funktionalität nur von außen über Schnittstellen gegen die Anforderungen testet, verfügen die White-Box-Testing-Techniken über genaue Kenntnisse der internen Strukturen des zu testenden Codes und überprüfen, dass die internen Ausführungspfade korrekt sind. Die beiden Testmethoden ergänzen sich hervorragend, indem das Black-Box-Testen verifiziert, dass was im Code implementiert ist, auch den Anforderungen genügt, während das White-Box-Testen sicherstellt, wie der nach außen korrekt funktionierende Code intern abläuft. Besonders hilfreich haben sich diese Methoden beim Testen komplexer Logik erwiesen, weil man damit die Ausführungspfade im Code genau verfolgen und nachvollziehen kann.

Abb. 4. Report über die historische Entwicklung der Codeabdeckung

Obwohl nicht so verbreitet wie die Black-Box-Testmethoden, haben viele (sowohl kommerzielle als auch renommierte Open-Source-) Projekte die Vorzüge der Code-Coverage-Analyse erkannt. Meistens wird während der Entwicklung ein entsprechendes Werkzeug für diesen Zweck eingesetzt, um die nicht oder wenig getesteten Stellen im Code zu identifizieren und solche Schwachstellen mit neuen Testmethoden zu beseitigen. Damit stellt die White-Box-Testmethode eine sinnvolle Ergänzung zu den anderen Methoden dar. Vor allem bei komplexer Fachlogik bietet die Code-Coverage-Analyse eine sehr gute Unterstützung, um sicherzustellen, dass alle Anwendungsfälle durch Tests abdecket sind. Auch bei Projekten, die an externe Anbieter outgesourct werden, stellt ein vernünftiger Abdeckungsgrad eine aussagekräftige Metrik dar, welche das Qualitätsmerkmal des Projekts dokumentiert. Eine hundertprozentige Abdeckung wird in der Praxis zwar nie erreicht, aber es gilt beim Einsatz der Code-Coverage-Analyse das Motto, so viele Codestellen wie möglich zu erwischen.Dapeng Wang ist ein freiberuflicher Systemarchitekt, Trainer und Buchautor. Sein Schwerpunkt liegt in Design und Implementierung von komplexen Enterprise-Applikationen mit J2EE- und Web-Service-Technologien. Neben den zahlreichen Artikeln in Fachmagazinen hat er mit anderen Autoren das Buch Java Web Service mit Apache Axis herausgegeben. Er hält regelmäßig Vorträge zu diesen Themen auf verschiedenen Kongressen. Dapeng Wang ist unter Wang.Dapeng@gmx.net zu erreichen.

Geschrieben von
von Dapeng Wang
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.