100% Test-Coverage sind unumgänglich

04.03.2011

Moderne Software-Entwicklung sieht Tests vor, mit denen Software automatisch geprüft wird. Das funktioniert recht einfach – jeder Einzeltest prüft einen einzelnen Aspekt einer Bibliothek oder einer Applikation. Warum hierbei 100% Test-Coverage unumgänglich sind, also nach Durchlaufen aller Tests keine einzige Codezeile „ungenutzt“ bleiben darf, lässt sich leicht zeigen.

Voraussetzung ist, dass ungetestete Features gefährlich sind. Ich kann schlicht nicht wissen, ob sie wirklich funktionieren, also das tun, was sie wirklich sollen. Dementsprechend brauche ich für jedes Feature Tests. Dabei sollten natürlich nicht bloß die erwarteten Standard-Fälle überprüft werden, sondern insbesondere auch die Spezialfälle.

Wenn also nach dem Ausführen aller Tests Code ungenutzt blieb, woran kann es liegen? Unterschieden werden kann in:

  • Unnötigen Code. Er ist vielleicht nach einem Refactoring übriggeblieben, wird nicht mehr gebraucht, richtet aber auch keinen Schaden an. Dennoch sollte er entfernt werden, denn er ist ohne Nutzen.
  • Code, der von einem Feature benötigt wird, aber von keinem Test erfasst wird. In diesem Fall ist eines der Features unzureichend getestet und ein entsprechender Test sollte hinzugefügt werden.

Da Code immer mindestens in eine dieser Kategorien fällt, sollte er entweder entfernt werden oder es wird ein Test hinzugefügt, der ihn dann doch umfasst. Konsequent durchgeführt werden letzten Endes also 100% Test-Coverage erreicht.

Anhänger testgetriebener Entwicklung können den Code übrigens sofort getrost löschen, denn was er tun soll, ist bei ihnen gerade durch die Tests bestimmt.