• Date de publication
    26 novembre 2024
  • Share

Créer un code bien conçu et correct est l'objectif de tout développeur. Une méthodologie qui se démarque pour y parvenir est le développement piloté par les tests (TDD). Bien que le TDD ne conçoive pas votre code ou ne l'écrive pas à votre place, il s'agit d'une méthodologie de développement logiciel qui vous permet d'obtenir un retour rapide sur les décisions de conception dans un cycle de développement itératif. 

Le choix d'écrire des tests unitaires avant ou après le codage ou de ne jamais écrire de tests dépend du choix du développeur. Évidemment, ne jamais écrire de tests entraîne des situations critiques en production, si le développeur a de la chance, il découvrira des erreurs lors de l'étape des tests manuels. 

Il est préférable d'écrire des tests après avoir terminé le code plutôt que de ne pas avoir de tests. La plupart des développeurs, y compris nous, appliquent directement l'approche du code d'abord avant d'écrire des tests. Néanmoins, le code écrit n'est pas meilleur. Certaines erreurs fonctionnelles seront présentes si nous oublions le cas de test. Il est bien préférable d'écrire les cas de test qui échouent avant pour chaque morceau de code, puis d'ajouter le code pour que ce test réussisse en suivant le cycle TDD.

Actuellement, nous discutons de la manière dont nous pouvons utiliser l'IA générative pour rendre notre travail plus automatisé. Dans ce travail, nous introduisons une nouvelle expérience inspirée par Le blog d'Allen HeltonNous écrivons plusieurs cas de test pour le projet, puis demandons à ChatGPT de générer le code lié aux tests. 

IA générative pour le développement axé sur les tests 

Étant donné le risque d'erreur humaine dans les tests manuels, la question se pose : pourquoi ne pas automatiser le TDD à l'aide de l'IA générative ? L'IA générative peut jouer un rôle transformateur dans le TDD en automatisant la création de tests unitaires et du code correspondant. Voici un flux de travail proposé :

  1. Tests écrits par les développeurs : les développeurs commencent par écrire les tests unitaires initiaux, en spécifiant les résultats souhaités pour leur code.
  2. Code généré par l'IA : l'IA générative lit ces tests unitaires et produit le code nécessaire pour les réussir. Si le code s'exécute correctement, il est enregistré sur le disque. Dans le cas contraire, l'IA génère un rapport d'erreur et tente de produire à nouveau le code correct, créant ainsi une boucle jusqu'à ce que les tests réussissent. En intégrant l'IA de cette manière, les développeurs peuvent s'assurer que leur code est minutieusement testé et validé, minimisant ainsi le risque d'erreurs.
Ekran Resmi 2024-11-04 13.29.43.png

Avantages de l'utilisation de l'IA générative dans le TDD

L'automatisation du processus de génération et de test du code peut accélérer considérablement les cycles de développement. Elle réduit également le risque d'erreur humaine dans les cas de test et l'écriture du code. Ce faisant, elle garantit que tous les tests sont couverts de manière exhaustive et cohérente et permet de faire évoluer facilement le processus de développement sans augmenter la charge de travail manuelle.

Défis potentiels et solutions

Bien que l'intégration de l'IA générative dans TDD offre de nombreux avantages, elle n'est pas sans défis. La configuration initiale des systèmes d'IA pour TDD peut parfois être complexe et prendre du temps. Les développeurs peuvent avoir besoin d'une formation pour utiliser efficacement et faire confiance aux outils d'IA. Mais même si les développeurs sont prêts à le gérer, l'IA peut avoir du mal avec des cas uniques ou extrêmes qui ne sont pas bien représentés dans les données de formation, ce qui peut perturber les scénarios demandés. L'IA générative répond avec un code décent, mais ce n'est pas le meilleur choix. Car le code n'applique aucun mécanisme de rétroaction. Pour produire un code de qualité, nous devons appliquer des mécanismes de rétroaction à l'IA comme l'approche de révision du code des développeurs. Nous pouvons combiner l'IA avec la surveillance humaine pour gérer des scénarios complexes, du moins pour l'instant. :)

Feedback appliqué à l'IA générative dans le TDD

Ekran Resmi 2024-11-04 13.31.52.png

Mécanisme de rétroaction

Pour affiner davantage le processus, un mécanisme de rétroaction peut être introduit. Les développeurs écrivent les tests unitaires et un agent développeur génère le code. Une nouvelle couche de contrôle est ajoutée avec un agent de révision de code, qui examine le code et fournit des commentaires à l'agent développeur.

Amélioration itérative

L'agent développeur révise le code en fonction des commentaires de l'agent réviseur et le soumet à nouveau pour révision. Ce processus itératif se poursuit jusqu'à ce que le code passe la révision avec succès.

Test final

Une fois le code approuvé par l'agent de révision, les tests unitaires sont exécutés. S'ils réussissent, le code est enregistré. S'ils échouent, un rapport d'erreur est généré et le processus revient à la génération de code.

Essentiellement, le flux de travail serait le suivant :

  1. Le développeur écrit les tests unitaires.ev
  2. L'IA lit ces tests et génère le code nécessaire.
  3. Si les tests s'exécutent correctement, le code est enregistré. Dans le cas contraire, un rapport d'erreur est généré et l'IA tente de corriger le code en boucle.
  4. Cette automatisation initiale peut produire du code sujet aux erreurs, c’est là qu’entre en jeu le mécanisme de rétroaction.
  5. Les développeurs écrivent les tests unitaires et l'agent de développement génère le code et les méthodes requis.
  6. Un agent réviseur de code examine le code et envoie des commentaires à l'agent développeur.
  7. L'agent développeur affine le code en fonction des commentaires et le soumet à nouveau pour révision.
  8. Ce cycle continue jusqu’à ce que l’agent réviseur de code approuve le code.
  9. Une fois approuvés, les tests unitaires sont exécutés. En cas de succès, le code est enregistré ; dans le cas contraire, un rapport d'erreur est généré et la boucle continue.

En intégrant un mécanisme de rétroaction, la qualité du code généré s'améliore considérablement, garantissant qu'il répond aux normes nécessaires et passe tous les tests de manière fiable.

Conclusion

L'intégration de l'IA générative dans le développement piloté par les tests (TDD) a le potentiel de révolutionner le développement de logiciels. En automatisant la génération de tests unitaires et du code correspondant, les développeurs peuvent garantir une meilleure qualité de code, réduire les erreurs et rationaliser leur flux de travail. Bien qu'il y ait des défis à relever, les avantages dépassent de loin les obstacles initiaux, ce qui en fait une approche prometteuse pour l'avenir du codage. Vous pouvez consulter notre Codeur IA projet si vous êtes intéressé à soutenir la programmation utilisant l'IA générative. 

Directions futures

Nous prévoyons de développer cette approche sur trois points :

  • Extension de la prise en charge linguistique : bien que nous nous soyons concentrés sur Java, cette méthodologie peut être étendue à d’autres langages comme Python, JavaScript, etc.

  • Génération de tests automatisée : nous pouvons demander à l'IA générative d'écrire les tests en fonction des exigences de haut niveau fournies par les développeurs au lieu d'avoir des tests écrits manuellement. 

  • Extension de l'équipe Agentic AI : au-delà d'un simple réviseur de code, nous pourrions introduire des agents plus spécialisés tels qu'un agent QA pour tester les cas extrêmes, un agent de performance pour optimiser les performances du code, etc.

Nous recommandons à chaque développeur de logiciels de consacrer son temps à écrire des cas de test plus robustes et plus précis, puis de bénéficier de la puissance de l'IA générative pour produire du code de haute qualité.