Effizientes Testdatenmanagement

Einer der Eckpfeiler hoher Softwarequalität ist das Testen. Doch wie wird die Qualität von Tests sichergestellt? Grundlage für hochwertige Tests ist das Test-Design, also die Beschreibung der Testfälle, die als Grundlage für die Testausführung eine maßgebliche Rolle spielt. Ebenso ist ein klar definierter Ausgangszustand des zu testenden Systems unerlässlich. Testfälle können nur in Kombination mit den richtigen Testdaten realitätsnah und damit qualitativ hochwertig beschrieben und ausgeführt werden.

Was sind Testdaten und wieso muss man diese managen?

Testdaten umfassen alle Daten, welche vor der Ausführung eines Testfalls zur Verfügung stehen müssen. Sie setzen sich zusammen aus den Daten die als Voraussetzung im System existieren müssen, den Eingabewerten der Testschritte sowie den erwarteten Ergebnissen. Die Vollständigkeit und Verfügbarkeit der Testdaten ist essentiell für ein effizientes Testen. Existieren keine passenden Daten im System, kann der Testfall gar nicht ausgeführt werden. Eine Kernanforderung an Testdaten ist, dass sie möglichst realitätsnah sind. Die Aufgabe des Testdatenmanagements ist es sicherzustellen, dass alle benötigten Testdaten bei jeder Ausführung eines Testfalls zur Verfügung stehen. Die dafür notwendigen Tätigkeiten lauten Planung, Steuerung, Spezifikation, Konzeption, Bereitstellung, Berichterstattung sowie Archivierung. Im Vergleich zu den komplexen technischen Rahmenbedingungen, stellen Testfälle oft sehr überschaubare fachliche Anforderungen an die vorausgesetzten Daten.

Strategien zur Testdatenerzeugung

Mit dem Fokus auf den Tätigkeiten Spezifikation, Erstellung und Bereitstellung von Testdaten sind die zwei grundlegenden Strategien entweder Produktivdaten oder synthetisierte Daten zu verwenden. Der Hauptvorteil von Produktivdaten ist, dass mit geringem Aufwand reale Testdaten zur Verfügung stehen. Dem steht als Hauptproblem gegenüber, passende Datensätze zu finden, welche den von Testfällen geforderten Charakteristiken genügen. Die offensichtliche Voraussetzung für die Verwendung von Produktivdaten ist, dass bereits eine Produktivversion des Systems existieren muss.  Handelt es sich um eine Neuentwicklung, so kann höchstens auf Produktivdaten ähnlicher Systeme zurückgegriffen werden. Um Produktivdaten attraktiver zu machen, können sie vor ihrer Verwendung aufbereitet werden: Maskierung, Pseudonymisierung, die Änderung von Datumsangaben sowie das Anpassen einzelner Datensätze an durch Testfälle geforderte Charakteristiken helfen, den zuvor beschriebenen Problemen entgegenzuwirken. Bei synthetisierten Daten handelt es sich um künstlich erzeugte Datensätze. Die Möglichkeiten zu Erzeugung solcher Datensätze reichen von zufälliger Generierung über Verwendung fachlicher Algorithmen bis hin zu vollständig manueller Spezifikation, außerdem sind sie datenschutzrechtlich unbedenklich. 


Das Beste aus zwei Welten

 

Im Fokus des Prozesses steht das Ziel, die Spezifikation, Erstellung und Bereitstellung von Testdaten so einfach wie möglich zu gestalten. Dadurch wird es ermöglicht, in einem Testfall die benötigten Testdaten nur anhand der für den Testfall relevanten Charakteristiken zu spezifizieren. Alle weiteren Daten, welche für die Testausführung in keiner spezifischen Ausprägung benötigt werden, werden im Hintergrund unter Zuhilfenahme von fachlich sinnvollen Standardwerten automatisch gesetzt. Die Art der Spezifikation ist dabei so gewählt, dass alle Beteiligten eine einheitliche, fachliche Sprache sprechen. Wie bereits beschrieben, liegt dem Prozess eine Mischung aus synthetisierten und Produktivdaten zugrunde. Dies bedeutet konkret, dass bereits relevante Produktivdaten aus bestehenden Systemen existieren und diese Produktivdaten unter Beachtung datenschutzrechtlicher Aspekte einmalig in den Testdatenbestand übernommen werden. Dieses Vorgehen eignet sich für Daten, welche nicht durch Testfälle mit konkreten Charakteristiken spezifiziert werden oder welche eine abgeschlossene Menge bilden. Ein Teil der Testdaten ist somit nicht nur möglichst realitätsnah, sondern spiegelt die Realität exakt wieder.

Erzeugung von Testdaten

Wesentlich aufwändiger gestaltet sich die Erzeugung der Testdaten, die für Testfälle durch konkrete Charakteristiken gefordert werden. Deren Spezifikation findet in zwei Stufen statt. Zusammen mit dem Kunden und Analysten werden exemplarische, realitätsnahe Datensätze spezifiziert. Die besten Ergebnisse werden erzielt, wenn der Kunde dafür intensiv mit dem System interagiert. Im zweiten Schritt werden für jeden Testfall die in den Testdaten geforderten Charakteristiken spezifiziert. Bei der Testdatenerstellung überschreiben diese Charakteristiken die zuvor festgelegten Standardwerte. Da Testfälle durchaus auch Randbedingungen überprüfen, müssen die Charakteristiken nicht mehr realitätsnah sein. Sie integrieren sich jedoch in einen ansonsten realitätsnahen Datenbestand. Was noch fehlt, ist die Testdatencharakteristiken in einer einheitlichen und fachlichen Sprache spezifizieren zu können. Dafür müssen die Testdaten auf das Wesentliche reduziert werden. Zusammengefasst ergibt sich also folgender Prozess: Zunächst wird bestimmt, welcher Teil der benötigten Daten aus Produktivdaten übernommen werden kann und welcher Teil synthetisch erzeugt werden muss. Für die synthetisch zu erzeugenden Testdaten werden dann fachlich sinnvolle Standardwerte spezifiziert und hinterlegt. Fachliche Entitäten werden dem Verwender zur Erzeugung der Testdaten zur Verfügung gestellt. Zuletzt werden pro Testfall relevante Charakteristiken spezifiziert, welche die Standardwerte überschreiben.

 

 

Der nächste Schritt

 

Im zweiten Schritt der Synthetisierung werden alle für den Testfall relevanten Daten spezifiziert. Ist nun also der Name eines Kunden für einen Testfall relevant um beispielsweise die Anzeige von Sonderzeichen zu prüfen, so spezifiziert der Testfall diesen Namen explizit und überschreibt damit den hinterlegten Standardwert. Die technische Umsetzung der beschriebenen Testdatenerzeugung bedingt eine intensive Auseinandersetzung mit dem fachlichen Domänenmodell, der Analyse und dem technischen Datenschema der Entwicklung. Die Implementierung der vorgestellten Testdatenerzeugung wird den Verwendern für Test in Form einer API zur Verfügung gestellt. Diese API gliedert sich technologisch in die Entwicklung und in die Testautomatisierung ein. Durch die Verwendung derselben Programmiersprache wird eine durchgängige Programmierung der Testdatenerzeugung und des Testablaufs ermöglicht. Die Implementierung der Testdatenerzeugung gehört neben den Produktionssourcen in die Quellcodeverwaltung. Damit ist eine zu den jeweiligen Produktionsständen passende Versionierung sichergestellt. Gleichzeitig wird die Archivierung von Testdatenbanken hinfällig, da alle Testdaten jederzeit reproduziert werden können.