Implementierung eines Werkzeugs zur Kombination von Testfällen mit Eingabedaten Betreuer: Dipl.-Wirt.-Inf. Michael Linschulte Projektteam: Axel Balke Benedikt Krüger Christian Menke Heinrich Drobin Jahn Heymann Magnus Kortenjann Simon Waloschek
Inhalt Einleitung Realisierung Test der Implementierung Fallstudie Fazit & Ausblick Projektgruppe 4 Inhaltsverzeichnis
Projektdefinition HTML XML Testcase generator tool HTML Selenium Testdatengenerator „ETES“ HTML TC1 HTML TC2 HTML TC3 HTML TC.. HTML Testcase manuelle Bearbeitung HTML Testcase Template XML Testdaten Testcase generator tool Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Projektdefinition Html Xml <tr> <td>select</td> <td>arrival</td> <td>$XML[Arrival]</td> </tr> <td>departure</td> <td>$XML[Departure].</td> <td>click</td> <td>$XML[btn_action]</td> <td></td> <tr> <td>select</td> <td>arrival</td> <td>$XML[Arrival]</td> </tr> <td>departure</td> <td>$XML[Departure].</td> <td>click</td> <td>$XML[btn_action]</td> <td></td> <td>assertAlert</td> <td>Fehler</ td> <tr> <td>select</td> <td>arrival</td> <td>$XML[Arrival]</td> </tr> <td>departure</td> <td>$XML[Departure].</td> <td>click</td> <td>$XML[btn_action]</td> <td></td> <tr> <td>select</td> <td>arrival</td> <td>label=01.11.2010</td> </tr> <td>departure</td> <td>label=07.11.2010</td> <td>click</td> <td>btn_submit</td> <td></td> <DTable RefID="PID=3" Name="Suchmaske" ID="5"> <Actions No="0"> <Action Valid="true">btn_cancel</Action> <Action Valid="false" Error="Fehler">btn_submit</Action> <Data No="0"> <Feld Name=„Arrival“>label=01.11.2010</Feld> <Feld Name=„Departure">label=07.11.2010</Feld> </Data> <Data No="1"> <Feld Name=„Arrival“>label=01.02.2010</Feld> <Feld Name=„Departure">label=07.03.2010</Feld> ... </Actions> </DTable> Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Designentscheidungen als Framework Programmaufbau Oberfläche Thread SAX DOM QXmlSimpleReader GUI ReaderThread XMLHandler TestController TestCaseWriter Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Die GUI Pfadangaben Fortschrittsbalken Startet die Bearbeitung Beendet das Programm Eingabefeld für Errortyp Statistik Debug Ausgabe Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit ReaderThread GUI ReaderThread QXmlSimpleReader XMLHandler TestController TestCaseWriter Oberfläche Thread SAX DOM Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit ReaderThread Selbständiger Prozess Über Signals & Slots mit der GUI verbunden Qt System (ähnlich Events) Stellt Methoden bereit Debug Statistik Fortschritt Status Initialisiert XML Handler & QXmlSimpleReader Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit XML Handler GUI ReaderThread QXmlSimpleReader XMLHandler TestController TestCaseWriter Oberfläche Thread SAX DOM Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit XML Handler Eventhandler für QXmlSimpleReader Liest XML-Datei elementweise ein Baut XML-Teilbaum auf Beim Ende eines Actions-Block Überprüfen des erstellten Teilbaums Übergabe an TestController Löschen des Blocks Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit TestController GUI ReaderThread QXmlSimpleReader XMLHandler TestController TestCaseWriter Oberfläche Thread SAX DOM Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Klasse TestController Aufgaben des TestControllers HTML Template als QDomDocument einlesen Teilbäume vom XML Handler für die Klasse TestCase kombinieren Wichtige Funktionen des TestControllers setTemplate liest das HTML Template ein setActions erstellt Testfälle Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Klasse TestController XML-Reader TestController TestCase 1 TestCase 2 TestCase 3 Funktionsweise: <?xml version='1.0' encoding='UTF-8'?> <Testcase No="0"> <Action>action 1</Action> <Data No="0"> <Feld Name="Key1">Value1</Feld> <Feld Name="Key2">Value2</Feld> </Data> </Testcase> <?xml version='1.0' encoding='UTF-8'?> <Testcase No="0"> <Action>action 1</Action> <Data No=„1"> … </Data> </Testcase> <DTable RefID="PID=3" Name="Suchmaske" ID="5"> <Actions No="0"> <Action Valid="true">action1</Action> <Action Valid="false" Error="Fehler">action2</Action> <Data No="0"> <Feld Name="Key1">Value1</Feld> <Feld Name="Key2">Value2</Feld> </Data> <Data No="1"> ... </Actions> </DTable> <?xml version='1.0' encoding='UTF-8'?> <Testcase No="0"> <Action Valid="false" Error="Fehler">action2</Action> <Data No="0"> <Feld Name="Key1">Value1</Feld> <Feld Name="Key2">Value2</Feld> </Data></Testcase> … Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Testcasewriter GUI ReaderThread QXmlSimpleReader XMLHandler TestController TestCaseWriter Oberfläche Thread SAX DOM Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Klasse Testcasewriter Aufgabe des Testcasewriters XML Daten in HTML Template einfügen HTML Testfälle im Ausgangsordner abspeichern Aufbau des Testcasewriters Konstruktor erzeugt neuen Testfall Zwei private Unterfunktionen replaceData (QDomNodeList pList) getXMLData (QString pFieldName) Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Klasse Testcasewriter Für alle Elemente in der Liste Liste erstellen Liste durchlaufen Enthält Element Text mit $XML[…] Enthält Element Kinder $XML Feld Ersetzen ja nein Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Testumgebung Unittests: Test von einzelnen Methoden im Programmcode → White Box Test, hier nicht realisierbar Anwendung von Black Box Test Code-Coverage: Messung des Abdeckungsgrades des Codes → Kein wirklicher Test, sondern nur Maß für die Güte des Tests Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Code Coverage Überwachung der Ausführung pro Zeile (Anweisungsüberdeckung; C0 Test) Finden von nicht ausgeführtem Code 100%ige Überdeckung bedeutet nicht Fehlerfreiheit Fehlende Überdeckung bedeutet unzureichende Tests Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Code Coverage 14 Testfälle wurden aufgestellt und durchgeführt Methode: Überdeckungsgrad: main.cpp 100.00% mainwindow.cpp 94,44% readerthread.cpp 88,64% testcasewriter.cpp 93,59% testcontroller.cpp 98,11% xmlhandler.cpp 98,33% Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Code Coverage Die Testfälle wurden soweit modifiziert, dass Errors auftreten und somit die Abfangmethoden ebenfalls durchgeführt werden müssen Beispiel eines nicht ausgeführten Codefragments: #####: 76:void ReaderThread::statusTxt(QString statusTxt) -: 77:{ #####: 78: emit writeStatus(statusTxt); #####: 79:} Inkorrekte Pfadangaben werden beim Template nicht abgefangen. Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Fallstudie in Iselta Nutzen des Tools beim Testen von Webseiten mittels „Selenium“ Alle Testfälle werden im optimalen Fall positiv abgeschlossen Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Fallstudie - Szenario 1 gültige Eingaben Zeichenketten Zeichenketten nach speziellem Schema Zahlen Buchungsdaten – Formular in Iselta Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Fallstudie - Szenario 1 Demonstration Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Fallstudie - Szenario 1 fehlerhafte Eingabe nicht aufgetretene Fehlermeldung Ergebnis des ersten Szenarios in Selenium Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Fallstudie - Szenario 1 Alle negativ abgeschlossen Tests haben die gleiche Ursache: Zeichenketten, welche nur Sonderzeichen beinhalten werden als valide Eigennamen von Iselta akzeptiert Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Fallstudie - Szenario 2 gültige Eingaben Zeichenketten Ganze Zahlen Kommazahlen Hoteldaten – Formular in Iselta Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Fallstudie - Szenario 2 fehlerhafte Eingabe nicht aufgetretene Fehlermeldung Hoteldaten – Formular in Iselta Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Fallstudie - Szenario 2 Alle negativ abgeschlossen Tests haben wieder die gleiche Ursache: Zeichenketten, welche nur Sonderzeichen beinhalten werden als valide Bezeichnungen (bzw. Eigennamen) von Iselta akzeptiert Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Iselta prüft bei beiden getesteten Szenarien Zeichenketten nicht auf semantische Korrektheit Das Tool kann Testfälle generieren, welche Fehler entdecken und lokalisieren können Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Einleitung – Realisierung – Test – Fallstudie – Fazit Fazit & Ausblick Tool erleichtert das Erstellen von Testfällen Problem: Nur für eine Formularseite Lösung: Erweiterte Platzhalter z.B. $XML.<Nr>[<Variable>] Projektgruppe 4 Einleitung – Realisierung – Test – Fallstudie – Fazit
Vielen Dank für Ihre Aufmerksamkeit! Projektgruppe 4 Ende