Un premier pas modeste dans la génération de tests

Dans le domaine du développement de logiciels, le test de code est une tâche primordiale qui ne doit jamais être négligée. Chez Berger-Levrault, nous prenons cette responsabilité au sérieux et appliquons une politique stricte qui inclut la mise en place d'une intégration continue (CI) et de barrières de qualité dans notre serveur SonarQube. Les tests ne soutiennent pas seulement les diverses activités des développeurs, mais servent également de source précieuse de documentation, décrivant le comportement attendu d'un système ou de ses composants.

Comme Berger-Levrault est en train de migrer ses applications en utilisant la technologie Casino, nous sommes souvent confrontés au défi de moderniser le front-end tout en préservant autant que possible le back-end. Cela soulève toutefois une question cruciale : Comment s'assurer que le comportement du back-end reste cohérent pendant le processus de migration, en particulier lorsque des modifications sont nécessaires ?

Pour relever ce défi, nous sommes fiers de présenter Modest, notre outil innovant de génération de tests, conçu avec Evref et dévoilé en mars à nos unités opérationnelles et transversales. Il est conçu pour les tests de non-régression utilisant des traces d'exécution. Dans ce billet de blog, nous allons approfondir les capacités de Modest et démontrer comment il peut révolutionner la génération de tests d'application.

Utiliser Modest en tant qu'utilisateur

L'utilisation de Modest est très simple. Modest est livré comme une boîte noire en plus d'un agent Java pour votre application. Il vous suffit d'exécuter les étapes suivantes

  1. Démarrez votre application avec l'agent OpenTelemetry.
  2. Jouer avec votre application
  3. Lancer Modest (il collectera les traces, les analysera et générera des tests)
  4. Intégrer les tests dans votre application
  5. Exécuter les tests

Une plongée en profondeur dans les étapes et les exigences de Modest

Examinons maintenant les étapes et les exigences du processus de Modest.

De la base de code au modèle de codeDe la base de code aux tracesDe traces au modèle de valeurModèle de valeur et modèle de code construire un modèle de test unitairefinalement un modèle de test unitaire générer un test unitaire
Les étapes de Modeste

Actuellement, Modest se concentre sur les applications Java, générant des tests Junit4 ou Junit5.

Pour instrumentationPour les tests, nous utilisons OpenTelemetry (compatible avec Dynatrace) et un agent personnalisé. L'agent consiste en seulement quatre classes avec un code minimal qui définissent les méthodes instrumentées et, par conséquent, les méthodes pour lesquelles les tests sont générés. Notamment, notre approche ne nécessite aucune modification de la base de code d'origine. Dans le cas d'Omaje, les méthodes instrumentées sont les méthodes de la couche service, ce qui nous permet de générer des tests pour tous les services et, par conséquent, pour l'ensemble du back-end d'Omaje.

Modest alors analyse la base de code pour produire un modèle de codequi est une représentation de la base de code pouvant être utilisée pour une analyse plus approfondie. Pour ce faire, l'outil Modest est développé en Pharo, en s'appuyant sur la Moose La plateforme d'analyse logicielle Moose est un outil qui fait déjà partie intégrante de nombreux projets de recherche récents. Cet outil fait déjà partie intégrante d'un grand nombre de nos projets de recherche récents et fait partie des travaux entammés avec le contrat majeur signé entre Berger-Levrault et l'Inria. Il permet d'analyser facilement le code source, de générer du code et de le visualiser afin de mieux comprendre les bases de code.

En même temps, Modest extraits un modèle de valeur à partir des traces générées, en utilisant les arguments sérialisés et la valeur retournée de chaque appel, et relie ce modèle de valeur avec le modèle de code. Sur la base de ces deux modèles, il construit un modèle de test unitaire : la représentation des tests qui doivent être générés pour tester votre application.

Enfin, il génère sans effort un code de test unitaire et l'ajoute à la base de code.

Exemple de test unitaire généré par Modest

Les tests unitaires générés suivent le modèle Arrange-Act-Assert. Le Organiser reconstruit les arguments et la valeur retournée obtenus à partir de la trace. La phase Agir exécute la méthode testée avec les mêmes arguments. Enfin, la phase Affirmer vérifie que la valeur de retour réelle correspond à la valeur attendue de la trace.

Retour d'information et travaux futurs

Suite à la présentation de l'outil Modest, nous avons reçu des commentaires précieux de la part de différentes équipes, qui ont façonné notre travail futur :

  • Améliorer encore les tests générés en déplaçant la partie configuration des tests vers des fichiers spécifiques pour une meilleure gestion des fichiers de test.
  • Explorer l'utilisation de Postman (un outil déjà largement utilisé par nos équipes) pour créer des traces qui peuvent ensuite être utilisées pour générer des tests.
  • Trouver un moyen efficace de mettre à disposition Modest pour l'équipe de production, avec des fichiers de configuration pour une utilisation facile.

Nous sommes également ravis de vous annoncer que l'équipe d'Omaje a a trouvé les tests générés maintenables et lisibles. La prochaine étape consistera à les intégrer pleinement dans la production d'ici cet été.

Conclusion

Avec ModestBerger-Levrault fait un grand pas en avant pour rationaliser la migration des applications et donner aux développeurs les moyens d'agir pour maintenir un code de haute qualité. Nous sommes impatients de voir l'impact transformateur que Modest aura sur nos processus.

Plus ...

Retour en haut