Software-Tests: Notwendigkeit und Arten des Testens

Software-Entwicklung ist ein komplexer Prozess, bei dem zwangsläufig Fehler gemacht werden. Fehler sind nicht dramatisch, solange man sie rechtzeitig genug entdeckt, doch je später sie erkannt werden, desto aufwändiger ist die Behebung.

Software-Fehler und die 1-10-100-Regel

Die Bedeutung von Software-Tests während der Anwendungsentwicklung kann nicht hoch genug eingeschätzt werden. In diesem Zusammenhang greift die sog. 1-10-100-Regel, die Paul Herwarth von Bittenfeld in seinem Blog-Artikel Warum frühzeitige Tests in der Software-Entwicklung so wichtig sind kompakt erklärt: Nach dieser potenzieren sich Aufwand und Kosten für die Fehlerbeseitigung je nach Entdeckungszeitpunkt.

Faktor 1: Fehlerentdeckung durch den Entwickler
Fehler, die Entwickler während der Anwendungsentwicklung entdecken, lassen sich in der Regel recht schnell und ohne erheblichen Mehraufwand beheben.

Faktor 10: Fehlerentdeckung durch einen Tester
Findet ein Tester einen Fehler in einer Software-Version, die bereits auf einem Testsystem läuft, ist der Aufwand schon höher: Der Fehler muss dokumentiert und dem Programmierer übergeben werden, nach der Fehlerbehebung ist es erforderlich, das Testsystem auf den neuen Stand zu bringen und nochmals zu testen. Es besteht durchaus die Gefahr, dass es zu Verzögerungen bei der Auslieferung der Software kommt.

Faktor 100: Fehlerentdeckung im Live-Betrieb
Bei Fehlern, die Nutzer in einer ausgelieferten Software entdecken, ist der Aufwand für die Behebung noch höher als im eben beschriebenen Fall, da zusätzlich das Live-System aktualisiert werden muss. Die schwerwiegenden Folgen darüber hinaus: Gegebenenfalls müssen Umsatzeinbußen aufgrund nicht nutzbarer Anwendungsfunktionen in Kauf genommen werden, User sind verärgert über Bugs, das Image der Software leidet, ganze Geschäftsmodelle sind mitunter gefährdet.

An dieser Stelle veranschaulicht die Gegenüberstellung zweier einfacher Fragen den Sinn und Nutzen von Tests: Was kostet das Testen? Und: Was kostet es, nicht zu testen? Hier soll keine beispielhafte Quantifizierung vorgenommen werden, doch Tests im Rahmen der Software-Entwicklung dienen vorrangig immer einem Ziel: der Wirtschaftlichkeit.

In einem lesenswerten Artikel zum Thema fasst Ralf Westphal zusammen:

[Tests] verringern die Wahrscheinlichkeit, dass Bugs in der Zukunft die Arbeit behindern. Das tun sie nämlich in zweierlei Hinsicht: Erstens halten Sie davon ab, Funktionalität zu produzieren. Zweitens stören sie den Fokus des Teams. Beides ist kontraproduktiv.

Mangelhafte Testprozesse sind die Hauptursache für im Live-System auftretende Software-Fehler. Daher sind Software-Tests im Rahmen des Entwicklungsprozesses also unerlässlich: In diesen wird qualitativ geprüft, ob die Anwendung den definierten Anforderungen entspricht, indem bestimmte Testfälle durchlaufen werden.

Arten von Software-Tests

Ein Missverständnis muss jedoch ausgeräumt werden: Auch systematisches Testen bietet keine Garantie für ein rundum fehlerfreies Release. Der niederländische Informatik-Pionier Edsger Wybe Dijkstra formuliert das Wesen des Software-Tests so:

Program testing can be used to show the presence of bugs, but never show their absence!

Die Fehlerquote lässt sich allerdings senken, wenn in den gesamten Entwicklungsprozess Tests integriert sind. In der Software-Entwicklung unterscheidet man zahlreiche Formen des Testens, dies sind die wichtigsten:

Unit-Tests: Es erfolgt eine sehr basale Überprüfung auf Fehler in Syntax und Logik einer
einzelnen Funktion/Methode.

Akzeptanztests: Es wird geprüft, ob die Software die funktionalen Erwartungen und Anforderungen im Gebrauch erfüllt.

Integrationstests: Es wird getestet, ob sich die Anwendung in eine bestehende Software-Architektur einbinden lässt.

Software-Tests (z.B. mit testgetriebener Entwicklung) sind essenzielle Bestandteile von XP (Extreme Programming). Auch beim Vorgehen nach Scrum spielen Tests eine wichtige Rolle.

Das Testen von Software ist ein sehr komplexes und umfangreiches Thema, zu dem es unzählige Bücher gibt und zu dem fortlaufend geforscht wird. Tatsächlich gibt es Unternehmen, die Vollzeittester beschäftigen. Wir haben es also mit einem weiten Feld zu tun. In den nachfolgenden Artikeln beschäftigen wir uns in Kürze ausführlich mit den oben genannten Formen des Testens vor allem unter technologischen Gesichtspunkten: Wir besprechen theoretische Aspekte, den jeweiligen Testaufbau sowie die Durchführung und Organisation insbesondere im Rahmen agiler Software-Projekte.

Weiterführende Informationen

Unsere spezielle Seite zum Thema agile Software-Entwicklung
Java-Projekte mit //SEIBERT/MEDIA


Mehr über die Creative-Commons-Lizenz erfahren