Les tests unitaires sont devenus (ou redevenus) des éléments essentiels du cycle de vie de construction d’une application. Mais, comment mesurer précisément si les tests unitaires couvrent bien tous les cas possibles dans une application ?

Bien que rien ne puisse totalement remplacer la vérification manuelle, celle-ci reste difficile et coûteuse en temps.

Couverture de test

Les outils de couverture de code (code coverage tools) répondent partiellement à cette question, et facilitent ainsi la tâche des développeurs. Au cours de l’exécution des tests unitaires, ces outils vérifient si toutes les parties du code source sont effectivement parcourus par les tests. Et, ils permettent ainsi de voir précisément quelles parties du code ne sont pas testées.

Plusieurs outils existent et pour presque tous les langages de programmation. Dans le monde Java, nous pouvons par exemple trouver Clover de l’éditeur Atlassian, et Cobertura ou Emma qui sont livrés avec des licences libres.

Ces outils peuvent produire des rapports, notamment au format XML et HTML, et peuvent ainsi être utilisés dans une chaîne de build continu. Par ailleurs, ils sont aussi souvent intégrés aux environnements de développement, et permettent au développeur d’avoir une vue détaillée de la couverture de ses tests.

Tests de mutation

Les outils de couverture de code s’avèrent extrêmement utiles durant la phase d’écriture des tests. En revanche, c’est bien au développeur de d’assurer de la pertinence des parties testées. Pour l’aider dans cette tâche, certains outils, comme les tests de mutation, permettent, quant à eux, de vérifier la pertinence des tests.

L’approche des outils de test de mutation (comme Jester pour Java, ou Nester pour C#) est différente de celle des outils de couverture de code. La technique des tests de mutation consiste à changer le code source de l’application et à exécuter les tests pour vérifier s’ils échouent. Par exemple, une condition if (a > b) pourra être transformé en if (false). Si, après la mutation, le test passe toujours, c’est peut être une indication que le test est incomplet.

En conclusion

Les outils de couverture de code sont véritablement utiles. Il donnent des indices qui permettent d’améliorer la qualité des tests. Mais, il ne faut cependant pas perdre de vue que la couverture intégrale du code ne signifie pas pour autant que le code est intégralement testé. Au delà, les tests unitaires sont bien nécessaires, mais certainement pas suffisant ; il devront être complétés par des tests fonctionnels.

Références

Couverture de test

Tests de mutation