Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Grundlagen der Programmierung: Codemetriken

Testabdeckung / Codeabdeckung

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Um zu wissen, ob genügend automatisierte Tests für eine Codebasis bestehen, muss geprüft werden, wie viel des Codes mit Tests abgedeckt sind.
05:51

Transkript

Kommen wir zu einer der Codemetriken, die am häufigsten für Codequalität mit genutzt wird, aber auch gern missinterpretiert wird. Und zwar die "Testabdeckung" beziehungsweise "Codeabdeckung" oder eben "Testcoverage" und "Codecoverage". Wenn wir die Codecoverage betrachten, betrachten wir die Abdeckung einzelner Codeblöcke. Ein Codeblock ist immer der Bereich zwischen zwei geschweiften Klammern. Dabei kann es natürlich auch passieren, dass Codeblöcke Codeblöcke enthalten. Die Codecoverage beziehungsweise Testcoverage prüft nun, ob es Tests gibt, die diese Codeblöcke durchlaufen, wenn das der Fall ist und wenn die Tests entsprechend grün sind, dann wird es häufig durch eine grüne Farbhinterlegung angezeigt. Interessant ist dabei vor allem, dass der Test nicht unbedingt erflogreich sein muss, damit der Code als abgedeckt gilt. Wie wir im zweiten Beispiel sehen, können eben Codeblöcke auch Codeblöcke enthalten. Das passiert häufig bei if-Anweisungen. if-Anweisungen können mehrere Überprüfungen vornehmen, dann gilt der Codeblock als abgedeckt, sobald eine der entsprechenden Entscheidungen zutrifft. Tatsächlich ist es aber so, dass in der Praxis natürlich Fehler entstehen können, basierend auf den Fallunterscheidungen, die in einer if-Anweisung vorgenommen werden. Aus diesem Grund wird hier der Code nicht unbedingt als grün abgedeckt dargestellt, sondern so lange als gelb, wie eben nicht alle Fallunterscheidungen der if-Anweisung getroffen wurden. Eine weitere Darstellung dafür, wenn etwas nicht abgedeckt wurde, könnte zum Beispiel rot sein, hier ein Beispiel aus dem Visual Studio, ähnlich gilt das auch in anderen Entwicklungsumgebungen, dort wird der durchlaufende Code entsprechend mit einer blauen Farbe hinterlegt, der nicht durchlaufende Code mit einer roten Farbe und der nur partiell durchlaufende Code mit einer gelben Farbe. Was wir hier außerdem sehen, ist, dass es immer wieder Fallunterscheidungen gibt, die schwierig zu triggern sind beziehungsweise für die einen Test zu schreiben, ganz schön aufwendig sein kann; so wie hier bei der "ArgumentOutOfRangeException". Es stellt sich also die Frage, ob wirklich 100 % des gesamten Codes immer abgedeckt sein muss. Die Darstellung der Testabdeckung geschieht dann häufig wie hier zum Beispiel im Test-Explorer des Resharpers. Es können die einzelnen Methoden die einzelnen Klassen und so weiter und so fort auf Basis des prozentualen Anteils von abgedecktem Code überprüft werden. Das heißt, Testabdeckung, Codecoverage, wird in aller Regel durch Prozentangaben überprüft. Darüber hinaus gibt es die Unterscheidung, dass man eben nicht nur einzelne Blöcke überprüft, sondern Statements. In der Praxis ist das für uns so weit unerheblich, dass letztendlich fast die gleichen Ergebnisse entstehen. Bezogen auf die prozentuale Angabe von Codecoverage ergibt sich aber kein Unterschied, ob sie nun Statements oder Blöcke überprüfen. Was außerdem zunimmt, ist die Codecoverage während der Programmierzeit schon zu ermitteln. Das heißt, die Tests werden automatisch im Hintergrund ausgeführt und dann wird im Editor sofort angezeigt, welche Änderung sich an der Qualität der Logik ergeben haben. Hier ein Beispiel aus dem Tool NCrunch, welches eben alle Tests automatisch ausführt, sobald ich in einem bestimmten Teil den Code verändere. Hier ist dies als rote Rechtecke dargestellt und wenn es zu einer Exception kommt, dann wird diese durch ein X dargestellt. Auch hier ist es ganz interessant, dass man natürlich sieht, die Testsabdeckung wird nur bis zu dem Punkt erfasst, wo die Exception aufgetreten ist. Die nachfolgenden Zeilen sind hier schwarz dargestellt, weil sie eben nicht ausgeführt wurden. Das liegt daran, dass Tests immer in eigenen Threads ausgeführt werden, von den entsprechenden Testingframeworks, und sobald eine Exception auftritt, wird dieses Thread beendet und der Test gilt als fehlgeschlagen. In dem Fall ist es also so, dass unser Test durchaus zur Testabdeckung beiträgt, aber in geringerem Maße als er es tun würde, wenn der Test erfolgreich wäre. Hier haben wir noch ein Beispiel aus einer Umgebung, die ich einmal testgetrieben entwickelt habe. Dort sieht man die Gesamtzusammenfassung, wie viel Prozent Testabdeckung für welche Bereiche erreicht wurden und wie man sieht, die gesamte Applikation hat eine Codecoverage von 80,85 %. Also obwohl ich testgetrieben, ja sogar acceptance-testgetrieben gearbeitet habe, habe ich in Anführungszeichen "nur" eine Codecoverage von 80,85 % erreicht. Eine Vorgabe von 100 % Codecoverage, ist nahezu nicht zu erreichen. Zumindest nicht mit sinnvollem Aufwand, weil es immer wieder Bereiche unseres Quellcodes gibt, die wir nur schwer mit Tests erreichen können, wofür der Aufbau der Testumgebung, die Erreichung von Vorbedingungen und solche Dinge, viel zu komplex wären, um dafür einen Test zu schreiben. Laut Martin Fowler kann man aber etwa 70-75% von einer sehr guten Testabdeckung ausgehen. Wenn Sie viele Algorithmen schreiben, dann werden Sie diesen Bereich auch überschreiten, dann können Sie bis in die 80-85 % vorstoßen. Eine Erreichung von 100 % Testabdeckung ist nahezu nicht möglich beziehungsweise nicht ökonomisch sinnvoll.

Grundlagen der Programmierung: Codemetriken

Lernen Sie Methoden, Prinzipien und Werkzeuge kennen, mit deren Hilfe Sie die Qualität Ihrer Software dauerhaft sicherstellen können.

1 Std. 43 min (20 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Exklusiv für Abo-Kunden
Erscheinungsdatum:25.04.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!