Jubeln mit Jubula - GUIdancer

Сomentários

Transcrição

Jubeln mit Jubula - GUIdancer
Plus CD!
Paralleles Hosting Ihrer Website
in zwei Hightech-Rechenzentren
an verschiedenen Orten!
✓ Superschnell:
✓ Zukunftssicher:
210 GBit/s Anbindung!
1.000 Mitarbeiter!
1&1 DUAL HOSTING
VIELE PAKETE JETZT SCHON AB
0,–
€/Monat*
Dual Hosting gibt´s nur von 1&1! Kein anderer bietet Ihnen georedundante Sicherheit und maximale Performance für Ihre Projekte.
1&1 DUAL
PERFECT
� 6 Domains aus .de, .com, .net, .org, .at, .eu
� 5 GB Webspace
� UNLIMITED Traffic
� UNLIMITED Click & Build Apps uvm.
.DE, .EU, .COM, .NET, .ORG, .AT
OHNE EINRICHTUNGSGEBÜHR!
Weitere leistungsstarke
1&1 Dual Hosting-Pakete
und tolle Sparangebote
unter www.1und1.info
0 26 02 / 96 91
0800 / 100 668
ab
0,–
€
In den ersten 3 Monaten,
danach 9,99 €/Monat.*
0,
29*
€/Monat
im ersten Jahr
Ausgabe 08/11
Deutschland € 9,80
Österreich € 10,80, Schweiz sFr 19,20
www.eclipse-magazin.de
Eclipse & Java 7 • OSGi und REST • Eclipse Gyrex • Schwerpunkt Testen • Von Swing nach RCP/RAP
&
✓ Maximal sicher:
6.11
6.2011
DOPPELT SICHER!
DOPPELT GUT...
>> Interpreter und Debugger für DSLs >> 93
eclipse magazin
1&1 DUAL HOSTING
>> BONUSVIDEO AUF CD
Was ist neu bei der
Eclipse Rich Client
Platform 4.0?
von Kai Tödter
Java 7 all inclusive!
Fünf Gratisartikel
zum Thema
Java 7
OSGi und REST
>> 22
CLIPSE
E
N
I
T
R
UPPO
JAVA-7-S
Architekturentwurf mit OSGi
Declarative Services und REST
Eclipse Gyrex
>> 39
Platform as a Service für die eigene Cloud
Von Swing nach RCP/RAP
>> 31
Alle Infos im
Heft!
Portierung einer Swing-Anwendung nach Eclipse RCP/RAP
SCHWERPUNKT TESTEN
www.1und1.info
* 1&1 Dual Perfect 3 Monate für 0,– €/Monat, danach 9,99 €/Monat. Einrichtungsgebühr 9,60 €. Domains im ersten Jahr .de, .eu 0,29 €/Monat, .com, .net, .org, .at 0,99 €/Monat, danach .de
0,49 €/Monat, .eu , .com, .net, .org 1,49 €/Monat, .at 1,99 €/Monat. Einrichtungsgebühr entfällt. 12 Monate Mindestvertragslaufzeit. Preise inkl. MwSt.
• GUI-Tests für Web- und AJAX-Applikationen >> 67
• Automatisierung modellbasierter Testszenarien
• Clever Testen mit Eclipse Jubula >> 58
>> 76
Testen
Jubula
Automatisierte GUI-Tests mit Intelligenz, Durchhaltevermögen und einem
leichten Touch Paranoia
Clever Testen:
Jubeln mit Jubula
„Testdesign macht Spaß, Testausführung nicht“: O-Ton aus dem Birds-Of-A-Feather-(BOF-)Gespräch auf der EclipseCon 2011 in Santa Clara. Obwohl über vieles lebhaft diskutiert wurde,
war diese Aussage eine der wenigen, die allgemeine Zustimmung fand. Menschen sind eben
kreativ und können sich jede Menge spannender Fälle (oder auch Fallen) ausdenken, um eine
Anwendung auf die Probe zu stellen. Bei der ersten Ausführung ist alles noch mitreißend, aber
das Interesse lässt schnell nach. Doch dafür gibt es die Testautomatisierung. Sie soll uns diese
langweiligen Wiederholungen ersparen. Aber muss es dann stimmen, dass die stumpfe Arbeit der
Ausführung durch die Schufterei der Pflege ersetzt wird? Nicht mit Jubula.
von Alexandra Schladebeck
Durch die Verbreitung von JUnit ist „Testen“ längst
kein Unwort mehr. Wir müssen allerdings zugeben,
dass unsere JUnit-Tests uns nicht vor holprigen Workflows, defekten Anwendungsfällen beziehungsweise
Geschäftslogik oder peinlichen UI-Fehlern durch das
Zusammenspiel verschiedener Plug-ins retten können.
Der Anwendungsbereich von Eclipse steigt und damit
auch die Komplexität der Anwendungen, die darauf basieren. Jede Anwendung, die für Enduser vorgesehen ist,
58
eclipse magazin
6.11
muss gründlich aus dieser Perspektive getestet werden.
Je früher sich eine Anwendung gegenüber ihren Akzeptanzkriterien rechtfertigen muss, desto besser. Wenn
wir solche Tests automatisieren, bekommen wir auch
die Möglichkeit, nach Änderungen den Qualitätsstatus
mit Regressionstests erneut zu überprüfen.
Das gibt es doch schon!
Jubula ist nicht das erste Tool, das sich mit dem Thema
„GUI-Tests“ beziehungsweise „Tests durch die GUI“
auseinandersetzt. Ohne hier auf die technischen und die
www.eclipse-magazin.de
Testen
Jubula
häufig philosophischen Unterschiede zwischen solchen
Tools einzugehen, kann man zwei Merkmale erwähnen,
die Jubulas Ansatz und Nutzen doch hervorheben. Der
erste Unterschied ist die Abwesenheit von Programmcode in den Tests. Jubula richtet sich in erster Linie
an Teams, die eine Testautomatisierung aus fachlicher
Sicht wünschen, um ihre Anwendungen als Blackbox zu
behandeln. Allerdings wird diese fachliche Sicht nicht
durch das Aufzeichnen manueller Aktionen in der Anwendung automatisiert. Die verschiedenen Kritikpunkte
für diesen Capture-Replay-Ansatz lassen sich in diesen
wenigen Seiten nicht auflisten, sondern man sollte sie
lieber in einem unserer Blogeinträge nachlesen [1]. Kurz
gefasst: Statt aufzuzeichnen arbeitet Jubula mit einem
Satz vorgefertigter Aktionen, die sich hierarchisch zu
flexiblen, aber auch lesbaren automatischen Tests per
Drag and Drop kombinieren lassen.
Ein Vorteil dieses Ansatzes liegt darin, dass Tests
sehr früh automatisiert werden können (sogar noch
vor Beginn der Featureentwicklung). Der Verzicht auf
Aufnehmen bedeutet, dass man nicht auf eine lauffähige Version der Anwendung warten muss. Außerdem
werden Tests eher geplant und strukturiert entworfen,
wenn sie händisch erstellt statt aufgenommen werden.
Früher oder später müssen Tests intelligent, wartbar
und robust sein (hierzu später mehr). Den Weg dahin
kann man sich nicht sparen, sehr wohl aber versüßen:
Mit dem Jubula-Ansatz spezifiziert man bereits von Anfang an Tests, die einen grundlegenden Wiederverwendungsgedanken besitzen. Das reduziert den folgenden
Pflegeaufwand deutlich.
Herunterladen, konfigurieren, austoben
Entwickler von Swing-, SWT/RCP- und HTML-Anwendungen, denen dieser Ansatz zusagt, können sich Jubula
von der Eclipse-Jubula-Seite [2] herunterladen. Jubula
gibt es dort als Teil des „Eclipse for Testers“ Package,
über eine Updatesite sowie als eigenständige Anwendung. Letzteres ist für den HTML-Bereich zu empfehlen, denn die Ausführungskomponente für Webtests
ist Selenium, das sich aus Lizenzgründen nicht in das
Eclipse Package einbinden lässt. Über den MarketPlace
[3] bekommt man die notwendigen Datenbanktreiber,
um auch mit der Plug-in-Version eine Multi-User-Datenbank wie Oracle statt der mitgelieferten EmbeddedH2-Datenbank verwenden zu können.
Tabula rasa
Nach erfolgreicher Installation sieht die Anwendung mit
ihrer leeren Perspektive noch recht karg aus. Die Schritte
zum ersten laufenden Test sind glücklicherweise wenige
und einfach. Es muss zunächst ein Projekt angelegt und
(falls schon vorhanden) eine zu testende Anwendung
(AUT) konfiguriert werden (Abb. 1). Das Schreiben von
Tests beginnt mit der Selektion der gewünschten Aktionen aus der Bibliothek (z. B. zweimal replace text und
einmal single left click, um einen Logindialog zu bedienen). Die frisch verwendeten Aktionen müssen für ih-
www.eclipse-magazin.de
Abb. 1:
AUT-Konfiguration
ren aktuellen Verwendungszweck dann konkretisiert
werden, etwa um Daten oder Platzhalter für Daten,
sprechende Namen für Lesbarkeit und eine symbolische
Bezeichnung für das Objekt (die Komponente in der
AUT), das zur Laufzeit bedient werden soll (Abb. 2). Ein
so geschriebener Test wird ausführbar gemacht, indem
alle fehlenden Daten noch eingetragen werden (gerne aus
wiederverwendbaren Datentabellen) und das geheimnisvolle Object Mapping durchgeführt wird. Dieser letzte
Schritt ist die Magie der Automatisierung und verbindet
einen im Test deklarierten symbolischen Namen mit einem echten Objekt aus der Anwendung (Abb. 3).
Nicht nur schreiben, entwerfen
Die Details zur Testfallerstellung sind absichtlich etwas schnell überflogen worden. Schließlich wollen wir
Namensgebung in Jubula
Swing: In Swing/AWT wird, falls vorhanden, der Name der java.awt.
Component benutzt. Über die Methode setName() unterstützt bereits das
API die Vergabe eindeutiger, nach außen hin unsichtbarer Komponentennamen.
SWT/RCP: SWT/RCP Controls besitzen ein solches API nicht. Die Klasse
Widget verfügt jedoch über die Methode setData (String key, Object value);. Dadurch kann jeder SWT-Komponente (einschließlich Container wie
Shells oder Composites) eine beliebige Liste von Key-Value-Paaren zugeordnet werden. Der in Jubula zu verwendende Key, um eine Komponente
mit einem eindeutigen Namen zu versehen, lautet TEST_COMP_NAME.
Der dazu zugeordnete Wert muss ein eindeutiger Name für die Komponente sein, beispielsweise setData("TEST_COMP_NAME",
"myUniqueCompName");.
HTML: Zur Identifizierung technischer Komponenten auf HTML-Webseiten
wird standardmäßig das ID-Attribut verwendet. Da dieses Attribut häufig
für frameworkinterne Zwecke eingesetzt wird und die ID-Charakteristik
durch ein dynamisches Verhalten verliert, kann man zusätzlich pro Anwendung ein Attribut definieren, dessen Wert als eindeutiger Name für
die technische Komponente herangezogen wird. Das Attribut muss ebenfalls in der AUT-Konfiguration hinterlegt werden.
eclipse magazin
6.11
59
Testen
Jubula
Abb. 2: Überblick über die Testspezifikation
spannende, flexible und clevere Tests entwerfen, nicht
nur Aktionen linear nacheinander aufreihen. Für die
Einarbeitung in die allgemeine Arbeitsweise gibt es im
Jubula-Help-Menü Cheat Sheets. Die grundsätzlichen
Schritte sind mit ihrer Hilfe schnell gemeistert, und
schon bald kommen wir zum interessanteren Thema
des Testdesigns, besonders in Hinsicht auf Wartbarkeit
und Robustheit. Denn eines muss immer klar sein, ein
automatisierter Test hat
nur dann Wert, wenn
er mit möglichst wenig
Aufwand möglichst viel
aussagt und dabei möglichst lange lebt. Wer
seine
automatischen
Tests nicht wartbar und
robust erstellt, wird generell weniger Informationen aus den Testergebnissen
ziehen können und wird sie zudem früher oder später
ganz verwerfen müssen.
es ankommen, und diese müssen gegebenenfalls auch im
Test abgefragt oder beachtet werden. Jubula legt deshalb
einen besonderen Fokus auf Design, wie die folgenden
kleinen Beispiele zeigen:
•Synchronisation: Auch wenn eine Anwendung schnell
reagiert (Fenster erscheinen und verschwinden „sofort“
und sind beim Öffnen immer komplett aufgebaut), kann
es trotzdem sein, dass ein
Roboter kleine Zeitunterschiede bemerkt und
bemängelt. Wegen solcher Kleinigkeiten darf
aber kein Test fehlschlagen. Dafür gibt es in Jubula eine Reihe an Wait
for…-Aktionen, die ein
dynamisches Warten (über eine Maximalzeit abgebildet) auf bestimmte Ereignisse erlauben. Neben der Tatsache, dass das eine allgemeine Best Practice darstellt,
ist eine gut ausgedachte Synchronisation unverzichtbar,
sobald man Tests von der Kommandozeile startet bzw.
zu testende Anwendungen wechselt oder neu startet.
•Errare humanum est: Nicht nur wegen Synchronisationsproblemen können Tests fehlschlagen. In der
Tat wollen wir, dass ein Test dann fehlschlägt, wenn
etwas Unerwartetes passiert. Allerdings ist es nicht
wünschenswert, deswegen einen ganzen Testausfall
Einem automatischen Test den
Hauch von Intelligenz zu verleihen, ist eine Kunst für sich.
Clevere Tests schreiben
Einem automatischen Test den notwendigen Hauch von
Intelligenz zu verleihen, ist eine Kunst für sich. Ein Tester
muss sich hervorragend mit seiner AUT auskennen, muss
lernen, wie sie in unterschiedlichen Situationen funktioniert, muss kreativ vorgehen und muss auch eine gesunde
Paranoia zeigen können. Auf die kleinsten Details kann
60
eclipse magazin
6.11
www.eclipse-magazin.de
Jubula
zu produzieren. Anwendungsfälle, die von der Abweichung nicht betroffen sind, sollten auch ihre Chance
zum Laufen bekommen. Es verbergen sich in ihnen
unter Umständen noch schlimmere Fehler, die durch
einen Totalausfall maskiert würden. In Jubula wird
das Konzept von Event Handlers verwendet, um Fehler abzufangen, Aktionen im Fehlerfall durchzuführen
(z. B. die AUT neu starten) und Tests an konfigurierbaren Stellen (z. B. beim nächsten Use Case) weiterlaufen
zu lassen. Auch hierzu gehören Best Practices wie zum
Beispiel Unabhängigkeit zwischen Anwendungsfällen
und intelligente Set-up-Module, die eine Anwendung
in den richtigen Zustand für den nächsten Use Case
bringen können (z. B. in Abhängigkeit davon, ob ein
Logindialog oder eine schon laufende Anwendung
vorhanden ist (Abb. 4)).
Pflegeleichte Tests schreiben
Kluge Designs helfen einem allerdings nicht, wenn die daraus resultierenden Tests schwer zu warten sind. Hier folgt
Jubula dem gleichen Grundsatz wie beim Entwickeln: referenzieren statt kopieren (in der Tat ist Copy and Paste
von Tests in Jubula nicht vorhanden). Ob ein fachlicher
Testfall mehrmals gebraucht wird oder ob man merkt,
dass ein Satz an abstrakten Aktionen häufig vorkommt,
gilt das Prinzip „einmal schreiben und dann wiederverwenden“. Hierfür sollten Module möglichst flexibel geschrieben werden:
•Flexible Module bauen: Durch die Möglichkeit, sowohl Daten als auch die zu bedienende Komponente
bei jeder konkreten Verwendungsstelle eines Testfalls
neu festzulegen, lassen sich flexible Module
bilden. Die einzelne Spezifikationsstelle bietet
dann bei Änderungen (und sie werden sicher
kommen) einen zentralen Ort, um alle Tests
nachzuziehen (Abb. 5).
•Refactor!: Unterschiedliche Denk- und Arbeitsweisen werden in diesem Rahmen auch
unterstützt. Manche Tester können von vornherein erkennen, welche Aktionen als wiederverwendbare Module zusammengehören.
Andere bemerken Ähnlichkeiten und daher
den Bedarf an einem Modul erst, wenn die
gleichen Aktionen zum zweiten Mal gebraucht
werden. Über die Refactor-Funktionen lassen
sich Testfälle aus schon bestehenden Aktionssequenzen erstellen. Ein neues Feature in Indigo SR1 ermöglicht eine geführte Ersetzung von
ausgewählten Testfällen, zum Beispiel mit neu
erstellten zentralen Modulen.
•Design for Testability: Robustheit für automatisierte Tests lässt sich nicht nur anhand
der Teststruktur gewährleisten, sondern kann
auch in die AUT hineinprogrammiert werden.
Das beste Beispiel hierfür ist das Benennen von
Komponenten in der AUT. Trotz der Intelligenz
der Objekterkennung kann es vorkommen,
www.eclipse-magazin.de
Testen
Abb. 3:
Object
Mapping
dass Änderungen zu so genannten „Component Not
Found“-Fehlern führen. Das und das anschließend notwendige Neu-Mappen lassen sich verhindern, wenn die
Komponenten eindeutige Namen besitzen. Jubula bietet
hierfür einen Mechanismus (Kasten: „Namensgebung in
Jubula“).
Eindeutige IDs sind zwar der meist gehörte Wunsch für
Testbarkeit, aber sie sind keinesfalls der einzige Weg,
um die Testbarkeit zu erhöhen. Die sinnvolle Benennung von Dialog- und Nachrichtenfenster (damit man
anhand des Titels z. B. synchronisieren kann) sowie die
Tastaturbedienbarkeit einer Anwendung können ebenfalls zu einer besser testbaren AUT führen. Nebenbei
bemerkt führen solche Überlegungen auch zu einer besseren Bedienbarkeit. Auch für die GEF-Unterstützung
in Jubula lassen sich entsprechende Namen für Figure
Abb. 4: Fehlerbehandlung und
Testfortsetzung
eclipse magazin
6.11
61
Testen
Jubula
Abb. 5:
Flexibler
Baustein
zum
Schließen
jeglicher
Dialoge
Das Jubula-Team setzt diese Möglichkeit ein, um den
aktuellen Stand der Tests jede Nacht aus der Versionskontrolle in eine Testdatenbank zu importieren.
Über diese beiden Clients lässt sich Jubula problemlos in Build-Prozesse einbinden. Der firmeninterne Build
des Jubula-Teams verwendet Hudson, um den aktuellen Stand der Software jede Nacht zu bauen, auf verschiedene Testrechner zu installieren und konfigurieren,
Daten und Umgebungen bereitzustellen beziehungsweise
aufzuräumen und die nächtlichen Regressionstests anzustoßen. Morgens können die Ergebnisse direkt in Jubula
oder anhand generierter HTML-Berichte ausgewertet
und analysiert werden.
Ab zum Test
Paths unter Verwendung von org.eclipse.core.runtime.
adapter im Programmcode vergeben.
Build me up, Buttercup
Schlaue Tests zu schreiben ist noch nicht alles. Wenn sie
nicht dafür eingesetzt werden, um jeden neuen Build zu
überprüfen, können sie auch keine vernünftigen Aussagen treffen. Damit automatische Tests erfolgreich in die
Entwicklung integriert werden, müssen sie vom Prozess
her eine angemessene Wichtigkeit erhalten. Von den Tests
aufgedeckte Fehler müssen zum Beispiel mit einer hohen
Priorität behoben werden. So genießt man am besten die
Vorteile des frühen Findens, und die Tests laufen schnell
wieder erfolgreich durch. Das Einbinden von Jubula-Tests
in den automatischen Build-and-Test-Prozess erfolgt über
zwei kommandozeilenbasierte Anwendungen. Der Test
Executor erlaubt das Ausführen einer Test Suite, ohne den
grafischen Client starten zu müssen:
C:/Programme/jubula/jubula/testexec.exe
–data C:/Benutzer/Alex/jubulaWorkspace
–project Samples –version 5.1
–autconfig localhost_system_jre
–dbscheme "Default Embedded (H2)" –dbuser sa –dbpw ""
–server localhost –port 60000
–language en_US
–testsuite 1.1_SIMPLE_ADDER_TEST_WITH_TEST_STEPS
–datadir C:/Benutzer/Alex/Jubula
–resultdir C:/Benutzer/Alex/Jubula
Der Test Executor verbindet sich zum laufenden Agent
(Serverprozess), um die AUT zu starten und die Tests
auszuführen. Über die Integrated Test Environment
(ITE) lassen sich die Ergebnisse im Nachhinein analysieren, inklusive Screenshots bei Fehlern. Ein zweites
Kommandozeilentool, das DBTool, ermöglicht das
Importieren und Exportieren von Tests in und aus der
Datenbank, sowie das Löschen vorhandener Projekte.
62
eclipse magazin
6.11
Wenn wir uns die Langeweile der Testausführung sparen wollen, reicht es nicht aus, lieblos Tests herunter
zu automatisieren. Ein gut automatisierter Test kann
einem Projekt sein ganzes Leben hindurch begleitend
und helfend zur Seite stehen. Testdesign ist eine kreative Aufgabe und sollte von Teammitgliedern durchgeführt werden, die eine Anwendung von ihren besten und
schlechtesten Seiten kennen. Mit Jubula ist das möglich.
Der Fokus auf Zugänglichkeit für fachliche Tester bedeutet aber nicht, dass die Grundsätze der Robustheit
und Wartbarkeit für die Tests ignoriert werden, ganz im
Gegenteil. Jubula bietet verschiedene Mechanismen, um
clevere und langlebige Tests zu schreiben und sie in den
Entwicklungsprozess zu integrieren. Hilfe bei den Feinheiten des Testdesigns und der Festlegung eines geeigneten Testprozesses gibt es beim Jubula- beziehungsweise
GUIdancer-Team.
Nach ihrem Studium der Sprachwissenschaft ist Alexandra Schladebeck (geb. Imrie) seit 2005 bei der BREDEX GmbH in Braunschweig beschäftigt. In ihrer Rolle als Trainerin und Beraterin hilft
sie Kunden bei der Entwicklung von Testprozessen und automatisierten Tests. Sie ist auch Teil des Eclipse-Jubula-Entwicklungsteams
bei BREDEX, wo sie die Kunden- und Benutzerperspektive vertritt. Als Committer für das Jubula-Projekt beschäftigt sie sich mit der Dokumentation und
hilft bei der User-Story-Entwicklung und Qualitätssicherung. Besonders interessiert sich Alexandra Schladebeck neben Benutzerfreundlichkeit und Ergonomie auch für Agilität in Test- und Entwicklungsprozessen.
Links & Literatur
[1] http://bxapps.bredex.de/blog/?p=703
[2] http://www.eclipse.org/jubula/
[3] http://marketplace.eclipse.org/content/eclipse-jubula-database-drivers
www.eclipse-magazin.de
n! in.de
e
r
e
ni agaz
n
o
ab psem
t
z
t
Je w.ecli
ww
ECLIPSE
3
Jetzt 3 Top-Vorteile sichern!
1
Alle Printausgaben frei Haus erhalten
Intellibook-ID kostenlos anfordern
(www.intellibook.de)
2
Mit der Intellibook-ID kostenlos in der App
anmelden und Zugriff auf alle Ausgaben des
Eclipse Magazins erhalten (+ Bonusinhalte!)
Zugriff auf das
komplette PDF-Archiv
mit der Intellibook-ID
3
www.eclipsemagazin.de