Automatisierung im Softwaretest

Wann sich Testautomatisierung rechnet und wann sie Geld verbrennt

Die Kosten stehen nicht in der Erstellung, sondern in der Pflege. Wer das einpreist, automatisiert weniger Fälle und hat am Ende mehr davon.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Seit 1997 am Markt Kleine Gruppen Präsenz und Live-Online Zertifizierte Trainer
Worum es geht

Automatisierung wird als Werkzeugkauf entschieden und als Dauerlast bezahlt

Der übliche Einstieg: Die manuelle Regression vor jeder Auslieferung frisst drei Tage, jemand rechnet vor, dass sich das automatisieren lässt, und ein halbes Jahr später existieren zweihundert Tests. Danach beginnt der Teil, den die Rechnung nicht enthielt. Die Oberfläche wird umgebaut, achtzig Tests schlagen fehl, und die Person, die sie geschrieben hat, ist inzwischen in einem anderen Projekt. Ab hier kostet die Suite jeden Monat Zeit, ohne dass jemand diese Zeit geplant hätte.

Der zweite Fehler liegt im Zuschnitt. Automatisiert wird, was sich manuell am unangenehmsten anfühlt, und das ist fast immer ein langer Ablauf über die Oberfläche. Genau diese Tests sind aber die teuersten in der Wartung, die langsamsten in der Ausführung und die unzuverlässigsten im Ergebnis. Dieselbe fachliche Prüfung eine Ebene tiefer, direkt gegen die Schnittstelle, kostet einen Bruchteil und hält Jahre.

Der dritte Punkt ist der stille Wertverlust. Sobald eine Suite regelmäßig ohne Codeänderung rot wird, gewöhnt sich das Team an, den Lauf zu wiederholen. Von da an ist Rot keine Information mehr, sondern ein Geräusch. Die Suite läuft weiter, kostet weiter Rechenzeit und Aufmerksamkeit und schützt niemanden mehr. Das ist der teuerste Zustand von allen, weil er sich anfühlt, als wäre alles in Ordnung.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Wer entscheidet was

Wer entscheidet, wer umsetzt

An der Technik scheitert selten ein Automatisierungsvorhaben. Es scheitert daran, dass niemand benannt ist, wenn die Suite Pflege braucht. Diese sechs Zeilen decken die Fälle ab, die in einem echten Projekt auflaufen.

Welche Fälle überhaupt automatisiert werden

Wer entscheidet
Die Testleitung zusammen mit der technischen Leitung, entlang der Kriterien Häufigkeit, Änderungsrate und Ebene
Wer setzt um
Wer den Testfall schreibt, mit einer kurzen Begründung im selben Pull Request
Stolperfalle
Automatisiert wird, was manuell am lästigsten war, und das ist fast immer der lange Weg über die Oberfläche.

Besitz und Pflege der Testsuite

Wer entscheidet
Die Bereichsleitung beim Zuschnitt der Teams, nicht das Team im Nachhinein
Wer setzt um
Das Entwicklungsteam, indem Testcode dieselbe Behandlung bekommt wie Produktivcode, also Review, Versionsverwaltung und Aufräumzeit
Stolperfalle
Die Suite gehört einer getrennten Automatisierungsgruppe, und die Entwicklung erfährt von einem Bruch erst, wenn er im Bericht steht.

Reaktion auf einen roten Lauf

Wer entscheidet
Vorab als Regel festgelegt, nicht im Einzelfall diskutiert
Wer setzt um
Wer die Änderung eingebracht hat, innerhalb einer vereinbarten Frist, notfalls durch Zurücknehmen der Änderung
Stolperfalle
Der Lauf wird wiederholt, bis er grün ist, und ab da ist Rot keine Information mehr.

Testdaten und Testumgebungen

Wer entscheidet
Die technische Leitung gemeinsam mit dem Datenschutz, weil echte Daten in Testumgebungen eine Rechtsfrage sind
Wer setzt um
Das Team über einen automatisierten Aufbau der Umgebung samt Ausgangsdaten
Stolperfalle
Die Daten werden einmalig eingespielt und wachsen danach, bis niemand mehr weiß, welcher Zustand eigentlich der erwartete ist.

Auswahl von Werkzeug und Framework

Wer entscheidet
Die technische Leitung anhand einer schriftlichen Kriterienliste, damit die Wahl nicht von der Vorliebe einer Person abhängt
Wer setzt um
Das Team mit einem zeitlich begrenzten Vorlauf an einem echten Ausschnitt, nicht an einem Demobeispiel
Stolperfalle
Entschieden wird nach der Sprache der Anwendung statt nach der Sprache derer, die die Tests später pflegen.

Aufräumen und Stilllegen alter Tests

Wer entscheidet
Das Team, aber mit einem festen Termin, sonst passiert es nie
Wer setzt um
Wer die Suite besitzt, mit einer regelmäßigen Durchsicht auf doppelte, nie fehlschlagende und dauerhaft übersprungene Tests
Stolperfalle
Tests werden nur ergänzt. Nach drei Jahren dauert der Lauf vierzig Minuten, und ein Drittel davon prüft nichts mehr.

Fünf Fragen je Kandidat, und die Entscheidung steht

  1. 01 Wie oft läuft dieser Test in einem Jahr? Unter zwanzig Ausführungen lohnt sich die Pflege selten.
  2. 02 Wie oft ändert sich die geprüfte Fachlogik? Häufige Änderung heißt: später automatisieren.
  3. 03 Geht dieselbe Aussage eine Ebene tiefer? Dann gehört sie dorthin und nicht auf die Oberfläche.
  4. 04 Ist das Ergebnis eindeutig prüfbar? Wo ein Urteil nötig ist, bleibt der Test manuell.
  5. 05 Gibt es definierte Testdaten und einen Weg, sie zurückzusetzen? Ohne beides entstehen instabile Läufe.
Was du mitnimmst

Woran ihr entscheidet, was automatisiert wird

Sechs Festlegungen, die vor dem ersten Test getroffen gehören. Sie beantworten, welche Fälle sich rechnen, auf welcher Ebene sie geprüft werden, wer die Suite besitzt und woran ihr merkt, dass sie ihren Wert verliert.

Die Ausführungshäufigkeit als ersten Faktor ansetzen

Ein Test, der bei jedem Commit läuft, sammelt in einem Jahr tausende Ausführungen. Ein Test, der nur vor einer Quartalsauslieferung gebraucht wird, kommt auf vier. Die ersparte manuelle Zeit multipliziert sich mit dieser Zahl, der Wartungsaufwand nicht. Deshalb ist die Frage nach der Häufigkeit wichtiger als die Frage nach der Dauer des manuellen Durchlaufs.

Die Änderungsrate der Fachlogik prüfen

Ein Fall, dessen erwartetes Ergebnis sich alle zwei Sprints verschiebt, muss jedes Mal nachgezogen werden. Solche Bereiche automatisiert ihr später, wenn die Fachlogik steht. Umgekehrt sind Kernabläufe, die seit Jahren gleich funktionieren und trotzdem bei jeder Änderung mitgeprüft werden müssen, die besten Kandidaten überhaupt.

Die tiefstmögliche Ebene wählen

Frag bei jedem Kandidaten, ob sich dieselbe Aussage eine Ebene tiefer treffen lässt. Eine Preisberechnung gehört in einen Unit-Test, die Antwort einer Schnittstelle in einen Schnittstellentest, und über die Oberfläche prüfst du nur, ob die Teile zusammen den Weg tragen. Diese eine Regel erklärt den größten Teil des Unterschieds zwischen einer schnellen und einer zähen Suite.

Testdaten und Umgebung vor dem ersten Test klären

Ein automatisierter Test braucht einen definierten Ausgangszustand und muss ihn hinterlassen können. Wer das nicht regelt, baut Abhängigkeiten zwischen Testfällen ein, die später als scheinbar zufällige Fehlschläge zurückkommen. Klärt vorher, woher die Daten kommen, wie sie zurückgesetzt werden und ob personenbezogene Daten überhaupt in die Testumgebung dürfen.

Eine Rückmeldezeit festlegen und verteidigen

Automatisierte Tests wirken nur, wenn ihr Ergebnis vorliegt, solange die Änderung noch im Kopf ist. Als Richtwert gilt eine Rückmeldung in unter zehn Minuten für den Lauf, der bei jeder Änderung startet. Alles, was länger dauert, gehört in einen zweiten Lauf, der seltener und asynchron läuft, aber nicht in den Weg zwischen Entwicklung und Rückmeldung.

Die Suite jemandem geben, der sie besitzt

Eine Testautomatisierung ist Software mit allen Folgen: Sie wird gelesen, umgebaut und aufgeräumt. Sie braucht deshalb eine benannte Zuständigkeit und einen Platz im Sprint, nicht nur im Testplan. Die Auswertung von DORA zeigt, dass Teams besser abschneiden, wenn die Entwicklung die automatisierten Tests selbst erstellt und pflegt, statt sie an eine getrennte Gruppe abzugeben.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt

Die Rechnung, die tatsächlich gilt

Auf der Kostenseite stehen drei Posten, nicht einer. Der erste ist die Erstellung, und der ist der kleinste. Der zweite ist die Wartung: jede Änderung an der Oberfläche, an der Schnittstelle oder an der Fachlogik zieht Anpassungen nach sich. Der dritte ist die Analyse von Fehlschlägen, und der wird fast immer vergessen. Ein Test, der einmal im Monat ohne echten Fehler rot wird, kostet jedes Mal die Zeit, die jemand braucht, um das festzustellen.

Auf der Nutzenseite steht die ersparte manuelle Zeit, multipliziert mit der Zahl der Ausführungen, plus ein zweiter Posten, der schwerer zu beziffern ist: die Fehler, die früher gefunden werden. Ein Fehler, der in der Pipeline auffällt, kostet eine Korrektur. Derselbe Fehler nach der Auslieferung kostet eine Meldung, eine Analyse, einen Notfalltermin und im Zweifel eine Entschuldigung beim Kunden. Diesen zweiten Posten unterschätzen Rechnungen regelmäßig genauso stark, wie sie die Wartung unterschätzen.

Daraus folgt eine unbequeme Konsequenz: Der Schwellenwert liegt höher, als die meisten annehmen. Ein Testfall, der zwanzigmal im Jahr läuft und jedes Quartal angepasst werden muss, ist kein guter Kandidat, auch wenn er sich technisch leicht automatisieren lässt. Ein Testfall, der bei jedem Commit läuft und seit zwei Jahren unverändert ist, rechnet sich schon nach wenigen Wochen.

Was zuerst automatisiert gehört

Ganz oben stehen die Kernabläufe, die bei jeder Änderung mitgeprüft werden müssen, weil ihr Ausfall das Produkt unbenutzbar macht: Anmeldung, der wichtigste fachliche Vorgang, der Abschluss einer Bestellung oder Buchung. Diese Wege ändern sich selten, laufen ständig und haben ein eindeutiges Ergebnis. Sie sind auch die Fälle, bei denen ein Fehlschlag sofort ernst genommen wird, und das ist für den Aufbau einer Kultur wichtiger als Abdeckungszahlen.

Direkt danach kommt alles, was sich rechnerisch prüfen lässt: Preisermittlung, Fristen, Berechtigungen, Umrechnungen, Formatierungen. Diese Fälle haben klare Eingaben und klare Ausgaben, sie brauchen keine Oberfläche und keine Umgebung, und ein Test dafür läuft in Millisekunden. Genau hier lassen sich Äquivalenzklassen und Grenzwerte systematisch abdecken, statt zwei Beispiele zu prüfen und zu hoffen.

Die dritte Gruppe sind Schnittstellen. Eine Prüfung gegen die API deckt fachliche Fehler ab, ohne die Oberfläche zu berühren, sie ist deutlich schneller als ein Oberflächentest und wesentlich stabiler, weil sie nicht an Gestaltung hängt. Wenn eure Anwendung eine Schnittstelle hat, ist das der Ort mit dem besten Verhältnis zwischen Aufwand und Aussagekraft.

Der Fall, den viele zuerst angehen und der eigentlich zuletzt gehört, ist der lange Weg über die Oberfläche. Er ist nicht falsch, aber er ist teuer, und er sollte auf die wenigen Wege beschränkt bleiben, die wirklich das Zusammenspiel aller Teile prüfen.

Was manuell besser aufgehoben ist

Alles, was ein Urteil verlangt, bleibt manuell. Ob eine Oberfläche verständlich ist, ob eine Fehlermeldung hilft, ob ein Ablauf sich unnötig umständlich anfühlt, das kann kein Vergleich zweier Werte beantworten. Automatisierte Prüfungen sagen dir, ob das System tut, was ihr erwartet habt. Sie sagen dir nicht, ob eure Erwartung sinnvoll war.

Ebenfalls manuell bleibt exploratives Testen. Der Wert dieser Arbeit liegt darin, dass jemand während des Testens seine Hypothesen ändert und Wege geht, die niemand vorher aufgeschrieben hat. Genau das lässt sich nicht in ein Skript gießen, denn ein Skript kann nur prüfen, was jemand vorher gedacht hat. Teams, die alles automatisieren, verlieren diese Funde und merken es erst, wenn Kunden sie stattdessen machen.

Und manuell bleibt fast alles, was einmal passiert. Eine Abnahme nach einer Migration, die Prüfung eines Zwischenstands, die einmalige Kontrolle eines Datenbestands. Dafür einen automatisierten Test zu bauen, kostet mehr, als ihn dreimal von Hand durchzuführen, und danach steht ein Test in der Suite, den niemand mehr braucht, aber auch niemand löscht.

Der Ebeneneffekt: dieselbe Aussage, sehr unterschiedliche Kosten

Google hat für die eigene Praxis lange eine Verteilung von etwa siebzig Prozent Unit-Tests, zwanzig Prozent Integrationstests und zehn Prozent Ende-zu-Ende-Tests als Orientierung veröffentlicht. Die Zahlen sind kein Naturgesetz und passen nicht auf jede Anwendung, aber die Richtung hält jeder Prüfung stand: Je weiter oben ein Test ansetzt, desto langsamer läuft er, desto mehr Ursachen kann ein Fehlschlag haben und desto mehr Umgebung muss stimmen.

Der Grund ist nicht Geschmack, sondern Kombinatorik. Ein Ende-zu-Ende-Test bindet die Oberfläche, die Anwendungslogik, die Datenbank, das Netz und meistens noch einen fremden Dienst ein. Wenn jede dieser Schichten in neunundneunzig von hundert Läufen tut, was sie soll, dann schlägt der Gesamttest trotzdem in etwa fünf von hundert Läufen aus einem Grund fehl, der nichts mit eurem Code zu tun hat. Genau diese Rechnung ist der Grund für scheinbar zufällige rote Läufe.

Die praktische Konsequenz ist ein zweistufiger Aufbau. Ein schneller Lauf bei jeder Änderung mit Unit- und Schnittstellentests, dessen Ergebnis in Minuten vorliegt, und ein zweiter, langsamerer Lauf mit den wenigen Ende-zu-Ende-Wegen, der nachts oder vor der Auslieferung startet. Wer beides in einen Lauf packt, bekommt entweder einen langsamen Lauf oder eine gestutzte Abdeckung.

Woran ihr merkt, dass die Suite ihren Wert verliert

Das erste Zeichen ist der Wiederholungsknopf. Sobald es normal ist, einen fehlgeschlagenen Lauf einfach noch einmal zu starten, hat die Suite ihre wichtigste Eigenschaft verloren, nämlich dass ein rotes Ergebnis eine Aussage ist. Ab da baut sich Gewöhnung auf, und die betrifft nicht nur die instabilen Tests, sondern auch die zuverlässigen.

Das zweite Zeichen ist die Laufzeit. Wenn niemand die Suite lokal startet, weil sie zu lange dauert, dann wandert die Rückmeldung in die Pipeline und kommt zu spät. Der Ausweg ist nicht mehr Rechenleistung, sondern eine ehrliche Durchsicht: Welche Tests prüfen dasselbe zweimal, welche laufen über die Oberfläche, obwohl sie es nicht müssten, welche sind seit zwei Jahren nie rot geworden und tragen deshalb keine Information mehr.

Das dritte Zeichen ist eine Zahl ohne Deckung. Eine hohe Codeabdeckung sagt aus, welcher Code ausgeführt wurde, nicht welches Verhalten geprüft wurde. Eine Suite, die jede Zeile durchläuft und dabei kaum Zusicherungen macht, erzeugt eine beruhigende Zahl und keine Sicherheit. Wenn eine Abdeckungsvorgabe zur Zielgröße wird, entstehen genau solche Tests, und dann arbeitet die Kennzahl gegen euch.

Dazu passende Kurse

Weil sich die Werkzeugfrage erst nach der Zuschnittfrage stellt, lohnt der Blick auf Kurse zum Aufbau einer Testautomatisierung mit dem eigenen Fallkatalog in der Hand.

Eine Suite ohne verlässliche CI/CD-Strecke bleibt ein lokales Werkzeug, deshalb gehören Kurse zu Pipelines und automatisierten Auslieferungen in dieselbe Planung.

Wissen prüfen

Wie sicher bist du beim Thema wirklich?

Lesen fühlt sich schnell nach Können an. Ein kurzer Test zeigt dir, was davon schon sitzt und wo sich ein Kurs lohnt. Kostenlos, ohne Anmeldung, mit einer Erklärung zu jeder Antwort.

Sehr umfangreicher Überblick über Zusammenhänge und Anwendungsbereiche. Sehr zu empfehlen.
Einführung in die Programmierung für Programmiereinsteiger
Effektives, gemeinsames Erarbeiten der Aufgaben mit vielen praktischen Tipps.
Groovy Grundkurs
Sehr guter Trainer und gute Aufbereitung der Inhalte und auch eingehen auf Fragen der Beteiligten.
Unreal Engine Kurs für Einsteiger

Häufige Fragen

Ab welcher Zahl von Ausführungen lohnt sich ein automatisierter Test?
Eine allgemeingültige Zahl gibt es nicht, weil Erstellungs- und Wartungsaufwand je nach Ebene um den Faktor zehn auseinanderliegen. Als Arbeitsregel taugt: Ein Unit-Test lohnt sich fast immer, ein Schnittstellentest ab einer Handvoll Ausführungen im Monat, ein Oberflächentest erst, wenn er zum festen Bestandteil jeder Auslieferung wird. Rechne bei den oberen Ebenen die Analysezeit für Fehlschläge mit ein, sonst verschiebt sich die Schwelle nach unten und die Rechnung stimmt nicht mehr.
Sollen wir zuerst automatisieren oder zuerst unsere manuellen Tests aufräumen?
Aufräumen. Ein unklarer manueller Testfall wird durch Automatisierung nicht klarer, er wird nur schneller falsch. Wenn niemand sagen kann, was das erwartete Ergebnis genau ist, dann fehlt eine Anforderung und kein Werkzeug. Der Umweg über saubere Testfälle mit eindeutigen Schritten und definierten Testdaten zahlt sich doppelt aus, weil er die Vorlage für die Automatisierung gleich mitliefert.
Brauchen wir dafür eine eigene Automatisierungsgruppe?
Meistens nicht, und oft schadet es. Wenn die Suite einer getrennten Gruppe gehört, erfährt die Entwicklung von einem Bruch erst über einen Bericht, und niemand fühlt sich zuständig. Die Auswertungen von DORA zeigen, dass Teams besser abschneiden, wenn die Entwicklung die automatisierten Tests selbst erstellt und pflegt. Eine spezialisierte Rolle bleibt trotzdem sinnvoll, aber eher als Unterstützung für Architektur, Werkzeuge und Testdaten als als eigener Zuständigkeitsbereich.
Lohnt sich Automatisierung für eine Anwendung, die bald abgelöst wird?
Für die Ablösung selbst durchaus, für die laufende Pflege eher nicht. Wenn ein System migriert wird, sind automatisierte Prüfungen gegen die Schnittstellen des alten Systems eine der wenigen Möglichkeiten, das Verhalten des neuen belastbar dagegenzuhalten. Neue Oberflächentests für eine Anwendung, die in einem Jahr verschwindet, sind dagegen verlorene Zeit.
Wie gehen wir mit Tests um, die nur manchmal fehlschlagen?
Nicht mit Wiederholungen. Ein Test, der ohne Codeänderung mal grün und mal rot ist, hat eine Ursache, und diese Ursache steckt in einer überraschend großen Zahl von Fällen im Produktivcode und nicht im Test. Behandelt solche Tests wie Fehler mit eigener Meldung, nicht wie Rauschen, und nehmt sie notfalls für kurze Zeit aus dem blockierenden Lauf heraus, mit Datum und benannter Zuständigkeit.
Persönlich für dich da

Deine Ansprechpartner

Du bist dir nicht sicher, welcher Kurs oder welches Level zu dir passt? Wir beraten dich persönlich und kostenlos.

Yves Hoppe

Yves Hoppe

Weiterbildung & Beratung

Hilft dir, aus dem Programmierung-Programm den passenden Kurs für deinen Stand zu finden.

Norbert Jansen

Norbert Jansen

Beratung & Inhouse

Plant mit dir Inhouse-Trainings, die auf eure Abläufe und euren Datenbestand zugeschnitten sind.

Den Zuschnitt an eurer eigenen Suite durchgehen

Ob ihr mit einem Keyword-getriebenen Rahmenwerk auf Python-Basis, mit einem Werkzeug für Oberflächentests oder mit der Architekturfrage des ISTQB-Aufbaumoduls anfangt, hängt davon ab, wo ihr steht. Alle drei Kurse gibt es bei cmt als offene Termine und als Inhouse-Variante am eigenen System.