Herausforderungen beim Testen von Apps

Seite 2: App-Tests konkret

Inhaltsverzeichnis

Bekannte Strategien aus dem Softwaretest können und sollen auch im App-Test verwendet werden. Die sechs Begriffe Testziele, Teststufen, Testarten, Testmethoden, Testwerkzeuge und Testumgebungen spielen auch beim App-Test eine zentrale Rolle. Zu den Zielen gehören im App-Test der Nachweis von Funktionalität, Koexistenz/Interoperabilität, Fehlertoleranz, Benutzbarkeit, Sicherheit und Konformität.

Die Umsetzung der gewünschten Funktionen einer App sicherzustellen, ist ein grundlegendes Testziel. Gerade bei einer App ist es wichtig, Fehler zu vermeiden, da sich der Anwender sonst schnell abwendet. Im Einzelnen sollten die funktionale Vollständigkeit, die Korrektheit und auch die Angemessenheit überprüft werden. Die einzelnen Tests werden genau wie beim Desktop-Test entworfen und durchgeführt. Allerdings sind die Tests im Allgemeinen auf mehr verschiedenen Geräten durchzuführen. Dazu später mehr.

Koexistenz- und Interoperabilitätstests werden beim App-Test meist als Installationstest durchgeführt. Apps müssen sich ohne Nebenwirkungen, wie das Überschreiben von Daten in einem bestimmten Verzeichnis, auf verschiedenen Geräten installieren und deinstallieren lassen. Wegen des Sandbox-Betriebs ließ sich bislang meist auf einen Test für das Miteinander unterschiedlicher Apps verzichten. Seit dem iOS 8 ist jetzt Inter-App-Kommunikation möglich und zu testen. Sollten spezielle Schnittstellen in einer App vorhanden sein, zum Beispiel eine Verknüpfung zu einem Filialfinder einer Kaufhauskette mit Google Maps, sind diese Schnittstellen gesondert zu untersuchen. Gerade hier lauern Risiken:

  • Dienste wie Google Maps können zeitweise nicht verfügbar sein.
  • Ein eingehender Anruf kann den Arbeitsfluss des Users unterbrechen.
  • Der Speicherplatz kann wegen der untersuchten App selbst oder anderer Apps auf dem Smartphone knapp werden.
  • Die App beziehungsweise das Gerät wird vom User lange nicht benutzt und der Screensaver startet.
  • Die App wird vom User in den Hintergrund gesandt.
  • Der User benutzt den Landscape-Modus.
  • Das Gerät kann mangels Akkuenergie herunterfahren.
  • Das Betriebssystem sendet Benachrichtigungen auf das Display.

All das muss der Testarchitekt beachten, um das Testziel "Robustheit" erfolgreich zu erfüllen.

Sofern die App in Stores veröffentlicht wird, sind im Test Styleguide-Prüfungen durchzuführen. Sie unterstützen den Usability-Test. Damit die App-Nutzer sich möglichst schnell zurechtfinden, muss zusätzlich auf Farbschemata, Formen und Bedienelemente geachtet werden. Der Tester sollte auch auf eine erwartungskonforme Benutzung der App Rücksicht nehmen – zum Beispiel sollte ein Menü nicht über einem einzelnen Punkt unten rechts im Display zu erreichen sein. Sofern es einen bekannten Workflow aus einer Desktop-Anwendung gibt, sollte sich der in der App ähnlich durchführen lassen.

Wenn die App in mehreren Ländern erscheint, müssen außerdem Internationalisierungstests stattfinden. Dabei sind Maßeinheiten, die Sprache und Ähnliches zu beachten. Es kann vorkommen, dass Wörter in einer Sprache viel länger sind als in einer anderen. Das kann dazu führen, dass bei einem Button die Schrift über seine Grenzen hinaus läuft.

Performanztests sind beim Überprüfen von Apps unerlässlich. Bei einer Desktop-Anwendung ist der Nutzer an längere Wartezeiten gewöhnt. Sobald der Anwender aber auf eine App ungewöhnlich lange warten muss, verliert er die Lust an ihr. Meist fällt eine schlechte Performanz bereits während der anderen Tests auf und ist dann genauer zu untersuchen. Vorausgesetzt, der Test wird auf vielen Plattformen durchgeführt, reicht es bei lokal arbeitenden Apps gegebenenfalls aus, beim Durchführen aller anderen Tests die Performanz zu beobachten und dann gegeben falls zu reagieren. Sollten Probleme beim Test auftreten, können Performanztests einzelner Module helfen, den Flaschenhals zu finden.

Sobald Daten aus der Cloud bezogen oder in sie übertragen werden, muss man einen umfänglichen Performanztest einplanen. Auf welchen Geräten soll die App laufen? In welchen Netzen kommt die App zum Einsatz? Sofern alle Anforderungen an die App bezüglich maximaler Nutzerzahl, Verarbeitungsgeschwindigkeit der Server et cetera bekannt sind, kann ein Lasttest aufschlussreich sein. Für global verfügbare App-Dienste wie Google Maps, Online-Banking oder E-Mailing sind die Anforderungen an das Gesamtsystem meist schwer zu definieren, weil die Nutzerzahl, ihre geografische Verteilung, die Nutzungsprofile und die verschiedenen Übertragungswege weitgehend unbekannt sind. Hier muss man mit dynamischer Anpassung der Serverinfrastruktur und permanenter Codeoptimierung agieren.

Thema Sicherheit: Immer mehr sensible Daten werden auf mobilen Geräten abgelegt. Passwörter, PINs und TANs, aber auch medizinische Daten wie Blutdruck oder sogar ein Zuckerwert lassen sich speichern und in die Cloud übertragen. Mobilgeräte sind angreifbar, da sie meist permanent im Netz sind. Ein umfangreicher App-Test sollte also auch Penetrationstests enthalten. Dabei wird geprüft, ob sich die App ausspähen lässt oder gar die Kontrolle der App übernommen werden kann. Spezifizierte Sicherheitsfunktionen einer App sollten durch spezielle funktionale Tests überprüft werden. Das kann etwa ein Test für das Sperren des Displays sein. Wie verhält sich die App dabei? Was geschieht mit den gehaltenen Daten? Über welche Schnittstellen wird das Adressbuch aufgerufen?

Ein guter Test prüft auch auf Konformität. Bei App-Tests ist zu kontrollieren, ob die jeweiligen Store-Regeln eingehalten werden. Mittlerweile weiß man, wie zum Beispiel Apple eine App überprüft. Deswegen ist ein solcher Test nicht mehr so schwer wie noch vor ein paar Jahren.

Vor allem in agilen Projekten sollten Komponenten- und Integrationstests ein Bestandteil der Teststrategie sein. Alle Berechnungen, Datenverarbeitungen und Ein-/Ausgabefunktionen, die innerhalb einer einzelnen Komponente realisiert werden, sollten im Komponententest überprüft werden. Auch Negativtests gehören dazu. Im Integrationstest wird die Interoperabilität der einzelnen Komponenten überprüft. Selbst das Zusammenspiel mit Betriebssystemschnittstellen oder weiterer Hardware, wie Fitnessarmbändern, ist hier zu bedenken.

Teststufen in der Übersicht (Abb. 1)

Den "App-Test" kennt man von Desktop-Anwendungen als Systemtest. Hier wird die komplette App überprüft. Features und Funktionen, die in den anderen Teststufen noch nicht getestet wurden, werden untersucht. Hinzu kommen die Testthemen Sicherheit, Fehlertoleranz, Benutzbarkeit, Performanz und Installierbarkeit.

Ein Systemintegrationstest wird notwendig, wenn die App mit einem Serverdienst, einer anderen App oder sonst wie mit einer Cloud kommuniziert. Funktionen, die mit dieser Kommunikation zusammenhängen, werden in jener Teststufe überprüft.

Um das Problem der hohen Kombinatorik aus Geräten und Betriebssystemen zu lösen, kann man im Anschluss an all diese Teststufen noch einen Beta-Test durchführen. Hier kommt unter anderem der Crowd-Testing-Ansatz in Frage. Dazu später mehr.