AI Augmented Developer: Intégrer la GenAI dans la toolbox des développeurs

Introduction

L'intelligence artificielle a-t-elle un impact sur le développement logiciel? Pour les uns elle rendra le processus de développement plus efficace et productif, pour les autres elle n’est qu’un effet de mode et ne fera que ralentir ce processus. Nous avons déjà réalisé un premier retour d’expérience sur notre utilisation de l’assistant de développement Github copilot dans cet article.

À mesure que le monde des LLM évolue, la roadmap des fournisseurs d’assistants de développement s'enrichit avec de nouvelles fonctionnalités. La pertinence des suggestions de code proposées par ces assistants continue d'évoluer d’après ce papier. La promesse des avantages tels que la réduction du temps et des efforts nécessaires pour coder se concrétise de plus en plus. Néanmoins, tous les développeurs ne sont pas de cet avis, il n’est donc pas surprenant que l'IA dans le développement logiciel soit un sujet brûlant de nos jours. La clé d’un déploiement réussi d’outils d’aide au développement dans votre organisation est le renforcement des bonnes pratiques de développement portées par le courant sur Software Craftsmanship.

Gain de productivité: entre mythe et réalité, ne succombez pas au discours marketing

Quand on parle de Gen AI pour les développeurs, on parle souvent d’outils qui s’intègrent dans l’IDE, comme Github Copilot, Google Gemini (ex Duet AI) ou Tabnine.

Ces outils proposent deux mécanismes d’interaction principalement pour générer du code :

  • Un mécanisme d’autocomplétion
  • Et un Chat avec un prompt

Notre expérience avec ces outils démontre que la Gen AI est plutôt pertinente dans :

  • La génération de petits blocs de code, de tests et de documentation.
  • L'explication et la refactorisation d’un bout de code simple.
  • La création d'applications très simples ou de preuves de concept (POC) en phase d'innovation. (Ceci permet de limiter les recherches sur Stack Overflow)

Cependant, la Gen AI montre ses limites lorsqu'il s'agit de :

  • Développer des applications complètes ou complexes.
  • Faire évoluer une application existante.
  • Faire du refactoring d’une application.
  • Sur les dernières versions de frameworks qui viennent de sortir et sur lesquelles la codebase disponible pour l'entraînement est limitée.

Les éditeurs et cabinets de conseil vantent souvent des gains de productivité miraculeux grâce à la Gen AI. L'étude Today was a Good Day : The Daily Life of Software Developers révèle qu’écrire du code ne représente au mieux que 40% du temps d'un développeur, les gains générés par ces outils se limitent donc à cette portion. Au mieux, l'optimisation se situe entre 10% et 15% . décomposition du temps de développeur

Les gains de productivité sont donc réels, mais relatifs ! Il est crucial de souligner que ces gains de productivité ne sont ni universels ni homogènes. Notre expérience montre que les développeurs de niveau intermédiaire à avancé en profitent le plus, tandis que les experts en tirent peu d'avantages et que les débutants peuvent même être pénalisés s’ils ne sont pas bien accompagnés. Les gains de productivité ne sont pas équi-répartis

Le déploiement de ces outils dans votre organisation doit tenir compte de la maturité de vos développeurs. Un accompagnement adapté aux besoins de chaque développeur est indispensable pour maximiser les bénéfices et en particulier pour garantir la qualité et la sécurité du code produit.

Le CRAFT au chevet des assistants de code: l’alliance inimaginable?

L'impact de la GenAI sur la qualité du code varie considérablement selon le niveau de maturité des développeurs. Rappelons que les assistants de génération de code n’ont pas connaissance des besoins utilisateurs ni du contexte métier. Ils ne sont absolument pas là pour faire du design applicatif. Les approches Domain Driven Design et Model Driven Design piloté par l’humain restent un bon moyen de comprendre le contexte et de faire face à la complexité du métier.

Pour déployer un assistant de code il faut être vigilant sur la pyramide de séniorité de vos équipes de développement, et leur niveau de maturité !

  • Un développeur junior inexpérimenté pourrait involontairement dégrader la qualité du code en se fiant aveuglément aux suggestions de l'IA. En revanche, un développeur chevronné possède le recul et l'expertise nécessaires pour évaluer les propositions de l'IA, identifier les erreurs potentielles et les corriger.
  • Les séniors sont essentiels dans vos équipes, pour déployer les pratiques du software Craftsmanship qui deviennent alors fondamentales, pour sécuriser le déploiement de la Gen AI. (Pair programming, Peer review, TDD, DDD, etc)

La culture CRAFT s'avère essentielle pour un déploiement réussi de la Gen AI. Ces principes favorisent la collaboration, la revue de code et le partage des connaissances, permettant aux développeurs expérimentés de guider et de superviser l'utilisation de l'IA par leurs collègues moins expérimentés. Au-delà des pratiques techniques qui sont obligatoires pour apprendre à faire du bon travail d'artisan codeur, c'est surtout l’esprit du compagnonnage prôné par le CRAFT qui vient sécuriser le déploiement de ces outils et se positionner comme un rempart face au risque d'hallucinations des LLM. L’outillage dopé par la GenAI devient un allié pour renforcer les bonnes pratiques et perpétuer la collaboration.

Amélioration de la qualité du code : un code bien conçu, lisible et maintenable n’a pas de prix. Des outils comme GitHub Copilot n'améliorent pas intrinsèquement la qualité d’un code de mauvaise qualité. Cependant, en proposant des suggestions de code contextuelles basées sur les fichiers ouverts dans l’IDE, peuvent aider à générer du code de qualité qui s'inspire des pratiques existantes de développement. Cela permet aux développeurs de maintenir un haut niveau de qualité tout en bénéficiant d'une assistance précieuse au sein de l'IDE. Ces outils n’ont pas qu’une vision partielle de la codebase. Une qualité locale n’est pas synonyme de qualité globale. Une supervision humaine reste de mise pour une cohérence globale. Le “collective code ownership” a encore de beaux jours devant lui.

Apprentissage et amélioration continue : l’esprit Craft pousse à chercher des meilleures façons de faire. C’est un des avantages plébiscité du pair programming. Quand vous êtes seul face à votre IDE les suggestions d’un assistant “s’apparentent à du pair programming” et vous donnent la possibilité de voir des nouvelles façon de faire le même code. Cela stimule la réflexion critique et encourage l’exploration de nouvelles pistes auxquelles vous n'auriez pas pensé. Pour preuve le témoignage d’un de nos consultants les plus expérimentés “J'ai souvent utilisé chatGPT / Copilot pour prendre du recul sur mon problème, avoir des suggestions qui alimentent mon cerveau. Les IA disposent rarement de LA réponse, mais ça m'a aidé à de multiples reprises

Collaboration et partage de connaissance : des outils comme packmind facilitent la collecte des pratiques exemplaires de l’équipe que vous voulez ériger en standard. Cette collecte se fait directement dans les IDE ou pendant la revue de code. Ces pratiques sont partagées et discutées collectivement en revues en équipe. Celles qui auront été acceptées et érigées en standard d’équipe seront dorénavant automatiquement contrôlées dans l’IDE. Les suggestions d’un outil comme Copilot tiendront aussi compte de ces standards d’équipe. Le principe de revue de pratique prôné par le Craft vient ici favoriser la discussion et l'adoption de nouvelles pratiques et l’outillage GenAI se pose en contrôle du respect de ces pratiques.

Amélioration de la sécurité du code: les failles de sécurité dans le code généré par un assistant sont plus difficiles à déceler. La génération automatique de code ne fonctionne généralement qu'avec de petits morceaux de code à la fois. Par conséquent, s'il est utilisé pour produire une grande quantité de code, les développeurs peuvent potentiellement s'exposer à des risques car l’assistant ne prend pas en compte les problèmes inter-fichiers ou multi-niveaux. La revue de code systématique prônée par le Craft devient encore plus d’actualité pour déceler les risques de sécurité imbriqués. D’autre part, des vulnérabilités dans les librairies sont détectées régulièrement. Une bonne pratique recommandée est l’automatisation des checks de dépendance, cependant toutes les vulnérabilités ne se valent pas. Parfois un refactoring s’impose et les bonnes pratiques de refactoring issues du Craft seront votre meilleur allié.

Conclusion

L'adoption de la Gen AI dans le développement logiciel se développe, mais de manière mesurée. La pertinence des suggestions s’améliorent régulièrement. Bien que les promesses de productivité soient le premier levier mis en avant, ce nouvel outil nécessite de renforcer les bonnes pratiques de qualité de code.

En effet, il est crucial de plonger dans cette évolution technologique avec un sens aigu du CRAFT, c'est-à-dire, une maîtrise et une maturité techniques élevées au sein de vos équipes. Cette transition doit s'accompagner d'une vigilance constante sur les implications éthiques (propriété intellectuelle, impact écologique…), de sécurité, et de gestion du changement. La Gen AI a un beau potentiel pour transformer vos façons de faire du logiciel. Elle va encore creuser le fossé entre les organisations performantes, celles qui ont déployé et maîtrisent les pratiques du software craftsmanship et les organisations qui peinent à sortir des produits de qualité avec un TTM convenable.