En Telefónica Tech, la inteligencia artificial (IA) ya forma parte de nuestro día a día como apoyo en la creación de software y nuevos servicios. Se utiliza en diferentes tareas, como analizar requisitos, diseñar soluciones, generar código, crear pruebas y revisar implementaciones.
Con la evolución de los modelos de IA hay una idea que ha ido adquiriendo cada vez más peso: el reto ya no es conseguir que la IA genere código. El verdadero reto es conseguir que genere código seguro en el que podamos confiar.
Hoy, generar software es cada vez más sencillo. Garantizar que ese software sea correcto, mantenible y seguro es un reto que adquiere cada vez mayor importancia.
En un entorno donde cada nueva funcionalidad puede convertirse también en una nueva superficie de ataque, la seguridad debe formar parte de la conversación desde el primer prompt.
¿Qué riesgos tiene el Vibe Coding cuando el código generado por IA parece funcionar?
Uno de los fenómenos más interesantes que estamos viendo es la popularización del llamado Vibe Coding, un término con el que cada vez estamos más familiarizados. La comunidad de desarrolladores comparte continuamente ejemplos de aplicaciones, videojuegos y soluciones completas construidas en pocas horas gracias a los modelos más avanzados de IA.
Le pedimos algo a la IA, probamos el resultado, detectamos algo que no nos gusta, ajustamos el prompt y volvemos a generar. Repetimos el proceso hasta que la solución parece hacer lo que esperamos. Es rápido, cómodo y, en muchos casos, funciona sorprendentemente bien.
El problema aparece cuando comenzamos a evaluar el software únicamente por su comportamiento externo. ¿La pantalla muestra el resultado correcto? ¿La API devuelve la respuesta esperada? Si la respuesta es sí, tendemos a asumir que todo está bien. Pero la seguridad rara vez se percibe desde la interfaz.
En mi experiencia, me he encontrado con situaciones en las que el código generado parecía perfectamente válido a primera vista y, sin embargo, requería una revisión más profunda para identificar posibles problemas: gestión incorrecta de concurrencia, controles de acceso incompletos, exposición accidental de información sensible o decisiones de arquitectura difíciles de mantener. El sistema podía cumplir su propósito, pero la implementación no era necesariamente segura ni mantenible.
A modo de ejemplo, en la revisión de una solución desarrollada con apoyo de IA se identificó que determinada información podía quedar registrada innecesariamente en los logs de aplicación. Aunque la funcionalidad respondía al comportamiento esperado, el análisis permitió identificar un potencial riesgo de exposición de información que podía no resultar evidente si la validación se limitaba únicamente al resultado funcional.
En otra revisión se identificó también un posible problema en la definición de los controles de acceso a determinados conjuntos de datos. Este tipo de situaciones pone de manifiesto la importancia de revisar específicamente los mecanismos de autorización, ya que una configuración inadecuada podría generar riesgos de acceso no autorizado a la información.
¿Cómo funciona el desarrollo guiado por especificación con inteligencia artificial?
Conforme los modelos son capaces de generar más código y soluciones más complejas, confiar únicamente en refinar de manera iterativa los resultados generados comienza a resultar insuficiente.
Por eso, cada vez adquieren mayor importancia metodologías de trabajo planteadas para incorporar la IA en todas las etapas, como el desarrollo guiado por especificación.
En nuestra experiencia, herramientas como Spec Kit, AI-Powered Specification-Driven Development Toolkit, pueden facilitar este enfoque de desarrollo guiado por especificación. El punto de partida suele ser una historia de usuario o un requisito definido en Jira por el equipo de especificación.
A partir de ahí, la IA puede participar en el refinamiento de requisitos ambiguos, la identificación de inconsistencias y casos límite, el análisis de decisiones de diseño y la construcción de una especificación más completa. Solo después llega la implementación.
Cuanto mejor entendida está una necesidad antes de generar código, menos dependemos de que el modelo interprete correctamente nuestras intenciones. La IA deja de actuar únicamente como un generador de código y empieza a comportarse como un asistente de ingeniería.
¿Qué riesgos mantiene la generación de código con inteligencia artificial?
Los modelos utilizados actualmente para desarrollar software han evolucionado e incorporan diferentes mecanismos orientados a reducir determinados errores y resultados no deseados. Estos mecanismos de protección, validación y alineamiento, conocidos habitualmente como guardrails, buscan reducir situaciones como la recomendación de APIs inventadas, fragmentos que no compilan o dependencias inexistentes.
Sin embargo, estos mecanismos no eliminan la necesidad de validar el código generado ni hacen desaparecer determinados riesgos. Las alucinaciones siguen existiendo, incluyendo fenómenos como las package hallucinations, en los que la IA puede recomendar dependencias inexistentes, incorrectas o, en algunos casos, peligrosas.
A estos riesgos técnicos se suma otro aspecto que no siempre recibe la misma atención: el uso de herramientas de IA que no hayan sido previamente evaluadas y autorizadas por la organización. Utilizar modelos o asistentes sin las debidas garantías puede introducir riesgos relacionados con la protección de la información corporativa, la exposición accidental de datos sensibles o la generación de código sin los controles de calidad y seguridad exigidos por la compañía.
Por ello, tan importante como elegir qué modelo utilizar es asegurarse de que forma parte del ecosistema de herramientas gobernado y aprobado por la organización.
Pero, sobre todo, han surgido riesgos más sutiles y difíciles de detectar: arquitecturas aparentemente correctas, pero mal diseñadas; controles de acceso incompletos; posibles fugas de información; ausencia de validaciones críticas; incumplimiento de estándares internos o decisiones técnicas que comprometen la mantenibilidad futura del sistema.
A esto se suma un riesgo quizá más preocupante: la excesiva confianza en la IA. Cuanto mejor es el resultado que genera, mayor es la tentación de aceptarlo sin cuestionarlo. El desafío actual ya no consiste únicamente en detectar cuándo la IA se equivoca, sino también en evitar asumir que no lo hace.
Si los riesgos son cada vez más difíciles de detectar mediante una simple inspección visual del resultado, necesitamos mecanismos capaces de verificar de forma objetiva y continua que lo generado por la IA cumple los requisitos funcionales, arquitectónicos y de seguridad definidos para la solución.
¿Por qué la revisión manual del código generado por IA puede no ser suficiente?
Existe una recomendación que aparece constantemente cuando se habla de desarrollo asistido por IA: revisar manualmente el código generado. Esta recomendación, hasta ahora esencial, puede empezar a quedarse corta y, en algunos casos, resultar difícil de aplicar como único mecanismo de control.
La capacidad de generación de código está creciendo a mayor velocidad que nuestra capacidad para revisarlo. A medida que aumenta la cantidad de código generado automáticamente, la revisión humana continúa siendo imprescindible, pero puede no resultar suficiente ni viable por sí sola.
Por eso, necesitamos mecanismos automáticos capaces de escalar al mismo ritmo que la generación. Y es precisamente en este punto donde las pruebas automatizadas se convierten en uno de nuestros principales mecanismos de validación y confianza.
Las pruebas unitarias adquieren un papel especialmente relevante porque nos permiten definir de forma precisa qué significa que una funcionalidad sea correcta. De hecho, cada vez adquiere más valor el uso de las pruebas como parte de la propia especificación. Estas pruebas, en muchos casos, también pueden generarse con el apoyo de la IA.
Por un lado, sirven como contrato de la especificación, ya que permiten comprobar que el código cumple de manera unitaria lo definido. Además, la IA puede resultar especialmente útil como apoyo en la generación de pruebas unitarias, precisamente porque una especificación y una prueba comparten gran parte de la misma información.
En esencia, la prueba expresa de forma ejecutable aquello que previamente se había definido como comportamiento esperado.
Por otro lado, las pruebas también sirven de guía para que la IA valide el código que va generando y aplique las correcciones pertinentes de forma iterativa. Cuando trabajamos de esta manera, existe una definición objetiva de éxito.
Pero, más allá de las pruebas unitarias, se produce un impacto especialmente interesante en la validación automática del sistema completo. Tradicionalmente, las pruebas End-to-End han sido costosas de diseñar, automatizar y mantener. En nuestra experiencia, la IA puede facilitar la construcción de entornos de prueba, la generación de escenarios y la ejecución de validaciones.
Gracias a este tipo de pruebas, es posible desplegar módulos completos de una solución dentro de entornos sandbox locales y someterlos a diferentes escenarios. Esto permite validar comportamientos complejos, probar situaciones excepcionales, reducir riesgos antes del despliegue y disminuir la necesidad de utilizar entornos reales para determinadas validaciones.
¿Cómo se puede utilizar la IA para revisar código generado por otra IA?
Aunque parezca paradójico, si utilizamos IA para generar código, también podemos utilizarla como apoyo para revisarlo.
En nuestra experiencia, GitHub Copilot Code Review puede utilizarse como capacidad adicional para revisar el código antes de su integración en el repositorio, siempre como complemento del análisis realizado por los desarrolladores.
Este tipo de revisión puede ayudar a señalar potenciales errores, casos límite no contemplados, problemas de mantenibilidad, posibles riesgos de seguridad e inconsistencias con el resto de la solución.
El objetivo de esta revisión no es sustituir en ningún caso la labor de los desarrolladores, sino aportar una capacidad de análisis adicional que complemente la revisión humana.
La ciberseguridad puede integrarse también en este tipo de revisiones automáticas. El verdadero valor aparece cuando estas capacidades se enriquecen con conocimiento específico y con criterios de seguridad reconocidos.
Por ejemplo, este tipo de revisión puede incorporar criterios y buenas prácticas basados en referencias como OWASP Top 10.
De esta forma, el conocimiento acumulado por una organización en materia de ciberseguridad puede incorporarse de manera más sistemática al proceso de revisión, sin depender exclusivamente de la experiencia o el criterio individual de cada desarrollador.
La IA no solo puede contribuir a revisar aspectos relacionados con la calidad del código, sino también a aplicar buenas prácticas y controles de seguridad, aumentando la probabilidad de identificar posibles riesgos antes de que lleguen a producción.
Esto permite que la revisión asistida por IA no se limite a analizar la calidad general del código. También puede ayudar a identificar riesgos relacionados con inyección, control de acceso, gestión de secretos, configuraciones inseguras, exposición de información sensible o dependencias vulnerables.
Cada nueva contribución al repositorio puede analizarse teniendo en cuenta este conocimiento especializado, no solo en el contexto del nuevo código, sino también considerando el conjunto del proyecto.
¿La inteligencia artificial sustituirá a los desarrolladores de software?
A veces se plantea el debate como si la IA fuera a sustituir a los desarrolladores. Mi experiencia está siendo justamente la contraria. Cuanto más avanzadas son estas herramientas, más importante resulta aplicar principios sólidos de ingeniería.
La diferencia es que ahora la IA puede ayudarnos en todas las etapas del ciclo de vida: definir requisitos, refinar especificaciones, revisar diseños, generar código, crear pruebas, señalar posibles vulnerabilidades y revisar cambios.
La generación automática de código es solo una pieza del rompecabezas. Una parte relevante de esta transformación puede estar en disponer de agentes autónomos capaces de acompañarnos durante distintas etapas del proceso de construcción del software.
Porque el futuro probablemente no pertenezca al Vibe Coding sin control. Pertenecerá a los equipos capaces de combinar las capacidades de la inteligencia artificial con la disciplina de la ingeniería del software.
En definitiva, la evolución de la IA no elimina la necesidad de aplicar buenas prácticas de ingeniería y ciberseguridad. Al contrario: cuanto más capaces son los modelos, más importante resulta disponer de especificaciones claras, mecanismos automáticos de validación y procesos de revisión robustos.
El futuro del desarrollo no será una cuestión de elegir entre desarrolladores o inteligencia artificial, sino de aprender a combinar inteligentemente las fortalezas de ambos.
La seguridad del software generado por IA no empieza cuando revisamos el código. Empieza mucho antes: cuando definimos la especificación, seleccionamos las herramientas adecuadas y establecemos los mecanismos de validación que utilizará nuestra organización.
La IA puede generar grandes cantidades de código con rapidez. La responsabilidad de decidir si podemos confiar en ese código seguirá siendo humana.
El desarrollo seguro de software con inteligencia artificial ejemplifica un reto más amplio: hacer accesibles tecnologías digitales cada vez más avanzadas sin separar innovación, confianza, calidad y responsabilidad.
En ese contexto, Telefónica trabaja para seguir reforzando su papel como una de las principales vías de acceso de las personas a las tecnologías digitales. La incorporación responsable de la IA a los procesos tecnológicos forma parte de ese escenario de transformación, en el que innovar exige también elevar los mecanismos de ingeniería, validación y seguridad.
Preguntas frecuentes
¿Qué es el Vibe Coding?
El Vibe Coding describe una forma de crear software mediante la interacción iterativa con modelos de IA: se solicita una solución, se prueba el resultado, se modifica el prompt y se vuelve a generar hasta obtener el comportamiento esperado.
¿Qué riesgos tiene el código generado por IA?
El código puede funcionar aparentemente bien y, aun así, presentar problemas de concurrencia, controles de acceso defectuosos, exposición de información sensible, dependencias problemáticas, falta de validaciones, configuraciones inseguras o dificultades de mantenimiento.
¿Qué son las package hallucinations?
Son situaciones en las que un sistema de IA recomienda dependencias inexistentes, incorrectas o, en determinados casos, peligrosas.
¿Por qué son importantes las especificaciones antes de generar código con IA?
Una necesidad correctamente especificada reduce la dependencia de que el modelo interprete por sí mismo las intenciones del equipo y permite utilizar la IA como asistente durante un proceso de ingeniería definido.
¿Qué papel tienen las pruebas automatizadas en el desarrollo con IA?
Las pruebas permiten expresar de forma ejecutable el comportamiento esperado y proporcionan criterios objetivos para comprobar que el código cumple la especificación. Además, pueden servir de guía para los procesos iterativos de generación y corrección.
¿Puede utilizarse inteligencia artificial para revisar código creado con IA?
Sí. Las herramientas de revisión asistida por IA pueden utilizarse para analizar el código que se quiere incorporar a un repositorio, como complemento de la revisión realizada por los desarrolladores.
¿La IA sustituye la revisión humana del código?
No en el enfoque planteado. La revisión automática añade capacidad de análisis, mientras que la revisión de los desarrolladores continúa formando parte esencial del proceso.












