code.coverage-1024x768

Code coverage: Wie viel Unit Testing macht Sinn?

Es ist natürlich klar, dass eine hohe Unit Test Abdeckung – und damit eine hohe Code Coverage – zu einer besser getesteten Software führt, die tendenziell weniger Fehler enthalten dürfte, als das bei geringerer Code Coverage der Fall ist.

Aber die entscheidende Frage bleibt, welches die ideale Testabdeckung ist. QA-Puristen argumentieren selbstverständlich, dass in der Entwicklung eine 100% Abdeckung durch Unit Tests angestrebt werden sollte, ganz gleich, um welches Projekt es sich handelt. Auf der anderen Seite gibt es die nachvollziehbare Meinung, dass im Grunde die nur Qualität der Unit Tests ein entscheidender Faktor ist und nicht die Quantität, da alleine die Menge bzw. der Abdeckungsgrad nicht wirklich viel über die Effizienz des Testens und die Qualität der resultierenden Software aussagen.

Wie viel Unit Testing ist also ideal?

Die Antwort hängt sehr stark von der jeweils zu testenden Anwendung und der Projektumgebung ab einschließlich der Erwartungen der Stakeholder. Das gewünschte Qualitätsniveau sollte für ein Projekt von vornherein definiert werden, da sich hohe Qualitätsansprüche im Wettbewerb mit schneller Umsetzung und geringen Kosten des Projektes befinden. Projektauftraggeber sind nicht immer bereit, höhere Qualität durch längere Laufzeiten und Mehrkosten zu erkaufen. Und natürlich muss Qualität immer in Bezug auf die Art der zu testenden Anwendung gesehen werden bzw. deren Einsatzbereich und die Anwender.

Sind 100% Code Coverage wirklich nötig?

In der Praxis wird eine Unit Test Abdeckung von 70-80% normalerweise als oberster Wert angesehen, den man anstreben sollte. Sicher sind 100% immer ein Idealzustand, aber der stark abnehmende Grenznutzen (d.h. der Qualitätsgewinn je zusätzlich aufgewendeter Einheit an Testaufwand) bedeutet, dass einem nur noch marginalen Qualitätsgewinn viel zu hohe Kosten gegenüber stehen. Das macht für kommerzielle Anwendungen selten ökonomischen Sinn.

Wirklich vernünftig sind 90-100% Code Coverage z.B. für öffentlich verwendete APIs wie die java.util Collections. Auch wenn die Software zu einer vielfach genutzten Plattform (z.B. für ERP-Systeme) gehört, die etwa Datenstrukturen verarbeitet, macht eine Qualitätsmaximierung Sinn, da sich hier Fehler in der Praxis schnell potenzieren. Und natürlich sollten Anwendungen in kritischen Finanzsystemen, im medizinischen Bereich oder bei Rettungsdiensten möglichst 100% Abdeckung anstreben.

Aber auch bei maximaler Code Coverage ist Vorsicht geboten: Schätzungen zufolge bringt selbst eine vollständige Unit Test Abdeckung nur etwa die Hälfte aller Fehler in einer Anwendung zutage. Es gibt daneben einfach zu viele Fehlerquellen, die sich mit Unit Tests nicht trockenlegen lassen.

Als Bauchregel kann auch gelten: Ein Tester sollte dann aufhören, eine höhere Abdeckung anzustreben, wenn das Entwickeln von Unit Tests anfängt, künstlich oder überzogen zu wirken. Wer sich zu sehr darauf fokussiert, noch den allerletzten theoretisch denkbaren Winkel auszuleuchten, nur um den QA-Faktor zu steigern, verliert nämlich gerne mal den Blick für das Wesentliche: nämlich das Finden von Fehlern.

Wie halten Sie e smit der Code Coverage?

Ist eine 100% Abdeckung ein sinnvolles und realisierbares Ziel für Sie?

Leave a Reply

*

Be sure to include your first and last name.

If you don't have one, no problem! Just leave this blank.