Logo Spiria

Couverture de code sous Android

19 juin 2015.

Qu’est-ce quela couverture de code et pourquoi est-ce utile

La couverture de code est une représentation visuelle des lignes couvertes par les tests unitaires.De cette façon nous pouvons savoir en un coup d'oeil les lignes de codes que nos tests unitaires exécutent et trouver celles qui ne le sont pas. Par la suite, il nous sera plus aisé d'améliorer notre code en écrivant des tests pour couvrir le plus de code possible.
Par contre, le fait qu'une ligne soit couverte ne veutpas nécessairement dire qu'elle est bien testée, cela signifieseulement qu'elle a été, àun moment ou àun autre, exécutée par un test.

Couverture de code sous Android

Il existe plusieurs outils nous permettant de recueillir de l'information de couverture pour Android :
JaCoCo, IntelliJ IDEA, Clover. Un outil se démarque par sa simplicité d'utilisation: Emma qui en plus est inclus avec le SDK d'Android, donc rien à installer.

Mais nous devons d'abord nous assurer d'avoir quelque prérequisavant de pouvoir se lancer:
Ant est installé et présent dans le classpath.
Un émulateur Android ou un appareil débridé "Jailbreak"(Emma doit être en mesure d'écrire sur la cible) connecté.
Le SDK d'Android.

Ouvrez une invitede commande et allez dans le répertoire du projet que vous voulez tester et entré : "ant clean emma debug install test" Une fois la compilation terminée vous pouvez ouvrir le répertoire "bin" de votre projet, vous y trouverez, entre autres, le fichier "coverage.html". Ouvrez-le et vous devriez voir quelque chose de semblable à ça:

decorative
Les résultats parlent d'eux-mêmes, en cliquant sur un nom de classe nous voyons plus de détailssur celle-ci et sur la couverture de son code.

decorative
Une ligne rouge n'est pas couverte, une jaune l'est partiellement (dans cetexemple ça signifieque seulement quelques "cases" ont été vérifiés) et une ligne verte est entièrement couverte.

Robotium pour améliorer votre couverture

Vous avez fait de votre mieux pour tout couvrir, incluant le "mocking", mais d'importantes sections de code demeurent non testées. Celles-ci sont probablement utilisées par l'interface utilisateur, donc des tests fonctionnels peuvent aider.
J'ai besoin d'un outil qui fonctionne aussi avec des WebView, j'utilise doncRobotium(https://code.google.com/p/robotium/) Étant donné que ces tests utilisent Junit, nous n'avons pas beaucoup à faire, juste à ajouter une nouvelle classe, écrire le test Robotium et réexécuter la commande montrée précédemment.

Conclusion

Bienque la couverture de code ne soit pas une fin en soi, elle aide à repérerdespoints faibles dans le code et permet aussi de se donner des objectifs (une couverture de 50% c'est bien, viser 100% est irréaliste et vous risquezde passertrop de temps à tenter d'atteindre cet objectif plutôtque de l'investirà perfectionner des parties sensibles de votre application).
L'intégration continue est maintenant partie intégrante de nos vies de développeur et y ajouter la génération d'un compte rendu de la couverture est un effort qui peut amener à fortifier les bonnes pratiques et qui devrait être considéré pour tousles projets.