«Künstliche Testdaten sind super!» – Teil 1 von 3


Murat Böyük Pilavci, Consultant Professional

Testdaten sind das A und O für jeden Test jeglicher Teststufe. Ohne Daten kann die Qualität einer Software nicht oder nur begrenzt überprüft werden. Das müsste allen im Bereich der Softwareentwicklung klar sein. Oft erlebe ich, dass Testdaten mühselig manuell angelegt werden, Klick für Klick, über einen Frontend-Automaten (Capture & Replay) oder über Datenbankkopien. Dabei gibt es eine bessere Lösung: Künstliche Testdaten.

Leider wird dieses Thema immer noch sehr stiefmütterlich, mit Ablehnung oder gar nicht behandelt. Dieser dreiteilige Blog soll dem Leser, die Vor- und Nachteile aufzeigen, und schlussendlich Mut geben das Thema seriös anzugehen.

Der erste Teil zeigt die Vor- und Nachteile, Voraussetzungen und beleuchtet die Themen Testautomation mit künstlichen Testdaten, die «Echtheit» und Diversifikation derer. Der zweite Teil wird praktische Beispiele aufzeigen und der dritte Teil wird weitergehende wichtige Punkte behandeln, die bei künstlichen Testdaten zu beachten sind: Tools, Risiken, Reverse Engineering, Aufwand und Ertrag, Unterhalt und Workflow.

Was sind Künstliche Testdaten?

(M)eine Definition: Künstliche Testdaten sind Daten, die eine vordefinierte Anzahl Parameter mit bekannten Werten an jedem gewünschten Zeitpunkt in die Testumgebung geladen werden können.

Künstliche Testdaten sind super! Aber wieso?

Künstliche Testdaten ermöglichen dem Softwaretester das Prüfobjekt an und über die Grenzen hinaus zu testen. Der Clou dabei: Kontrollierbar, berechenbar und verlässlich. Im Gegensatz zu echten, sich ständig ändernden Testdaten, kopiert aus der Produktionsumgebung. Sie können zu falschen Negativbefunden führen und dadurch einzelne Tests oder ganze Testgruppen durchfallen lassen. Gestern waren die echten Testdaten noch vorhanden, heute nach dem neuesten Datendump aus der Produktion nicht mehr. Den Kunden oder dessen Daten gibt es nicht mehr.

Der naheliegende Ansatz ist mit einem Backup der Produktions-Datenbank zu arbeiten. Der entscheidende Nachteil dieser Lösung ist, dass sie nicht die gleiche Flexibilität bietet, wie ein ausgeklügeltes Testdaten-Ladeprogramm. Auch das Backup muss gepflegt werden. Nach jeder Änderung der Datenbank, muss ein neues Backup erstellt werden, auf welches zugegriffen wird. Hier beisst sich die Testkatze in den eigenen Schwanz: Bevor die Änderungen in der Produktion eingespielt werden, müssen sie vorher in der Testumgebung überprüft werden. Woher kriegt der Tester nun die echten Produktionsdaten her? In dieser Situation steht man schon mit einem Fuss in der Tür, kurz davor künstliche Testdaten laden zu müssen, um die neuen Datenbank- und die entsprechenden Frontend-Features zu testen.

Künstliche Testdaten tragen also dazu bei verlässliche Testresultate zu liefern. Leider scheuen immer noch zu viele Firmen den Aufwand. Oder kennen sie die Vorteile nicht?

Vorteile, Risiken & Voraussetzungen

Zum Start eine Übersicht der Vorteile, Risiken und Voraussetzungen für künstliche Daten. In Teil 2 und 3 werden die Vorteile und Risiken näher besprochen.

Vorteile

  • Höhere allgemeine Stabilität durch Bekanntheit der Daten
  • Unabhängigkeit von echten Testdaten
  • Führen immer zu einem exakten erwarteten Resultat
  • Anzahl der Entitäten in der Datenbank bleiben gleich
  • Spezialfälle können regelmässig getestet werden
  • Keine oder nur einmal aufwendige Anonymisierung notwendig

Risiken

  • Grosser Aufwand für Analyse und Aufbereitung
  • Umgebende Systeme müssen gegebenenfalls miteinbezogen werden
  • Ungenügende Diversifikation = Testdaten entsprechen nicht dem «echten Leben»
  • Vernachlässigung des Unterhalts, wegen dem zusätzlichem Zeitaufwand
  • Das Laden der Testdaten ist umständlich, unzuverlässig und/oder instabil
  • Überschreiben bestehender künstlicher Testdaten kann zu grösseren Problemen führen

Voraussetzung

  • Programm zum Laden der Testdaten
  • Handhabung des Testdaten-Ladeprogramms muss einfach sein
  • Gute Analyse und Vorbereitung der Testdaten
  • Ständiger Unterhalt der Testdaten
  • Detaillierte Dokumentation
  • Verknüpfung zu den Spezifikationen

Was nicht abgedeckt wird

  • Tests mit nicht erlaubten Dateneingaben
  • Tests mit ungültigen Dateneingaben
  • Tests für Frontendverhalten, wenn keine Daten vorhanden sind

Garantie für wiederholbare, stabile und verlässliche Testresultate

Künstliche Testdaten garantieren wiederholbare und stabile Testresultate. Man weiss im Voraus, welches Resultat genau zu erwarten ist. Der Grund dafür ist die Fixierung der Testdaten. Wie viele Emails sind in der Inbox? Wie viele Kontobewegungen hat dieser Nutzer zu welchem Zeitpunkt? Wie verhält sich meine Applikation bei Grenzsituationen? Welche Resultate werden bei einer Suche angezeigt? Welche Resultate dürfen bei einer Suche nicht angezeigt werden?

Fixierte Testdaten können auch partiell dynamisch sein. Beispielsweise Buchungen von heute. Das Buchungsdatum ist dynamisch, damit bei jedem Laden der Testdaten Buchungen mit dem heutigen Datum generiert werden. Die Anzahl und der Inhalt der heutigen Buchungen bleiben nach wie vor fixiert. Die dynamischen Werte müssen bei Bedarf dem Testautomaten mitgeteilt werden.

Die Kontrollierbarkeit und Berechenbarkeit machen künstliche Testdaten ideal für Softwaretests. Kopierte echte Testdaten aus der Produktionsdatenbank werden sich zwangsläufig nach jeder Kopie ändern. Werden die Kopien aber sporadisch ausgeführt, nimmt die Datenqualität über Zeit und häufiges Testen ab. Das Emailkonto ist überflutet mit Test-Emails, oder das Konto wurde ganz aufgelöst. Ihr Testautomat wird die definitiven bekannten Werte aus den künstlichen Testdaten lieben. Auch der Tester freut sich, weil er vorher genau weiss, was er zu erwarten hat.

Traumpaar künstliche Testdaten & Testautomation

Ein Mensch ist in der Lage neue Testdaten entsprechend den Anforderungen aus der Datenbank zu suchen und diese zu verstehen. Er ist in der Lage zu verstehen ob das Testresultat den Erwartungen entspricht oder nicht. Dies kostet jedoch Zeit und wird mit steigender Komplexität fehleranfälliger.

Der Softwareautomat hat diese Intelligenz (noch?) nicht. Er wird einen falschen Fehlerbefund angeben. Der Tester muss der Fehlermeldung nachgehen, um schliesslich herauszufinden, dass die Testdaten versagt haben. Nach dem letzten Datendump der echten Testdaten, hat der benutzte Test User die gesuchte Kontobewegung gelöscht. Also eine Falschmeldung aufgrund abweichender Testdaten.

Deshalb gilt: Künstliche Testdaten & Testautomation sind das Traumpaar schlechthin! Stellen sie sich vor, sie haben Hunderte oder Tausende von automatisierten Tests, die innert kürzester Zeit ausgeführt werden. Plus die Testausführungen fallen nicht durch, wegen sich ändernden Testdaten. Der Testerhimmel auf Erden!

So echt wie möglich?

Ja. Die künstlichen Testdaten sollen echten Daten gleichen. Das macht den Testern das Leben generell einfacher. Das Business kann die Testresultate besser nachvollziehen. So erhalten die künstlichen Testdaten eine hohe Akzeptanz.

Beim Laden von künstlichen Testdaten wie Email-Testkontos mit tausenden Emails, deren Absender, Betreff und Inhalt mit kryptischen, unleserlichen oder immer gleichen Zeichen abgefüllt sind, führen zu einem vorzeitigen Hirntod des Testers. Der Mensch kann sich plausible Texte und Zahlen besser merken als zufällige oder sich wiederholende Zeichenketten. Künstliche Testdaten sollten leserlich und schnell verständlich bleiben.

Diversifikation

Gleichzeitig sollen die künstlichen Testdaten, für die meisten Testszenarien, möglichst diversifiziert sein. Wer will schon ein Testkonto mit 500 Emails, die dasselbe Datum, denselben Absender, Betreff und Inhalt haben? Eigentlich selbstredend. Für eine «lebendige» Diversifikation geben echte Daten aus der Produktion die besten Bespiele ab. Diese können als Basis dienen, die man künstlich für die jeweilige Testsituation aufbohrt und vermehrt.

Auf der anderen Seite kann man sich die Diversifikation und auch die Echtheit der künstlichen Testdaten für einen Performance-Test, wo man die Reaktion des Frontend bei grossen Datenmengen messen will, weitgehend sparen. Es genügt eine einfache Nummerierung. Oder bei Tausenden Kontobewegungen, kann der Betrag hochgezählt werden und der Empfänger bleibt gleich. Es gilt vorher abzuwägen, wie und wo man die Diversifikation benötigt und einsetzt.

Eindeutige Identifizierungsmerkmale

Künstliche Testdaten können mit eindeutigen Identifizierungsmerkmalen versehen werden. Für einige Situationen oder bestimmte Parameter müssen sie dies sogar. Einige Systeme lassen nur einmalige Benutzerkonto zu. Werden solche Konti künstlich geladen, muss sichergestellt werden, dass sie einmalig bleiben. Wie schon erwähnt, sind verständliche Zeichenketten besser als zufällige.

Das naheliegende ist eine fortlaufende Nummerierung. Oder man ergänzt die Daten mit abweichenden Prä- oder Suffixen. Die Testdaten können einem Tester und/oder Test Run zugewiesen werden. Zum Beispiel der Benutzername: murat.feb18.01. Beim nächsten Laden: murat.feb18.02. Jeder Testdatenladevorgang wird auf diese Weise eindeutig. Negatives Gegenbeispiel wäre eine zufällige Zeichenfolge als Benutzername: hUbq5aWJIF. Im folgenden Ladevorgang dann der Benutzername: i5Q1WZk32V. Solche Textstrings kann man sich nur sehr schwierig merken und erschweren den alltäglichen Testbetrieb.

Zu beachten sind dabei Restriktionen, die aus den Anforderungen entstehen. Wird der Benutzername auf zwölf Zeichen eingeschränkt, sollten die künstlich geladenen Benutzernamen nicht aus vierzehn Buchstaben bestehen.

Schlussfolgerung

Künstliche Testdaten bieten sehr viele Vorteile im Bereich Stabilität, Nachvollziehbarkeit und Wiederholbarkeit der Testresultate. Es ist aber wichtig sich ein klares Bild zu verschaffen über Voraussetzungen und Risiken. Im Zusammenspiel mit einer Testautomatisierung sind künstliche Testdaten praktisch ein Muss. Im nächsten Blog zeige ich mehrere praktische Beispiele auf, damit die Vorteile noch deutlicher zur Geltung kommen. Im dritten Teil gehe ich dann auf Risiken, Tools und Aufwände ein.

3 thoughts on “«Künstliche Testdaten sind super!» – Teil 1 von 3”


  • joan.killeen@ipi.ch' Joan Killeen sagt:

    Testdaten haben grosse Vorteile, das ist unbestritten. Manchmal sind es aber nicht so einfach Testdaten zu produzieren.
    In meinem Projekt braucht es manchmal viele relativ komplexe Vorgänge um eine Vorbedingung für einen Test zu produzieren.
    Ich hätte sehr gerne mehr Kenntnisse von Test Tools, die Datenbestände in SQL Datenbanken kopieren und duplizieren.

  • k.wirth@gmx.de' Karsten Wirth sagt:

    Was mit bei derartigen Betrachtungen immer fehlt ist die Komplexität, die sich aus einer komplexen Systemlandschaft ergibt. Häufig wird nur von einem IT-System under Test als Beispiel ausgegangen, dass dann auch noch über ein einfaches und wohl dokumentiertes Datenbankschemata verfügt – das finde ich aber seit Jahren nicht mehr vor.
    Die waren Herausforderungen ergeben sich aus voneinander abhängigen Systemen und ihren Datenbeständen sowie Kommunikationsformen. Hierfür einen konsequenten Datenbestand vorzubereiten bzw. sicherzustellen ist die viel größere Herausforderung.
    Es wäre nett, wenn darauf eingegangen werden würde.

  • dirk.jepsen@adac.de' Dirk Jepsen sagt:

    Ihr Titelbild suggerierte KI-Testdaten. Das wäre ein noch spannenderer Beitrag.
    Doch mit (herkömmlichen) künstlichen Testdaten habe auch ich tolle Erfahrungen.
    Weitere Vorteile sind u.a. in der Unabhängigkeit von Testumgebungen (System Under Test): Es müssen keine zur jeweiligen Testumgebung passenden Testdaten bereitgestellt werden. Dies beantwortet vielleicht die Frage meines Vorredners.
    Ich gehe sogar soweit, dass die Generierung der Testdaten als precondition zum Testfall gehört.
    Wie sind Ihre Erfahrungen mit Tools zur Testdaten Generierung? Derzeit programmiere ich die automatisierte Testdatengenerierung selbst nach meinen Bedürfnissen aus und lassen sich gut in die CI / Continuous Test Strecken einbinden.
    Bin auf Ihren Teil 2 gespannt!

Schreibe einen Kommentar