Der Migrationstest-Prozess

Ein Softwaremigrations-Projekt erfordert einen anderen Testansatz als ein Entwicklungsprojekt. Denn es existiert im Regelfall weder eine Anforderungsspezifikation noch ein Designmodell als Testgrundlage. Das bedeutet, dass für Migrationsprojekte anforderungs- und modellbasierte Testansätze nicht geeignet sind. Vielmehr kann für den Test migrierter Systeme das Altsystem als Testorakel herangezogen werden. Das entscheidende Testkriterium ist dann die vollständige funktionale Gleichheit von Alt- und migriertem System - und dafür müssen spezielle Methoden und Werkzeuge zum Einsatz kommen.

Darüber hinaus sollte im Migrationstest schrittweise vorgegangen werden:

1. Die Messung des Codes

„Man kann nicht planen, was man nicht messen kann“ [1]. Gemäß dieses Zitats von Tom deMarco muss im Rahmen der Planung eines Migrationstests das gemessen werden, was migriert werden soll: der Quellcode.

Denn in Migrationsprojekten ist dieser Code des Altsystems die entscheidende Grundlage für die Aufwandsschätzung [2].

Welche Aspekte einer Messung unterzogen werden, hängt von der gewünschten Information und Zielgröße ab, die man mit der Messprozedur gewinnen will. Die gewünschten Metriken können anhand statischer Analyse aus dem Quellcode, den Datenbank-Schemata, den Definitionen des Benutzerinterfaces sowie den Systemschnittstellen gewonnen werden [3].

Die Erfahrung vergangener Projekte zeigt, dass der Zeitaufwand für die Messung von Quellcode im Regelfall nicht mehr als 1 Woche beträgt; vorausgesetzt, man setzt dafür die geeigneten Messwerkzeuge ein. Der Autor Harry M. Sneed hat im Laufe der Zeit Werkzeuge entwickelt, die sich nicht nur für neue, sondern ebenso für alte Programmiersprachen eignen. Denn in den allermeisten Migrationsprojekten ist das Vorgängersystem in einer alten Programmiersprache wie PL/1, Cobol oder C geschrieben.

2. Die Planung des Migrationstests

Zeit- und Aufwandsschätzung für die Testdurchführung sind Bestandteile der Testplanung. Der Testaufwand bemisst sich hier nach der Anzahl an zu exekutierenden Testfällen (Online-Transaktion, Batch-Prozess etc.) sowie jener an zu validierenden Testobjekten. Ein Testobjekt wiederum kann aus den Produktionsdaten generiert werden: in Form eines Benutzer-Interfaces, einer Datei, einer Datenbank-Tabelle, einer Systemschnittstelle etc. So gelangt man zu einer Rohschätzung für das aktuelle Migrationstest-Projekt. Diese Schätzung kann z.B. mittels Produkttyp oder des Testwiederholungsfaktors verfeinert werden [4].

Das Ergebnis der Testplanung ist ein Testkonzept gemäß ANSI/IEEE-Standard 829. In diesem sollte besonderes Augenmerk auf die Testziele und die Testendekriterien sowie deren Messung gelegt werden. Denn nur wenn diesen beiden Aspekten entsprochen wird, kann der Kunde den Test am Ende abnehmen. Das kann z.B. mittels Kennzahlen über die durchgeführten Testfälle und über die validierten Testobjekte erfolgen [5].

3. Das Design des Migrationstests

Um einen Migrationstest zu designen, muss man berücksichtigen, was (Testfälle und Testobjekte) und wie (Testvorgehen) zu testen ist. Häufig ist mangels Verfügbarkeit und Aktualität einer Dokumentation des Altsystems die einzige Möglichkeit für die Erstellung eines Testdesigns, dass der Tester aufzeichnet, wie die Endbenutzer das System aktuell bedienen.

Bei den Testobjekten ist die Anzahl an Datenelementen, die jedes Datenobjekt besitzt, von besonderer Bedeutung. Dazu zählen z.B. Felder und Spalten sowie deren Wertebereiche.


4. Die Gewinnung von Testdaten für ein Migrationsprojekt

In einem Migrationsprojekt gewinnt man die Testdaten am besten direkt aus dem Produktionssystem, indem man einen Teil der Produktionsdaten abzieht (und anonymisiert). Im Testdesign sollte man bereits einzelne Transaktionen, Ereignisse und Batchläufe mit repräsentativem Charakter identifiziert haben.

Vor jedem Test müssen Abbildungen des Benutzer-Bedienfeldes, der Eingabedateien und des Datenbankinhaltes archiviert werden. In der gleichen Form müssen nach jedem Test die neuen Abbildungen derselben Objekte sowie zusätzlich gesendete Ausgabe-Nachrichten und ausgedruckte Reports festgehalten werden. All das führt zu einem großen Aufkommen an Testdaten.

Hier können Testwerkzeuge und Capture-Replay-Tools als nützliche Helfer zum Einsatz kommen [6].

5. Die Durchführung des Migrationstests

Etwa 60% bis 80% des Gesamtaufwands werden in Migrationsprojekten dem Test gewidmet. Sofern der Migrationstest also nicht automatisiert durchgeführt wird, ist es unmöglich, ihn innerhalb eines vernünftigen Zeitrahmens zu absolvieren.

Damit man im Nachhinein feststellen kann, welcher Teil des migrierten Programmcodes getestet wurde, sollten (z.B. mittels Automatisierungs-werkzeugen) Messfühler vor Teststart in z.B. jedem Zweig oder zumindest in jeder Methode platziert werden.

Nach jeder Transaktion oder jedem Batchprozess werden die Inhalte der Ausgabefelder, der Ausgabe-Nachrichten, das neue Erscheinungsbild der betroffenen Datenbank und Anomalien für eine spätere Evaluierung aufgezeichnet [7].

6. Die Evaluierung des Migrationstests

Im sechsten Schritt werden die Ergebnisse des Migrationstests evaluiert, um festzustellen, ob das migrierte System die Erwartungen erfüllt: nämlich dieselbe Leistung (inkl. Performance) wie das Altsystem zu erbringen.

Zu Validierungszwecken werden die Bildschirminhalte, Schnittstellendaten und Datenbank-Tabellen der Tests aus beiden Systemen automatisch miteinander verglichen. Weichen die Formate voneinander ab, muss zugunsten einer Vergleichbarkeit eine Konvertierung in ein einheitliches Format stattfinden.

Zu diesem Zweck hat einer der Autoren mehrere Umwandlungs- und Vergleichs-Werkzeuge entwickelt - die alten wie die neuen Benutzeroberflächen werden in XML-Dokumente transformiert.

Ebenso werden die Inhalte der alten Datenbanken und jene der neuen, relationalen Datenbanken heruntergeladen, und dabei zu Vergleichszwecken in komma-separierte (CSV-) Dateien umgewandelt.


Im Falle des Vergleichs von Millionen von Datenausgaben ist der automatisierte Vergleich die beste Art und Weise, Fehler im migrierten Code aufzuspüren [8].

7. Die Messung im Migrationstest

Die vor der Testausführung automatisch im Code eingepflanzten Messfühler oder Verfolgungspunkte werden während der Testausführung in Log-Dateien aufgezeichnet. Nach dem Testdurchlauf werden sie ausgewertet. Messreports können unterschiedliche Informationen dokumentieren: den Testabdeckungsgrad, den Pfad jeder einzelnen Testtransaktion etc.

Beim Test eines komplett neu entwickelten Systems treten z.B. folgende Fehler auf: es werden Funktionen ausgespart, Ergebnisse falsch kalkuliert usw. Beim Test eines migrierten Systems sind die (Transformations-) Fehler allerdings subtilerer Natur: Nachkommastellen gehen verloren, Datensätze werden zerstört, Daten haben sich an einen anderen Ort verlagert usw.

Die einzige Möglichkeit zur Aufdeckung solcher Fehler ist es, alle Daten zu vergleichen; kombiniert mit einer Abdeckung des kompletten Programmcodes. Jede Anweisung muss getestet werden – das bedeutet, dass eine wiederholte Durchführung des Tests notwendig ist [9].

Neben der Messung der Testabdeckung ist es erforderlich, die Richtigkeit der Ausgabedaten und den Prozentsatz an tatsächlich aufgetretenen Fehlern relativ zu jenem der vorausgesagten Fehler zu messen. Mit diesen Informationen kann man feststellen, wann der Test beendet werden kann.


AUTOREN: Harry M. Sneed & Richard Seidl


Literatur

[1] DeMarco, T.: Controlling Software Projects – Management, Measurement & Estimation, Yourdon Press, New York, 1982
[2] Onoma,A./Tsai,W.-T./ Suganuma, H.: „Regression Testing in an Industrial Environment”, Comm. Of ACM, Vol. 41, Nr. 5, May 1998, S. 81
[3] Criag, R., Jaskiel, S.: Systematic Software Testing, Artech House Pub., Norwood, MA. , 2002
[4] Koomen, T., von der Alst, Leo, Broekman, B., Vroon, M.: TMap Next for result-driven Testing, UTN Publishers, Hertogenbosch, NL, 2007
[5] IEEE: ANSI/IEEE Standard 829 – Standard for Software Test Documentation,  ANSI/IEEE Standard 829-1998, Computer Society Press, New York, 1998
[6] Fewster, M./Graham, D.: Software Test Automation, Addison-Wesley, Harlow, G.B., 1999
[7] Black, R.: Pragmatic Software Testing, Wiley Publishing, Indianapolis, 2007 [8] Sneed, H./Baumgartner, M./Seidl,R.: „Der Systemtest“, Hanser Verlag, München-Wien, 2008
[9] Kann, S.H.: Metrics and Models in Software Quality Engineering, Addison-Wesley, Boston, 2001