/QML-ANWENDUNG IM FOKUS TOBIAS BLIEM, SIMON KUHNLE UND SEBASTIAN KERN

»Durchgeklickt – Automatisiertes GUI-Testen mit Squish«

Umfangreichere grafische Benutzeroberflächen (GUI) sind nur mit großem Aufwand manuell zu testen. Mit GUI-Test-Tools las- sen sich detaillierte Test-Szenarien definieren, automatisiert ausführen und durch Screenshots dokumentieren. Dabei kön- nen der Zustand und die Eigenschaften sämtlicher grafischer Elemente überprüft und beliebige Eingaben und Button-Klicks simuliert werden. Wir berichten über den Einsatz von Squish zum Testen einer in Qt/QML geschriebenen Anwendung in der Medizintechnik.

Grafische Benutzeroberflächen bestehen Testen mit Squish abgedeckt sein oder umgekehrt ein Szenario häufig aus mehr als nur einer Handvoll Seiten. mehrere Anforderungen abdecken. Kommen dann Verzweigungen hinzu und kann Ein solches Tool ist Squish der Firma Frog­ zwischen entfernten Seiten hin und her navi- logic. Es unterstützt die meisten großen Jedes Szenario besteht aus einer Folge von giert werden, sind die Abläufe schnell sehr GUI-Technologien (z. B. Qt, Java AWT, Win­ Testschritten (Steps) und bildet eine über- komplex. Manuelles Testen der Oberfläche dows MFC, Webkit) und lässt sich für Desk- schaubare inhaltliche Einheit. Bietet ein ist dann im Allgemeinen sehr zeitaufwendig. top-, Mobile-, Web- und Embedded-Anwen- Programm beispielsweise die Möglichkeit, dungen einsetzen. Squish hat eine eigene zwischen den Sprachen Deutsch und Eng- Hier schaffen automatisierte GUI-Test-Tools Entwicklungsumgebung (IDE), ist aber auch lisch umzuschalten, gibt es dazu folgendes beziehungsweise -Frameworks Abhilfe. Mit vollständig über die Kommandozeile steuer- Szenario: ihnen lassen sich Test-Szenarien definieren, bar. die voneinander unabhängig unter festgeleg- Scenario: Language should be switch­ ten Anfangsbedingungen ausgeführt wer- Das Grundprinzip beim Testen mit Squish able from German to English den. Einzelne Schritte, zum Beispiel das Drü- entspricht einem Konzept, das aus dem Be- Given that my program is running cken eines Buttons, müssen dabei nur einmal havior-Driven Development (BDD) bekannt Then the label of the print button is definiert und können in verschiedenen Sze- ist: Die Anforderungen an das Programm “Drucken” narien verwendet werden. Screenshots kann werden mittels sogenannter Szenarien ab- When I press the language button to switch man zu beliebigen Zeitpunkten erstellen und gebildet und getestet. Dabei kann eine An- to English ablegen. forderung auch durch mehrere Szenarien Then the label of the print button is “Print” 36 QT/QML-ANWENDUNG IM FOKUS

Diese vier Testschritte sind dabei in der Be- schirm mitverfolgen. Squish übernimmt alle Applikation verwendet oder als aktueller schreibungssprache Gherkin formuliert. Sie Nutzerinteraktionen wie das Drücken der Implementierungsstand an die UI-Designer bedient sich natürlicher Sprache sowie einiger Buttons, das Ausfüllen der Textfelder oder verschickt werden. Ebenfalls kann diese für weniger Schlüsselwörter wie Given, When das Wechseln der Seiten. die Dokumentation oder die Gebrauchstaug- oder Then, mit denen sich die Testschritte ver- lichkeitsanalyse verwendet werden, um die knüpfen lassen. Auf diese Weise können auch Testautomatisierung für die gesetzlichen Bestimmungen zu erfüllen. Personen Szenarien definieren und verstehen, Anwendung in der Medizintechnik die sich in den implementierenden Program- Anlegen eines neuen miersprachen nicht zu Hause fühlen. An Aktio- Die Tests lassen sich auch automatisch Test-Szenarios nen und Überprüfungen ist grundsätzlich alles mithilfe der Squish-Kommandozeilen-Tools möglich, was menschliche Nutzer drücken, ausführen. So können die UI-Tests in die Im Folgenden beschreiben wir beispielhaft, eingeben, lesen und sehen können. Continuous Integration (CI) eingebunden und wie ein neues Szenario mithilfe der Squish- Fehler im UI-Verhalten zur Entwicklungszeit IDE erstellt werden kann. Zu Beginn muss Mehrere inhaltlich zueinander passende frühzeitig erkannt werden. Die Testresultate in der Squish-IDE eine neue Test-Suite an- Szenarien werden üblicherweise in einer kann Squish in verschiedensten Formaten gelegt werden. Diese enthält die einzelnen sogenannten Feature-Datei zusammenge- ausleiten, zum Beispiel als HTML-Report oder Feature-Dateien und definiert deren Rand- fasst. Die Szenarien einer oder mehrerer im JUnit-Format. Regularien für medizintech- bedingungen, wie die AUT und ihr verwen- dieser Feature-Dateien bilden zusammen nische Anwendungen fordern die Rückver- detes UI-Framework, zum Beispiel Qt. Auch eine Test-Suite. Für die Implementierung folgbarkeit von Tests zu den Anforderungen die Sprache, in der die Steps implementiert der Steps unterstützt Squish mehrere Pro- an das Programm (Traceability). Um diese werden sollen, wird bei der Erstellung der grammiersprachen. Dies sind derzeit Python, Verknüpfungen herzustellen, versieht man Test-Suite festgelegt. Sobald diese angelegt JavaScript, Ruby, und TCL. Jeder Gher- jedes Szenario mit der Identifikationsnummer ist, können Testfälle erstellt werden. kin-Step entspricht einer Funktion, die in der entsprechenden Anforderung. Die Identi- einer dieser Sprachen implementiert wurde. fikationsnummern tauchen im Testreport auf Um nun das erste Szenario zu verfassen, Die für die Step-Implementierung gewählte und können dann mit der Liste der Anforde- beschreibt man das gewünschte Verhalten Sprache ist dabei unabhängig von der Spra- rungen abgeglichen werden. der Applikation in Bezug auf eine bestimmte che, in der die Anwendung geschrieben ist (z. Nutzerinteraktion mithilfe der Gherkin-Syn- B. Java). Abbildung 1 zeigt ein Beispiel für Squish bietet an, zu bestimmten Zeitpunk- tax. Als Beispielszenario dient hier das be- den Zusammenhang zwischen Feature-Da- ten der Testausführung Screenshots der zu reits kurz erwähnte Umschalten der Sprache teien und Implementierungsdatei. testenden Applikation (Application Under von Deutsch auf Englisch. Wurde das Sze- Test, kurz AUT) abzuspeichern. So lässt sich nario beschrieben, erkennt die Squish-IDE, Für den Test der Anwendung wird üblicher- eine aktuelle Sammlung von verschiede- welche Steps bereits implementiert sind und weise die komplette Test-Suite mit allen nen Zuständen der Applikation sehr leicht welche nicht. Die entsprechenden Funktio- Szenarien durchlaufen. Dabei lassen sich automatisch erstellen. Diese Sammlung nen werden in einer Implementierungsdatei die durchgeführten Aktionen direkt am Bild- kann beispielsweise für das Handbuch der zusammengefasst.

Abb. 1: Beispiel einer Test-Suite mit zwei Feature-Dateien und einer Implementierungsdatei

37 QT/QML-ANWENDUNG IM FOKUS

Um die fehlenden Step-Implementierungen Der nächste Step kann ausgewählt und auf- dem Zielgerät auszuführen. Dies ermög- hinzuzufügen, bietet Squish eine Aufnah- gezeichnet werden. Hier muss der Nutzer licht die Erweiterung Squish for Qt Embed- mefunktion an, mit der sich Mausklicks und auf den Sprachbutton in der AUT klicken. ded, die als Embedded SDK and Support weitere Interaktionen des Nutzers und die Wenn dieser Knopf gedrückt wurde, zeichnet Package für Lizenz­kunden separat zu er- benötigten Verifikationsschritte an einer lau- Squish diese Interaktion wieder als Teil die- wer­ben ist. Squish for Qt Embedded unter- fenden AUT aufzeichnen lassen. Grafische ses Steps auf und erzeugt den Python-Code stützt unter anderem Embedded , Win- Elemente werden dabei nicht anhand ihrer aus Listing 2. CE und QNX. Koordinaten auf dem Bildschirm identifiziert (Screenshot Verification), sondern anhand ih- Im letzten Testschritt des Szenarios wird ge- Auf dem Zielgerät wird eine für die Zielar- rer Eigenschaften (Property Verification). So- prüft, ob sich der Text des Buttons nun ent- chitektur kompilierte Minimalinstallation von mit lassen sich auch interne, nicht sichtbare sprechend der Sprachauswahl geändert hat. Squish eingerichtet. Diese interagiert zum Elementeigenschaften überprüfen. Dieser Step muss nicht erneut implementiert einen mit der auf dem Zielgerät laufenden werden, wenn die Implementierung des qua- AUT und kommuniziert zum anderen über das Durch das Starten der Aufnahme wird die si identischen Steps Nummer 2 angepasst Netzwerk mit einer auf dem Desktop-PC lau- Applikation ausgeführt; ein Dialogfens- wird. Mithilfe der Step-Parametrisierung fenden Squish-Instanz. Diese Squish-Instanz ter zeigt an, welcher Step des Szenarios können die beiden Schritte, die sich nur durch übernimmt wie gewohnt die Teststeuerung. gerade aufgezeichnet wird. Dabei setzt den Inhalt des Buttontextes unterscheiden, Auf dem Desktop-PC läuft weiterhin die Squish Interaktionen, wie Mausklicks oder zusammengefasst werden. Squish IDE. Tastatur­eingaben, in Code um. Um zu veri- fizieren, dass der „Print”-Knopf beim Start Damit ist das Szenario vollständig. Von jetzt Projekterfahrungen und Fazit der Applikation den Text „Drucken” anzeigt, an kann Squish diese Abfolge der Interakti- muss ein Verifikationspunkt eingeführt wer- onen und Verifikationen automatisch durch- Wir verwenden Squish mit dem oben be- den. Squish bietet dazu einen sogenann- führen, wenn der Entwickler die Test-Suite schriebenen Workflow im Rahmen der ten „Verifi­cation Point Creator” an. Mit die- ausführt. Entwicklung einer in Qt geschriebenen Me- sem kann fest­gelegt werden, in welchem Zu- dizintechnik-Anwendung auf einer Embed- stand sich die Applikation beziehungsweise Squish Embedded: ded-Plattform. Squish erweist sich dabei als ihre UI-Elemen­te zu diesem Zeitpunkt befin- Testen auf dem Zielgerät ein sehr mächtiges Tool für die Organisation den müssen. Eine Liste der aktuell sichtba- und Durchführung der GUI-Tests, das sich gut ren UI-Elemente und ihrer Eigenschaften ist Die Entwicklungsumgebung auf dem Desk- in unser CI-System integrieren lässt. Beson- dafür in Squish auswählbar. In unserem Bei- top-PC und das CI-System sind so eingerich- ders hilfreich ist es, die Tests direkt auf der spiel soll die „Text”-Eigenschaft des „Print”- tet, dass die verwendeten Bibliotheken mit Zielplattform ausführen zu können. Buttons mit dem Text „Drucken” überein denen auf dem Zielgerät möglichst überein- stimmen. stimmen. So sind die regelmäßig während Das Einrichten der Embedded-Umgebung der Entwicklung ausgeführten Tests auch ist nicht übermäßig aufwendig. Die Squish- Um zur Laufzeit der AUT an die entsprechen- aussagekräftig für das Zielgerät. Trotzdem Dokumentation haben wir als ordentlich bis den Informationen zu gelangen, überschreibt bleiben oft Unterschiede, die sich nicht gut empfunden, den Support stets als sehr Squish bestimmte Funktionen der verwende- besei­tigen lassen, etwa ein anderer Pro- kompetent und zügig. Bedienung und Er- ten UI-Bibliothek. Die entsprechende Imple- zessor mit unterschiedlicher Leistung oder scheinung der auf basierenden IDE mentierung würde ungefähr wie in Listing 1 eine andere Compiler-Version. Deswegen ist Geschmackssache, sie funktioniert aber aussehen. ist es wünschenswert, die Tests auch auf gut.

Für die Step-Implementierungen verwen- den wir Python, was den Einstieg aufgrund bereits vorhandener Kenntnisse erleichtert hat. Leider wird Python im Moment nur in der Version 2 mitgeliefert. Mit etwas ma- nueller Anpassung lässt sich jedoch auch eine neuere Python-Version verwenden; eine entsprechende Anleitung findet sich in der Listing 1: Verifikations-Step Squish-Dokumentation.

Auch wenn die Anwendung mit der Zeit schnell größer und komplexer wird, verliert man nicht den Überblick und der Aufwand für das Anlegen neuer Szenarien hält sich im Rahmen. Durch die große Anzahl an un- terstützten Frameworks, Plattformen und Sprachen sollte es nur wenige Fälle geben, in Listing 2: Interaktions-Step denen Squish nicht anwendbar ist. 38 QT/QML-ANWENDUNG IM FOKUS

Tobias Bliem [email protected] ist Software Engineer bei Method Park. Im Team Medical Devices entwickelt er Anwendungen für die Medizintechnik. Dabei unterstützt er seine Kunden bei Entwurf, Umsetzung und Test.

Simon Kuhnle [email protected] ist als Software Engineer bei Method Park tätig. Im Team Internet of Things unterstützt er die Medical-Kunden des Unternehmens bei der agilen Softwareentwicklung für Medizingeräte. Dabei konzentriert er sich speziell auf die UI-Entwicklung mit Qt/QML auf Embedded Linux.

Sebastian Kern [email protected] ist bei Method Park als Teamleiter verantwortlich für das Team Medical Devices. Er befasst sich mit den Themen Agiles Testen, Projekt- Testmanagement und den regulatorischen Anforderungen in der Medizintechnik.

www.process-insights.de

JETZT ONLINE TICKETS SICHERN

Die führende Konferenz zum 11. & 12. März 2020 Thema Prozessmanagement in Fürth in Deutschland

jährlich über 600 Experten

Spitzen-Know-how zu den Themen

Zukunft der Prozesse Stages | Best Practices Prozesse für Technologie-Trends

39