Was ist Code Coverage

Unter Code Coverage versteht man den Wert der technsichen Code Abdeckung, der besagt wie hoch der Anteil der Quellcode-Zeilen einer getesteten Applikation ist, die man während der Durchführung aller Tests dieser Applikation erreicht („angesprochen“) hat. Dabei stellt Code Abdeckung ein wichtiges Kriterium für die Beurteilung der Testabdeckung einer Applikation, die sich auf der technischen Seite anhand der Codeabdeckung und auf der fachlichen Seite anhand der Anforderungsabdeckung beschreiben lässt. Um eine gute Testabdeckugn zu erreichen, ist es wichtig diese beiden Arten der Testabdeckung nachzuverfolgen und zu optimieren.

Der Grad der Codeabdeckung lässt sich in der PRaxis erfreulicherweise ziemlich gut und deterministisch mit Hilfe spezieller Werkzeuge zur Profillierung einer Appliaktion, während sie getestet wird, messen. Die Stufe, auf der die Test durchgeführt werden, ist grundsätzlich irrelevant. Die Messung kann i.A. sowohl bei der Durchführung der Unit Tests auf der untersten Ebene der Testpyramide als auch während des Laufs der E2E Tests auf der höchsten Ebene stattfinden. Das gleiche gilt für die Art der Test: manuell oder automatisiert. Da jedoch der Aufwand für die Durchführung der  Coverage Messung während der manuellen und E2E Tests i.d.R. relativ hoch ist, während die Coverage Messung während der Unit Tests und Integration Tests durch die integrierten Werkzeugen sehr einfach aktiviert werden kann, erfolgt die Code Coverage Messung in der Praxis fast ausschliesschich bei der Durchführung der Unit Tests und Integration Tests. Aus methodischer Sicht stellt das kein Problem dar, da nur die Unit Tests und Integration Tests per se die technsiche Verifikation der Applikation durch White Box Testing in Vordergrund stellen und genau hierfür wird die Inforamtion über die technische Code Coverage benötigt. Für die E2E und manuellen Tests steht dagegen die Messung der fachlciehn Abdeckung im Vordergrund.

Arten und Grad der Code Coverage

Mit der Messung der Codeabdeckung kann man damit überprüfen, ob alle wichtigen Bestandteile der Implementierung mit hoher technischen Testabdeckung getestet werden. Je nach Geschäftsanforderungen und Kritikalität des Software-Produktes variieren die Anforderungen an die minimale sinnvolle Code Coverage der Tests, die man prozentual anhand unterschiedlicher qualitativer Methoden (Code Coverage Arten) messen kann.

Folgende Arten der Messung der Codeabdeckung haben sich etabliert:

  • Line Coverage (C0 Coverage): Jede mindestens einmal erreichte Zeile wird als abgedeckt markiert
  • Branch Coverage (C1 Coverage): Nicht nur jede Zeile, sondern auch jede Verzweigung der Zeile muss erreicht werden
  • Path-Coverage (Cn Coverage): Alle Pfade müssen getestet werden, was u.a. auch den Test der Schleifen mit 0, 1 bzw. n Wiederholungen einschliesst

 

Wichtig: Die meisten in der Praxis verbreiteten Werkzeuge erlauben nur die Messung der Line und Branch Coverage. Allein schon aus diesem Grund kann die Codeabdeckung (auf Basis der Line Code Coverage Messung) keine umfassenden Tests der Applikation garantieren und ist damit nur z.T. aussagekräftig.

Tipp: Unabhängig der Messmethode darf die reine nummerische (quantitative) Code Coverage nie als Merkmal zur Attestierung einer guten SW-Qualität herangezogen werden (selbst bei Werten von über 90%). Denn die nummerische Code Abdeckung liefert leider keinerlei Grundlage für die Abschätzung der Qualität der durchgeführten Unit Tests. So gilt es zusätzlich sicherzustellen, dass Unit Tests die relevanten Prüfungen (Assertions) enthalten (s.u.) und die erforderlichen Datenkonstellation / Äquivalenzklassen abdecken (qualitativen Aspekte). Deshalb soll die Code Coverage umgekehrt als Indikator für eine unzureichende Qualitätssicherung auf der Unit Test Ebene wahrgenommen werden, woraus dann Handlungsaktionen abgeleitet werden.

Für normale nicht-kritische Software-Produkte ist eine Line Code Coverage von mindestens 60% anzustreben. Im Umfeld kritischer Systeme wie z.B. Medizintechnik werden üblicherweise deutlich höhere Unit Test Code Coverage Werte mit Branch Coverage von über 85% verlangt.

 

Verwandte Begriffe

  • Test Pyramide
  • Unit Tests
  • Integration Tests
  • E2E Tests

 

Weitere Informationen