Einführung und Evaluierung einer Cross-Device
Transcription
Einführung und Evaluierung einer Cross-Device
Leopold-Franzens-Universität Innsbruck Institut für Informatik Quality Engineering Einführung und Evaluierung einer Cross-Device-Browser-Testing Plattform Bachelor-Arbeit David Fasching betreut von Dipl.-Ing. Mag. Dr. Michael Felderer Innsbruck, 11. Oktober 2015 Zusammenfassung Das aktuelle Ökosystem an mobilen Endgeräten ist sehr vielfältig, was neue Herausforderungen an das Testen von Webseiten stellt. In der vorliegenden Arbeit wird eine Methodik zur Optimierung von anwenderbezogenen Tests auf Benutzerschnittstellenebene von Webseiten auf mehreren mobilen Endgeräten vorgestellt. Die Grundidee ist ein Aufbau aus einem zentralen Steuergerät und mehreren mobilen Endgeräten. Dies ermöglicht eine zentrale Steuerung der mobilen Geräte und dadurch die Möglichkeit den Testvorgang effizienter zu gestalten. Für diese Methodik wird ein Prototyp erstellt, anhand dem anschließend der Nutzen der Methodik evaluiert wird. Inhaltsverzeichnis 1 Einführung 1 2 Grundlagen 2.1 Kriterien der Software-Qualität . . . . 2.2 Testprozess . . . . . . . . . . . . . . . 2.2.1 Der Fundamentale Testprozess 2.2.2 Testautomatisierung . . . . . . 2.3 Related Work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Rahmenbedingungen 3.1 Vorhandene Strukturen . . 3.1.1 Entwicklungsprozess 3.1.2 Infrastruktur . . . . 3.2 Problemstellung . . . . . . . 3.3 Anforderungen . . . . . . . 3.4 Workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 . 7 . 7 . 9 . 10 . 11 . 12 . . . . . . . . . . . . . . . . . . . . . . . . 15 15 15 16 19 24 24 26 26 . . . . . . . . . . . . . . . . . . 31 31 31 32 33 35 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Bewertung und Auswahl verfügbarer 4.1 Gerätesteuerung . . . . . . . . . . . 4.1.1 Aktionen . . . . . . . . . . . 4.1.2 Technologien . . . . . . . . . 4.1.3 Auswahl . . . . . . . . . . . . 4.2 Navigation innerhalb der Seite . . . 4.2.1 Anforderungen . . . . . . . . 4.2.2 Technologien . . . . . . . . . 4.2.3 Auswahl . . . . . . . . . . . . . . . . . . Technologien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Implementierung 5.1 Übersicht Architektur . . . . . . . . . . . . . 5.1.1 Hardware Architektur . . . . . . . . . 5.1.2 Software Architektur . . . . . . . . . . 5.2 Verwendete Frameworks zur Implementierung 5.3 Controller . . . . . . . . . . . . . . . . . . . . 5.4 Devices . . . . . . . . . . . . . . . . . . . . . III . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 4 5 5 INHALTSVERZEICHNIS 5.5 5.6 5.7 5.4.1 Device Interface . . . . . . . . . . . . . . . . 5.4.2 Implementierung für Chrome ab Android 4.1 5.4.3 Implementierung Android ohne Chromedriver 5.4.4 Implementierung iOS . . . . . . . . . . . . . Web App . . . . . . . . . . . . . . . . . . . . . . . . 5.5.1 Web API . . . . . . . . . . . . . . . . . . . . Client App . . . . . . . . . . . . . . . . . . . . . . . Ghostlab Integration . . . . . . . . . . . . . . . . . . 6 Evaluierung 6.1 Design . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Ergebnisse und Interpretation . . . . . . . . . . . . . 6.2.1 Polaritätsprofil . . . . . . . . . . . . . . . . . 6.2.2 Frage 1 - Testhäufigkeit . . . . . . . . . . . . 6.2.3 Frage 2 - Geräteabdeckung . . . . . . . . . . 6.2.4 Frage 3 - Leistungsfähigkeitsunterschiede . . 6.2.5 Frage 4 - Browser- und Plattformunterschiede 6.2.6 Frage 5 - Aufwand Testaufbau . . . . . . . . 6.2.7 Frage 6 - Zeitersparnis bei Testausführung . . 6.2.8 Frage 7 - Wartezeiten . . . . . . . . . . . . . 6.2.9 Frage 8 - Überforderung . . . . . . . . . . . . 7 Résumé und Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 38 40 42 44 44 47 49 . . . . . . . . . . . 51 51 51 53 53 54 54 55 55 55 56 56 59 Appendix 61 A.1 Evaluierungsbogen . . . . . . . . . . . . . . . . . . . . . . 61 Abbildungsverzeichnis 63 Tabellenverzeichnis 64 Literaturverzeichnis 67 IV David Fasching Kapitel 1 Einführung Der Softwaretest ist ein wichtiger Bestandteil der Softwareentwicklung, der nötig ist, um die Qualität von Software auf einem entsprechenden Niveau zu halten. Die Erfahrung zeigt, dass dieser Bestandteil der Softwareentwicklung oft vernachlässigt wird. Dies ist häufig auf eine schlechte Kosten-Nutzen-Relation zurückzuführen. Aus diesem Grund wurden Werkzeuge entwickelt, die den Testprozess effizienter gestalten sollen. Häufig wird das durch die Automatisierung von ansonsten manuellen Testtätigkeiten durch Testautomaten erreicht. Auf der Ebene technischer Schnittstellen, Systemkomponenten, Modulen oder Methoden sind die Testwerkzeuge schon gut ausgereift und finden auch eine immer breitere Anwendung. Fachliche, anwenderbezogene Tests auf der Ebene der Benutzerschnittstellen sind schwieriger umzusetzen und daher mit höheren Kosten verbunden. Auf diesem Gebiet gibt es auch noch durchaus Potential für Testwerkzeuge, die diese Testvorgänge effizienter gestalten [SBB11, Kap. 1]. In den letzten Jahren hat sich mit der Entwicklung des Internets auch ein neues Gebiet eröffnet, in dem anwenderbezogene Tests auf Benutzerschnittstellenebene sehr wichtig erscheinen. Webseiten werden immer aufwändiger gestaltet und sind nicht selten für den wirtschaftlichen Erfolg eines Unternehmens mitverantwortlich. Dazu kommt eine immer größere Vielfalt an Browsern, die besagte Webseiten anzeigen. Mit der Verbreitung von internetfähigen mobilen Endgeräten haben sich auch die Bildschirmgrößen, Auflösungen, Rechnungsleistungen und Plattformen, auf denen Webseiten angezeigt werden, vervielfältigt. Um sicherzustellen, dass Webseiten auf einem breiten Spektrum an Endgeräten korrekt funktionieren und dargestellt werden, aber sich auch richtig anfühlen (Look’n’Feel), werden neue Testprozesse erforderlich. Das vollautomatisierte Testen erscheint für diesen Anwendungsbereich nicht sinnvoll, da Aspekte des Fühlens“ (z.B. ruckelt die Webseite bei der Bedie” 1 KAPITEL 1. EINFÜHRUNG nung, oder ist die Webseite responsive) nicht adäquat überprüft werden können. Sinnvoller erscheint ein teilautomatisierter Vorgang, der zwar den Tester unterstützt, der Tester aber noch manuell eingreifen kann. Diese Notwendigkeit wird in dieser Arbeit anhand eines Beispiels eines Unternehmens gezeigt. Bei dem Unternehmen elements.at New Media Solutions GmbH (elements.at) handelt es sich um eine Webagentur, die Webauftritte für Auftraggeber erstellt. Das Spektrum reicht von sehr einfachen Webauftritten bis hin zu sehr aufwändigen, bei denen häufig ein gesamtes e-commerce System angeboten wird. In dieser Arbeit wird eine Methodik vorgeschlagen, die das anwenderbezogene Testen von Webseiten auf mehreren mobilen Endgeräten (CrossDevice-Browser-Testing) vereinfachen und den Testablauf optimieren soll. Für diese Methodik wird ein Prototyp entwickelt (Cross-DeviceBrowser-Testing Plattform) und anhand diesem evaluiert, ob die vorgeschlagene Methodik sinnvoll erscheint. Dazu wird in Kapitel 3 die aktuelle Situation bei elements.at eruiert und die genauen Rahmenbedingungen festgelegt. Anschließend werden in Kapitel 4 verfügbare Technologien, die für die Implementierung der CrossDevice-Browser-Testing Plattform in Frage kommen, bewertet und ausgewählt. Kapitel 5 präsentiert die Implementierung der Cross-DeviceBrowser-Testing Plattform, die dann in Kapitel 6 einer ausführlichen Evaluierung unterzogen wird. 2 David Fasching Kapitel 2 Grundlagen Werfen wir zunächst einen Blick auf jene Grundlagen des Testens, die für die dargestellte Methodik des Cross-Device-Browser-Testings relevant sind. 2.1 Kriterien der Software-Qualität Software-Qualität wird im ISO Modell 25010 beschrieben. Relevant für diese Arbeit ist vor allem der Abschnitt über anwendungsbezogene Qualitätsmerkmale. Hierbei werden Qualitätskriterien aus der Sicht des Benutzers definiert. Die Definitionen wurden von [SRWL14, Kap. 2.1] entnommen. Effektivität Wird definiert als Aufgabenerfüllung innerhalb der Genauigkeits- und Vollständigkeitsgrenzen Effizienz Wird definiert als Aufgabenerfüllung innerhalb der Aufwandsgrenzen für Benutzer (Zeit, Kosten,...) Risikoabwesenheit Wird definiert durch das Ausmaß der Abwesenheit von Wirtschafts-, Gesundheits-, Sicherheits-, Umgebungs- und Umweltrisiken. Zufriedenheit Wird definiert durch den Grad an Verwendbarkeit, Vertrautheit, Begeisterung und Bequemlichkeit im Umgang mit dem Produkt. Kontextabdeckung Wird definiert durch die kontextuelle Vollständigkeit und Flexibilität. 3 KAPITEL 2. GRUNDLAGEN Abbildung 2.1: Der Fundamentale Testprozess [SBB11, Kap. 2.1] Die beiden Merkmale der Effektivität und Zufriedenheit sind im Zusammenhang mit der beschriebenen Methodik von besonderer Bedeutung. 2.2 2.2.1 Testprozess Der Fundamentale Testprozess Eine Darstellung des fundamentalen Testprozesses mit den Schritten Testplanung, Testanalyse, Testentwurf, Testrealisierung, Testdurchführung, Bewertung von Endkriterien und Bericht und Abschluss der Testaktivitäten sowie der Testüberwachung und -steuerung wurde [SBB11, Kap. 2.1] entnommen. Die einzelnen Schritte werden in Abbildung 2.1 gezeigt und wie folgt beschrieben. Testüberwachung und -steuerung Wird beschrieben durch eine parallel zu den Testaktivitäten erfolgende Kontrolle, um gegebenenfalls in den Prozess richtungsweisend einzugreifen. Testplanung Wird beschrieben durch die Festlegung der Rahmenbedingungen für die folgenden Testaktivitäten. 4 David Fasching KAPITEL 2. GRUNDLAGEN Testanalyse und Testentwurf Wird beschrieben durch eine Überprüfung der Testbasis und die daraus folgenden Spezifikationen und Anforderungen, die für die Erstellung der Testfälle notwendig sind. Testrealisierung und Testdurchführung Wird beschrieben durch die Bildung ausführbarer Testfälle und deren anschließende Abarbeitung. Bewertung von Endkriterien und Bericht Wird beschrieben durch die Entscheidung über den Ausgang des Tests und der weiteren Vorgehensweise. Ergebnisse werden für Entscheidungsträger zusammengefasst. Abschluss der Testaktivitäten Wird beschrieben durch die rückblickende Betrachtung der einzelnen Testaktivitäten, um Erfahrungen für nachfolgende Projekte festzuhalten. Der in Abschnitt 3.4 dargestellte Workflow stellt eine Spezialisierung des fundamentalen Testprozesses dar. 2.2.2 Testautomatisierung Die in Abschnitt 2.2.1 vorgestellten Schritte können automatisiert werden. R. Seidl definiert als Testautomatiserung ...die Durchführung von ansonsten manuellen Testtätigkeiten durch Automaten. [SBB11, Kap. 1.4] Die Definition zeigt eine sehr große Bandbreite an Möglichkeiten der Testautomatisierung, aber es gibt auch Grenzen. Diese liegen darin, dass nur manuelle Tätigkeiten eines Testers von Automaten ausgeführt werden können. Intellektuelle, kreative und intuitive Aspekte können nicht automatisiert werden. 2.3 Related Work In der Literatur wurde die Problematik der Kompatibilität von Webseiten auf verschiedenen Browsern anerkannt und für Desktop-Browser wurde das Thema mit Cross-Browser-Testing schon ausführlich behandelt [MP11, HP14, EM07]. Etwas allgemeiner wird das Thema Mobile Testing in [Hal13] behandelt. Hier geht es hauptsächlich um native mobile Apps. Einen Blick auf das verteilte Testen auf verschiedenen Plattformen wirft [Bas12]. Methoden zum Testen von modernen Webtechnologien wie AJAX werden in [MvD09] und [MRT08] erforscht. David Fasching 5 KAPITEL 2. GRUNDLAGEN Das in dieser Arbeit vorgestellte Cross-Device-Browser-Testing stellt die logische Fortsetzung des Cross-Browser-Testings dar, die durch die rapide Entwicklung und Verbreitung von mobilen Endgeräten erforderlich wurde. In der Industrie gibt es zur Problematik Cross-Device-Browser-Testing schon einige Ansätze, die aber hauptsächlich auf Hilfsmittel wie Emulatoren oder die Cloud setzen. Bei diesen Ansätzen besteht nicht die Möglichkeit lokal auf physischen Geräten und damit das Feeling“ zu te” sten. Zu diesen Vertretern zählen unter anderem BrowserStack1 , Keynote Mobile Testing2 und Sauce Labs3 . Eine interessante Alternative stellen Angebote wie Testbirds4 und rapidusertests5 zur Verfügung. Derartige Angebote setzen auf die Crowd. Dabei werden Testaufträge eingereicht, welche dann von einer Vielzahl von Testern ausgeführt werden. 1 https://www.browserstack.com http://www.keynote.com/solutions/testing/mobile-testing 3 https://saucelabs.com 4 http://www.testbirds.de 5 http://rapidusertests.com 2 6 David Fasching Kapitel 3 Rahmenbedingungen In diesem Kapitel wird zuerst einmal dargelegt, unter welchen Rahmenbedingungen das Projekt realisiert wurde. Dazu werden in Abschnitt 3.1 die vorhandenen Strukturen, die bei elements.at existieren, in Erfahrung gebracht. Anschließend wird in Abschnitt 3.2 die aktuelle Problematik erläutert. Daraus folgen in Abschnitt 3.3 die Anforderungen. Abschließend wird in Abschnitt 3.4 noch ein Workflow vorgeschlagen, der sich aus den Anforderungen ergibt. 3.1 Vorhandene Strukturen Zwangsläufig wird es notwendig sein, die aktuellen Strukturen von elements.at zu beschreiben. Das heißt im Folgenden werden der Entwicklungsprozess und die Infrastruktur dargestellt. Dabei wird auch aufgezeigt, an welchen Stellen Maßnahmen zur Verbesserung angesetzt werden können. 3.1.1 Entwicklungsprozess Blicken wir zunächst auf den Entwicklungsprozess. Es ist zwischen Neuentwicklung und Wartung zu unterscheiden. Neuentwicklung Bei jeder Neuentwicklung wird zu Beginn ein Konzept gemeinsam mit dem Kunden entwickelt. Die Erstellung des Konzepts geht dabei soweit, dass der Kunde zunächst seine Vorstellungen zur Webseite präsentiert. Zusammen mit den Entwicklern wird geprüft, ob diese Vorstellungen mit einem vertretbarem Aufwand realisierbar sind. Basierend auf dem Konzept entwerfen die Mitarbeiter von elements.at ein User Interface. Dabei handelt es sich zuerst nur um Mockups, mit 7 KAPITEL 3. RAHMENBEDINGUNGEN Konzept User Interface Frontend Backend Qualitätssicherung Abbildung 3.1: Entwicklungsprozess für eine Neuentwicklung deren Hilfe dem Kunden das Design der Webseite präsentiert werden kann. Der Kunde hat hierbei noch die Möglichkeit, Wünsche zu äußern. Im nächsten Schritt (Frontend) wird das User Interface implementiert. In diesem Entwicklungsschritt handelt es sich im Wesentlichen um die clientseitige Entwicklung der Webseite. Während die im vorherigen Schritt erstellten Mockups größtenteils statische Bilder sind, erfolgt in diesem Schritt die Umsetzung der Mockups in Code, der die Darstellung reproduziert. Hier kommen hauptsächlich Technologien wie HTML, CSS und JavaScript zum Einsatz. Die Funktionalität beschränkt sich auf clientseitige Abläufe wie Animationen oder das dynamische Nachladen von Inhalten. Steht das Frontend, wird das Backend auf der Serverseite entwickelt. Im Backend wird die Geschäftslogik implementiert und es dient dazu, Informationen, die das Frontend benötigt, zur Verfügung zu stellen. Anschließend wird das Frontend mit dem Backend verknüpft. Es ergibt sich eine voll funktionale Webseite. Bevor die Webseite an den Kunden ausgeliefert wird, unterzieht elements.at diese noch einer ausführlichen Qualitätssicherung. Dabei werden für jede offiziell von elements.at unterstützte Plattform verschiedene User Storys, welche die gesamte Funktionalität der Webseite abdecken, durchgespielt. Hierbei müssen die User Storys für jede Plattform einzeln nacheinander getestet werden. Diese Arbeit wird aus Ko8 David Fasching KAPITEL 3. RAHMENBEDINGUNGEN stengründen oft an weniger qualifiziertes Personal übertragen. Werden dabei Probleme erkannt, kehrt der Entwicklungsprozess wieder zu den Schritten Frontend oder Backend zurück. Wartung Nach der Auslieferung des Produkts an den Kunden, wird bei umfangreichen Projekten eine Wartungsphase notwendig. Diese läuft im Wesentlichen in folgender Art und Weise ab: Wünsche und Anfragen von Kunden werden von Projektleitern angenommen und in Arbeitspakete aufgeteilt. Diese stehen dann in einem Arbeitpaket-Pool zur Verfügung. Einzelne dieser Arbeitspakete werden von den Entwicklern nach Dringlichkeit und geplantem Fertigstellungsdatum entnommen und bearbeitet. Änderungen und Ergänzungen an der Webseite werden direkt am LiveSystem vorgenommen. Das bedeutet, dass Modifikationen sofort für die Öffentlichkeit sichtbar sind. Nur bei umfangreicheren Projekten kommt ein eigener Testserver zum Einsatz, bei dem diese Modifikationen intern entwickelt werden. Üblicherweise werden Änderungen und Ergänzungen nur mehr am Gerät des Entwicklers nach eigenem Ermessen getestet. Dadurch werden momentan Probleme oft erst durch den Kunden entdeckt. 3.1.2 Infrastruktur Die Infrastruktur, die aktuell zum Testen zur Verfügung steht, besteht aus einer Auswahl von mobilen Endgeräten und einem Webserver, auf dem die Webseite gehostet wird. Die mobilen Endgeräte decken ein Spektrum von am Markt befindlichen Geräten ab, die offiziell von elements.at für ihre Webseiten unterstützt werden. Die Auswahl an Geräten von schwächeren Leistungsklassen ist noch ausbaufähig. Aktuell sind die mobilen Endgeräte nur sehr lose an einem Aufbewahrungsort untergebracht, wie in Abbildung 3.2 zu sehen ist. Häufig werden einzelne Geräte von Entwicklern zu ihrem Arbeitsplatz mitgenommen und dadurch ist oft unklar, wo sich ein Gerät befindet, wenn es gebraucht wird. David Fasching 9 KAPITEL 3. RAHMENBEDINGUNGEN Platzhalter Abbildung 3.2: Arbeitsplatz vor Einführung der Cross-Device-BrowserTesting Plattform 3.2 Problemstellung Die eben beschriebenen Strukturen und Vorgehensweisen enthalten Schwachstellen, die die Qualität des Produkts stark beeinflussen können. So ist es derzeit sehr aufwändig, eine hohe Testabdeckung zu erreichen, da mit der aktuellen Infrastruktur mit jedem Gerät nacheinander getestet werden muss. Das führt zu einem erheblichen Zeitaufwand. Bedingt durch diesen Zeitaufwand wird ein Test mit kompletter Testabdeckung nur am Ende einer Neuentwicklung durchgeführt. Mit kompletter Testabdeckung ist gemeint, dass hier die Webseite mit jedem von elements.at offiziell unterstützen Gerät abgenommen wird. Selbst diese einmalige Komlpettabnahme wird häufig an weniger qualifiziertes Personal übertragen. Diesem Personal fehlt oft das nötige Wissen um kritische Stellen zu isolieren und diese zu testen. Besonders Projekte in der Wartungsphase leiden bedingt durch Zeitaufwand unter mangelnder Qualitätssicherung. Da in dieser Phase nur mehr an den einzelnen Geräten der Entwickler getestet wird, kann nicht von einer systematischen Qualitätssicherung gesprochen werden. Diese Geräte sind meistens von der aktuellsten Generation und der oberen Lei10 David Fasching KAPITEL 3. RAHMENBEDINGUNGEN stungsklasse. Kompatibilitäts- und Performance-Probleme werden durch diese sporadischen Tests kaum oder erst durch den Kunden entdeckt. Zusammenfassend lässt sich festhalten, dass wegen des großen Zeitaufwands viel zu selten eine umfangreiche Testabdeckung erreicht wird. 3.3 Anforderungen Es soll eine Plattform entwickelt werden, mit der das Testen von Webseiten auf mehreren Geräten vereinfacht wird. Mit der Einführung dieser Cross-Device-Browser-Testing Plattform sollen die in Abschnitt 3.2 angeführten Probleme in Angriff genommen werden. Insbesondere soll der benötigte Zeitaufwand zum Testen von Webseiten auf mehreren mobilen Endgeräten reduziert werden. Die Idee ist es, eine Plattform einzuführen, mit der die mobilen Endgeräte gleichzeitig von einem zentralen Steuergerät aus zu dem Zustand gesteuert werden können, an dem dann die Person, die den Test durchführt, individuell die Funktionalität auf den einzelnen Geräten testen kann. Folgende Anforderungen werden an die Cross-Device-Browser-Testing Plattform gestellt: 1. Die Plattform soll aus einem zentralen Steuergerät (PC) und mehreren mobilen Endgeräten bestehen. 2. Auf dem zentralen Steuergerät soll eine Webseite zu einem Zustand navigiert werden können, der dann auf die anderen Geräte synchronisiert wird. 3. Alle Geräte sollen parallel auf Knopfdruck aktiviert werden können und automatisch den Browser mit der entsprechenden Webseite öffnen. Der Browser soll auf den Geräten so gestartet werden, wie es ein Benutzer machen würde. Spezielle Apps, die einen Browser simulieren, sind nicht erwünscht, weil diese die User Experience verfälschen können. 4. Der Aufbau eines Tests und die Durchführung soll einfach sein und möglichst wenig Aufwand erfordern. 5. Zu Beginn soll der Arbeitsplatz alle Geräte und Browser abdecken, die offiziell von elements.at unterstützt werden. Im Rahmen dieses Projektes werden vorerst nur die mobilen Plattformen iOS und Android unterstützt. Eine Erweiterung auf Windows Phone/Windows 10 Mobile soll aber möglich sein. David Fasching 11 KAPITEL 3. RAHMENBEDINGUNGEN gewünschte Geräte aktivieren zu gewünschter URL navigieren [Navigationen innerhalb der Seite notwendig] Seitennavigationen durchführen [else] [manuel von Testperson] Funktionalitäten testen gefundene Fehler dokumentieren [weitere Testitems vorhanden] [alle Testitems abgearbeitet] Geräte deaktivieren Abbildung 3.3: Workflow 6. Der Umfang der mobilen Geräte soll beliebig erweitert werden können. Beispielsweise soll die Plattform im Nachhinein mit neuen Gerätegenerationen, aber auch ältere Geräte oder Geräte schwächerer Leistungsklassen ausgestattet werden können. 3.4 Workflow Basierend auf den Anforderungen wurde ein Workflow entwickelt, der beschreibt, wie eine typische Testsession an der Cross-Device-BrowserTesting Plattform ablaufen soll. Ausgangssituation Als Ausgangssituation wird angenommen, dass folgende Informationen vorliegen: Ein Satz an Testitems und eine Auswahl an Geräten, die getestet werden sollen. 12 David Fasching KAPITEL 3. RAHMENBEDINGUNGEN Testitem Ein Testitem besteht aus einer Beschreibung der erwünschten Funktionalität und einer Information an welcher Stelle die zu testende Funktionalität vorzufinden ist. Diese Information liegt meist in Form einer Url vor und wenn notwendig einer Beschreibung, wie der gewünschte Zustand erreicht wird. Auswahl an Geräten Hier wird definiert an welchen Geräten die Testsession durchgeführt werden soll. Typische Optionen sind gewisse Gerätetypen wie Tablets oder Smartphones, Geräte bestimmter Leistungsklassen oder Plattformen, wie Android oder iOS. Ablauf Aus der erläuterten Ausgangssituation erscheint dann ein Workflow wie in Abbildung 3.3 gezeigt sinnvoll. Gewünschte Geräte aktivieren Bei diesem Schritt werden alle Geräte aktiviert, die für die Testsession ausgewählt wurden. Die Aktivierung der Geräte erfolgt vom zentralen Steuerungsgerät. Zu gewünschter Url navigieren Sind die Geräte aktiviert, wird auf allen Geräten gleichzeitig die gewünschte Url im Browser geöffnet. Auch diese Aktion wird vom zentralen Steuerungsgerät aus in Gang gesetzt. Seitennavigationen durchführen Ist es notwendig Navigationen innerhalb der Seite durchzuführen um den gewünschten Zustand zu erreichen, wird dies in diesem Schritt gemacht. Dazu gehören einfache Aktionen wie das Scrollen der Webseite zu einer bestimmten Position, aber auch komplexere Aktionen wie Eingaben in Formularfelder oder Klicks auf Buttons. Diese Navigationen erfolgen ebenfalls am zentralen Steuerungsgerät und werden an alle Geräte synchronisiert. [manuel von Testperson] Funktionalität testen Jetzt sind alle Geräte am gewünschten Zustand, an dem die erwünschte Funktionalität getestet werden kann. Nun kann die Person, die den Test durchführt, jedes einzelne Gerät in die Hand nehmen und die Funktionalität testen. Dokumentation Die Ergebnisse des Tests der gewünschten Funktionalität werden anschließend dokumentiert. Mit der Dokumentation ist der Vorgang für ein Testitem abgeschlossen und es wird für das nächste Testitem mit der Navigation zum gewünschten Zustand fortgesetzt. Sind alle Testitems abgearbeitet, wird zum Schritt Geräte deaktiveren übergegangen. David Fasching 13 KAPITEL 3. RAHMENBEDINGUNGEN Geräte deaktivieren Alle für die Testsession aktivierten Geräte werden wieder zentral vom Steuerungsgerät aus deaktivert. 14 David Fasching Kapitel 4 Bewertung und Auswahl verfügbarer Technologien In diesem Kapitel wird der Auswahlprozess beschrieben, der die Technologien auswählte, die schlussendlich für die Entwicklung der CrossDevice-Browser-Testing Plattform verwendet wurden. In Abschnitt 4.1 wird der Auswahlprozess für die Gerätesteuerung behandelt. Die Gerätesteuerung umfasst alle Aktionen, die notwendig sind, das Gerät für Webseitennavigationen vorzubereiten und nach Abschluss einer Testsession die Geräte wieder zu deaktivieren. Abschnitt 4.2 behandelt konkret die Navigation innerhalb einer Webseite. 4.1 Gerätesteuerung Durch die Gerätesteuerung soll es ermöglicht werden, die mobilen Endgeräte zu aktivieren, mit einem Browser eine Webseite zu öffnen und die Geräte wieder zu deaktivieren. Die Auswahl der Technologien, die diese Aktionen ermöglichen, wird in diesem Abschnitt beschrieben. 4.1.1 Aktionen Im Folgenden werden die Aktionen beschrieben, die notwendig sind, um die Geräte so zu steuern, wie es der Workflow erfordert. Alle Aktionen müssen vom zentralen Steuerungsgerät angestoßen werden können. A1 - Aufwecken Bevor mit den Geräten interagiert werden kann, müssen diese zuerst aus ihrem Sleep-Zustand geweckt werden. A2 - Entsperren Die meisten Geräte haben beim Aktivieren einen Sperrbildschirm, der eine Benutzereingabe erfordert. Um die Geräte in 15 KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN einem automatisierten Umfeld zu steuern, muss es möglich sein, diese Sperre zentral zu umgehen. A3 - Browser starten Nachdem das Gerät entsperrt wurde, ist es erforderlich, dass der gewünschte Browser gestartet wird. Bei Geräten, denen mehrere Browser zur Verfügung stehen, soll es möglich sein zwischen allen möglichen Browsern zu wählen. Der Browser soll so gestartet werden, wie ihn ein Benutzer verwenden würde. A4 - Url navigieren Sobald das Gerät den Browser gestartet hat, ist es notwendig zu der Webseite zu navigieren, die getestet werden soll. Hier ist es auch wichtig, dass nicht nur Basis-Urls (www.example.com), sondern auch erweiterte Urls (www.example.com/sub/page?user=muster) angesteuert werden können. Weitere Navigationsanforderungen auf der entsprechenden Webseite werden im separaten Abschnitt 4.2 behandelt. A5 - Tabs schließen Die meisten Browser unterstützen das Öffnen von Webseiten in mehreren Tabs. Wenn diese Tabs nach einem Testvorgang nicht geschlossen werden, häufen sich diese. Viele offene Tabs führen zu Leistungseinbußen. Die Möglichkeit Tabs zu schließen oder alternative Möglichkeiten, die Tab-Anzahl gering zu halten, sind daher notwendig. A6 - Browser schließen Nach dem Testvorgang soll der Browser wieder geschlossen werden. A7 - Gerät deaktivieren Abschließend soll das Gerät wieder in seinen Sleep-Zustand versetzt werden. 4.1.2 Technologien Als nächstes wird einen Blick auf die verfügbaren Technologien geworfen, welche die in Abschnitt 4.1.1 beschriebenen Aktionen bewerkstelligen können. Selenium [Sel15] Das Selenium Projekt ist einer der ersten Anlaufpunkte für automatisierte Tests von Webseiten. Dieses Projekt stellt eine Reihe von Werkzeugen für das automatisierte Steuern von Browsern zur Verfügung. Mit sogenannten Webdrivern können alle verbreiteten Desktopbrowser gesteuert werden. Diese Webdriver werden entweder von Selenium oder zum Teil auch von den Browserherstellern selbst 16 David Fasching KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN entwickelt. Alle Webdriver implementieren das sogenannte JsonWireProtocol 1 . Zusätzlich werden vom Selenium Projekt noch Bibliotheken für gängige Programmiersprachen (Java, C#, Ruby, Python, Javascript (Node)) zur Verfügung gestellt, welche die Ansteuerung der verschiedenen Webdriver vereinfachen. Mit Hilfe dieser Werkzeuge lassen sich Abläufe programmieren, die ein Browser automatisch für einen Testfall durchführen soll. Das Selenium Projekt unterstützt offiziell keine mobilen Webbrowser. Es sind allerdings weitere Projekte entstanden, die von Selenium gelegte Standards und Protokolle verwenden und eine Automatisierung von mobilen Apps ermöglichen. Diese Projekte werden im Folgenden vorgestellt. ios-driver [Ios15] Selenium empfiehlt ios-driver für die Automatisierung von Apps auf der iOS Plattform von Apple. Mit ios-driver ist es möglich, Testfälle auf die selbe Art und Weise, wie für Browser mit Selenium zu erstellen. Ios-driver konzentriert sich hierbei hauptsächlich auf die automatisierte Steuerung von nativen Apps. Apps können sowohl im Emulator, als auch auf physischen Geräten automatisiert werden. Selendroid [Sel12] Für die Android-Plattform von Google wird von Selenium Selendroid empfohlen. Mit Selendroid lassen sich Testfälle gleich wie für ios-driver erstellen. Auch Selendroid konzentriert sich hauptsächlich auf die automatisierte Steuerung von nativen Apps. Appium [App15a] Das Appium-Projekt versucht die automatisierte Steuerung von mobilen Apps der Plattformen iOS und Android in ein Projekt zu vereinen. Appium setzt auf andere Projekte, die sich auf Teilbereiche spezialisiert haben (z.B. Selendroid), sowie auf Frameworks, die von den Plattformherstellern zur Verfügung gestellt werden. Appium stellt deren Dienste über eine einheitliche Schnittstelle zur Verfügung, die plattformunabhängig ist. Auch bei diesem Projekt kommen wieder die von Selenium definierten Protokolle zum Einsatz. Die Erstellung von Testfällen läuft daher wieder nach dem gleichen Schema ab. Chromedriver [Goo15b] Chromedriver ist ein Webdriver, der von Google für deren Webbrowser Chrome erstellt wurde. Das besondere an diesem Webdriver ist, dass sich damit auch der mobile Chrome Browser auf einem Android-Gerät steuern lässt. 1 https://code.google.com/p/selenium/wiki/JsonWireProtocol David Fasching 17 KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN ADB (Android Debugging Bridge) [Goo15a] ADB ist ein von Google zur Verfügung gestelltes Kommandozeilenprogramm, mit dem es möglich ist, mit verbundenen Android-Geräten zu kommunizieren und diese zu steuern. Die Android-Geräte müssen über die USB-Schnittstelle mit dem Entwicklerrechner verbunden sein. Mit Hilfe von ADB lassen sich unter anderem Apps auf dem Android-Gerät installieren und deinstallieren, Apps starten und stoppen und physische Knopfdrücke simulieren (z.B. die Betätigung der Standby-Knopfes). Xcode [App15b] Sind die von Apple zur Verfügung gestellten Entwicklungstools. Neben der IDE zum Erstellen von iOS-Apps, stehen hier auch Tools zum Installieren, Starten und Debuggen von Apps auf den mobilen Geräten zur Verfügung. Es ist nur möglich selbst entwickelte Apps mit Xcode zu starten. Apps anderer Hersteller (z.B. der native Browser Safari) können allerdings nicht über die Ferne gestartet werden. Xcode steht nur dem Apple Betriebsystem OS X zur Verfügung. Es kann daher nur in Verbindung mit einem Mac verwendet werden. ios-deploy [Pho15] Ist ein kleines Tool, das es vereinfacht, Apps auf iOS-Geräten zu installieren und starten. Dieses Tool verwendet die von Xcode zur Verfügung gestellten Werkzeuge und benötigt daher die Installation von Xcode. libimobiledevice [Lib07] Eine Sammlung von Tools, um mit iOSGeräten zu kommunizieren. Diese Tools stehen für OS X, Windows und Linux zur Verfügung. Aus dieser Sammlung wird nur das Tool idevicedate verwendet, mit dem es möglich ist, die Einstellungen für Zeit und Datum von einem iOS-Gerät abzufragen und zu ändern. Webkit remote debuggung protocol [Goo12b] Mit diesem Protokoll ist es möglich, geöffnete Browserseiten vom Browser Google Chrome zu steuern. Dieses Protokoll wird hauptsächlich von den Chrome Developer Tools verwendet, mit denen Browserseiten inspiziert werden können. Durch dieses Protokoll ist es aber auch für andere Entwickler möglich, Informationen über Browserseiten zu erhalten und diese zu steuern. In Zusammenarbeit mit ADB ist es sogar möglich Browserseiten des mobilen Chrome Browser zu steuern. Diese Methode wurde allerdings für neuere Versionen von mobile Chrome durch den Einsatz von Chromedriver ersetzt. iOS WebKit Debug Proxy [Goo12a] Browserseiten, die auf einem iOS-Gerät im Safari Browser geöffnet sind, lassen sich über die Ferne mit Safari auf OS X inspizieren. Dieser Proxy übersetzt die Steuersignale in 18 David Fasching KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN das Webkit remote debugging protocol und ermöglicht es dadurch auch anderen Entwicklern, Browserseiten von mobile Safari über die Ferne zu steuern. iOS Jailbreak Es ist sehr schwierig abseits von den von Apple zur Verfügung gestellten Hilfsmitteln auf iOS-Geräte zuzugreifen und diese zu Steuern. Dazu kommt, dass die offiziellen Hilfmittel sehr beschränkt sind und aus Sicherheitsgründen der Zugriff auf nicht eigens entwickelte Apps und das Betriebsystem selbst nahezu unmöglich ist. Aus diesem Grund gibt es einige Projekte, welche viele dieser Beschränkungen aufheben und den Zugriff auf das Betriebsystem ermöglichen. Dieses Vorgehen ist unter dem Namen Jailbreak bekannt. 4.1.3 Auswahl Nachdem die Technologien besprochen wurden, gilt es nun die verwendeten Technologien zu bewerten und eine Auswahl zu treffen. Zuerst werden die Lösungspakete untersucht, die alle erforderlichen Aktionen auf einmal abdecken können. ios-driver (iOS) ios-driver hat einige Einschränkungen, mit denen es schwierig ist, die in Abschnitt 3.3 gestellten Anforderungen zu erfüllen. Das größte Problem ist, dass bei physischen Geräten Webseiten nicht mit dem mobilen Safari gestartet werden, sondern dafür eine App mit Webview verwendet wird. Da aber gefordert ist, dass der Browser so gestartet werden soll, wie ihn ein Benutzer starten würde, ist diese Methodik unzureichend. Ein weiterer Schwachpunkt ist, dass sich von einem Steuergerät aus nur ein einziges physisches iOS-Gerät gleichzeitig ansteuern lässt. Es lassen sich daher nicht mehrere Geräte parallel steuern, was ebenfalls eine wichtige Anforderung ist, die nicht erfüllt werden kann. Selendroid (Android) Auch Selendroid hat Probleme, die Anforderungen dieser Arbeit zu erfüllen. Das größte Problem ist auch bei diesem Paket, dass Webseiten nicht in einem mobilen Browser gestartet werden, sondern auch hier mit einer App mit Webview gearbeitet wird. Für die Android-Plattform ist diese Einschränkungen noch schwerwiegender, weil dadurch nicht mit Browsern von unterschiedlichen Herstellern (Chrome, Firefox) getestet werden kann. Es ist daher nicht möglich, Verhaltensunterschiede zwischen verschiedenen mobilen Browsern zu analysieren. David Fasching 19 KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN Appium (Android + iOS) Anders als die zwei plattformabhängigen Projekte, bietet Appium die Möglichkeit Webseiten direkt in den jeweiligen mobilen Browsern zu starten. Dieses Lösungspaket hat allerdings auch Einschränkungen, die es nur bedingt brauchbar für diese Arbeit machen. Für ältere Android-Plattformen wird bei Appium das Selendoid Projekt verwendet und hat somit für diese Plattformen die gleichen Nachteile wie Selendroid selbst. Da das Anwendungsgebiet dieser Arbeit auch ältere Geräte und Plattformen betrifft, kommt es auch hier zu Komplikationen mit den Anforderungen. Für iOS-Geräte hat auch Appium keine Unterstützung zur gleichzeitigen Ansteuerung von mehreren physischen Geräten. Abseits der Probleme der einzelnen Lösungspakete gibt es auch noch Generelles zu diesen Lösungspaketen zu sagen. Diese Lösungspakete wurden für andere Anwendungsszenarios entwickelt. Diese Szenarien sehen alle die vollständige Automatisierung von Testfällen in einem Emulator vor. Szenarien in denen eine Person, die den Test ausführt, während des Ablaufs auf einem physischen Gerät eingreift, etwa um die Haptik zu evaluieren, sind bei diesen Lösungen nicht vorgesehen. Dazu kommt, dass die vorgesehenen Szenarien derartiger Lösungen um einiges komplexer sind, als für die Cross-Device-Browser-Testing Plattform notwendig. Damit diese komplexeren Szenarien unterstützt werden können, ist mehr Overhead erforderlich. Dieser zieht vor allem die Testinitialisierungszeiten in die Länge. Ein derartiger Overhead ist aber unnötig. Daher wurde auch nicht versucht, eines dieser vorhandenen Lösungpakte, bei denen der Quellcode offen wäre, für die Anforderungen der CrossDevice-Browser-Testing Plattform anzupassen. Aus den aufgezeigten Gründen wurde für beide mobilen Plattformen kein fertiges Lösungspaket ausgewählt, sondern aus einer Ansammlung von einzelnen Tools eine eigene Lösung entwickelt. Im Folgenden werden die Tools untersucht, die für die einzelnen Aktionen anwendbar sind. Dazu werden für jede erforderliche Aktion aus Abschnitt 4.1.1 geeignete Tools auf ihre Verwendbarkeit überprüft. Zusätzlich werden die zwei mobilen Plattformen iOS und Android separat behandelt. Plattform iOS Anmerkung zu iOS Jailbreaks: Bei der Entwicklung der Cross-DeviceBrowser-Testing Plattform wurde die Verwendung von Jailbreaks vermieden. Der Hauptgrund dafür ist, dass Jailbreaks nicht offiziell von Apple unterstützt werden und Apple daher versucht diese mit Betriebsystemupdates zu unterbinden. Es kann daher nicht garantiert werden, 20 David Fasching KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN dass für akuelle iOS-Versionen immer ein Jailbreak zu Verfügung steht. Eine Lösung, die auf einen Jailbreak basiert, kann daher sehr schnell nutzlos werden. A1 & A2 Aktionen Aufwecken und Entsperren Xcode Zum Aufwecken und Entsperren eines iOS-Gerätes über die Ferne, wurde nur eine Lösung gefunden. Dazu muss eine eigens kompilierte App über Xcode zum Debuggen auf dem Gerät ausgeführt werden. Die Ausführung einer solchen App führt dazu, dass ein iOS-Gerät, das sich im Sleep-Modus befindet, automatisch geweckt und entsperrt wird. A3 Aktion Browser starten Xcode Einer der wenigen Wege, um andere Apps zu starten, sind URL Schemes 2 . Es ist möglich von einer eigenen App eine spezielle URL aufzurufen, die bewirkt, dass das Betriebsystem die zuständige App öffnet. Mit einer Laucher-App, die beim Start eine angegebene URL aufruft, ist es daher möglich den mobilen Safari zu öffnen. A4 Aktion Url navigieren Xcode URLs zum Öffnen des mobilen Safari können entsprechende Informationen enthalten, damit Safari auch gleich die gewünschte Webseite aufruft. Es ist daher möglich mit der Launcher-App, die auch zum Starten des Browsers verwendet wird, gewünschte Webseiten zu öffnen. Der Nachteil mit dieser Methode ist, dass für jede erneute Seitennavigation erneut zuerst die Lauchner-App geöffnet werden muss, die dann wiederum in den mobilen Safari mit entsprechender Url startet. Zusätzlich wird für jede erneute Seitennavigation ein neuer Tab erstellt, der nicht mehr geschlossen werden kann (siehe Aktion Tabs schließen). iOS WebKit Debug Proxy Ist der mobile Safari geöffnet, besteht die Möglichkeit mit Hilfe des iOS WebKit Debug Proxy den aktuellen Tab zu steuern und Seitennavigationen durchzuführen. Mit dieser Methode sind Seitennavigationen möglich, die nicht das Öffnen neuer Tabs mit sich ziehen. A5 Aktion Tabs schließen 2 https://developer.apple.com/library/ios/featuredarticles/ iPhoneURLScheme Reference/Introduction/Introduction.html David Fasching 21 KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN Es wurde keine Möglichkeit gefunden, geöffnete Tabs wieder über die Ferne zu schließen. Um die Tab-Anzahl dennoch gering zu halten, empfiehlt sich daher die Seitennavigation mit Hilfe des iOS WebKit Debug Proxys durchzuführen. A6 & A7 Aktionen Browser schließen und Gerät deaktivieren Es wurden keine Möglichkeiten gefunden, fremde Programme zu schließen und ein iOS-Gerät wieder in den Ruhezustand zu versetzen. Die schlussendlich für die Plattform iOS ausgewählten Technologien sind in der Tabelle 4.1 zusammengefasst. Aktion A1 Aufwecken A2 Entsperren A3 Browser starten A4 Url navigieren A5 Tab schließen A6 Browser schließen A7 Gerät deaktivieren Technologie Xcode debug / ios-deploy Xcode debug / ios-deploy Xcode: eigene Launcher-App iOS WebKit Debug Proxy iOS WebKit Debug Proxy keine gefundene Lösung keine gefundene Lösung Tabelle 4.1: verwendete Technologien iOS Plattform Android A1 Aktion Aufwecken ADB Mit Hilfe von simulierten Knopfdrücken lässt sich ein AndroidGerät aufwecken, indem die Betätigung des Standby-Knopfes simuliert wird. A2 Aktion Entsperren ADB Der Sperrbildschirm (Lock-Screen) lässt sich mit Hilfe eines simulierten Knopfdruckes entsperren. Diese Methode funktionierte allerdings nicht an jedem Android-Gerät. Sperrbildschirm deaktivieren Bei allen Android-Geräten ist es möglich, den Sperrbildschirm in den Geräteeinstellungen zu deaktivieren. Dies ist die einfachste Methode die erforderliche Benutzerinteraktion zu umgehen. 22 David Fasching KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN A3 Aktion Browser starten ADB Wie schon bei der Einführung von ADB im Abschnitt Technologien erwähnt, ist es möglich, mit ADB jede beliebige installierte App auf dem Gerät zu starten. Dadurch kann jeder gewünschte Browser gestartet werden. Chromedriver Bei der Verwendung von Chromedriver wird automatisch der mobile Chrome Browser gestartet. Mit dieser Methode kann nur mobile Chrome gestartet werden. A4 Aktion Url navigieren Chromedriver Die Verwendung von Chromedriver ermöglicht eine umfangreiche Steuerung des mobile Chrome Browsers, inklusive Seitennavigation. Mit dieser Methode lässt sich nur der mobile Chrome Browser steuern. Andere Browser werden nicht unterstützt. ADB Beim Starten von Apps über ADB können Startparameter übergeben werden. Durch die Angabe von Url-Parametern kann daher ein Browser aufgefordert werden, beim Starten eine entsprechende Url zu öffnen. Die meisten Browser erstellen bei jedem Start einen neuen Tab, was die geöffnete Tab-Anzahl wiederum in die Höhe treibt. A5 Aktion Tabs schließen Chromedriver Mit Chromedriver können zwar nicht direkt Tabs geschlossen werden, aber für Seitennavigationen werden keine neuen Tabs geöffnet. Die Tab-Anzahl bleibt daher gering. Des Weiteren werden beim Beenden einer Chromedriver-Session alle geöffneten Tabs geschlossen. ADB Der einzige Weg mit ADB Tabs zu schließen, ist einen Browser komplett zurückzusetzen. Dadurch werden alle Einstellungen und Zustände des Browsers gelöscht. Manche Browser erfordern allerdings beim ersten Öffnen nach einer Zurücksetzung eine Benutzereingabe (z.B. AGB akzeptieren). A6 Aktion Browser schließen ADB Mit ADB kann jede beliebige App über die Ferne geschlossen werden. Browser schließen ist daher kein Problem. David Fasching 23 KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN Chromedriver Beim Schließen einer Chromedriver-Session wird der geöffnete Browser automatisch wieder geschlossen. A7 Aktion Gerät deaktivieren ADB Wie schon das Aufwecken eines Android-Gerätes, lässt sich auch das Deaktivieren mit Hilfe der Simulation des Standby-Knopfdruckes bewerkstelligen. Die schlussendlich für die Plattform Android ausgewählten Technologien sind in der Tabelle 4.2 zusammengefasst. Aktion A1 Aufwecken A2 Entsperren A3 Browser starten A4 Url navigieren A5 Tab schließen A6 Browser schließen A7 Gerät deaktivieren Technologie ADB keyevent Lockscreen deaktivieren für Chrome: Chromedriver für andere Browser: ADB start für Chrome: A5 Chromedriver für andere Browser: ADB start mit Startargumenten für Chrome: Chromedriver für andere Browser: ADB clear für Chrome: Chromedriver für andere Browser: ADB force stop ADB keyevent Tabelle 4.2: verwendete Technologien Android 4.2 Navigation innerhalb der Seite Das Ziel für die Navigation innerhalb der Seite ist, Benutzereingaben an eine Webseite von dem Steuergerät auf alle zu testenden Geräte zu synchronisieren. Hierfür wurden verfügbare Lösungen bewertet und die am besten geeignete Lösung ausgewählt. 4.2.1 Anforderungen Im Folgenden werden die Anforderungen erläutert, nach denen die verfügbaren Technologien bewertet wurden. R1 - Events Events sind Aktionen, die der Benutzer auslöst und von einer Webseite behandelt werden können. Am grundlegendsten sind 24 David Fasching KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN Klick-Events, die ausgelöst werden, wenn ein Benutzer z.B. auf einen Link klickt. Es gibt aber noch viele weitere Events wie Hover-Events und Tastendrücke. Je mehr dieser Events synchronisiert werden können, desto besser lässt sich die korrekte Funktionalität testen. R2 - Back Button Das Klicken des Zurück-Buttons des Browsers kann oft zu unvorhergesehenen Nebenwirkungen führen, wenn es nicht korrekt von einer Webseite behandelt wird. R3 - Integration Es ist erstrebenswert, dass sich die Lösung gut in die Cross-Device-Browser-Testing Plattform integrieren lässt. Lösungen mit schlechten Schnittstellen können hier problematisch werden. R4 - Scrolling Wenn eine Seite auf dem Steuergerät zu einer bestimmten Position gescrollt wird, soll die Position auf alle Geräte synchronisiert werden. R5 - Formulare Das Ausfüllen von Formularfeldern soll synchronisiert werden. Dazu zählt auch das Aktivieren von Checkboxen und Auswählen von Auswahlfeldern. R6 - Manuelle Url-Änderungen Manuelle Änderungen der Url in der Adressleiste sollen synchronisiert werden. R7 - Klicks auf versteckte Elemente Klicks auf Elemente, die versteckt sind, sollen trotzdem synchronisiert werden. Das ist wichtig bei Webseiten, die ein speziell für mobile Geräte angepasstes Layout haben. So kann es passieren, dass z.B. Menüpunkte, die am Steuergerät angezeigt werden, bei einem mobilen Gerät ausgeblendet sind. Die Synchronisation eines Klicks auf einen solchen Menüpunkt ist trotzdem wünschenswert. R8 - Kosten Eine kostenlose Lösung wäre natürlich ideal, wenn allerdings eine viel umfangreichere Funktionalität die Mehrkosten rechtfertigt, werden diese in Kauf genommen. R9 - Proxy zu existierendem Webserver Die Lösung soll auch auf Webseiten anwendbar sein, die bereits von einem externen Webserver angeboten werden. Hier soll auch das verschlüsselte Protokoll HTTPS unterstützt werden. David Fasching 25 KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN 4.2.2 Technologien Nach einer strukturierten Recherche bezüglich ihrer Funktionalität haben es nur zwei Lösungen in die engere Auswahl geschafft. Diese Lösungen bieten mit Abstand die meiste Funktionalität und können am ehesten die Anforderungen erfüllen. Ghostlab [Van11] Ist eine kommerzielle Lösung des Unternehmens Vanamco AG. Browsersync [JH15] Ist eine freie open source Lösung unter der Apache 2.0 Lizenz. 4.2.3 Auswahl Es wird nun eruiert, wie gut die einzelnen Technologien jede der gestellten Anforderungen erfüllen können. R1 Anforderung Events Ghostlab Von Ghostlab werden sehr viele der am meisten gebrauchten Events unterstützt. Neben grundlegenden Klick-Events, werden sogar Hover-Events korrekt synchronisiert. Browsersync Browsersync unterstützt nur Klick-Events auf Links. Selbst Klick-Events, deren Behandlung dynamisch nachgeladen wurde, werden nicht unterstützt. R2 Anforderung Back Button Ghostlab Wurde von einer älteren Version (1.*) unterstützt, bei der aktuellen Version (2.0.8) wird es allerdings zur Zeit nicht unterstützt. Browsersync Wird nicht unterstützt. R3 Anforderung Integration Ghostlab Da es sich um ein kommerzielles Produkt handelt, steht kein offener Sourcecode zur Verfügung. Ghostlab bietet auch keine Schnittstellen nach außen, mit denen das Programm gesteuert werden könnte. Eine Integration in ein anderes System ist daher nur schwer möglich. 26 David Fasching KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN Browsersync Browsersync ist ein Node.js-Projekt mit offenem Quellcode. Es besitzt eine umfangreiche Schnittstelle, die eine Steuerung von außen ermöglicht. Es ist daher sehr einfach, Browsersync in ein anderes Projekt zu integrieren, insbesondere, wenn es sich um ein Node.jsProjekt handelt. R4 Anforderung Scrolling Ghostlab Synchronisiertes Scrolling wird von Ghostlab sehr gut unterstützt. Es stehen mehrere Möglichkeiten zur Auswahl, wie Scrolls synchronisiert werden. So kann sichergestellt werden, dass auch bei verschiedenen Browserauflösungen die Webseite zur richtigen Stelle gescrollt wird. Browsersync Browsersync hat zwar keine Konfigurationsmöglichkeiten bezüglich des Scroll-Sync-Verhaltens. Die Synchronisation von ScrollEvents funktioniert aber einwandfrei. R5 Anforderung Formulare Ghostlab Das Ausfüllen von Formular-Elementen wird ohne Einschränkungen unterstützt. Ghostlab bietet sogar die Möglichkeit, dass Formularfelder automatisch ausgefüllt werden. So können z.B. Eingabefelder für E-Mail-Adressen automatisch mit einer Zeichenkette befüllt werden, welche die Richtlinien einer E-Mail-Adresse erfüllt. Browsersync Es wird die Synchronisation für alle gängigen Formularfeldern unterstützt. Eingabeelemente mit erweiterter Funktionalität, erzielt durch JavaScript, können Probleme verursachen. Dazu zählen z.B. auch Elemente, die mit Hilfsbibliotheken wie jQuery [The15] generiert wurden. R6 Anforderung Manuelle Url-Änderungen Ghostlab Wurde von einer älteren Version (1.*) unterstützt, bei der aktuellen Version (2.0.8) wird es allerdings zur Zeit nicht unterstützt. Browsersync Wird nicht unterstützt. R7 Anforderung Klicks auf versteckte Elemente Wird sowohl von Ghostlab, als auch Browsersync unterstützt. David Fasching 27 KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN R8 Anforderung Kosten Ghostlab Für eine Lizenz für zwei Arbeitsplätze werden einmalig 50 Euro veranschlagt. Browsersync Für die Verwendung von Browsersync fallen keine zusätzlichen Kosten an. R9 Anforderung Proxy zu existierendem Webserver Ghostlab Ghostlab kann sowohl selbst einen Webserver, der lokale Dateien zur Verfügung stellt, als auch Seiten von externen Webservern anbieten. Webseiten, die das HTTPS-Protokoll verwenden, sind dabei kein Problem. Browsersync Auch Browsersync kann als Webserver lokale Dateien zur Verfügung stellen. Bei externen Webseiten werden allerdings nur Webseiten mit einer unverschlüsselten Verbindung unterstützt. Webseiten, die das HTTPS-Protokol verwenden, werden daher nicht unterstützt. Finale Entscheidung Browsersync ließe sich zwar sehr gut in das Projekt integrieren, die Funktionalität ist aber im Gegensatz zu Ghostlab doch um einiges eingeschränkter. Das schwerwiegendste Problem ist die fehlende Unterstützung des HTTPS-Protokolls. Da dieser Standard immer mehr eingesetzt wird, ist Browsersync für einen Großteil der zu testenden Webseiten unbrauchbar. Es wurde daher Ghostlab als Lösung zur Navigation innerhalb einer Webseite ausgewählt und zudem wurde versucht, Ghostlab so weit wie möglich in das System zu integrieren. Tabelle 4.3 fässt den Auswahlprozess noch einmal zusammen. 28 David Fasching KAPITEL 4. BEWERTUNG UND AUSWAHL VERFÜGBARER TECHNOLOGIEN R1 R2 R3 R4 R5 R6 R7 R8 R9 Events Back Button Integration Scrolling Formulare manuelle Url-Änderungen Klicks auf versteckte Elemente Kosten Proxy zu existierendem Webserver Ghostlab ++ + – ++ ++ + + – ++ Browersync + – ++ + + – + + –– Tabelle 4.3: Zusammenfassung Seitennavigation David Fasching 29 Kapitel 5 Implementierung In diesem Kapitel wird die Implementierung der Cross-Device-BrowserTesting Plattform vorgestellt. Dazu wird in Abschnitt 5.1 ein Überblick über den Aufbau der Hard- und Softwarearchitektur gegeben. Abschnitt 5.2 stellt die Frameworks vor, auf denen die Cross-Device-Browser-Testing Plattform aufgesetzt wurde. In den restlichen Abschnitten 5.3 - 5.7 werden dann die konkreten Implementierungen der in Abschnitt 5.1 vorgestellten Softwarekomponenten behandelt. 5.1 5.1.1 Übersicht Architektur Hardware Architektur Der hardwareseitige Aufbau besteht aus dem Kontroll-PC, einem Mac, mobilen Android Geräten und mobilen iOS Geräten. In Abbildung 5.1 wird gezeigt, wie diese Geräte miteinander verbunden sind. Kontroll-PC Der Kontroll-PC ist ein Windows-Rechner, auf dem die Web App und der Browser für die Client App laufen. Von diesem Rechner aus werden alle anderen Geräte gesteuert. Mac Der Mac ist notwendig, um iOS-Geräte zu steuern. Der Mac wird mittels einer SSH-Verbindung vom Kontroll-PC aus gesteuert. Mobile Android-Geräte Diese Geräte sind direkt an dem KontrollPC über USB angeschlossen und werden von diesem gesteuert. Die Geräte wurden so gewählt, dass sie ein möglichst großes Spektrum an Bildschirmgrößen und Leistungsklassen abdecken. Derzeit sind folgende Geräte verfügbar: Samsung Galaxy S3, Samsung Galaxy Tab 10.1, Samsung Galaxy Tab 4 10.1, Google Nexus 5, Motorola Moto E. 31 KAPITEL 5. IMPLEMENTIERUNG KontrollPC Mac Abbildung 5.1: Hardware Architektur Mobile iOS-Geräte Diese Geräte sind über USB an dem Mac angeschlossen und werden von diesem indirekt über den Kontroll-PC gesteuert. Auch diese Geräte wurden so gewählt, dass sie ein möglichst großes Spektrum an Bildschirmgrößen und Leistungsklassen abdecken. Derzeit sind folgende Geräte verfügbar: Apple iPhone 4S, Apple iPad 3, Apple iPod Touch 4te Generation. 5.1.2 Software Architektur Abbildung 5.2 zeigt einen Überblick zum Aufbau der Software Architektur. Die Client App [5.6] kommuniziert mit der Web App [5.5] über eine auf HTTP-basierende Schnittstelle. Die Web App verwendet den Controller [5.3], um die einzelnen Devices zu steuern, die alle das DeviceInterface [5.4] implementieren. Der Controller betreibt einen Proxy-Server, der zur Integration von Ghostlab [5.7] verwendet wird. In Abbildung 5.3 werden in einem Sequenzdiagramm typische Abläufe der Cross-Device-Browser-Testing Plattform gezeigt. 32 David Fasching KAPITEL 5. IMPLEMENTIERUNG <<Interface>> DeviceInterface Device A Proxy Device B Device C Controller Web App HTTP-Interface Client App Abbildung 5.2: Software Architektur 5.2 Verwendete Frameworks zur Implementierung Für die Implementierung der Cross-Device-Browser-Testing Plattform wurde die serverseitige Plattform node.js [Nod15b] ausgewählt. Node.js forciert eine ereignisgesteuerte Architektur und bietet eine nicht-blockierende I/O API an. Da der Großteil der Cross-Device-Browser-Testing Plattform aus Ansteuerungen von mobilen Endgeräten und dem Warten von Bestätigungen (entspricht I/O Operationen) besteht, eignen sich Eigenschaften von node.js hervorragend. Programme für node.js werden in der Programmiersprache JavaScript geschrieben. Die nicht-blockierende I/O API wird mit dem Einsatz von Callbacks umgesetzt. Ein Callback ist eine Funktion, die zum Abschluss einer Operation aufgerufen wird. Jeder I/O Operation wird ein Callback übergeben, der mit Abschluss der Operation aufgerufen werden soll. Durch diese Architektur lassen sich Operationen starten, ohne die Ausführung zu blockieren. Während auf eine I/O Operation gewartet wird, können andere Aktionen durchgeführt werden. All dies wird ohne dem Einsatz von Threading-Konzepten ermöglicht. Neben einer umfangreichen Bibliothek, die mit node.js mitgeliefert wird, David Fasching 33 KAPITEL 5. IMPLEMENTIERUNG Client Web App POST /activate A activate(A) POST /activate B activate(B) Controller Device A Device B POST /navigate navigate() navigate() navigate() DELETE /activate B deactivate(B) POST /navigate navigate() navigate() Abbildung 5.3: Sequenzdiagramm typischer Abläufe 34 David Fasching KAPITEL 5. IMPLEMENTIERUNG gibt es auch noch einen Paketmanager, der npm [Npm09] genannt wird. Durch npm wird es Entwicklern möglich, zusätzliche Module für node.js zu entwickeln und diese für andere Entwickler zur Verfügung zu stellen. Mit Hilfe von npm ist dadurch ein sehr umfangreiches Ökosystem um node.js entstanden, das es Entwicklern ermöglicht, mit wenig Aufwand Programme zu erstellen. Auch in der Cross-Device-Browser-Testing Plattform kommen einige dieser npm-Module zum Einsatz. Diese werden im Folgenden genauer erläutert. async [McM15] Dieses Utility-Modul erleichtert die Umsetzung asynchroner Abläufe. Mit dem Einsatz von async ist es daher sehr einfach, mehrere I/O-Operationen parallel oder in einer Serie ablaufen zu lassen. Da ein Großteil der Cross-Device-Browser-Testing Plattform darin besteht, eine Abfolge von Operationen gleichzeitig auf mehreren Geräten auszuführen, kommt dieses Modul sehr stark zum Einsatz. express [Str15] Ist ein schnelles, minimalistisches Web-Framework, mit dem sich sehr einfach Applikationen erstellen lassen, die eine auf HTTP-basierende Schnittstelle zur Verfügung stellen. http-proxy [Nod15a] Ein Modul, mit dem ein einfacher Proxy-Server erstellt werden kann. Dieses Modul findet seinen Einsatz bei der Integration von Ghostlab, welche in Abschnitt 5.7 beschrieben wird. ssh2 [Whi15] Eine Bibliothek, die es ermöglicht, Verbindungen zu anderen Rechnern mittels SSH 1 aufzubauen. request [Pro15] Ein Utility-Modul mit dem sich einfach HTTP-Requests absenden lassen. ws [Ein15] Ein Modul, das die Kommunikation mittels dem WebSocket Standard ermöglicht. 5.3 Controller Der Controller ist das Herzstück der Cross-Device-Browser-Testing Plattform. Er nimmt Steuerkommandos entgegen und leitet diese an die verbundenen Geräte weiter. Der Controller verwaltet eine Liste von Device-Instanzen, die das Device Interface implementieren. Devices werden im Abschnitt 5.4 genauer 1 Secure Shell - ein verschlüsseltes Netzwerkprotokol David Fasching 35 KAPITEL 5. IMPLEMENTIERUNG erläutert. Des Weiteren verwaltet der Controller eine Liste von aktiven Devices. Devices können beliebig aktiviert und deaktiviert werden. Steuerkommandos (initialize, shutdown, navigate, reload) werden nur an aktive Devices weitergeleitet. Der Controller ist ein Node.js-Modul und kann einfach über das ModulLadesystem in eine Node.js-Anwendung eingebunden werden. Er stellt eine Anzahl von Funktionen zur Verfügung, die im Folgenden genauer erläutert werden. activateDevice(deviceName) Überprüft zuerst, ob das angegebene Device erreichbar ist. Wenn das Device erreichbar ist, wird es zu den aktiven Devices hinzugefügt. Zukünftige Steuerkommandos werden an dieses Device weitergeleitet, bis es wieder deaktiviert wird. deactivateDevice(deviceName) Entfernt das angegebene Device von der Liste der aktiven Devices. Zukünftige Steuerkommandos werden nicht mehr an dieses Device weitergeleitet. getState() Gibt Informationen über den aktuellen Status aller vom Controller verwalteten Devices zurück. Die Informationen geben Auskunft darüber, ob ein Device aktiviert und/oder initialisiert ist. Steuerkommandos Funktionen: initialize, shutdown, navigate, reload Diese Funktionen führen bei allen aktiven Devices die entsprechende Funktion aus. Die Funktion wartet, bis alle Devices die entsprechende Funktion ausgeführt und ein Ergebnis zurückgegeben haben. Die Ergebnisse werden gesammelt und als kombiniertes Ergebnis zurückgegeben. Bei allen Steuerkommandos wird versucht, die betroffenen Geräte parallel anzusteuern. Dadurch werden die Wartezeiten erheblich verkürzt. Es ist allerdings nicht mit allen Geräteimplementierungen möglich mehrere Geräte gleichzeitig zu steuern (z.B. iOS Implementierung [5.4.4]). Der Funktion navigate muss zusätzlich eine URL übergeben werden, zu der die Devices navigieren sollen. 36 David Fasching KAPITEL 5. IMPLEMENTIERUNG shutdown() disabled initialize() initialized isConnected() navigate() reload() isConnected() Abbildung 5.4: Device Zustände navigate ghostlab() Konfiguriert den lokalen Proxy zur übergebenen URL und navigiert alle aktiven Devices zur Adresse, an der Ghostlab seine Dienste zur Verfügung stellt. Nähere Informationen zur Integration von Ghostlab sind in Kapitel 5.7 zu finden. 5.4 Devices Jeder Gerätetyp von mobilem Endgerät muss mit unterschiedlichen Methoden angesteuert werden. Aus diesem Grund gibt es verschiedene Device-Klassen, die jeweils einen Gerätetyp (z.B. Android-Gerät mit Android 4.1) repräsentieren. Jede Instanz einer Device-Klasse repräsentiert dann ein konkretes Gerät. Jede Device-Klasse führt die gerätespezifischen Aktionen aus, die nötig sind, um die Funktionalität zu erfüllen, die durch ein Interface spezifiziert ist. Dieses Interface wird vom Controller verwendet, um die verschiedenen Geräte zu steuern. Ein Device hat zwei Zustände, die in Abbildung 5.4 dargestellt sind. Implementierte Funktionen des Interfaces sollen, je nach Zustand in welchem sich das Device befindet, zur Verfügung stehen. 5.4.1 Device Interface Im Folgenden werden die Funktionen erläutert, die vom Device Interface gefordert werden. isConnected Soll überprüfen, ob das Gerät erreichbar ist und diese Information zurückgeben. David Fasching 37 KAPITEL 5. IMPLEMENTIERUNG initialize Das Gerät soll aus seinem Sleep-Zustand geweckt werden, der Sperrbildschirm (falls vorhanden) soll entsperrt werden und der entsprechende Browser soll gestartet werden. Nach der Initialisierung soll ein Gerät bereit sein, URL-Navigationen im Browser durchzuführen, die durch navigate und reload angestoßen werden. shutdown Alle Tabs sollen geschlossen, der Browser soll geschlossen und das Gerät in seinen Sleep-Zustand versetzt werden. navigate Nur möglich, wenn das Gerät initialisiert ist. Das Gerät soll den Browser zu der angegebenen URL steuern. reload Nur möglich, wenn das Gerät initialisiert ist. Das Gerät soll die aktuell geladene Webseite erneut laden. Im Folgenden werden für die mobilen Plattformen Android und iOS konkrete Implementierung vorgestellt, die zeigen mit welchen Methoden die erforderlichen Funktionalitäten umgesetzt wurden. 5.4.2 Implementierung für Chrome ab Android 4.1 Zur Steuerung von Android-Geräten mit Chrome kommen hauptsächlich ADB und chromedriver zum Einsatz. Diese Implementierung wurde erfolgreich für Geräte mit den Andoid-Versionen 4.1 bis 5.0 getestet. Für ADB-Kommandos kommt öfters eine udid zum Einsatz. Dies ist eine Zeichenkette, die ein bestimmtest Gerät eindeutig identifiziert. Mit dem ADB-Kommando adb devices werden alle verbundenen Geräte mit ihrer udid aufgelistet. isConnected Um zu überprüfen, ob das Gerät erreichbar ist, wird das ADB-Kommando adb -s < udid > get - state verwendet. Aus dem Standard Output (stdout) lässt sich dann die Erreichbarkeit des Gerätes schließen. 38 David Fasching KAPITEL 5. IMPLEMENTIERUNG initialize Zuerst muss überprüft werden, ob sich das Gerät im Sleep-Modus befindet. Dazu wird das ADB-Kommando adb -s < udid > shell dumpsys power verwendet. Neben vielen anderen Informationen kann hier der aktuelle PowerState ausgelesen werden. Befindet sich das Gerät im Sleep-Modus, wird es mit einem simulierten Tastendruck des Standby-Buttons geweckt. Folgendes ADB-Kommando wird dazu verwendet: adb -s < udid > shell input keyevent 26 Bei keyevent 26 handelt es sich um den Standby-Button. Bei Android-Geräten lässt sich der Sperrbildschirm in den Einstellungen deaktivieren. Bei deaktiviertem Sperrbildschirm muss daher der Sperrbildschirm nicht extra behandelt werden. Sobald das Gerät aus seinem Sleep-Modus geweckt wurde, kann der Browser (in diesem Fall Chrome) gestartet werden. Dies erfolgt mit chromedriver. Chromedriver ist ein Programm, das an einer konfigurierten chromedriverurl eine REST-Schnittstelle zur Verfügung stellt. Chromedriver arbeitet mit Sessions. Wird eine Session gestartet, wird automatisch Chrome gestartet. Eine Session wird mit dem HTTP-Request POST < chromedriverurl >/ session gestartet. Als body muss folgendes JSON-Objekt mitgeschickt werden: { ’ sessionId ’: null , ’ desiredCapabilities ’: { ’ chromeOptions ’: { ’ androidDeviceSerial ’: < udid > , ’ androidPackage ’: ’ com . android . chrome ’ } } } Im Response wird eine SessionId mitgegeben, die für weitere Steuerungskommandos verwendet werden muss. Wurde die Session erfolgreich erstellt, ist das Gerät bereit und kann die Steuerkommandos navigate und reload ausführen. shutdown Chrome wird automatisch geschlossen, wenn eine chromedriver-session beendet wird. Zum Beenden einer Session wird folgender HTTP-Request verwendet: David Fasching 39 KAPITEL 5. IMPLEMENTIERUNG DELETE < chromedriverurl >/ session / < sessionId > Die <sessionId> ist diejenige, die beim Erstellen der Session erhalten wurde. Wurde Chrome beendet, wird das Gerät wieder in seinen Sleep-Zustand versetzt. Dazu wird wieder ein Tastendruck des Standby-Buttons simuliert: adb -s < udid > shell input keyevent 26 navigate Navigationen werden mit Hilfe der chromedriver-Session durchgeführt. Folgender HTTP-Request wird dazu verwendet: POST < chromedriverurl >/ session / < sessionId >/ url Als body muss folgendes JSON-Objekt mitgeschickt werden: { ’url ’: < destination > } <destination> ist die Adresse, zu der navigiert werden soll. Die <sessionId> ist wieder diejenige, die beim Erstellen der Session erhalten wurde. reload Auch das erneute Landen einer Webseite wir mit der chromedriverSession durchgeführt. Folgender HTTP-Request ist dazu nötig: POST < chromedriverurl >/ session / < sessionId >/ refresh 5.4.3 Implementierung Android ohne Chromedriver Browser abseits von Chrome oder ältere Chrome-Versionen (Version <33) können nicht mit chromedriver gesteuert werden. Für diese Anwendungsfälle wurde eine Implementierung entwickelt, die rein auf die Verwendung von ADB setzt. Der große Nachteil dieser Implementierung ist, dass die Browser nicht direkt gesteuert, sondern nur auf BetriebsystemEbene gestartet und gestoppt werden können. isConnected Erfolgt identisch zur chromedriver-Implementierung. Siehe Abschnitt 5.4.2. 40 David Fasching KAPITEL 5. IMPLEMENTIERUNG Browser Chrome package com.android.chrome Android Browser für Andoid 4.1 Android Browser für Android 4.4 com.sec.android.app .sbrowser com.android.chrome component com.android.chrome/ com.google.android.apps .chrome.Main com.android.browser/ .BrowserActivity com.sec.android.app .sbrowser/ .SBrowserMainActivity Tabelle 5.1: Komponentennamen und Paketnamen initialize Das Aufwecken des Gerätes läuft gleich zur chromedriver-Implementierung (siehe Abschnitt 5.4.2) ab. Zum Starten des Browsers wird aber dann folgendes ADB-Kommando verwendet: adb -s < udid > shell am start -a " android . intent . action . VIEW " -n < component > -d < destination > Bei <destination> handelt es sich um die Adresse, zu der navigiert werden soll. Im Zuge der Initialisierung wird hier immer die Adresse http://about:blank angesteuert. Dies entspricht einer leeren Seite. Für <component> muss der genaue Komponentenname des Browsers angegeben werden, der gestartet werden soll. Tabelle 5.1 listet einige Komponentennamen für verschiedene Browser auf. Nachdem der Browser gestartet wurde, ist das Gerät bereit, Steuerkommandos entgegenzunehmen. shutdown Um den Browser zu schließen, wird folgendes ADB-Kommando verwendet. adb -s < udid > shell am force - stop < package > <package> ist der Paketname des jeweiligen Browsers. In Tabelle 5.1 sind diese aufgelistet. Da beim navigate-Kommando für jede Navigation ein neuer Tab geöffnet wird, ist es wünschenswert diese beim shutdown wieder alle zu schließen. Dies ist mit dem folgenden Kommando möglich. adb -s < udid > shell pm clear < package > Mit diesem Kommando wird die Browser-App komplett zurückgesetzt und alle Einstellungen werden gelöscht. Viele Browser benötigen allerDavid Fasching 41 KAPITEL 5. IMPLEMENTIERUNG dings beim ersten Start nach einer Zurücksetzung eine Benutzereingabe, was zu Problemen führen kann. Das Gerät wird mit der selben Methode, wie bei der chromedriverImplementierung, in den Sleep-Zustand versetzt (siehe Abschnitt 5.4.2). navigate Zu einer anderen Webseite navigieren ist mit dieser Implementierung nur durch erneutes Aufrufen der Browser-App möglich. Dazu wird das selbe Kommando wie bei initialize verwendet. Nur wird für <destination> diesmal die gewünschte Adresse angegeben, zu der navigiert werden soll. Mit dieser Vorgehensweise wird für jede erneute Navigation ein neuer Tab geöffnet. reload Für reload wird einfach nochmals mit navigate zur aktuellen Adresse navigiert. 5.4.4 Implementierung iOS Einige der Tools zum Steuern von iOS-Geräten werden nur für das Betriebsystem OSX angeboten. Die zu steuernden iOS-Geräte müssen daher mit einem Mac verbunden sein. Dieser Mac wird wiederum mit Kommandos gesteuert, die über eine SSH-Verbindung übertragen werden. Diese Implementierung baut eine SSH-Verbindung zu dem Mac auf und führt dann die gewünschten Programme und Skripten auf dem Mac aus. Auch bei den Tools für iOS-Geräte kommt öfters eine udid zum Einsatz, die einzelne iOS-Geräte eindeutig identifiziert. Mit dem Programm idevice_id lassen sich alle angschlossenen iOS-Geräte mit ihren udids auflisten. Mit dem Programm ios_webkit_debug_proxy kann der aktuell geöffnete Tab auf dem iOS-Gerät gesteuert werden. ios_webkit_debug_proxy selbst ist ein Programm, das sich über eine WebSocket-Schnittstelle steuern lässt. Der WebSocket steht an der folgenden Adresse zur Verfügung: http :// localhost : < port >/ devtools / page /1 Der <port> kann beim Starten von ios_webkit_debug_proxy definiert werden. Sobald eine Verbindung mit dem WebSocket hergestellt wurde, können an ihn Nachrichten in Form von JSON-Objekten gesendet werden. Das JSON-Objekt muss wie folgt aufgebaut sein: { 42 David Fasching KAPITEL 5. IMPLEMENTIERUNG ’id ’: <id > , ’ method ’: < method > , ’ params ’: < parameter > } Bei <id> handelt es sich um eine Nummer, die das Kommando eindeutig identifizieren soll. <method> und <parameter> variieren, je nachdem welches Kommando an den mobilen Safari geschickt werden soll. isConnected Um zu überprüfen, ob ein bestimmtes iOS-Gerät mit dem Mac verbunden ist, wird folgendes Kommando verwendet: idevicedate -- udid < udid > Ist das gewünschte Gerät nicht erreichbar, wird im stdout ’device not found’ ausgegeben. initialize Zum Öffnen des mobilen Browsers Safari wird eine eigens kompilierte App namens SafariLauncher verwendet, die beim Start eine spezielle Url aufruft. Dieser Aufruf bewirkt, dass Safari gestartet wird und eine gewünschte Webseite öffnet. Der Source-Code der SafariLauncher App wurde dem Appium Projekt entnommen und steht in einem öffentlichen Repository2 zur Verfügung. Mit Hilfe des Tools ios-deploy, kann diese App vom Mac aus gestartet werden: ios - deploy -i < udid > -d -L -b <app > -a < destination > Bei <app> handelt es sich dabei um den Pfad zur selbst-kompilierten SafariLauncher-App. <destination> ist die gewünschte Url, die Safari aufrufen soll. Im Zuge der Initialisierung wird hier immer http://about:blank aufgerufen. Die Parameter -d und -L bewirken, das die App auf dem Gerät gestartet wird. shutdown Das abschließende Deaktivieren des Gerätes wird in dieser Implementierung nicht unterstützt. Grund dafür ist, dass keine Methode gefunden wurde, die dies ermöglicht. Siehe dazu auch Kapitel 4.1.3. 2 https://github.com/budhash/SafariLauncher David Fasching 43 KAPITEL 5. IMPLEMENTIERUNG navigate Für Url-Navigationen wird ios_webkit_debug_proxy verwendet. Dazu muss folgendes JSON-Objekt an den WebSocket gesendet werden: { ’id ’: <id > , ’ method ’: ’ Page . navigate ’ , ’ params ’: { ’url ’: < destination > } } <destination> ist die gewünschte Url, zu der navigiert werden soll. reload Auch das erneute Laden einer Webseite lässt sich mit ios_webkit_debug_proxy bewerkstelligen. An den WebSocket muss dazu folgendes JSON-Objekt gesendet werden: { ’id ’: <id > , ’ method ’: ’ Page . reload ’ , ’ params ’: { ’ ignoreCache ’: true } } 5.5 Web App Die Web App verwendet den Controller und stellt seine Funktionalität über eine auf HTTP-basierende API zur Verfügung. Zusätzlich wird von ihr auch noch die Client App zur Verfügung gestellt, die in Abschnitt 5.6 beschrieben wird. 5.5.1 Web API Die API basiert auf dem HTTP-Protokol. Sie bietet verschiedene Kommandos an, die zur Steuerung des Controllers dienen. Die Kommandos sind HTTP-Requests, deren Parameter mit dem application/x-www-form-urlencoded content type übertragen werden müssen. Die Antworten der HTTP-Requests haben den content type application/json und das übertragene JSON-Objekt hat die in Tabelle 5.2 gezeigte Struktur. Im Folgenden werden die verfügbaren Kommandos angeführt. Als ReturnWerte werden die Daten beschrieben, die im data-Objekt zurückgegeben werden. 44 David Fasching KAPITEL 5. IMPLEMENTIERUNG Schlüssel status Beschreibung Kann folgende Werte enthalten: ’ok’: Das Kommando wurde erfolgreich ausgeführt. ’error’: Bei der Ausführung des Kommandos gab es ein Problem. Eine beschreibende Nachricht über das Ergebnis des Kommandos. (optional) Ein Objekt, das Daten enthält, die bei der Ausführung des Kommandos entstanden sind. message data Tabelle 5.2: Struktur JSON-Antwortobjekt GET /state Gibt Auskunft über alle verwalteten Geräte. Return Eine Liste von allen vom Controller verwalteten Geräten sowie Informationen über deren aktuellem Zustand wird zurückgegeben. Das Ergebnis hat folgende Form: { ’ Beispielgeraet ’: { ’ initialized ’: true , ’ active ’: true } , ’ Anderesgeraet ’: { ’ initialized ’: false , ’ active ’: true } } active: Steuerkommandos werden an dieses Gerät weitergeleitet initialized: Das Gerät ist initialisiert und kann Navigationen (navigate, reload) durchführen POST /activate Aktiviert das übergebene Gerät, damit zukünftige Steuerkommandos an dieses Gerät weitergeleitet werden. Das Kommando gibt einen error-status zurück, wenn der Controller das Gerät nicht erreichen kann. Parameter deviceName – Name, der das Gerät identifiziert David Fasching 45 KAPITEL 5. IMPLEMENTIERUNG DELETE /activate Deaktiviert das übergebene Gerät, damit zukünftige Steuerkommandos nicht mehr an dieses Gerät weitergeleitet werden. Parameter deviceName – Name, der das Gerät identifiziert POST /initialize Alle aktivierten Geräte werden initialisiert. Return Für jedes Gerät wird ein Status zurückgegeben, der anzeigt ob das Gerät erfolgreich initialisiert wurde. POST /shutdown Alle aktivierten Geräte werden in ihren sleep-Zustand versetzt. Return Für jedes Gerät wird ein Status zurückgegeben, der anzeigt, ob das Gerät erfolgreich in seinen sleep-Zustand versetzt wurde. POST /navigate Navigiert alle aktivierten und initialisierten Geräte zu der angegeben URL. Parameter destination – URL, zu der navigiert werden soll Return Für jedes Gerät wird ein Status zurückgegeben, der anzeigt ob die Navigation erfolgreich war. POST /reload Lädt die Webseite aller aktivierten und initialisierten Geräte erneut. Return Für jedes Gerät wird ein Status zurückgegeben, der anzeigt ob, die Navigation erfolgreich war. 46 David Fasching KAPITEL 5. IMPLEMENTIERUNG Eingabefeld Button-Gruppe für Navigationskommandos Button-Gruppe für Steuerkommandos Bereich zur Auswahl der Geräte Log-Bereich Abbildung 5.5: View der Client App POST /navigate ghostlab Ghostlab wird für die übergebene URL konfiguriert. Alle aktivierten und initialisierten Geräte werden zu der URL navigiert, an der Ghostlab seine Dienste bereit stellt. Return Für jedes Gerät wird ein Status zurückgegeben, der anzeigt ob die Navigation erfolgreich war. 5.6 Client App Die Client App wurde sehr einfach gehalten und hat nur die Aufgabe, die von der Web App angebotene Funktionalität für den Endbenutzer zur Verfügung zu stellen. Bei der Client App handelt es sich um eine Webseite, die in einem Browser aufgerufen wird. Sie baut auf das Frontend-Framework Bootstrap [Ott15] auf und verwendet die Javascript-Library jQuery [The15]. Die gesamte App besteht aus einer View, die in Abbildung 5.5 abgebildet ist. Die View besteht aus einem Eingabefeld für Url-Navigationen, einer Button-Gruppe für Navigationskommandos, einer ButtonGruppe für Steuerkommandos, einem Bereich zur Auswahl der Geräte, die angesteuert werden sollen, und einem Log-Bereich. Eingabefeld und Button-Gruppe für Navigationskommandos In das Eingabefeld kann die gewünschte Url eingeben werden, zu der die mobilen Endgeräte navigieren sollen. Mit einem Klick auf go! wird an David Fasching 47 KAPITEL 5. IMPLEMENTIERUNG alle aktivierten Geräte das Kommando geschickt zu der entsprechenden Url zu navigieren. Bei einem Klick auf reload wird bei allen aktiven Geräten die aktuelle Webseite erneut geladen. Ist die Benutzung von Ghostlab erwünscht, muss anstelle des go!-Buttons der use Ghostlab“-Button verwendet werden. ” Nur initialisierte Geräte können Navigationskommandos entgegennehmen und ausführen. Button-Gruppe für Steuerkommandos Mit einem Klick auf init werden alle aktivierten Geräte initialisiert (Gerät wird geweckt und der Browser wird gestartet). Mit einem Klick auf shutdown werden alle aktivierten Geräte in ihren Sleep-Zustand versetzt. Bereich zur Auswahl der Geräte Mit einem Klick auf ein gewünschtes Gerät wird dieses aktiviert. Sobald ein Gerät aktiviert ist, werden zukünftige Kommandos an dieses Gerät geschickt. Mit einem erneuten Klick lässt sich ein Gerät wieder abwählen und somit für den Empfang von Kommandos deaktivieren. Wurde ein Gerät erfolgreich initialisiert, wird der entsprechende Button grün. Für nicht initialisierte Geräte ist der Button blau. Log-Bereich Hier werden die Nachrichten ausgegeben, die als Ergebnis für abgeschickte Kommandos zurückgegeben wurden. Under the hood Folgendes geschieht im Hintergrund: Bei Klicks auf Buttons wird JavaScriptCode ausgeführt, der das entsprechende Kommando als ein HTTP-Request an die Web App schickt und das zurückkommende Ergebnis verarbeitet. Das senden von HTTP-Requests läuft immer nach dem selben Schema ab. Beispielsweise zum Aktivieren eines Gerätes: $ . ajax ({ url : ’/ activate ’ , type : ’ POST ’ , data : { ’ deviceName ’: deviceName } , success : handleSuccessFn , error : handleErrorFn }); Hier wird ein HTTP-Request an die Web App geschickt und bei einer erfolgreichen Antwort die handleSuccessFn Funktion ausgeführt. Bei einem Fehler wird die Funktion handleErrorFn ausgeführt. 48 David Fasching KAPITEL 5. IMPLEMENTIERUNG 5.7 Ghostlab Integration Ghostlab agiert im Grunde als ein Proxy-Server. In Ghostlab wird eine Url zu einer Webseite konfiguriert. Wenn nun mit einem Browser die Url aufgerufen wird, an der Ghostlab seine Dienste anbietet (Ghostlab-Url), werden die Inhalte der konfigurierten Webseite geladen. Zusätzlich werden aber von Ghostlab noch einige Skripte injiziert, die dann die von Ghostlab angebotenen Funktionalitäten wie etwa synchronisertes Scrollen oder synchronisierte Klick-Events ermöglichen. Wenn nun mehrere Geräte die Ghostlab-Url in einem Browser aufrufen, können die verschiedenen Events an alle beteiligten Browser synchronisiert werden. In Ghostlab kann dann noch eingestellt werden, von welchen zu welchen Geräten die Events synchronisiert werden sollen. Dadurch lässt sich eine zentrale Steuerung bewerkstelligen. Ghostlab ist ein kommerzielles Produkt mit geschlossenem Quellcode. Des Weiteren wird von Ghostlab keine Schnittstelle angeboten, mit der von außerhalb eine Steuerung der Anwendung ermöglicht wird. Es ist daher nur sehr schwer möglich, Ghostlab in die Cross-Device-BrowserTesting Plattform zu integrieren. Es wurde dennoch versucht, zumindest die Konfiguration der Url zu einer Webseite zentral über die CrossDevice-Browser-Testing Plattform zu ermöglichen. Um diese Funktionalität zu erreichen, kommt ein zusätzlicher ProxyServer zum Einsatz, der sich leicht über eine Schnittstelle konfigurieren lässt. Ghostlab wird permanent auf die Adresse des zusätzlichen ProxyServers konfiguriert. Durch die Möglichkeit, dass der Proxy-Server konfiguriert werden kann, wird es möglich, Ghostlab indirekt auf eine andere Webseite zu konfigurieren. In Abbildung 5.6 wird der gesamte Aufbau noch einmal anschaulich dargestellt. Bei der Implementierung des in Kapitel 5.3 vorgestellten Controllers kommt das Node-Modul http-proxy zum Einsatz. Mit diesem Modul kann ein sehr einfacher Proxy-Server erstellt werden, der sich im Weiteren von dem Controller direkt konfigurieren lässt. Beim Aufruf der Funktion navigate_ghostlab des Controllers wird folgender Ablauf in Gang gesetzt: Zuerst wird der Proxy-Server auf die gewünschte Url konfiguriert. Wenn jetzt die Url des Proxy-Servers aufgerufen wird, stellt dieser die Inhalte der gewünschten Webseite zur Verfügung. Da Ghostlab auf die Url des Proxy-Servers konfiguriert ist, stellt somit auch Ghostlab diese Inhalte zur Verfügung. Anschließend müssen nur mehr alle betroffenen Geräte zur Ghostlab-Url gesteuert werden. David Fasching 49 KAPITEL 5. IMPLEMENTIERUNG www.example.com In Proxy konfigurierte Url zu gewünschter Webseite www.example.com konfigurierbarer Proxy-Server In Ghostlab konfigurierte Url zu gewünschter Webseite Ghostlab Fix konfigurierte Url zu Proxy-Server Ghostlab Ghostlab-Url Ghostlab-Url Normaler Ghostlab-Aufbau Ghostlab-Aufbau mit zwischengeschaltetem Proxy-Server Abbildung 5.6: Ghostlab Aufbau 50 David Fasching Kapitel 6 Evaluierung Im abschließenden Kapitel wird die Cross-Device-Testing-Plattform einer Evaluierung unterzogen. Dazu wird in Abschnitt 6.1 das Design und die Vorgehensweise beschrieben. In Abschnitt 6.2 werden die Ergebnisse präsentiert. 6.1 Design Klassische Evaluierungsmethoden haben meist Metriken (z.B. gefundene Fehler pro LOC) als Grundlage [DBCG14]. Zur Evaluierung der Cross-Device-Browser-Testing Plattform war es allerdings schwer geeignete Metriken zu finden, weil es sich bei dieser Methode nur um eine Teilautomatisierung handelt und der menschliche Aspekt weiterhin eine tragende Rolle spielt. Aus diesem Grund kam bei der Evaluierung ein Polaritätsprofil (vergleiche [Hof90, S. 75][Fri90, S. 184ff.][Fuc12]) zum Einsatz. Die Cross-Device-Browser-Testing Plattform wurde von sechs Personen, die normalerweise die anwenderbezogenen Tests manuell ausführen, verwendet. Nach einer dreimonatigen Probephase mussten diese Personen einen Evaluierungbogen ausfüllen, mit dem Veränderungen des Testverhaltens und der Testergebnisse in Erfahrung gebracht wurden. Der Evaluierungsbogen ist in Appendix A.1 zu finden. Die gestellten Fragen sind in Tabelle 6.1 aufgelistet. 6.2 Ergebnisse und Interpretation Die Interpretation der Daten aus der Evaluierung ist die Meinung des Autors. Die einzelnen Sichtweisen wurden durch zusätzliche Gespräche mit den Testpersonen gestärkt und unterstützt. 51 KAPITEL 6. EVALUIERUNG Seit Einführung der Cross-Device-Browser-Testing Plattform... Frage 1 ...teste ich öfter. Frage 2 ...decke ich beim Testen einen größeren Geräteumfang ab. Frage 3 ...fallen mir mehr Fehler bedingt durch Leistungsfähigkeitsunterschiede einzelner Geräte auf (z.B. unflüssiges Scrollen). Frage 4 ...fallen mir mehr Fehler bedingt durch unterschiedliche Browser und Plattformen einzelner Geräte auf (z.B. Darstellungsfehler in Safari). Durch den Einsatz der Cross-Device-Browser-Testing Plattform... Frage 5 ...hat sich der Testaufbau (das Setup) vereinfacht (Aufwand, bis die einzelnen Geräte und deren Browser gestartet sind). Frage 6 ...spare ich Zeit bei der Testausführung auf mehreren Geräten (z.B. Url-Navigationen, Formular-Eingaben,...). Frage 7 ...habe ich aufgrund der Möglichkeit, Aktionen parallel auszuführen, weniger Wartezeiten (z.B. kann ich zum nächsten Gerät übergehen, während beim Aktuellen eine Aktion durchgeführt wird). Frage 8 Gleichzeitiges Testen mehrerer Geräte überfordert mich. Tabelle 6.1: Evaluierungsfragen 52 David Fasching KAPITEL 6. EVALUIERUNG stimme ich gar nicht zu stimme ich vollkommen zu Seit der Einführung der Cross-DeviceTesting Plattform... [1] ...teste ich öfter [2] ...decke ich einen größeren Geräteumfang ab [3] ...fallen mir mehr Fehler bedingt durch Leistungsfähigkeitsunterschiede einzelner Geräte auf [4] ...fallen mir mehr Fehler bedingt durch unterschiedliche Browser und Plattformen einzelner Geräte auf Durch den Einsatz der Cross-DeviceTesting Plattform... [5] ...hat sich der Testaufbau (das Setup) vereinfacht [6] ...spare ich Zeit bei der Testausführung auf mehreren Geräten [7] ...habe ich aufgrund der Möglichkeit, Aktionen parallel auszuführen, weniger Wartezeiten [8] Gleichzeitiges Testen mehrerer Geräte überfordert mich Abbildung 6.1: Polaritätsprofil der Evaluierung 6.2.1 Polaritätsprofil Bei der Auswertung der Evaluierungsbögen wurden für jede Frage die Antworten gemittelt und in einem Polaritätsprofil zusammengefasst. In Abbildung 6.1 ist das resultierende Polaritätsprofil abgebildet. 6.2.2 Frage 1 - Testhäufigkeit Mit ein Hintergedanke zur Einführung der Cross-Device-Browser-Testing Plattform war es, durch ein attraktives Werkzeug die Testbereitschaft der Entwickler zu erhöhen. Ein derartiges Verhalten konnte kaum beobachtet werden und es zeigt sich, dass ein Werkzeug alleine nicht ausreicht. David Fasching 53 KAPITEL 6. EVALUIERUNG 5 4 3 2 1 0 stimme ich gar nicht zu stimme ich vollkommen zu Abbildung 6.2: Frage 1 - Testhäufigkeit Es müssen zusätzlich die Entwicklungsprozesse angepasst und die CrossDevice-Browser-Testing Plattform in diese Prozesse integriert werden. 6.2.3 Frage 2 - Geräteabdeckung 5 4 3 2 1 0 stimme ich gar nicht zu stimme ich vollkommen zu Abbildung 6.3: Frage 2 - Geräteabdeckung Die Möglichkeit mehrere Geräte gleichzeitig zu steuern führte dazu, dass automatisch auf mehr Geräten getestet wird. So werden häufig zusätzliche Geräte dazugeschaltet, die dann nebenbei mitlaufen und gegenfalls auf weitere Fehler aufmerksam machen. 6.2.4 Frage 3 - Leistungsfähigkeitsunterschiede 5 4 3 2 1 0 stimme ich gar nicht zu stimme ich vollkommen zu Abbildung 6.4: Frage 3 - Leistungsfähigkeitsunterschiede Das Verhalten von Webseiten auf leistungsschwächeren Geräten zu testen war immer ein wichtiges Argument zur Einführung der Cross-DeviceBrowser-Testing Plattform. Das etwas schwächere Ergebnis bezüglich 54 David Fasching KAPITEL 6. EVALUIERUNG dieser Anforderung ist auf die mangelnde Ausstattung von leistungsschwächeren Geräten zurückzuführen. Hier wird es nötig sein noch mit entsprechenden Geräten nachzurüsten. 6.2.5 Frage 4 - Browser- und Plattformunterschiede 5 4 3 2 1 0 stimme ich gar nicht zu stimme ich vollkommen zu Abbildung 6.5: Frage 4 - Browser- und Plattformunterschiede Was hingegen sehr gut funktioniert, ist die Aufspürung von Problemen bedingt durch Plattformunterschiede. Hier ist die gleichzeitige Ansteuerung von mehreren Geräten sehr hilfreich. 6.2.6 Frage 5 - Aufwand Testaufbau 5 4 3 2 1 0 stimme ich gar nicht zu stimme ich vollkommen zu Abbildung 6.6: Frage 5 - Aufwand Testaufbau In der Theorie sollte der Testaufbau um einiges vereinfacht werden: Es wird auf einen Button geklickt und alle Geräte sind einsatzbereit. In der Praxis läuft dieser Prozess nicht immer so reibungslos ab. Das ist darauf zurückzuführen, dass sich vorallem Geräte der iOS-Plattform nur recht umständlich so steuern lassen, wie es nötig wäre. Dadurch entstehen unnötige Wartezeiten bis zur Einsatzbereitschaft der Geräte. Hier sind die Hersteller der Plattformen gefordert, derartige Gerätesteuerungen zu vereinfachen oder gar zu ermöglichen. 6.2.7 Frage 6 - Zeitersparnis bei Testausführung Eine der Hauptanforderungen an die Cross-Device-Browser-Testing Plattform, die Zeit der Testausführung zu verkürzen, wird dank der parallelen David Fasching 55 KAPITEL 6. EVALUIERUNG 5 4 3 2 1 0 stimme ich gar nicht zu stimme ich vollkommen zu Abbildung 6.7: Frage 6 - Zeitersparnis bei Testausführung Ansteuerung der Geräte anstandslos erfüllt. 6.2.8 Frage 7 - Wartezeiten 5 4 3 2 1 0 stimme ich gar nicht zu stimme ich vollkommen zu Abbildung 6.8: Frage 7 - Wartezeiten Diese Frage schlägt eine Arbeitsweise vor, die Testausführung mit Hilfe paralleler Abläufe effizienter zu gestalten. Das schwächere Ergebnis lässt sich damit erklären, dass diese Arbeitsweise noch sehr neu und ungewohnt ist und sich die Tester erst daran gewöhnen müssen, um das volle Potential des parallelen Arbeitens auszuschöpfen. 6.2.9 Frage 8 - Überforderung 5 4 3 2 1 0 stimme ich gar nicht zu stimme ich vollkommen zu Abbildung 6.9: Frage 8 - Überforderung Die letzte Frage behandelt einen möglichen negativen Nebeneffekt, der das parallele Arbeiten an mehreren Geräten haben könnte. Es zeigt sich 56 David Fasching KAPITEL 6. EVALUIERUNG allerdings sehr eindeutig, dass diese Arbeitsweise zu keiner Überforderung der Tester führt. David Fasching 57 Kapitel 7 Résumé und Ausblick Im Zuge dieser Arbeit wurde überprüft, ob mit der Methodik des CrossDevice-Browser-Testings anwenderbezogene Tests auf Benutzerschnittstellenebene effizienter gestaltet werden können. Anhand des entwickelten Prototyps kann bestätigt werden, dass diese Methodik derartige Tests vereinfachen kann und dadurch der Testprozess optimiert werden kann. Bei der Entwicklung des Prototyps, der Cross-Device-Browser-Testing Plattform, zeigten sich aber auch einige Schwierigkeiten. Diese laufen hauptsächlich darauf hinaus, dass die Gerätesteuerung, aber auch die Browsersteuerung teilweise nur sehr umständlich zu bewerkstelligen ist. Vor allem Geräte der iOS-Plattform lassen sich nur sehr beschränkt für die Methodik des Cross-Device-Browser-Testings steuern. Hier mussten teilweise sehr unkonventionelle Methoden eingesetzt werden, die oft zu Stabilitätsproblemen geführt haben. Auf der anderen Seite zeigt hingegen Google mit den zur Verfügung gestellten Werkzeugen chromedriver und ADB für die Android-Plattform, wie es gemacht werden sollte. Mit diesen Werkzeugen lassen sich die betroffenen Geräte einwandfrei und zuverlässig steuern. Es zeigt sich, dass die Kooperation der Plattform-Hersteller eine sehr wichtige Rolle spielt, um Cross-DeviceBrowser-Testing erfolgreich umzusetzen. Aus der Sicht der Personen, welche die Cross-Device-Browser-Testing Plattform ausprobierten, kommt der sehr eindeutige Konsens, dass CrossDevice-Browser-Testing durchaus Potential hat die Testprozesse zu optimieren. Was sich allerdings zeigte ist, dass die Existenz einer CrossDevice-Browser-Testing Plattform alleine nicht ausreicht, zum öfteren Testen zu motivieren. Die Plattform muss fix in die Entwicklungsprozesse integriert werden. Dank der Zeitersparnis durch Cross-Device-BrowserTesting und der daraus resultierenden besseren Kosten-Nutzen-Relation kann aber besser für eine dementsprechende Integration argumentiert 59 KAPITEL 7. RÉSUMÉ UND AUSBLICK Abbildung 7.1: Arbeitsplatz nach Einführung der Cross-Device-BrowserTesting Plattform werden. Für die zukünftige Weiterentwicklung der Cross-Device-Browser-Testing Plattform kamen einige sehr einstimmige Ideen zum Vorschein. Zum einen wurde sehr häufig eine bessere Möglichkeit gewünscht, gefundene Fehler zu dokumentieren. Beispielsweise wäre die Möglichkeit Screenshots für alle Geräte zentral vom Steuerungs-PC aus zu machen eine sehr hilfreiche Funktionalität. Auch diese Screenshots und weitere Informationen über die Cross-Device-Browser-Testing Plattform direkt in ein bestehendes Ticket-System einzupflegen erscheint als sehr sinnvoll. Die in Kapitel 5 vorgestellte Implementierung hat auch eine nur sehr rudimentäre Benutzeroberfläche, die sicherlich noch um einiges intuitiver gestaltet werden kann. Dies sollte dank der soliden Software-Architektur sehr einfach umzusetzen sein. Eine weitere Idee, die großes Interesse stiftete, ist die Erweiterung der Devices neben mobilen Endgeräten auch um Desktop-Browser unterschiedlicher Versionen (z.B. IE9, IE10, IE11). Dies sollte mit der bestehenden Software-Architektur und möglicherweise dem Einsatz von virtuellen Maschinen ebenfalls kein Problem sein. 60 David Fasching Appendix A.1 Evaluierungsbogen 61 APPENDIX A.1. EVALUIERUNGSBOGEN Evaluierungsbogen - Cross-Device-Testing Plattform Seit Einführung der Cross-Device-Testing Plattform… Ich stimme gar nicht zu Ich stimme vollkommen zu Ich stimme gar nicht zu Ich stimme vollkommen zu ...teste ich öfter ...decke ich beim Testen einen größeren Geräteumfang ab ...fallen mir mehr Fehler bedingt durch Leistungsfähigkeitsunterschiede einzelner Geräte auf (z.B. unflüssiges Scrollen) ...fallen mir mehr Fehler bedingt durch unterschiedliche Browser und Plattformen einzelner Geräte auf (z.B. Darstellungsfehler in Safari) Durch den Einsatz der Cross-Device-Testing Plattform... ...hat sich der Testaufbau (das Setup) vereinfacht (Aufwand, bis die einzelnen Geräte und deren Browser gestartet sind) ...spare ich Zeit bei der Testausführung auf mehreren Geräten (z.B. Url-Navigationen, Formular-Eingaben,...) ...habe ich aufgrund der Möglichkeit, Aktionen parallel auszuführen, weniger Wartezeiten (z.B. kann ich zum nächsten Gerät übergehen, während beim Aktuellen eine Aktion durchgeführt wird) Gleichzeitiges Testen mehrerer Geräte überfordert mich Folgende Erweiterungsvorschläge der Cross-Device-Testing Plattform erscheinen mir sinnvoll Ich stimme gar nicht zu Ich stimme vollkommen zu Die Möglichkeit gefundene Probleme direkt über die Cross-Device-Testing Plattform zu dokumentieren (z.B. Screenshots von Geräten, sowie direkte Integration in ein Ticketsystem) Die Möglichkeit zum Testen an älteren Desktop-Browser Versionen (z.B. IE9) Bitte wenden! 62 David Fasching Abbildungsverzeichnis 2.1 Der Fundamentale Testprozess [SBB11, Kap. 2.1] . . . . . 3.1 3.2 3.3 Entwicklungsprozess für eine Neuentwicklung . . . . . . . 8 Arbeitsplatz vor Einführung der Cross-Device-BrowserTesting Plattform . . . . . . . . . . . . . . . . . . . . . . . 10 Workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 5.1 5.2 5.3 5.4 5.5 5.6 Hardware Architektur . . . . . . . . Software Architektur . . . . . . . . . Sequenzdiagramm typischer Abläufe Device Zustände . . . . . . . . . . . View der Client App . . . . . . . . . Ghostlab Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 33 34 37 47 50 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 Polaritätsprofil der Evaluierung . . . . . . . . Frage 1 - Testhäufigkeit . . . . . . . . . . . . Frage 2 - Geräteabdeckung . . . . . . . . . . Frage 3 - Leistungsfähigkeitsunterschiede . . . Frage 4 - Browser- und Plattformunterschiede Frage 5 - Aufwand Testaufbau . . . . . . . . Frage 6 - Zeitersparnis bei Testausführung . . Frage 7 - Wartezeiten . . . . . . . . . . . . . Frage 8 - Überforderung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 54 54 54 55 55 56 56 56 7.1 Arbeitsplatz nach Einführung der Cross-Device-BrowserTesting Plattform . . . . . . . . . . . . . . . . . . . . . . . 60 63 . . . . . . . . . . . . . . . . . . . . . . . . 4 Tabellenverzeichnis 4.1 4.2 4.3 verwendete Technologien iOS . . . . . . . . . . . . . . . . 22 verwendete Technologien Android . . . . . . . . . . . . . . 24 Zusammenfassung Seitennavigation . . . . . . . . . . . . . 29 5.1 5.2 Komponentennamen und Paketnamen . . . . . . . . . . . 41 Struktur JSON-Antwortobjekt . . . . . . . . . . . . . . . 45 6.1 Evaluierungsfragen . . . . . . . . . . . . . . . . . . . . . . 52 64 Literaturverzeichnis [App15a] Appium Projekt: appium Homepage, 2015, URL http:// appium.io, [Zugriff: 27.08.2015]. [App15b] Apple Inc.: Xcode Developer Tools Homepage, 2015, URL https://developer.apple.com/xcode, [Zugriff: 27.08.2015]. [Bas12] Y. Bassil: Distributed, Cross-Platform, and Regression Testing Architecture for Service-Oriented Architecture, Advances in Computer Science and its Applications (ACSA), volume 1(1), (2012), pages 9–15. [DBCG14] S. Doğan, A. Betin-Can and V. Garousi: Web application testing: A systematic literature review, Journal of Systems and Software, volume 91, (2014), pages 174 – 201. [Ein15] O. S. Einar: ws Github-Repository, 2015, URL https:// github.com/websockets/ws, [Zugriff: 27.08.2015]. [EM07] C. Eaton and A. M. Memon: An Empirical Approach to Evaluating Web Application Compliance Across Diverse Client Platform Configurations, Int. J. Web Eng. Technol., volume 3(3), (2007), pages 227–253. [Fri90] J. Friedrichs: Methoden empirischer Sozialforschung, VS Verlag für Sozialwissenschaften, Wiesbaden, 1990. [Fuc12] K. Fuchs: Fachspezifische Software – Die Qual der Wahl, Zeitschrift für neue Lernkulturen, volume 4(1), (2012), pages 56– 60. [Goo12a] Google Inc.: iOS WebKit Debug Proxy GithubRepository, 2012, URL https://github.com/google/ ios-webkit-debug-proxy, [Zugriff: 27.08.2015]. [Goo12b] Google Inc.: Remote debugging protocol, 2012, https://developer.chrome.com/devtools/docs/ debugger-protocol, [Zugriff: 27.08.2015]. 65 URL APPENDIX LITERATURVERZEICHNIS [Goo15a] Google Inc.: Android Debug Bridge Homepage, 2015, URL http://developer.android.com/tools/help/adb.html, [Zugriff: 27.08.2015]. [Goo15b] Google Inc.: ChromeDriver Homepage, 2015, URL https: //sites.google.com/a/chromium.org/chromedriver, [Zugriff: 27.08.2015]. [Hal13] K. Haller: Mobile Testing, SIGSOFT Softw. Eng. Notes, volume 38(6), (2013), pages 1–8. [Hof90] P. R. Hofstätter: Gruppendynamik Kritik der Massenpsychologie, Rowohlt, 1990. [HP14] HP: Cross-browser functional testing best practices, Technical report, HP; United States, 2014. [Ios15] Ios-driver Projekt: ios-driver Homepage, 2015, URL https:// ios-driver.github.io/ios-driver, [Zugriff: 27.08.2015]. [JH15] JH: Browsersync Homepage, 2015, URL http://www. browsersync.io, [Zugriff: 27.08.2015]. [Lib07] Libimobiledevice Projekt: libimobiledevice Homepage, 2007, URL http://www.libimobiledevice.org, [Zugriff: 27.08.2015]. [McM15] C. McMahon: async Github-Repository, 2015, URL https: //github.com/caolan/async, [Zugriff: 27.08.2015]. [MP11] A. Mesbah and M. Prasad: Automated cross-browser compatibility testing, Software Engineering (ICSE), 2011 33rd International Conference on, pages 561–570. [MRT08] A. Marchetto, F. Ricca and P. Tonella: A Case Study-based Comparison of Web Testing Techniques Applied to AJAX Web Applications, Int. J. Softw. Tools Technol. Transf., volume 10(6), (2008), pages 477–492. [MvD09] A. Mesbah and A. van Deursen: Invariant-based Automatic Testing of AJAX User Interfaces, Proceedings of the 31st International Conference on Software Engineering, ICSE ’09, IEEE Computer Society, Washington, DC, USA, pages 210– 220. [Nod15a] Nodejitsu: node-http-proxy Github-Repository, 2015, URL https://github.com/nodejitsu/node-http-proxy, [Zugriff: 27.08.2015]. 66 David Fasching APPENDIX LITERATURVERZEICHNIS [Nod15b] Node.js Foundation: node.js Homepage, 2015, URL https: //nodejs.org, [Zugriff: 27.08.2015]. [Npm09] Npm, Inc.: npm Homepage, 2009, URL https://www.npmjs. com, [Zugriff: 27.08.2015]. [Ott15] M. Otto: Bootstrap Homepage, 2015, getbootstrap.com, [Zugriff: 27.08.2015]. URL [Pho15] Phonegap: ios-deploy Github-Repository, 2015, URL https: //github.com/phonegap/ios-deploy, [Zugriff: 27.08.2015]. [Pro15] R. Projekt: request Github-Repository, 2015, URL https:// github.com/request/request, [Zugriff: 27.08.2015]. http:// [SBB11] R. Seidl, M. Baumgartner and T. Bucsics: Basiswissen Testautomatisierung, dpunkt.verlag GmbH, Heidelberg, 2011. [Sel12] Selendroid Projekt: selendroid Homepage, 2012, URL http: //selendroid.io, [Zugriff: 27.08.2015]. [Sel15] Selenium Projekt: Selenium Homepage, 2015, URL http:// www.seleniumhq.org, [Zugriff: 27.08.2015]. [SRWL14] A. Spillner, T. Roßner, M. Winter and T. Linz: Praxiswissen Softwaretest – Testmanagement, dpunkt.verlag GmbH, Heidelberg, 2014. [Str15] StrongLoop: express Homepage, 2015, //expressjs.com, [Zugriff: 27.08.2015]. [The15] The jQuery Foundation: jQuery Homepage, 2015, URL https://jquery.com, [Zugriff: 27.08.2015]. [Van11] Vanamco AG: Ghostlab Homepage, 2011, URL http://www. vanamco.com/ghostlab, [Zugriff: 27.08.2015]. [Whi15] B. White: ssh2 Github-Repository, 2015, URL https:// github.com/mscdex/ssh2, [Zugriff: 27.08.2015]. David Fasching URL http: 67