Mobile app testing ‘White paper’ Best pratices
Het Wielsem 10, 5231 BW ‘s-Hertogenbosch, telefoon 073-6409311 e-mail
[email protected] internet http://www.testwork.nl
Mobile app testing
Best practices
Inhoudsopgave Inhoudsopgave ........................................................................................................................................ 2 1
Inleiding ............................................................................................................................................ 3
2
Functioneel testen ............................................................................................................................ 3
3
Non-functional testing ...................................................................................................................... 4
4
Testapparaten – Fragmentatie ......................................................................................................... 5
5
Testtools ........................................................................................................................................... 6
6
Interne bèta releases ........................................................................................................................ 6
7
Ken de klant ...................................................................................................................................... 7
8
Wees actief in communities ............................................................................................................. 7
Versie 0.2
testwork.nl
Pagina 2 / 7
Mobile app testing
1
Best practices
Inleiding
Testwork werkt continu aan de ontwikkeling, hergebruik en doorontwikkeling van ‘best practices’ voor het testen van mobiele websites en apps. Die kennis stellen wij aan u beschikbaar middels zogeheten ‘white papers’. Sommige van deze ‘best practices’ zijn beschreven in dit document. Wanneer de testers denken over het testen van software, zullen ze waarschijnlijk de documentatie, functionaliteit, APl’s en de performance controleren en zeker valideren dat de software veilig is, tezamen met de vele andere attributen die te testen zijn voor dat bepaalde stuk software. Als het gaat om mobiel testen, moeten testers nadenken over mobiel-gerelateerde functies gerelateerd aan de mobiele gebruik(er)s patronen. Dit document is gebaseerd op de ervaringen, die we hebben opgedaan in Agile software ontwikkelteams van mobile apps voor iPhone, Android, Windows Phone 7 en mobiele web apps. Gedurende deze projecten hebben we veel inzichten verkregen in de uitdagende job van mobile app testing. Nu bundelen we deze ervaringen in ‘mobile best practices’, zodat het onze medewerkers kan helpen om hun testactiviteiten te verbeteren en zo onze klanten te voorzien van een hogere kwaliteit app. Sommige van deze ‘best practices’ zijn opgenomen in dit document. Het document gaat achtereenvolgens in op functional, non-functional testing en op de vraag welke apparaten voldoende geschikt zijn voor het uitvoeren van deze tests en met welke tools deze tests uitgevoerd kunnen worden.
2
Functioneel testen
Elke nieuwe functie, die is ontwikkeld moet worden getest. Functionele testen is een belangrijk aspect als het gaat om mobiele app testen. Op basis van de ontwikkelde testcases, zouden mobiele testers handmatig en geautomatiseerd moeten testen. Aan het begin van de testfase moet een tester de mobiele app handmatig testen als een "black box" om te zien of de functies die worden geleverd correct zijn en werken zoals ontworpen. Naast ‘textbook’ software testing, zoals het klikken op een knop om te zien wat er gebeurt, moeten mobiele testers functioneler, mobiel-apparaat-specifieke tests uitvoeren. Nu hebben moderne mobiele apparaten een touchscreen, welke multi-touch-gebaren vereisen om hiermee te communiceren. Apparaten kunnen worden gebruikt in portrait of landscape modus. Zij bieden beweging, tilt en gyroscoop sensoren. Ze hebben verschillende interfaces om te communiceren met andere apparaten of services zoals GPS, NFC, camera's, LED's en nog veel meer. Een mobiele software tester moet er zeker van zijn, dat de app zal werken met al deze specifieke apparaat functies, als deze worden gebruikt binnen de app. Het grote aantal verschillende mobiele apparaten betekent, dat het niet mogelijk is om deze allemaal te testen, dus moeten testers zich concentreren op belangrijke gebieden van hun app tijdens het functionele testen. Wat is bewezen zeer nuttig, maar eenvoudig te zijn, is apparaat rotatie. Tijdens onze testactiviteiten vonden we zo, veel bugs, gewoon door het draaien van het apparaat van portrait naar landscape modus en weer terug. Naast een handmatig testproces is het belangrijk om te kunnen beschikken over een goede testautomatisering voor mobiele toepassingen. Elke code wijziging of nieuwe functie kan invloed op bestaande functies en hun gedrag. Meestal is er niet genoeg tijd voor handmatig regressietesten, dus testers moeten over een tool kunnen beschikken om automatisch een regressietesten te kunnen uitvoeren. Samengevat: Test de app als een "black box" en probeer om het te ‘breken’. Open elk scherm van de mobiele app en beweeg het apparaat van portrait naar landscape en weer terug. Vergeet niet om de apparaat-specifieke functies, zoals sensoren en communicatie-interfaces, te testen. Schrijf test automatiseringsscripts voor mobiele apps. Versie 0.2
testwork.nl
Pagina 3 / 7
Mobile app testing
3
Best practices
Kies een test automatisering tool welke in de bedrijfsstrategie en de infrastructuur past. De test- en productie-code moet in dezelfde taal.
Non-functional testing
Een ander belangrijk gebied van het testen van mobiele app is het testen van de niet-functionele vereisten van een mobiele app. Er zijn diverse attributen die mobiele testers getest moeten hebben voorafgaand aan een of verdere ontwikkeling. De eerste tests die moeten worden uitgevoerd tijdens de vroege ontwikkelingsfase zouden usability tests moeten zijn. Deze moeten worden uitgevoerd door alpha gebruikers of collega's. Ga naar een café of restaurant en stel mensen vragen over hun app gebruik. Toon hen een eerste versie van de huidige stand van ontwikkeling en verzamel hun feedback. Zie om een eerste indruk te krijgen of de gebruikers in staat zijn om te werken met de nieuwe functies. Natuurlijk zijn er ook andere, officiëlere mogelijkheden voor crowd testing, bijvoorbeeld zoals aangeboden door uTest.com. Controleer de performance van de app. Vergelijk de released versie met de huidige versie om te zien of de prestaties hetzelfde, beter of misschien zelfs slechter zijn. Installeer de app op oudere apparaten om te zien als de app nog steeds hierop ‘draait’, ondanks de slechte hardware specificaties. Doe ook hetzelfde met state-ofthe-art apparaten. Test hoe de app reageert op inkomende telefoongesprekken, SMS, MMS, tweets of andere meldingen. Controleer de lading van de batterij terwijl u de app gebruikt. Zorg ervoor, dat het test apparaat volledig is opgeladen voor het testen en controleer het gebruik van de batterij elke 10 minuten om te zien of de app te veel power verbruikt. Installeer de app op apparaten met een zeer laag accuniveau en controleer wat er gebeurt. Valideer het geheugengebruik van de app. Als de app gegevens lokaal opslaat, test dan het gebruik van verschillende geheugenkaarten. Beschouw wat er zal gebeuren wanneer het lokaal geheugen bijna vol is – zal de app crashen of de gebruiker met een juist foutbericht op de hoogte stellen? Test het installatie- en verwijderingsproces van de app. Nog belangrijker is, test het bijwerkproces van een ouder naar een nieuwere versie. Misschien is de lokale database veranderd, die op zijn beurt enkele ernstige migratieproblemen kunnen veroorzaken. ls de app meertalig? Dan is het nodig, dat testers de app in verschillende talen testen. Controleer dat elke tekenreeks is vertaald in de gewenste taal. Vergeet niet om te testen op verschillende netwerkdragers en bij verschillende netwerk snelheden. Controleer dat de app werkt met CPRS, EDCE, UMTS, LTE en WiFi. Vergeet niet te controleren hoe de app reageert als de netwerkverbinding vaag is of volledig weg valt. Gebruik de app in vluchtmodus en zie wat gebeurt er als een vraag niet gehonoreerd wordt. Sluit het testapparaat aan op een computer en valideer de ontwikkel log files om te zien of er uitzonderingen, waarschuwingen of andere vreemde afwijkingen zijn. Dit zijn slechts een paar van de niet-functionele eisen waar mobiele testers en ontwikkelaars aan moeten denken bij het ontwikkelen en testen van een app. Het is simpelweg niet mogelijk om alles te controleren, maar het hele team moet voorzien in het grootste deel van de bovenstaande scenario's om te voorkomen dat de gebruiker een app als slecht ervaart. Samengevat: Voer usability tests uit. Vergelijk prestaties tussen de huidige en de nieuw(st)e versie van de app. Controleer hoe de app reageert op binnenkomende gesprekken, SMS, MMS of tweets. Versie 0.2
testwork.nl
Pagina 4 / 7
Mobile app testing
4
Best practices
Valideer het verbruik van de voiding van het test apparaat tijdens de tests. Test het geheugen gebruik van de app Installeer en verwijder de app. Test updating van een oude naar de nieuwste versie. Verifieer de vertaling in andere talen. Gebruik de app op verschillende providers en netwerk verbindingen zoals GPRS, WiFi or LTE. Controleer de log files op fouten en uitzonderingen.
Testapparaten – Fragmentatie
De belangrijkste vraag met betrekking tot mobiele test apparaten is: "Welke apparaten zijn voor het testen de juiste?". Deze vraag moet worden beantwoord, want het is gewoon niet mogelijk om het testen uit te voeren op elk apparaat! Op dit moment zijn er twee grote spelers op de markt van het mobiele apparaten: Android en iOS. Maar er zijn verscheidene andere platformen die vrij vaak afhankelijk van de geografische regio worden gebruikt. Dit zijn Windows, BlackBerry, webOS, SymbianOS en overige. Bijna elk platform heeft verschillende apparaat leveranciers die smartphones verkopen met verschillende hardware en software specificaties, evenals aangepaste gebruikersinterfaces. Bijvoorbeeld, in de Android wereld zijn er leveranciers zoals Samsung, HTC, ASUS, LC, Motorola, Sony, Huawei en veel meer. Dit is een serieus geval van apparaat fragmentatie en het is echt moeilijk om de juiste apparaten voor het testen te bepalen. Denkend aan mobiele websites is een andere uitdaging die echt pijnlijk kan zijn, als gevolg van de verschillende mobiele browsers zoals Safari, Opera Mini, Dolphin, Android en RIM native, Google Chrome, Firefox, lnternet Explorer 9 en enkele andere telefoon browsers. Dus wat is de juiste keuze voor het testen? Gewoon de recentste apparaten en browser versies gebruiken? Elk apparaat op de markt kopen? Of simulatoren of emulators gebruiken? Een kleine kanttekening over simulatoren en emulators: gebruik deze niet voor het testen! Zij kunnen nuttig zijn voor ‘basic testing’, maar de resultaten zijn niet hetzelfde als op echte apparaten. Naar onze mening is een echt goede aanpak voor het oplossen van het probleem met test apparaat om deze te groeperen in apparaten en browsers. Bijvoorbeeld, kunnen mobiele testers apparaten groeperen afhankelijk van hun hardware en softwarespecificaties. Elke groep krijgt een prioriteit, als A = hoogste, B = gemiddelde en C = laagste, toegewezen. Elke groep bevat apparaten die zijn toegewezen aan deze categorie, afhankelijk van het platform en de leverancier. Overzicht van mogelijke categorieën:
Groep 1, prioriteit C: Kleine apparaten met een kleine CPU, RAM en lage resolutie. Oudere software versies en oudere browsers. Groep 2, prioriteit B: Mid-range apparaten met een gemiddelde CPU, RAM (<512 Mb), een goede schermgrootte en resolutie. De software is niet de laatste versie. Groep 3, prioriteit A: High-end apparaten met dual/quad-core CPU, RAM (>512 Mb) en een hoge scherm resolutie. Nieuwste software versies.
Deze drie groepen dekken het merendeel van de gebruikers op een specifieke platform en vertegenwoordigen ook andere telefoons op de markt die in de zelfde groep passen. Dit zal het bedrag van de inspanning die nodig is tijdens het ontwikkelen en testen doen krimpen. Samengevat: Groep en prioriteer test apparaten en browser versies. Versie 0.2
testwork.nl
Pagina 5 / 7
Mobile app testing
5
Best practices
Gebruik geen simulatoren en emulators voor het testen.
Testtools
Momenteel zijn er een heleboel mobiele test automatisering tools op de markt, zowel commerciële en open source, voor elk ander platform zoals Android, iPhone, Windows Phone 7, BlackBerry en mobiele web apps. Afhankelijk van de strategie voor ontwikkeling en infrastructuur gaan we op zoek naar het test automatiseringstool, dat het beste past bij de ontwikkelomgeving van de opdrachtgever. Vanuit het oogpunt van Android zijn er open source tools zoals Robotium, Robolectric, Roboguice, MonkeyTalk, Monkeyrunner, NativeDriver en Calabash voor Android. Het Android test automatiseringstool Robotium is uitgegroeid tot de de-facto standaard in de open source wereld, omdat het in staat is om echte gebruikersinteractie op echte apparaten te simuleren. Het is werkelijk makkelijk te gebruiken en is gebaseerd op Android test tooling . iPhone test automatiseringstools omvatten KIF (Keep lt functionele), UlAutomation, MonkeyTalk, Calabash voor iOS, Frank, Courgette en nog veel meer. Al deze tools zijn ook in staat om echte gebruikersinteractie op een apparaat of op de iOS simulator te simuleren. Kiezen van een hulpmiddel voor test automatisering is niet gemakkelijk, maar één feit moet u altijd in gedachten houden bij het maken van een beslissing, het is van cruciaal belang dat het hulpprogramma voor test automatisering dezelfde programmeertaal moet gebruiken als de productiecode. Als de test en productiecode worden geschreven in dezelfde taal, biedt het een aantal voordelen voor testers en ontwikkelaars, zoals dat het makkelijk voor hen is om aan ‘pair’ programmering te doen. Testers kunnen uitwisselen met ontwikkelaars op hetzelfde niveau, ze kunnen vragen stellen gerelateerd aan de programmeertaal en zij kunnen code reviews uitvoeren op de test- en productiecode. Als het gaat om test automatisering, kunnen ontwikkelaars hun eigen scripts schrijven in de taal die ze gewend zijn. Mobiele testers moeten testautomatisering toepassen op mobiele apps om ervoor te zorgen dat veranderingen in de code niet van invloed zijn op de huidige functionaliteit (regressietest). Een andere ‘best practise’ is om testtools te combineren en te integreren op permanente integratie server om ze vanaf een centrale plaats te kunnen uitvoeren. Ontwikkelaars moeten unit tests voor hun code schrijven om zeker te zijn dat elk klein onderdeel veilig is en werkt zoals verwacht. Bovendien is het handig om hulpmiddelen te gebruiken zoals Robotium of Keep lt Functional om end-to-end integratie testen te implementeren, die zich op dezelfde manier als een gebruiker gedragen. Samengevat: Combineer en integreer testtools in/op een permanente integratie server.
6
Interne bèta releases
Als een mobiele team wil werken met vroege bèta testers voor mobiele app, dan kunnen ze hun eigen interne app store, bijvoorbeeld voor Android en iPhone, opzetten. Met het tool Hockeykit is het team in staat om nieuwe versies van de app te distribueren aan collega's via het bedrijfs-WiFi. Dit is een zeer nuttige manier voor het verkrijgen van de eerste feedback van collega's, vooral als het team of de tester niet een kans krijgen om de app aan de buitenwereld te tonen. Hockeykit biedt ook nuttige statistieken over hoe goed de app is getest en welke OS versies en apparaten worden gebruikt door collega's. Het bevat ook een crashreporter om te zien wat fouten en crashes veroorzaakt in de huidige ontwikkelversie. Samengevat: Gebruik interne bèta releases voor het verkrijgen een ‘vroege’ feedback.
Versie 0.2
testwork.nl
Pagina 6 / 7
Mobile app testing
7
Best practices
Ken de klant
Mobiel testen is veel effectiever als de ontwikkelaar en het testteam de klanten kent, die later de app zullen gaan gebruiken. Een goede plek om informatie te verzamelen over klanten is de app store van de specifieke leverancier (de Apple App Store, Google Play Store, Windows Marketplace, enzovoort). Als een team al een app heeft in een van de winkels, krijgt hij informatie over apparaten, softwareversies, talen en providers van de klanten die de app gebruiken. Wanneer het gaat om mobiele webpagina's, is er geen app store om dergelijke gebruikersgegevens te verstrekken. Het is dan zinvol om informatie te verzamlene over de 'user agents' (apparaten, browsers), die de mobiele website gaan gebruiken. Met die kennis, kan het team de inspanning nodig voor het ontwikkelen en testen, die nodig is voor de verschillende apparaten en software versies, optimaliseren en verminderen. Naast gebruikersstatistieken, moeten recensies van klanten in de app store zorgvuldig worden verwerkt om vitale feedback en functie wensen te kunnen verzamelen, en om te kunnen reageren op gerapporteerde bugs. Samengevat: Ken de apparaten en software versies die uw klanten gebruiken. Gebruik statistieken van leverancier’s marktplaatsen. Neem app store reviews serieus.
8
Wees actief in communities
Dit is de laatste ‘best practise’, die echter niet rechtstreeks relevant is voor dagelijkse mobiele testactiviteiten, maar u kan helpen om anders te denken en nieuwe ideeën op te doen. Wordt een actieve software tester in communities zoals:
utest (www.utest.com) mobileqazone (www.mobíleqazone.com) softwaretestingclub (www.sofiwaretestingclub.com) etc.
In dergelijke communities, kunnen software testers meningen uitwisselen met andere deskundigen (mobiele) testers op diverse testonderwerpen. Ze kunnen hun kennis delen en andere mensen helpen om de problemen, die zij ondervinden, op te lossen. Testers kunnen geweldig nieuwe ideeën ontvangen als het gaat over het schrijven van test cases, over hoe goede bug reports geschreven kunnen worden en verbeteren zo hun eigen test- en testtoolvaardigheden.
Versie 0.2
testwork.nl
Pagina 7 / 7