La parole est aux speakers : Baptiste Langlade

Publié le

Jusqu’au Forum PHP 2023, retrouvez nos interviews de speakers pour mieux comprendre leur parcours et le sujet qu’ils ou elles aborderont lors de leur conférence !

La conférence

Augmentez votre couverture : supprimez des tests !

Dans notre équipe nous avons des tests fonctionnels pour garantir le comportement de notre API à nos clients. Notre application est installée "On Premise" dans une typologie hétérogène de clients. Pour nous assurer du bon fonctionnement de notre API dans un large ensemble de données, nous nous sommes tournés vers le Property Based Testing (qui nous a déjà permis d'éviter certains bugs en production).

Après 3 ans, nous avons 700 tests (pour 7000 assertions) qui s'exécutent en 50 minutes. Mais l'ajout de fonctionnalités devient compliqué car les interactions entre celles-ci génèrent un nombre exponentiel de scénarios à tester.

Le Property Based Testing nous vient de la programmation fonctionnelle et nous offre une solution linéaire pour couvrir un nombre exponentiel de tests. Le concept de cette approche est d'utiliser la génération aléatoire de données à chaque exécution pour couvrir statistiquement tout un ensemble de scénarios. Le résultat est qu'au plus on joue nos tests, au plus la confiance dans le bon comportement de l'application augmente. Et lorsque l'outil trouve un cas d'erreur, on le fige grâce à un test de non régression. En plus de générer des données nous pouvons maintenant réutiliser les tests existants pour initialiser les nouveaux. Et donc couvrir statistiquement l'ensemble des interactions entre nos fonctionnalités.

Cette conférence est un retour d'expérience de l'application de cette technique qui nous a permis d'augmenter notre couverture en écrivant moins de tests, et donc diminuer le temps d'exécution des tests. On verra notamment comment écrire ce type de tests dans PHPUnit.

Salle Johnson GHJKLM
12/10/2023
10:30-11:10

Le Property Based Testing se base sur de la génération de données aléatoires. Est-ce que ce caractère aléatoire t’a posé problème pour la maintenance de tes tests ?

Cela m’a posé problème une fois, cette année, où j’ai mal interprété une erreur qui avait l’air d’être une incohérence de données et je n’ai pas tenu compte de cette erreur; il s’est finalement avéré qu’il s’agissait d’une vraie erreur.

Cependant, dans la majorité des cas, l’aléatoire est un avantage dans la maintenance de tests car le système remonte très rapidement des erreurs dans la façon même dont j’écris mes tests.

Tu nous as parlé de Property Based Testing lors de l’AFUP Day 2020 à Lyon. Depuis, as-tu changé ta façon d’utiliser cette technique ?

Oui, initialement je l’utilisais pour écrire des propriétés indépendantes mais je m’oriente de plus en plus sur du Model Based Testing.

C’est une évolution du Property Based Testing qui consiste à lancer les propriétés plusieurs fois dans un ordre aléatoire sur un modèle pour vérifier que les propriétés sont toujours valides. Par modèle on entend un système immuable ou non, par exemple un objet ou même une application Symfony.

BlackBox n’était au départ qu’une extension de PHPUnit, mais dispose maintenant de son propre « test runner » qui facilite la composition de ces propriétés et permet de vérifier des modèles de plus en plus complexes (ce qui est plus difficile dans son usage avec PHPUnit).

Cette évolution des pratiques et de l’outil entrouvre également la porte à la création d’un Model Checker pour valider un système avant même de l’implémenter (similaire à TLA+ ou Alloy).

C’est la mise en pratique de cette évolution dans mon entreprise que je vais présenter au Forum PHP 2023.

Tu as créé la librairie formal-php/access-layer qui ajoute une abstraction autour de PDO, quelle est la genèse de ce projet ?

Dans l’écosystème Innmind, je travaille à l’implémentation d’un Système d’Acteurs. C’est la complexité de ce projet qui m’a poussé à la généralisation de l’usage des monades dans toutes mes librairies. Les monades me permettent de contenir la complexité des abstractions mais permettent également de facilement basculer sur un contexte d’exécution asynchrone (comme je l’ai montré à l’AFUP Day 2023 Lyon) ce qui est un besoin indispensable pour la création de ce Système d’Acteurs.

Et comme dans la plupart des projets vient un moment où on a besoin d’interagir avec une base de données, j’ai commencé à plancher sur un ORM qui puisse fonctionner de façon asynchrone et lazy. Ces deux contraintes permettent à un acteur de fonctionner en asynchrone et pour une durée indéterminée (puisque le problème de fuite mémoire est éliminé).

Mais pour construire cet ORM il fallait une couche bas niveau d’accès à la base de données basée sur la monade Sequence. Avec formal-php/access-layer j’éprouve le design de cette couche avant d’en implémenter une version asynchrone.

Cette librairie nous a déjà permis de résoudre un problème de volumétrie dans mon entreprise.

Une conférence présentée par

Baptiste LANGLADE
Baptiste LANGLADE
Baptiste Langlade est un architecte logiciel (certifié symfony) passionné par indexer Internet, la programmation fonctionnelle, les graphes et les neurosciences.

Autres Interviews