Tout d’abord, Android, c’est quoi ? Android est certainement le logiciel qui s’occupe de votre téléphone si vous n’avez pas d’iPhone dans votre poche. Ce système d’exploitation open source est développé par Google depuis son rachat en 2005.
Pour préciser le contexte, Android c’est un parc de plus d’1 milliard de téléphones ou de tablettes, ainsi que des lunettes connectées, des montres intelligentes, des téléviseurs, des consoles de jeux vidéo, des autoradios… [1]
Android, c’est aussi une croissance exponentielle avec plus d’1,5 millions de nouveaux périphériques activés chaque jour.
Des chiffres fous mais Android c’est aussi plus de 5 500 périphériques différents, produits par plus de 280 constructeurs[2] et fonctionnant actuellement sur 8 versions d’Android différentes… ce qui mène à un véritable casse-tête lors des tests d’une application !
Il devient particulièrement difficile d’assurer le bon fonctionnement d’une nouvelle application sur chacun des 5 500 périphériques, selon la version d’Android, les spécificités de l’équipement, la résolution et la taille de l’écran, etc. Sur la plateforme Android, c’est d’ailleurs un des problèmes majeurs, appelé la fragmentation.
Alors, comment s’en sortir dans tout ça ? Pour répondre à cette problématique, Google a mis à disposition, dans le kit de développement Android, un outil permettant de simuler des configurations de téléphone sur son poste, permettant ainsi de nous affranchir de l’équipement réel. Cette solution, appelée émulateur, offre un premier niveau de test : l’affichage et les réactions de l’application peuvent être observés sur l’équipement simulé.
D’autres solutions d’émulation existent offrant plus ou moins de fonctionnalités. Nous pourrions notamment citer GenyMotion (et cocorico ! c’est français !) qui apporte une très bonne alternative à l’émulateur Android qui présente des lenteurs de fonctionnement.
Par ailleurs, des solutions de test dit de cloud(tel que Testdroid Cloud) sont disponibles et permettent de tester une application sur des périphériques physiques accessibles en ligne, renvoyant les affichages écrans et les plantages éventuels sur tel ou tel équipement.
L’enjeu est réel et sérieux : le secteur des applications mobiles est un marché dense (le Google Play, store d’applications, contient plus d’1 million d’applications), très dynamique (plusieurs dizaines de milliers de nouvelles mises en ligne chaque mois), extrêmement concurrentiel (seulement 9 000 applications dépassant le million de téléchargements[3]) et s’y faire une place n’est pas chose aisée.
Une mauvaise application, peu ergonomique et/ou peu fluide sera immédiatement passée à la trappe.
Nous le savons très bien, nous sommes aussi des consommateurs : combien nous faut-il de temps pour juger une application et, dans le pire des cas, la supprimer ? Quelques minutes seulement… Et hors de question de penser aux développeurs et aux coûts : ce n’est pas notre problème !
Et, en tant que professionnel, c’est bien à cela qu’il faut penser : assurer une qualité optimale du produit tout en réduisant les coûts.
Ainsi, pour se faire une place dans la concurrence, il faut savoir livrer très vite une nouvelle application tout en garantissant le plus haut niveau de qualité. Cela passe par une approche itérative, dite « agile » qui permet de réduire les cycles de développement en mettant à disposition rapidement et fréquemment de nouvelles versions à ses utilisateurs.
Pour obtenir le niveau de qualité escompté, il est nécessaire de dérouler entièrement le cycle de test de l’application pour chaque nouvelle version, sur chaque fonctionnalité et sur le plus de téléphones possibles. Ceci, pour également éviter des « régressions » (et/ou bugs) qui peuvent vite conduire à l’abandon de l’application par l’utilisateur, comme on le sait tous.
Pour réduire le coût et la charge induite par ces tests fréquents et lourds, pas de secret, il faut automatiser ! Pour cela, plusieurs solutions existent.
Nous pourrions d’abord évoquer le test du singe (inspiré par « le paradoxe du singe savant ») qui va générer des centaines, voire des milliers d’interactions aléatoires pour évaluer la robustesse de l’application et retourner les erreurs de plantage (monkeyrunner dans le kit de développement Android). Il est d’ailleurs très surprenant de voir son smartphone agir tous azimuts sur une application.
Au niveau des outils d’automatisation de tests fonctionnels, il existe plusieurs solutions. D’abord l’Android Test Framework fourni dans les outils de développement (mais relativement incomplet), MonkeyTalk, Appium, Robotium, Espresso et Roboelectric pour ne citer qu’eux (soit dit en passant, Espresso est une solution récente, maintenue par Google et, de fait, à suivre de près).
Ce panel de solutions offre une réponse à la problématique de fragmentation, d’une part, et de l’exigence de qualité qui pèse sur chacune des applications présentes sur le store, d’autre part.
Chaque solution se concentre sur un besoin particulier (test IHM, unitaire, fonctionnelle) et le fait de les associer permet de s’approcher d’un résultat optimal.
Ainsi, en combinant un outil de tests IHM, de tests fonctionnels, de tests unitaires, un émulateur performant (ou mieux encore, une batterie de véritables téléphones) le tout coordonné par une usine logicielle permettant l’intégration continue des nouveaux développements, il devient possible d’obtenir une solution de test solide.
Et, pour se prétendre performant sur le sujet du développement mobile Android, une telle mise en place est plus que nécessaire pour ne pas dire indispensable.
Romain Rolland
Ingénieur Etude & Développement Android
Partager sur :