Le premier article de notre série en trois parties sur la génération de tests avec GitLab Duo portait sur l'automatisation des tests de code. Nous allons maintenant partager les leçons que nous avons tirées de l'utilisation de l'IA pour la génération de tests.
Quelles sont les situations rencontrées et les solutions apportées ?
Dans l'ensemble, nous sommes satisfaits des résultats obtenus en utilisant GitLab Duo pour générer des tests sur notre code. Comme pour toute génération de langage, certains cas ont nécessité des ajustements mineurs, tels que la correction des chemins d'importation ou la modification du contenu des jeux de données. Pour les cas les plus complexes, nous avons dû nous rappeler que les solutions d'IA manquent souvent de contexte. Voici comment nous avons géré les situations de test plus complexes avec GitLab Duo.
Mise à jour des scénarios de test existants
Comme c'est souvent le cas lors du développement d'un produit logiciel, nous avons rencontré des situations qui nécessitaient des mises à jour de tests existants. Plutôt que d'apporter manuellement des ajustements à une suite complète de tests pour un problème commun, nous avons tiré pleinement parti de la fenêtre GitLab Duo Chat dans VS Code. Nous avons par exemple utilisé le prompt de Chat « Veuillez mettre à jour les tests fournis pour utiliser unittest plutôt que pytest » pour refactoriser les tests, puis nous avons collé les tests que nous voulions que GitLab Duo mette à jour.
Remarque : nous avons copié-collé les recommandations de GitLab Duo dans notre code.
Création de tests pour le code hérité
La création de tests pour un code hérité dont nous savions qu'il fonctionnait est une autre situation difficile que nous avons rencontrée. Dans de telles circonstances, il était utile de fournir des extraits d'erreur avec les tests échoués et de demander à GitLab Duo de proposer de nouveaux tests. Un copier-coller complet depuis la fenêtre du terminal des échecs et des erreurs constatés vers Chat, accompagné de la demande « Veuillez expliquer et corriger ce test échoué » ou de prompts similaires, a permis d'obtenir un résumé des problèmes rencontrés par le test, ainsi qu'un nouveau test permettant de les résoudre. Nous avons constaté que cela nécessitait parfois plusieurs cycles de refactorisation au fur et à mesure que de nouvelles défaillances de test étaient identifiées. L'efficacité de GitLab Duo pour fournir diverses solutions de refactorisation a toutefois été rapide et a eu un effet positif sur la productivité des équipes.
Gestion des abstractions et codes complexes
Dans d'autres instances, la modularisation ou la complexité de notre code a entraîné des variations dans les résultats de GitLab Duo. Lors de la génération de tests, GitLab Duo a par exemple parfois généré une série de tests réussis et échoués en raison de différences dans l'approche des tests. Nous avons fourni à GitLab Duo son propre exemple de test réussi et lui avons demandé de modifier les tests individuels un par un pour qu'ils correspondent au style des tests réussis afin de maintenir la cohérence. Nous avons également fourni à GitLab Duo un fichier de tests de fonctionnement pour un objet ou une tâche similaire afin qu'il puisse refléter la structure.
Vérification de la conformité du code généré à nos standards
Lors du développement d'un module Python, GitLab Duo a généré de nombreux tests à l'aide d'objets simulés Mock. Ces derniers nécessitaient souvent une refactorisation, en particulier en ce qui concerne la standardisation des noms. Dans de tels cas, nous avons pu utiliser GitLab Duo Chat pour refactoriser les tests avec des instructions sur les composants de test spécifiques à mettre à jour. Demander à GitLab Duo de procéder à ces changements a été beaucoup plus rapide que de refactoriser les tests individuellement, comme nous l'avions fait auparavant.
Gestion des scénarios non couverts
GitLab Duo a généré des tests pour des scénarios supplémentaires que l'équipe n'avait pas pris en compte auparavant, augmentant ainsi la couverture des tests. Heureusement, nous avons pu utiliser GitLab Duo pour traiter rapidement et efficacement ces cas particuliers et étendre la couverture des tests, ce qui constitue une valeur ajoutée essentielle permettant à notre équipe de construire rapidement et de manière sûre un produit robuste.
Quels enseignements avons-nous tirés ?
Voici quelques leçons clés ayant contribué à notre réussite avec GitLab Duo :
- Rapidité et efficacité pour un développement et une itération accélérés : le rôle de GitLab Duo dans la génération de tests automatisés a été un accélérateur clé du développement et a permis à notre équipe de travailler plus rapidement et avec une plus grande confiance dans nos changements.
- Utilisation de prompts appropriés : en utilisant GitLab Duo pour notre cas d'utilisation, nous avons abordé l'ingénierie des prompts, un sujet clé en matière d'optimisation de l'apprentissage automatique. Nous avons parfois dû modifier notre question de quelques mots-clés pour obtenir la réponse idéale.
- Compréhension des frameworks et du code sous-jacents : lorsqu'un code généré par l'IA est intégré à un produit, ne serait-ce qu'à titre de test, il est essentiel de comprendre comment le code fonctionne afin de pouvoir le déboguer de manière adéquate et de demander des modifications en connaissance de cause.
- Compréhension de l'état final souhaité et des normes : de la même manière que l'on respecte les normes de codage pour le formatage et l'utilisation de la bibliothèque lorsqu'on développe sans IA, il est important de garder à l'esprit les résultats escomptés et les normes à respecter lors de l'utilisation de l'IA. GitLab Duo a besoin de contexte pour comprendre les normes de codage, il est donc essentiel que les membres de l'équipe qui utilisent GitLab Duo assurent une supervision adéquate de ses résultats afin de garantir le respect de la qualité ainsi que d'autres attentes.
- GitLab Duo ne remplace pas tous les tests : bien que nous utilisions GitLab Duo de manière significative pour générer des tests automatisés, ce dernier ne remplace pas nos autres tests et la supervision humaine. Les tests fonctionnels, les tests d'intégration et d'autres encore occupent toujours une place importante dans le processus d'assurance qualité et dans le cycle du développement logiciel.
Dans le prochain article de cette série, nous aborderons un test que nous avons effectué pour valider l'impact de GitLab Duo sur les tests automatisés de notre équipe et nous discuterons des résultats impressionnants que nous avons obtenus jusqu'à présent.