Über unsMediaKontaktImpressum
Rudolf Grötz 05. Mai 2015

Virtualisierung von Testressourcen in der Mobile App-Entwicklung durch Mobile Device Clouds

Es begann 2007, als Steve Jobs das neue iPhone vorstellte: Bis zu diesem Zeitpunkt konnte der Benutzer genau das damit machen, wozu das Telefon gedacht war. Mit dem Erscheinen des iPhones wurde ein Paradigmenwechsel eingeleitet. Mobile Telefone wandelten sich von ihrer ursprünglichen Rolle als bloßes Kommunikationsmedium zu einem persönlichen Gerät – einem Spielzeug, das aus dem Alltagsleben nicht mehr wegzudenken ist. Plötzlich hieß es Smartphone und konnte fotografieren, Sprachnachrichten verschicken, den Standort feststellen, Routen planen, Rechnungen bezahlen und Flüge buchen. Sogar die Steuerung mittels Sprache ließ nicht lange auf sich warten.

Der technische Fortschritt und die Verbreitung von neuen Geräten und Gerätetypen (Smartphones, Phablets, Tablets…) für alle Betriebssysteme (Apple iOS, Android und Windows Mobile) machen die Qualitätssicherung für die Softwarehersteller und Anwendungsentwickler von mobilen Applikationen (Apps) schwierig.

Anbieter von Apps müssen ihre Anwendungen ausgiebig testen, um sicherzustellen, dass diese auf den wichtigsten Plattformen fehlerfrei laufen. Trotz dem Druck der immer kürzer werdenden Entwicklungszyklen ist das Testen der Apps für alle Betriebssysteme und Geräteplattformen eine notwendige und schwierige Aufgabe. Um langfristigen Erfolg in einem stark fragmentiert und wettbewerbsorientierten globalen Markt zu gewährleisten, sind in der Zwischenzeit die Testaufwände größer als die der eigentliche Entwicklung. Denn kein Unternehmen kann sich ein schlechtes Rating in den Appstores leisten.

Der größte Teil der Testaufwände fließt aber nicht mehr in den funktionalen Test der App. Noch kritischer als Funktionstests sind nicht-funktionale Tests wie Interoperabilität, Performance, Benutzerfreundlichkeit und Sicherheit. Effektivere und effizientere Tests helfen dabei den Geräteherstellern und Anwendungsentwicklern, die Produktqualität zu verbessern.

Devicefragmentierung

Durch die Virtualisierung von Testressourcen mittels Mobile Device Clouds kann das Problem der immer größer werdenden Gerätefragmentierung (Gerätehersteller, Gerätetyp, Plattform, OS-Version) und die Frage nach Interoperabilität effektiv und effizient gelöst werden. Devicefragmentierung wird auf TechTarget [1] wie folgt erklärt:

[...] Mobile device fragmentation is a phenomenon that occurs when some mobile users are running older versions of an operating system, while other users are running newer versions. Mobile device fragmentation is often made worse when the wireless carrier, and not the device manufacturer, is in charge of deciding when to deploy operating system updates. Mobile device fragmentation can be a problem for software developers who must create different versions of the same app in order to make sure it works correctly with different versions of a given OS. It can also be a problem for IT departments because different operating versions have different capabilities, which can make them harder to manage and secure. Mobile device fragmentation is often associated with Android, Google’s mobile OS. Mobile device fragmentation is not as much of an issue with iOS devices. The term mobile device fragmentation is also used to describe different versions of the same operating system that are created when an original equipment manufacturer (OEM) modifies an open source mobile operating system for specific products [...].

Cloud-basierter Zugriff

Mobile Device Clouds ermöglichen Entwicklungs- und Testteams auf echte oder virtuelle mobile Endgeräte zuzugreifen. Diese einfach zu bedienende Lösung beschleunigt die Anwendungsbereitstellung, eliminiert Risiken und reduziert Kosten. Die mobilen Endgeräte in der Cloud sind vergleichbar mit Wasser und Strom. Jederzeit und überall verfügbar. Bezahlt wird aber nur, wenn es auch wirklich gebraucht wird.

Übersicht Mobile Device Clouds (nicht vollständig)

Name WebSite
Testobject http://testobject.com
Saucelabs https://saucelabs.com/
Device Anywhere http://www.keynotedeviceanywhere.com/
Xamarin http://xamarin.com/test-cloud
Perfecto Mobile http://www.perfectomobile.com/
Scirocco Cloud http://www.scirocco-cloud.com/
Testdroid http://testdroid.com/

Die immer größer werdende Devicefragmentierung am Markt erfordert eine ständige Anpassung der zu testenden mobilen Endgeräte. Bei Interoperabilitätstests sollte geprüft werden, ob die mobile Anwendung auf den wichtigsten Geräten im Markt des Appherstellers richtig funktionieren. Hier stehen noch immer manuelle Tests im Vordergrund, eine gute Testautomationsstrategie kann hier bis zu 70% an Zeit einsparen.

Statistiken zeigen, dass Unternehmen Zugriff auf 30 bis 40 voll funktionsfähige Geräte zu einem bestimmten Zeitpunkt benötigen, um einen aussagekräftigen Test durchführen zu können. Dazu kommt, dass etwa fünf dieser Geräte in jedem Quartal ersetzt werden müssen, um auf dem neuesten Stand zu bleiben. Die Logistik der Verwaltung dieser Anzahl von Handsets, vielleicht auch noch in verschiedenen Geo-Standorten, ist eine Herausforderung.

Mobile Device Clouds ermöglichen die Verfügbarkeit dieser Geräte, wenn Entwicklungs- und QA-Teams diese benötigen. Durch cloudbasierten Zugriff auf virtualisierten mobilen Endgeräten können die Firmen den Aufwand und die Kosten für die Beschaffung und Verwaltung von neuen Geräten vermeiden. Da alle Geräte in der Cloud verwaltet werden, müssen sich Unternehmen nicht mehr über komplizierte Logistik kümmern. Geräte können leicht hinzugefügt oder innerhalb weniger Stunden als Reaktion auf die Marktbedürfnisse ausgewechselt werden. Darüber hinaus erleichtert ein cloudbasierter Ansatz global verteilten Teams die Zusammenarbeit in diesem Bereich.

Wie funktioniert’s?

  1. Der Anbieter der Mobile Device Cloud stellt Software as a Service (SaaS) und/oder Infrastructure as a Service (IaaS) mit hunderten von mobilen Endgeräten zur Verfügung. Diese Geräte sind verbunden mit den verschiedensten Netzwerkbetreibern und Netzwerktypen. Meist in verschiedenen Ländern.
  2. Es gibt verschiedene  Abrechnungsmodelle, wie „Pay as you use“ oder „ON-Premise“.
  3. Beim Testen wird die App via Cloudservices auf den jeweiligen Geräten installiert und anschließend manuell oder automatisiert getestet.
  4. Da es sich um echte Endgeräte in echten Netzwerken handelt, sind die Tests nahe am tatsächlichen Geschehen.
  5. Die Auswahl der zu testenden Geräte richtet sich immer nach der in der Zielgruppe verwendeten Hersteller, Plattform, Operating System usw.

Hands on Mobile Device Cloud

Nachfolgend wird anhand von einigen Anwendungsbeispielen am Beispiel der TESTOBJECT-Cloud [2] gezeigt, wie Tests in der Mobile Device Cloud manuell und automatisiert durchgeführt werden können.

Feature Test Manuell

Manuelles Testen ist ein wichtiger Bestandteil einer Teststrategie. Ob ein neues Feature geprüft, ein Defekt untersucht oder die Zusammenarbeit mit Sensoren getestet wird, Gründe für interaktive Tests sind reichlich vorhanden.

Durch die Devicefagmentierung sind manuelle Mobile App-Tests mit Ineffizienz behaftet. Beginnend damit, dass das notwendige Gerät nicht verfügbar ist. Durch Zeitverschwendung während der Wartezeit auf ein Gerät für den Versand oder andere gerätespezifische Unzulänglichkeiten.

Mobile Device Clouds bieten intelligente Dienste an, um remote über den Desktop-Browser auf eine Vielzahl von mobilen Geräten zugreifen und diese steuern zu können. Diese Services ermöglichen spezifische High-Level mobile Funktionen, die Aktionen, die ein echter Benutzer durchführt, ermöglichen.

Neben herkömmlichen Aktionen wie Tastatureingaben und Wischbewegungen stehen auch Spezialfunktionen wie Steuerung der Sensoren, Setzen der GPS-Koordinaten, Auswahl von Netzwerkverbindungen (2G, 3G, 4G or WIFI) zu Verfügung.

Für die Zusammenarbeit von verteilten Teams stehen Desktop- und Devicesharing-Funktionen zur Verfügung.

Feature Test automatisiert

Testautomation spielt eine Schlüsselrolle bei der Senkung der Entwicklungskosten, weil unmittelbares Feedback an die Entwicklung zurück gegeben wird. Zusätzlich ist eine gut gewählte Testautomationsstrategie ein Sicherheitsnetz bei den immer kürzer werdenden Releasezyklen. Eine der wichtigsten Anwendungen für Testautomatisierung sind Regressionstests.

Vor diesem Hintergrund ist es wenig überraschend, dass Test-Frameworks für mobile Applikation in den Focus gelangt sind. Für Testautomatisierung im Bereich Webanwendungen ist das Open Source-Projekt "Selenium" das Maß aller Dinge. Kein kommerzielles Tool kann ähnliche Erfolge aufweisen. Testautomationstools für mobile Anwendungen steckten 2013 noch in den Kinderschuhen, waren durch die Plattform-Fragmentierung und die Einschränkungen der mobilen Betriebssysteme doch härtere Probleme zu lösen. Seit 2014 sind diese Kinderschuhe aber abgelegt. Einen großen Anteil daran hat die Selenium Open Source-Community. 

EBAY’s iOS-Driver [3] und Dominik Dary’s Selendroid [4] bzw. Dan Cuellar‘s Appium [5] sind auf dem besten Weg, Selenium erfolgreich in die mobile Welt zu überführen. Am weitesten verbreitet ist "Appium", die mobile Seleniumvariante, welche bei Mobilen Device Clouds großen Anklang findet.

Die automatisierten Testfälle laufen dabei lokal auf der Infrastruktur der Entwicklungsfirma und schicken die Automationsbefehle auf das jeweilige mobile Endgerät in der Mobile Device Cloud.  

Die Tests werden dabei via Buildserver, wie z. B. Jenkins [6], mehrmals am Tag ausgeführt. Das Ergebnis der Tests ist im Automationcockpit der Testobject Cloud verfügbar.

Quality Report

TESTOBJECT bietet ein Feature mit dem Namen Quality Report, mit dem auf schnelle Art und Weise Basischecks einer App durchgeführt werden. Diese Reports laufen automatisch, wenn eine neue Appversion hochgeladen wird, bzw. können manuell gestartet werden. Das Ergebnis wird übersichtlich im Test-Cockpit dargestellt. U. a. werden folgende Tests mit den Quality Reports durchgeführt:

  • Installieren und Starten: Prüft ob die App auf verschiedenen Geräten installiert und gestartet werden kann.
  • Stresstests: Prüft ob die App mit tausenden von Feldeingaben umgehen kann.

App Installieren und Starten

“Installation failed. Check your phone for details." Kennen Sie Fehlermeldungen wie diese? Was gibt es schlechteres als eine App, die nicht installiert werden kann? Vielleicht eine App, die installiert werden kann, aber dann nicht startet? Vielleicht eine App, die installiert werden kann und startet, dann aber zu einem Absturz führt?

Daniel Knott schreibt in seinem Buch "Hands-On Mobile App Testing" [7]: […] The majority of reports and surveys state that nearly 80% of users delete an app after using it for the first time! The top four reasons for deletion are always bad design and usability, loading time and crashes immediately after installation. Nearly 60% of users will delete an app that requires registration, while more than half of users expect an app to launch in under two seconds. If the app needs more time it gets deleted. Again more than half of users experience crashes the very first time they start an app.  The installation process is the first impression a mobile customer gains of an app. If the installation fails due to errors or problems, the customer will not try to download the app again and will move on to another one […].

Probleme dieser Art werden oft durch veraltete Firmware sowie Unverträglichkeit oder Beschädigung der App selbst verursacht. Aus diesem Grund sollten Installationstests in Ihrer Teststrategie berücksichtigt werden.

Beim Install & Launch-Test in der Testobject Cloud wird die App automatisch auf allen ausgewählten mobilen Geräten (100+) installiert und anschließend gestartet. Sollte bei der Installation oder beim Start der App ein Fehler auftreten, wird das Gerät in der Übersicht als fehlerhaft angezeigt. Alle notwendigen Informationen (Logeinträge, Screenshots usw.) sind im Cockpit abrufbar und erleichtern die Fehleranalyse.

Stresstest / NullPointer Exceptions

Null-Pointer sind einer der häufigsten Fehler im JAVA-Universum. Diese Fehler werden nicht beim Kompilieren entdeckt, sondern erst zur Laufzeit. Und dann in den meisten Fällen erst durch den Benutzer. Diese Art von Fehler können durch Monkeytests gefunden werden.

Auf Wikipedia [8] definiert Monkey-Test wie folgt: […] In computer science, a Monkey test (aka. Mark Testing) is an automated test that runs with no specific test in mind. The monkey in this case is the producer of any input. For example, a monkey test can enter random strings into text boxes to ensure handling of all possible user input or provide garbage files to check for loading routines that have blind faith in their data. The test monkey is technically known to conduct random testing, which is in the category of black-box testing. […]

In der TESTOBJECT Cloud kommt dabei Androids UI/Application Exerciser Monkey [9] zum Einsatz. Im Rahmen der Quality Reports wird die App automatisch auf allen ausgewählten mobilen Geräten (100+) installiert und anschließend mit dem Exerciser Monkey einem Stresstest unterzogen. Sollte dabei ein Fehler auftreten, wird das Gerät in der Übersicht als fehlerhaft angezeigt. Alle notwendigen Informationen (Logeinträge, Screenshots usw.) sind im Cockpit abrufbar und erleichtern die Fehleranalyse.

Fazit

Um der Komplexität von Anwendungstests in einem stark gerätefragmentierten Markt gerecht zu werden, müssen Entwicklungsunternehmen eine gut gestaltete Teststrategie (manuell und automatisiert) für mobile Anwendungen etablieren, welche der gewünschten Testabdeckung gerecht wird. Testabdeckung auf Entwicklerebene bedeutet Code-Abdeckung.

Auf Ebene der System- und Abnahmetests betrifft Testabdeckung die Gerätevielfalt. Die Vielfalt der Testpraktiken und der verschiedenen Testarten bei der App-Entwicklung ist groß, aber eine Tatsache ist allgegenwärtig: Das Testen auf physischen mobilen Endgeräten. Für leichtgewichtige Tests auf Entwicklerebene können Emulatoren und Simulatoren verwendet werden. Aber exploratives Testen auf realen Geräten ist der einzige Weg, um festzustellen, ob die App hält, was das Marketing verspricht.

Um effektiv und effizient die Gerätevielfalt abdecken zu können, greifen immer mehr Entwicklungsunternehmen zu einer Mobile Device Cloud. Mobile Device Clouds bieten Entwicklern und Testern Zugang zu einer Vielzahl von Emulatoren und realen Geräten mit vielfältigen OS-Profile. Mobile Device Clouds ermöglichen es Entwicklungs- und Testteams auf echte oder virtuelle mobile Endgeräte zuzugreifen. Diese einfach zu bedienende Lösung beschleunigt die Anwendungsbereitstellung, eliminiert Risiken und reduziert Kosten bei der Produktentwicklung.

(Die Meinung in diesem Artikel ist die Meinung des Autors und gibt nicht unbedingt die Meinung von Jumio Inc. wieder.)

Quellen

[1] Devicefragmentierung auf techtarget.com   
[2] TESTOBJECT Cloud
[3] EBAY’s iOS-Driver
[4] Dominik Dary’s Selendroid
[5] Dan Cuellar‘s Appium
[6] Buildserver Jenkins
[7] Daniel Knott: Hands-On Mobile App Testing
[8] Wikipedia: Monkey-Test       
[9] Androids UI/Application Exerciser Monkey

Autor

Rudolf Grötz

Rudolf Grötz ist Engineering Manager bei CISCO ServiceGrid Austria und versucht, als Head of Test Engineering die richtige Dosierung zu finden, um Software-Tests "agile" und wirtschaftlich vertretbar, erfolgreich zu machen.
>> Weiterlesen
botMessage_toctoc_comments_9210