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 asistente de IA envuelve el código en funciones, clases o interfaces adicionales que añaden una capa de indirección sin ocultar complejidad alguna ni habilitar la reutilización: abstracciones que se limitan a reenviar a un único punto de llamada.
Los asistentes de IA tienden a pegar una copia nueva y ligeramente modificada de la lógica existente en lugar de reutilizar o extraer una función compartida, inflando el código duplicado mientras la refactorización desaparece en silencio.
Los asistentes de IA apilan código nuevo, casi duplicado, junto al que ya existe en lugar de reestructurarlo, de modo que la duplicación crece y la refactorización —el retrabajo que mantiene sana una base de código— desaparece sin que nadie lo note.
El modelo escribe a mano código a medida para algo que una biblioteca estándar, una dependencia existente o una función auxiliar ya presente en el repositorio ya resuelve, añadiendo lógica duplicada y menos probada en lugar de llamar a lo que ya está ahí.
Código generado por IA que llama a funciones, métodos, parámetros, claves de configuración o paquetes que parecen plausibles pero que no existen en la versión real de la biblioteca de la que dependes.
Los asistentes de IA tienden a generar código que solo trata el caso correcto y bien formado —omitiendo la validación de entradas, el manejo de errores, las comprobaciones de nulos/vacíos y los casos límite— de modo que el código funciona en la demo y se rompe en producción.
Los asistentes de IA generan código funcional que omite en silencio los controles de seguridad que una persona añadiría por costumbre —validación de entradas, autorización, codificación de salidas, gestión de secretos— porque «compila y devuelve 200» parece estar terminado.
Comentarios que son artefactos de la conversación de generación —prompts reformulados, narración paso a paso, apartes de chat y elisiones de marcador como `// ... rest of the code here`— confirmados en el código fuente en lugar de documentación real.
Los asistentes de IA rellenan una lógica sencilla con comentarios redundantes, ceremonia defensiva y bloques casi duplicados copiados y pegados en lugar de reutilizar o extraer código existente, inflando el número de líneas sin aportar valor.
Un asistente de IA nombra el código nuevo con marcadores genéricos o una convención recién inventada que ignora los identificadores existentes del repositorio y el vocabulario del dominio, erosionando la legibilidad y generando conceptos duplicados y mal descritos.
Código generado por IA que ignora en silencio las convenciones establecidas de un repositorio —reinventa ayudantes, elige la biblioteca equivocada y usa nombres y manejo de errores ajenos al estilo de la casa— de modo que la base de código deriva hacia un estilo genérico, el promedio de internet.
Los asistentes de IA emiten con total seguridad APIs, bibliotecas y expresiones idiomáticas que eran actuales hace años pero que ahora están obsoletas, eliminadas o superadas, porque su conocimiento paramétrico está congelado en una fecha de corte del entrenamiento y el patrón antiguo sigue siendo el estadísticamente más común en su corpus.
Los asistentes de IA se protegen contra fallos que no pueden ocurrir, envolviendo código ya seguro en comprobaciones de nulos redundantes, cláusulas de guarda muertas y bloques try/except generales que añaden complejidad sin añadir seguridad.
Los asistentes de IA incrustan valores específicos del entorno —URL, puertos, rutas, tiempos de espera, claves y números mágicos— directamente en la lógica en lugar de leerlos de la configuración o del entorno, porque un literal es el siguiente token más probable y el modelo desconoce la capa de configuración existente.