GCOV et la couverture de tests

Dans mon article précédent sur la mise en place de Sonarcloud, je pensais que pour mettre en place la couverture de code il fallait recréer tous les tests unitaires, et j’avais tout faux. GCOV permet en effet de mesure le code utilisé avec n’importe quelle méthode de tests, y compris les scripts basiques que j’utilise. Donc c’est parti pour la mise en place !

Première déception, je n’ai pas trouvé de script autotools pour intégrer proprement GCOV ! Il semble exiser une macro ax_code_coverage qui aurait été intéressante mais elle n’est pas distribuée par défaut, ne semble plus très maintenu et il y a beaucoup de dépendances. J’ai donc recopié certains bouts directement dans mes fichiers de configuration.

Dans configure.ac j’ai ajouté l’option –enable-gcov et intégré les options résultants dans les options de compilation :

Dans Makefile.am j’ai ajouté de quoi nettoyer les fichiers générés :

Je n’ai pas inclus pour l’instant la génération d’un rapport par lcov / gen_html car je compte plutôt utiliser sonarcloud, donc j’ai commenté la dernière ligne.

Pour tester en local :

Ce qui donne :

 

Il faut maintenant configurer Travis-CI et Sonarcloud pour ajouter la couverture de code.

Dans .travis.yml, j’ai ajouté la target “test” de mes scripts de tests, et la compilation des résultats par gcov :

Et dans sonar-project.properties, le chemin vers le rapport gcov :

 

Voilà c’est prêt, une fois l’analyse effectuée, dans Sonarcloud on voit enfin le nouvel indicateur de couverture :

Il est possible ensuite de naviguer dans les différents fichiers pour voir les lignes non couvertes. La navigation n’est pas super pratique, notamment un overview par fonctions aurait été pratique, mais ça fait le boulot.  Il ne me reste plus qu’à compléter les tests avec les fonctions non utilisées !

Le léger problème d’une chaine de CI, c’est que lors de la mise en place, comme tout est initié par un commit, il faut commiter pour pouvoir tester, ce qui pollue un peu avec de nombreux commits de mise au point. Il faudrait certainement mettre au point une chaine parallèle pour la mettre au point avant de l’appliquer sur l’environnement de production.

C’est donc la fin de la partie analyse et couverture de code (au moins en C/C++), peut être un complément à venir pour l’automatisation des releases.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Fermer le menu