|

Dans les coulisses de mon dernier side project: les tests automatisés

Je me suis lancé dans un side project pour gérer les rétrospectives de mon équipe, une application que je construis depuis plusieurs mois et dont j’ai décidé de raconter les coulisses de la création.

L’architecture et le cadre fourni à l’IA ne suffisent pas à garantir ce qui va être produit. C’est pour cela qu’en plus de tout ça, de nombreux outils de vérification et de tests, cette fois-ci déterministes, ont été mis en place.

Si l’on devait comptabiliser le nombre de lignes de code par rapport au code de test ou qui vise à garantir le bon fonctionnement et l’alignement du code produit, la quantité de tests est supérieure à celle du code de production. Et c’est tout à fait explicable, puisque je mets moins les mains dans le code, je vais naturellement ajouter de multiples vérifications pour m’assurer que tout est OK.

Commençons par les outils classiques de qualité associés à l’écosystème PHP (et Javascript). On retrouve:

Pour donner quelques chiffres, voici la répartition des différents tests du projet:

Catégorie % PHPUnit % tous tests
Unitaire PHP 63,6 % 62,5 %
Fonctionnel 21,1 % 20,7 %
Intégration 14,7 % 14,4 %
Architecture 0,7 % 0,7 %
Unitaire JS - 1,7 %
E2E - 0,05 %
Total 100 % 100 %

En plus de ces derniers, de nouveaux contrôles plus spécifiques ont été ajoutés au fil des divers développements et évolutions. On retrouve donc des scripts dédiés au projet tels que:

  • Une vérification du CHANGELOG.md qui liste toutes les modifications et permet de générer les notes de publication lors des déploiements,
  • Des vérifications liées aux thèmes et aux contrastes du projet dans les thèmes clair et sombre,
  • Une analyse des dépendances du projet (en termes de sécurité, mais également de pertinence entre les dépendances de dev et de prod),
  • Des contrôles sur la documentation et notamment la génération des tables des matières,
  • Des contrôles sur les traductions (présence des traductions dans toutes les langues disponibles).

Bien entendu, l’ensemble de ces tests est exécuté au sein d’un environnement d’intégration continue qui, en plus de l’exécution des différents contrôles, va vérifier les données de type couverture de code ainsi que les scores de mutation afin de s’assurer que les tests couvrent un maximum de code et soient pertinents.

Jérémy DECOOL

Jérémy DECOOL

Développeur depuis plus d'une décennie, je partage mes réflexions sur les bonnes pratiques de développement, d'architecture logicielle et d'organisation d'équipe.