Smells of AI-Generated Code.
Recurring problems in code written by AI coding assistants — how to recognize each one, why models produce it, how to fix it, and the rules that detect it.
Un assistant IA enveloppe du code dans des fonctions, classes ou interfaces supplémentaires qui ajoutent une couche d'indirection sans masquer la moindre complexité ni permettre la réutilisation — des abstractions qui ne font que rediriger vers un unique site d'appel.
Les assistants IA ont tendance à coller une copie fraîche et légèrement modifiée d'une logique existante au lieu de réutiliser ou d'extraire une fonction partagée, gonflant le code dupliqué tandis que la refactorisation disparaît discrètement.
Les assistants IA empilent du code nouveau et quasi dupliqué à côté de l'existant au lieu de le restructurer, si bien que la duplication grimpe et que le refactoring — le travail de remise en forme qui garde une base de code saine — disparaît discrètement.
Le modèle écrit à la main du code sur mesure pour quelque chose qu'une bibliothèque standard, une dépendance existante ou un helper déjà présent dans le dépôt fait déjà — ajoutant une logique dupliquée et moins testée au lieu d'appeler ce qui existe déjà.
Code généré par IA qui appelle des fonctions, méthodes, paramètres, clés de configuration ou paquets qui semblent plausibles mais n'existent pas dans la version réelle de la bibliothèque dont vous dépendez.
Les assistants IA tendent à générer du code qui ne gère que le cas réussi et bien formé — en sautant la validation des entrées, la gestion des erreurs, les vérifications de null/vide et les cas limites — si bien que le code marche dans la démo et casse en production.
Les assistants IA produisent du code fonctionnel qui omet silencieusement les contrôles de sécurité qu'un humain ajouterait par habitude — validation des entrées, autorisation, encodage des sorties, gestion des secrets — parce que « ça compile et ça renvoie 200 » ressemble à du travail terminé.
Des commentaires qui sont des artefacts de la conversation de génération — prompts reformulés, narration pas à pas, apartés de discussion et élisions de marqueur comme `// ... rest of the code here` — committés dans le code source au lieu d'une vraie documentation.
Les assistants IA alourdissent une logique simple de commentaires redondants, de cérémonie défensive et de blocs quasi dupliqués copiés-collés au lieu de réutiliser ou d'extraire le code existant, gonflant le nombre de lignes sans ajouter de valeur.
Un assistant IA nomme un nouveau code avec des marqueurs génériques ou une convention inédite qui ignore les identifiants existants et le vocabulaire métier du dépôt, érodant la lisibilité et engendrant des concepts dupliqués et mal décrits.
Code généré par IA qui ignore discrètement les conventions établies d'un dépôt — réinventant des helpers, choisissant la mauvaise bibliothèque et adoptant un nommage et une gestion d'erreurs non conformes au style maison — de sorte que la base de code dérive vers un style générique, moyen-de-l'internet.
Les assistants IA produisent avec assurance des API, des bibliothèques et des idiomes qui étaient d'actualité il y a plusieurs années mais qui sont aujourd'hui dépréciés, supprimés ou remplacés, parce que leur connaissance paramétrique est figée à une date limite d'entraînement et que l'ancien pattern reste statistiquement le plus courant dans leur corpus.
Les assistants IA se prémunissent contre des défaillances qui ne peuvent pas se produire, enveloppant du code déjà sûr dans des vérifications de null redondantes, des clauses de garde mortes et des blocs try/except attrape-tout qui ajoutent de la complexité sans ajouter de sécurité.
Les assistants IA intègrent des valeurs propres à l’environnement — URL, ports, chemins, délais d’expiration, clés et nombres magiques — directement dans la logique au lieu de les lire depuis la configuration ou l’environnement, parce qu’un littéral est le jeton suivant le plus probable et que le modèle n’a pas conscience de votre couche de configuration existante.