Hochschule Furtwangen University Aktuelle Themen der Informatik Automatisierung des Tests von Java-Swing-GUIs von Dominik Jall CN 7
Agenda Einführung Was ist Swing? Warum GUIs automatisiert testen? Werkzeuge und Methoden QftestJUI von QFS Live Demo Quellen Fragen / Diskussion
Einführung Heutige Softwaresysteme werden fast immer über GUIs gesteuert. Selbst shell-basierte UNIX tools verfügen oft über bequeme X-basierte Schnittstellen z.b. traceroute, samba, cups, cdrecord GUIs sind also wichtiger Bestandteil heutige Software Dennoch werden sie nur unzureichend durch Tests abgedeckt
Einführung (2) Vielfältige Interaktionsmöglichkeiten und Grafikelemente Gute Testszenarien sind komplex und schwierig umzusetzen Der Benutzer kommt auf Ideen der Interaktion, die sich kein Entwickler alleine vorstellen kann.
Einführung (3) Zitat Douglas Adams ( Per Anhalter durch die Galaxis ): Ein weitverbreiteter Fehler, den Menschen begehen, wenn sie etwas vollkommen Narrensicheres entwickeln, ist den Einfallsreichtum vollkommener Narren zu unterschätzen.
Was ist Swing? API zur Programmierung von GUIs in Java Gehört zu den JavaFoundationClasses (JFC) Basiert auf AWT (Abstract Window Toolkit) AWT ist jedoch heavyweight Es nutzt OS-spezifische GUI-Elemente Features von Swing Plugable Look-and-Feel Aussehen und Farbthema austauschbar Lightweight, d.h. von Java gerendert u.a. automatisches double buffering
Was ist Swing? (2) Swing eignet sich sehr gut, um wirklich plattformunabhängig zu sein. Swing hat einige sehr nützliche Features wie z.b. Drag & Drop Swing ist sehr objektorientiert aufgebaut und lässt sich gut zum Entwickeln komplexer Software benutzen.
Warum GUIs automatisiert testen? Oft muss die Reaktion der GUI geprüft werden, nachdem nur minimale Veränderung gemacht wurde. Tests müssen ständig (monoton) wiederholt und die Ergebnisse verifiziert werden. Bevor die Nutzer die GUI zu Gesicht bekommen, können die gröbsten Fehler ausgemerzt werden.
Warum GUIs automatisiert testen? (2) Hauptgründe für Automatisierung: Reduktion des manuellen Aufwands Reduktion der Testkosten Breitere Testüberdeckung Reproduzierbarkeit und damit bessere Nachvollziehbarkeit von Fehlern Qualitätsverbesserung
Werkzeuge und Methoden CR-Tools (Capture & Replay) Sind für den Einsatz von Anwendungssoftware konzipiert) Können Nutzereingaben aufzeichnen und wieder abspielen Die Software naturgetreu Eignen sich auch, um Nutzerverhalten aufzuzeichnen und evtl. die GUI entsprechend zu verbessern
Werkzeuge und Methoden (2) CR-Tools zeigen folgende Features: Capture Mode Zeichnet Interaktion des Nutzers auf Jedes Event (klick auf Button, Menü etc.) Programming Mode Die einzelnen Testschritte werden als Skript gespeichert. Sie können später zu ganzen Testsuits zusammengestellt werden.
Werkzeuge und Methoden (3) Weitere Charakteristika: Checkpoints Testen, ob bestimmte Zustände wahr sind (asserts) Können z.b. benutzt werden für GUI-Elemente Datenbankinhalte Grafiken und Texte Replay Mode java.awt.robot simuliert Systemeingaben Testsuite wird abgespielt Reports werden erstellt
Werkzeuge und Methoden (4) Werkzeuge QftestJUI Grafisch und intuitiv zu bedienen (Demo) Marathon Erfasst semantisch Aktionen auf Komponenten, statt sich auf Maus- und Keyboard-Events zu konzentrieren Pounder Kann dynamisch GUIs laden und Skripte für JUnit erzeugen JfcUnit Erweiterung von JUnit. Ermöglicht Unit-Tests mit Swing
QftestJUI von QFS GUI-basiert Kommerziell Bequem zu bedienen Kann Reports in HTML generieren Registriert sämtliche Reaktionen der Anwendung auf die simulierten Aktionen (Exceptions etc.) Kostenlose Evaluierungsversion
QftestJUI von QFS (2)
Live Demo Siehe Flash-Animation
Quellen www.javaspektrum.de de.wikipedia.org www.junit.org www.qfs.de jfcunit.sourceforge.net marathonman.sourceforge.net pounder.sourceforge.net
Fragen?