- La génération de code basée sur les LLM est récemment de plus en plus utilisée parmi les développeurs
- Le code généré automatiquement alimente des inquiétudes croissantes concernant la qualité du code et sa fiabilité
- Les développeurs constatent une hausse de la difficulté de maintenance des projets en raison d’une compréhension insuffisante du code et d’une validation incomplète
- La diffusion de l’usage de code non fiable a un impact sur l’ensemble de l’écosystème logiciel
- Avec les avancées technologiques, la nécessité de mettre en place des moyens de garantir la fiabilité est soulignée
Aperçu
Dans son blog, Jay aborde l’impact des récentes technologies de génération de code basées sur les LLM (grands modèles de langage) sur le développement logiciel. Si l’évolution de ces outils améliore l’efficacité du développement, elle fait aussi émerger des questions de fiabilité et de qualité du code.
L’essor des technologies de génération de code par LLM
- Dans le développement logiciel, les outils de génération automatique de code utilisant des LLM se diffusent rapidement
- Ils offrent une forte productivité pour l’implémentation de fonctionnalités complexes ou les tâches de codage répétitives
- Ils présentent l’avantage de permettre un prototypage rapide et d’alléger la charge liée à l’apprentissage de nouveaux langages
Les problèmes de fiabilité
- Le code généré par les LLM ne fonctionne pas toujours comme prévu
- L’intention et la logique de conception internes du code sont parfois floues, ce qui complique les processus de compréhension et de vérification
- Si les phases de revue et de test sont insuffisantes, des bugs ou vulnérabilités inattendus peuvent apparaître
Maintenance des projets et impact sur l’écosystème
- Le code généré automatiquement souffre souvent d’un manque de documentation et d’explications insuffisantes
- Les développeurs ont du mal à comprendre le principe de fonctionnement du code, ce qui accroît la complexité de maintenance
- Il existe un risque de dégradation de la culture de développement de logiciels fiables
Conclusion et recommandations
- Les technologies de génération de code basées sur les LLM sont innovantes, mais garantir leur fiabilité est un enjeu essentiel
- Lors de l’adoption de code généré automatiquement, la nécessité de renforcer la validation et de mener des revues de code systématiques est soulignée
- À long terme, il est important d’établir des standards pour préserver la confiance dans l’écosystème informatique
1 commentaires
Avis sur Hacker News
Partage d’un lien archive.is, qui fonctionne même sur de vieux navigateurs, et JavaScript n’est nécessaire que pour contourner CloudSnare
Un ami me dit toujours que « l’innovation avance à la vitesse de la confiance ». Depuis l’arrivée de GPT3, cette phrase me trotte dans la tête. La vérification a un coût élevé, et la confiance est un moyen essentiel de réduire ce coût. Mais je ne sais pas comment construire cette confiance avec les LLM. Ils codent et manient le langage naturel avec une grande aisance, tout en s’égarant parfois dans des directions qu’on jugerait malveillantes chez un humain
J’ai vécu ce sujet en entreprise d’une manière inattendue. Sous la pression de livrer vite, un collègue et moi avons fusionné la grosse refactorisation sur laquelle je travaillais alors qu’elle n’était encore qu’en PR provisoire. Ensuite, des bugs sont apparus dans du code non testé. Pendant le débogage, mon collègue a fini par m’avouer qu’il pensait que j’avais codé avec l’IA, et que cela l’avait frustré d’essayer de comprendre après coup du code supposément généré par IA. Or ce code était entièrement écrit à la main, très soigneusement, et les bugs venaient simplement de petites erreurs lors d’un changement d’API. Cette expérience nous a plutôt permis de mettre au jour, de façon naturelle et constructive, une tension liée à la confiance entre nous. Avec le recul, cette expérience de construction de confiance a eu du sens, et dans un autre contexte cela aurait pu devenir bien plus compliqué. Cela m’a rappelé qu’il faut toujours rester prudent
J’ai du mal à comprendre le postulat. La confiance dans le fait qu’une personne écrit du bon code vient de l’expérience réelle où cette personne a codé elle-même et produit de bons résultats. Si quelqu’un utilise un LLM et sort malgré tout du code sans bug, je lui fais confiance ; s’il utilise un LLM et produit du code buggué, je ne lui fais pas confiance. Je ne vois pas en quoi c’est différent d’un code écrit uniquement de tête
On est déjà dans cette époque-là. Je vois trop souvent des « désolé, j’ai raté ce point, vous avez raison ». Au moins 8 ou 9 fois sur 10. À l’inverse, je vois aussi souvent des gens faire du copier-coller vide de sens de code généré par LLM, puis se mettre en colère quand le résultat n’est pas à la hauteur. En fait, je préfère presque ça. Je préfère quelque chose de manifestement cassé à quelque chose qui a l’air correct en surface
Les anciens outils d’abstraction réduisaient la complexité tout en prenant pour acquis la « justesse » de l’abstraction. Bien sûr, ce n’était pas parfait et il y avait des bugs, mais ils relevaient de l’implémentation, pas d’une erreur intrinsèque. Une fois corrigés, ces outils devenaient plus robustes. Les LLM, eux, sont des moteurs de prédiction probabilistes qui n’offrent qu’une exactitude approximative sur une période donnée. Cela dit, l’auteur passe à côté d’un point : on peut construire des systèmes déterministes dignes de confiance à partir d’agents probabilistes imparfaits. Par exemple, on ne fait pas confiance à un outil de garbage collection parce qu’on croit en son auteur, mais parce que l’outil lui-même a été suffisamment testé et qu’on a montré qu’il se comporte comme attendu. À l’avenir, j’ai l’impression que le développement piloté par les tests va se renforcer. Ce ne sera plus de la confiance, mais de la vérification
Être hostile aux LLM ne sert à rien. Aujourd’hui, les LLM améliorent la productivité des développeurs. C’est encore plus vrai, au moins, pour les développeurs moins expérimentés. Un outil qui augmente fortement la productivité ne sera abandonné quoi qu’on en dise. Même si des incidents apparaissent — gros bugs, interruption prolongée de grands services — la technologie ne s’arrêtera pas si le gain de productivité reste jugé important. La seule voie réaliste est d’avancer avec cette technologie tout en corrigeant ou atténuant ses faiblesses. Et si les mesures d’atténuation nuisent au gain de productivité, elles seront contournées ; ce sont donc les compléments compatibles avec la technologie qui finiront par s’imposer
Plutôt que des politiques du style « je promets que le code contribué n’est pas un produit de LLM, qu’il est original et que je le comprends entièrement » ou « la plupart des contributions doivent être faites à la main », il faut se concentrer sur le résultat. Exiger d’un contributeur qu’il comprenne bien ses changements, c’est très bien. En revanche, des règles comme « les juniors doivent limiter ou éviter les outils LLM pendant une certaine période » me semblent médiocres. Les LLM sont très utiles pour les problèmes pénibles de configuration d’environnement à l’onboarding. Ils aident aussi à comprendre le code et la documentation, et ce sont de bons outils de recherche textuelle et de synthèse
Je découvre pour la première fois le concept d’« AI Cliff » (le moment où la précision d’un LLM chute brutalement). Je suis curieux de savoir si d’autres l’ont vécu
L’auteur du billet dit qu’il ne va pas résumer les messages de tout le monde, mais en pratique c’est un peu ce qu’il fait. Cela dit, j’aimerais bien qu’il existe dans les PR un indicateur sur les fichiers contenant du code généré par IA. Les erreurs du code LLM et celles du code humain ne sont pas du même type, donc pouvoir les distinguer ferait gagner du temps en review. Je suis curieux de savoir si quelqu’un a déjà vu ce genre de politique dans une grande organisation, ou s’il existe déjà des outils d’automatisation pour cela. Si des entreprises mesurent la part de code générée par LLM, il existe peut-être déjà des outils capables d’aller jusqu’à ce niveau de métriques