Vorgetragen von Anton Afanasjew Diplomarbeit Konzeption und Entwicklung einer Testfactory-Komponente für die automatisierte Ausführung von Testverfahren Vorgetragen von Anton Afanasjew
PASS Consulting Group Internationales Beratungs- und Softwarehaus Aufgabengebiet: IT-Beratung, Softwareentwicklung und Projektmanagement Branchen: Banken, Versicherungen, Touristik, Industrie, Telekommunikation und IT Mitarbeiter: ca. 550 Diplomandenbetreuung in der „Research & Development“-Abteilung
Entwicklungsinfrastruktur Virtual Software Factory (VSF) Komponentenbasierte Entwicklungsinfrastruktur Unterstützt modellgetriebene Softwareentwicklung Entwicklungsframeworks als Teile der VSF Ultra-Thin-Client-Framework für die Entwicklung von Web-Anwendungen
Situation Entwicklung von Webanwendungen mit Hilfe der MDSD-Ansätze Modellierung der Webanwendungen Generierung des Quellcodes mit dem UTC-Framework Implementierung von Activities, den manuellen Codeteilen Testen der entwickelten Anwendungen Funktionale Tests Regressionstests
Problem Funktionale Tests Browserbasierte Oberflächentests Mühsame Testerstellung Noch mühsamere Testausführung Viel Routinearbeit für Testabteilung Zeitintensiv und fehleranfällig
Lösung Testfactory-Komponente für VSF/UTC Teilweise Ableitung der Testfälle, Testdaten und Zusicherungen aus den Modellen der Webanwendung Erstellung der Testskripte für das zugrundeliegende Testtool Selenium Steuerung des Testtools beim automatisierten Ausführen der Tests Analyse der Testergebnisse
Aufgaben der Testfactory Testerstellung Unterstützung der Tester bei der Testerstellung. Testfallsuche Vollständige Erstellung der Testskripte auf Basis von Testereinstellungen und der Analyse der Anwendungsmodelle Testausführung Steuerung des Testtools Erweiterung des Testtools Testauswertung Vergleich zweier Programmstände Testdatenablage Verwaltung von Tests Verwaltung von Testergebnissen Beziehungen zw. Tests und Testergebnissen
Testerstellung (1) - Pfadsuche Darstellung der Prozesse und Dialoge der Anwendung unter Test als gerichteter Graph Erweiterung des Graphen um dynamische Elemente Pfadsuche auf Basis der graphentheoretischen Tiefensuche Berücksichtigung der Überdeckungswünsche des Testers (Dialog, Zweig, Pfadüberdeckung) Möglichkeit des Ausschlusses einzelner Dialoge/Prozesse aus der Suche Generierung der Pfadmodelle aus den Modellen der Anwendung
Beispiel 2 Prozesse Knoten entsprechen den Dialogen der Anwendung Startknoten für jeden Prozess Ein Startprozess Knotenübergänge innerhalb von Prozessen Prozesswechsel Zielknoten bei Prozesswechseln dynamisch berechnet Pfadsuche liefert folgende Knotenfolgen: (1-2), (1-3-4-5-4), (1-3-4-5-3-5-4), (1-4-5-4), (1-4-5-1-2), (1-4-5-1-3-5-3), (1-4-5-1-3-5-4), (1-4-5-4)
Pfadsuche: Klassendiagramm ProcessPool: Gesamtgraph ProcessGraph: Teilgraph für einen Prozess Node: Graphknoten Edge: statische (prozessinterne) Kante DynamicEdge: Prozesswechselkante EgressEdge: Knotenübergangsbeschreibung Path: Pfad als Folge von Knotenübergängen PathList: Liste aller Pfade
Testerstellung (2) - Testdaten Definition von Wertemengen für Eingabefelder Testdaten sind Eingabewerte, aber auch Zeilenauswahl beim Klick auf einen Detail-Eintrag in einer Master-Tabelle Zuweisung der Wertemengen zu den Dialogfeldern Kombination von Wertemengen unterschiedlicher Felder für die Überdeckung aller Eingabemöglichkeiten in einem bestimmten Kontext Generierung der Testdatensatzmodelle
Beispiel: Kombination von Wertemengen Datensätze Joins
Testerstellung (3) - Zusicherungen Zusicherung von Feldinhalten Zusicherung = Vergleich der Ist/Soll-Werte Vergleichsausdrücke mit Feldreferenzen Angabe der Zusicherungsart Angabe des Auslösers Ergebnis => Zusicherungsmodell
Testerstellung (4) - Testskripte Pfade, Daten, Zusicherungen als Eingabemodelle Definition manueller Testblöcke für individuelles Testverhalten Generierung der Skripte für das Testtool
Testausführung(1) - Testtoolerweiterung Erweiterung von Selenium Implementierung der Fehlerkategorisierung Implementierung von Vergleichsfunktionen Auflösung von Vergleichsausdrücken Definition von Selenium-Ausnahmen
Ausnahmenhierarchie
Testausführung(2) – Produktion von Testergebnissen Implementierung von vorzeitig abgebrochenen Tests Behandlung von gescheiterten Tests (Gescheitert im Sinne eines unerwarteten Fehlers oder Nichterfüllung einer kritischen Zusicherung) Kommunikation der Ergebnisse an den Auswertungsserver in Form von XML-Dokumenten
Testauswertung Serveranwendung für den Empfang der Testergebnisse vom Testtool Vergleich der Testergebnisse unter Berücksichtigung der Gewichtung Möglichkeit der Gewichtung von Fehlerkategorien Statistik über die Änderung der Fehlerquote bei zwei Applikationsständen
Testdatenablage Versionisierung und Speicherung der Pfad-, Daten, Zusicherungsmodelle Testskripte als Ergebnisse der Kombination dieser Modelle Liste der Testergebnisse pro Kombination Beispielimplementierung auf Basis vom Dateisystem
Weiterentwicklung (1) – Erweiterung der Testerstellung Pfadsuche Manuelle Definition von Pfaden Finden der Teilpfade Schleifendurchläufe Testdatengenerierung Generierung der Grenzwerte und Zufallswerte Aufteilung der Wertebereiche in Äquivalenzklassen Definition von Zusicherungen Einbinden neuer Vergleichsfunktionen und Fehlerarten Sprache für einfache Erzeugung der Vergleichsausdrücke Skriptgenerierung Eingabe der Reihenfolge für Skriptkommandos Abstraktion vom Testtool und Unterstützung anderer, ähnlicher Tools
Weiterentwicklung (2) – Sonstiges Anhängen von Modulen für die Testauswertung z.B. grafische Darstellung der Testergebnisse Optimierung der grafischen Benutzeroberfläche Integration der Testdatenablage in die Testfactory
Fazit Die Testfactory… …liegt in der Version 1.0 vor …ist in die Virtual Software Factory als Komponente integriert …reduziert den Aufwand beim Erstellen, Ausführen und Auswerten von funktionalen Tests …wird gegen zwei Kundenprojekte getestet (ein Flugticketbestellsystem und eine Memoverwaltunganwendung) …wird in der R&D-Abteilung des Unternehmens weiterentwickelt
Danke für die Aufmerksamkeit! Ende Danke für die Aufmerksamkeit!
Fragen ???