Softwaretests sind aus der modernen Entwicklung nicht mehr wegzudenken. Sie gelten als Garant für Qualität, Sicherheit und Stabilität. Doch was genau können Tests leisten? Und was nicht? Eine kritische Auseinandersetzung mit dem Thema zeigt, dass Tests weit mehr sind als ein einfaches Abhaken von Listen, jedoch auch kein Mittel, um Fehlerfreiheit zu garantieren.

Die Wahrheit ist: Tests können niemals sicherstellen, dass eine Software fehlerfrei ist. 

Keine Zeit zum Lesen?

Hier den Artikel unkompliziert als One Pager herunterladen.

Alle Infos auf einen Blick - kurz und knapp zusammengefasst.

Ein Bild eines ausgedruckten One Pagers zum Thema Softwaretests

Was können Tests leisten?

Vielmehr sind sie ein essenzielles Mittel, um die Qualität der Software systematisch zu steigern, potenzielle Schwachstellen frühzeitig aufzudecken und die Weiterentwicklungsfähigkeit der Software langfristig sicherzustellen. Es ist jedoch ein weit verbreiteter Irrglaube, dass Tests auch nur ansatzweise eine vollständige Fehlerfreiheit garantieren können.

Der Mythos der Fehlerfreiheit

Viele glauben, dass eine 100%ige Testabdeckung oder das Testen jeder Funktion fehlerfreie Software zur Folge hat. Doch das ist ein Mythos: Tests sind nicht in der Lage, die Abwesenheit von Fehlern zu beweisen. Sie können Fehler nur aufdecken. Dies bedeutet, dass auch bei einer umfangreichen Testabdeckung Fehler in der Software verbleiben können. Der eigentliche Zweck guter Tests besteht darin, Fehler zu finden, bevor sie Schaden anrichten – sei es durch technische Instabilität, negative Auswirkungen auf die Nutzererfahrung oder durch das Entstehen von zusätzlichen Kosten.

Gute Tests finden Fehler

Gute automatisierte Tests sind im Kontext einer nachhaltigen Softwarelösung von entscheidender Bedeutung, da sie direkt zur Qualität, Zuverlässigkeit und Nutzbarkeit der Software beitragen. Die Automatisierung der Tests ermöglicht es, die Tests nahezu beliebig oft auszuführen und so Änderungen und neue Features schnell bereitzustellen, ohne die bestehende Qualität zu gefährden. Somit fördern sie auch die Langlebigkeit der Software, indem sie Refactorings und Erweiterungen auch bei wechselnden Anforderungen absichern.

Aber was sind gute Tests? 

Die zentrale Aussage ist einfach: Gute Tests finden Fehler, schlechte Tests nicht. 

Dabei muss der gesamte Lebenszyklus der Software berücksichtigt werden. Ein automatisierter Test, der zunächst keinen Fehler findet, kann jedoch später, im Verlauf des Lebenszyklus der Software, sehr wertvoll werden, wenn er bei einer Anpassung plötzlich einen Fehler aufzeigt. Tests tragen somit langfristig zur Qualitätssicherung bei, insbesondere wenn sie von Anfang an in den Entwicklungsprozess integriert werden.

Worauf sollte man beim Testen achten?

In der Praxis ist es entscheidend, die knappen Ressourcen zielgerichtet einzusetzen, denn auch Tests benötigen Ressourcen. Da nicht alles getestet werden kann, ist es umso wichtiger, sich auf die kritischen Stellen und die Bereiche zu konzentrieren, in denen Fehler am wahrscheinlichsten auftreten oder besonders schwerwiegende Folgen haben könnten. Dies können wirtschaftlich kritische Prozesse sein, häufig genutzte Codefragmente oder Bereiche, in denen Fehler erst spät bemerkt werden, wenn sie bereits großen Schaden angerichtet haben.

Fehler neigen dazu, gehäuft aufzutreten – oft gilt das Prinzip: „Bugs sind gesellige Tiere“. Wenn in einem Modul bereits Fehler aufgetreten sind, ist die Wahrscheinlichkeit hoch, dass dort weitere bislang unentdeckte Fehler lauern. Diese Erkenntnis ist entscheidend für die Teststrategie: Bereiche, die bereits fehlerhaft waren, sollten intensiver getestet werden, da hier eine erhöhte Fehleranfälligkeit besteht. Kritische Module und jene, die bereits Schwächen gezeigt haben, sind somit besonders geeignet, begrenzte Testressourcen einzusetzen.

Ein Test ist mehr als nur ein Werkzeug zur Fehlerjagd

Neben dem oben beschriebenen Einsatzzweck von Tests, trägt ihre Erstellung auch zur Strukturierung des Denkens bei. Das Aufstellen von Eingaben und erwarteten Ergebnissen zwingt Entwickler*innen dazu, ihre Anforderungen und Annahmen zu überprüfen. Methoden wie Test Driven Development (TDD) oder Behavior Driven Development (BDD) helfen dabei, die Anforderungen klarer zu formulieren, bevor die Implementierung überhaupt beginnt. Sie sorgen dafür, dass der Code nicht nur funktioniert, sondern auch den Erwartungen der Stakeholder entspricht.

Die Quintessenz

Tests sind ein unverzichtbares Mittel zur Erhöhung der Softwarequalität, können aber die Abwesenheit von Fehlern nicht garantieren. Trotzdem gilt: Eine gut getestete Anwendung wird im Vergleich zu einer weniger gut getesteten praktisch auch weniger Fehler aufweisen. Testabdeckungsmetriken können ein nützliches Indiz sein, um zu beurteilen, wie umfangreich eine Software getestet wurde. Allerdings sollte das Erreichen von Testabdeckungsmetriken niemals selbst das Ziel der Tests sein.

Da die Ressourcen begrenzt sind und nicht unbegrenzt viele Tests entwickelt werden können, besteht die Herausforderung darin, die Tests zu identifizieren und zu implementieren, die die Qualität der Software am stärksten verbessern. Es ist entscheidend zu verstehen, wie Tests funktionieren und warum getestet wird, um fundierte Entscheidungen über den Einsatz von Tests zu treffen. Eine durchdachte Teststrategie fokussiert darauf, kritische Fehler frühzeitig zu erkennen, ohne unnötige Ressourcen zu verschwenden. Das realistische Ziel ist es dabei nicht, eine fehlerfreie Software zu garantieren, sondern eine Anwendung mit möglichst wenigen und insbesondere kritischen Fehlern, mit akzeptablem Aufwand, zu erstellen.

Ein partnerschaftlicher Ansatz bei der Softwareentwicklung bedeutet auch, die Kund*innen auf diese Realität hinzuweisen: Tests sind wichtig, aber sie ersetzen nicht das verständnisvolle Arbeiten an einer soliden Architektur, die von Anfang an so gebaut ist, dass sie Fehler vermeidet.

Fragen zum Thema? Der Autor des Artikels hilft gerne weiter.

Ralph Engelmann
Head of Java
Dresden
0351 - 213038 0r.engelmann@queo-group.com