NCrunch automatise l’exécution des tests, ce qu'on appelle le "Continuous Testing" et nous allons voir comment utiliser cet outil.
Si vous avez déjà fait du TDD ou plus simplement des Tests Unitaires, vous vous êtes peut-être fait la remarque que le processus est un peu répétitif :
Écrire un test
Vérifier qu'il est en échec
Écrire la portion de code qui corrige le test
Vérifier que le test passe -> retour à l'étape 1
Rien de mal à ce qu'un processus soit répétitif mais il vaut mieux l'optimiser pour éviter les étapes rébarbatives. Dans notre processus les étapes 1 et 4 consistent à écrire du code (difficilement optimisable), les étapes 2 et 4 en revanchent sont des actions manuelles et obligent à attendre l’exécution de NUnit. Ces étapes cassent un peu le processus de développement, heureusement NCrunch est là.
Le Principe de NCrunch
NCrunch est un plugin de Visual Studio, vous pouvez le télécharger Ici. Une fois installé, vous pouvez l'activer dans le menu "NCrunch" -> "Enable NCrunch". Visuellement ce plugin ajoute dans la marge des points de couleur pour indiquer le résultat des tests qui sont exécutés automatiquement :
Point Blanc : Cette ligne n'est couverte par aucun test.
Point Rouge : Cette ligne est couverte par des tests qui sont en échec.
Point Vert : Cette ligne est couverte par des tests qui passent.
Point Jaune : Même chose que pour le point vert mais l’exécution de cette ligne est lente.
Ces points apparaissent à la fois dans le code et dans les tests ce qui est très pratique pour écrire des tests mais également pour modifier le code. NCrunch fait des tentatives d'exécution au fur et à mesure de l'écriture du code et parfois cette tentative à lieu alors que le code ne compile même pas. La "NCrunch Risk / Progress Bar" permet de savoir si les tests sont à jour, en train de s'exécuter, s'ils échouent ou si simplement le code ne compile pas, c'est une visualisation du moteur d'NCrunch.
Code Coverage et Metrics
Un des gros avantage de NCrunch est la visualisation du code coverage en direct. Même si le code coverage est un indicateur discutable les portions de code non couverte par des tests représentent clairement un risque et NCrunch permet de les visualiser grâce aux points blancs (Comme dans l'exemple avec ce cas n < 0 qui n'est pas testé). Cette visualisation encourage vraiment l'amélioration du code coverage et surtout la disparition des portions non testés.
Il existe dans NCrunch un écran qui rassemble les metrics, elles sont affichable par projet ou par fichier. Même si la plupart des metrics ne sont pas très utiles, le code coverage permet de trouver des fichiers qui auraient été oublié lors de l'écriture des tests.
Conclusion
Les tests sont une partie très importante dans le processus de développement logiciel, ils permettent de garantir une certaine fiabilité des livrables et également la non régression dans le cas d’apparition et de correction d'un bug. NCrunch ne modifie pas le processus d'écriture des tests mais il le fluidifie ce qui ne peut qu'encourager les gens à écrire des tests, de plus la visualisation des résultats des tests grâce aux points dans la marge permet d'avoir un meilleur retour sur ce qu'on fait quand on écrit des tests, le coté visuel rend l'écriture des tests plus fun et on se prend vite au jeu en ne voulant plus laisser une seule ligne non testé. Certains m'ont fait la remarque que cet outil était un peu "gadget", je comprends la remarque mais j'encourage les gens qui pense cela à l'essayer (d'ailleurs une version d'évaluation est disponible).
Je ne vais pas en parler plus en détails mais NCrunch permet également d'exécuter des tests sur une grille d'exécuteurs qui peuvent par exemple être sur les pc de vos collègues, vous utiliserez ainsi leurs CPU lorsqu'ils sont partis en pause café :) Microsoft vient d'annoncer la RC de Visual Studio 2017 qui inclue un outils de Live Unit Testing similaire à NCrunch, je le testerais surement dans un prochain article. Nous utilisons NCrunch sur XComponent donc si vous avez des questions sur le sujet n'hésitez pas à venir les poser sur notre Slack.