Inteligencia artificial e ingeniería de software: la compleja convergencia entre dos disciplinas revolucionarias

La inteligencia artificial está impactando cada vez más en la automatización de tareas propias de la ingeniería de software, al punto de que una gran proporción de los artículos de conferencias incluyen grandes modelos de lenguaje (LLMs) como componentes para lograr resolver problemas de ingeniería de software. No obstante, el uso de ingeniería de software para mejorar la inteligencia artificial y lograr el desarrollo de sistemas fiables y seguros, aún tiene un largo camino por recorrer. Profundizar en una ingeniería para el uso disciplinado de modelos fundacionales es uno de los desafíos que la comunidad académica tiene por delante. Para conocer más sobre el tema conversamos con dos investigadores referentes, Víctor Braberman y Agustín Martínez Suñé.

Actualmente la inteligencia artificial (IA) basada en técnicas de aprendizaje automático y la ingeniería de software, que se ocupa de todas las tareas asociadas a la construcción y verificación de software, convergen de manera completamente inusual por su propia evolución.

Ambas disciplinas son contemporáneas dentro del marco de las Ciencias de la Computación, aunque la ingeniería de software como concepto nació allá por fines de los años 60, mientras que la idea de la inteligencia artificial comenzó a desarrollarse entre las décadas del 40 y 50, con las primeras máquinas electrónicas y el famoso test de Turing.

Con el notorio auge de las técnicas de aprendizaje profundo y los LLM, la IA y la ingeniería de software se combinan de dos formas completamente distintas:

  • AI for Software Engineering: cómo la IA puede ayudar para la construcción, mantenimiento y evolución del software, es decir cómo todo el ciclo de vida de la ingeniería de software se puede apoyar sobre la IA para tener una mejor performance.
  •  Software Engineering for AI: cómo la ingeniería de software contribuye a robustecer la IA. Se entiende que los sistemas modernos están cambiando mucho porque ahora tienen un componente interno de desarrollo con una tecnología muy distinta: la IA. Entonces, los desafíos de la construcción de software están cambiando porque la IA transforma su naturaleza. Se trata de repensar la ingeniería de software en esos términos, que es una pregunta muy grande, que exige revisar las técnicas de ingeniería de software con esta nueva realidad.

Un ida y vuelta entre IA e ingeniería de software

A fines del año 2022, la empresa Open AI lanzó la versión de prueba gratuita de una herramienta de inteligencia artificial denominada ChatGPT, un programa informático que simula y procesa conversaciones humanas y está entrenado para responder casi cualquier pregunta o pedido que se le haga en forma de instrucciones denominadas “prompts”.

GPT forma parte de una familia de modelos llamados LLMs (Large language models), un subconjunto de la inteligencia artificial que ha sido entrenado con una gran cantidad de datos de texto (todo Internet en el caso de GPT) para producir respuestas similares a las humanas al diálogo u otros insumos de lenguaje natural. Los avances de este tipo de tecnología han acelerado la competencia por parte de otras empresas que también buscan dominar el universo de la inteligencia artificial generativa.

Claramente estas tecnologías son el motor de una nueva generación de sistemas de IA. Lo sorprendente de esta revolución fue el descubrimiento que entrenar una gran red neuronal -específicamente un transformer– para predecir la siguiente palabra más probable da lugar a un sistema capaz de resolver una amplia variedad de tareas para las cuales no fue explícitamente entrenado.

Hoy en día, estos modelos permiten automatizar tareas repetitivas y tediosas como la generación de código básico, pruebas unitarias y revisiones de calidad. “Los programadores, ingenieros de software e investigadores del área están usando en forma masiva los LLM para resolver problemas que les competen. Desde programar con estos copilotos (que pueden realizar algunas tareas de programación de manera efectiva) hasta usar el LLM para problemas más generales de diseño, corrección, testeo y verificación de software”, puntualiza Víctor Braberman, investigador del ICC en el grupo LAFHIS (Laboratorio de Fundamentos y Herramientas de Ingeniería de Software).

Resulta importante tener en claro que los sistemas de IA basados en el paradigma dominante actual, el deep learning, presentan una naturaleza fundamentalmente distinta a la del software tradicional. No solo el producto final difiere -con redes neuronales artificiales que realizan cálculos difíciles de interpretar en lugar de líneas de código en un lenguaje de programación estructurado- sino que también el proceso de desarrollo es radicalmente diferente.

Para entenderlo mejor, en la ingeniería de software tradicional se utilizan comúnmente pruebas de sistemas determinísticos (donde, siempre con algunas excepciones, se provee el mismo input todas las veces y se recibe el mismo output) pero la esencia de un modelo de aprendizaje automático encuentra cierta randomización; por lo que es lógico que un test no dé siempre lo mismo y eso impacta en ciertos conceptos tradicionales de testing como la cobertura de código.

Cada vez es más común encontrar sistemas que combinan grandes y complejas piezas de software tradicional con módulos de deep learning. Sin embargo, razonar rigurosamente sobre su funcionamiento plantea un desafío significativo, lo que exige revisar y adaptar las técnicas de ingeniería de software a esta nueva realidad”, comenta Agustín Martínez Suñé, investigador postdoctoral en el Oxford Control and Verification Group (OXCAV) de la Universidad de Oxford.

Desde los inicios de la ingeniería de software, una herramienta clave para manejar la complejidad ha sido la modularidad, que consiste en descomponer un sistema en partes más pequeñas que puedan analizarse de manera independiente. Esto permite, por ejemplo, obtener garantías sobre el comportamiento de un módulo estableciendo suposiciones sobre el entorno en el que operará (en este caso, el resto del sistema).

Cuando algunos de estos módulos son redes neuronales artificiales, surgen nuevas interrogantes tales como: ¿Cuáles son las mejores y más efectivas formas de aplicar esta metodología en estos casos? ¿Qué tipos de garantías es posible obtener en estos escenarios? Estas cuestiones son objeto de intensa investigación”, complementa Martínez Suñé.

Por su parte Braberman, reconoce el potencial de estas herramientas y aclara que en algunos de sus proyectos utilizó grandes modelos de lenguaje para detectar en forma automática vulnerabilidades en programas, en este caso fragmentos de código que van a una blockchain y se ejecutan para llevar adelante contratos automatizados.

No obstante, el investigador del ICC observa varias cuestiones problemáticas asociadas a este ida y vuelta entre IA e ingeniería de software:

1) Nunca antes hubo una herramienta tan transversal a los distintos temas y problemas de ingeniería de software. “En un reporte técnico reciente indagamos este fenómeno cada vez más extendido. Por ejemplo, hoy aproximadamente la mitad de los papers enviados a conferencias de ingeniería de software usan de alguna forma LLMs. Tanto por el auge e interés como también porque permiten realizar tareas y transformaciones que antes no eran imaginables como partes de soluciones de ingeniería del software. 

2) Existe un problema específico que tiene que ver con la confiabilidad de los LLM y los agentes inteligentes, que se evidencia en las alucinaciones: creer en un resultado que es certero que en realidad no lo es y no contar con señales de alarma para detectar este problema. “Los LLM no garantizan obtener un resultado adecuado para la tarea que les encomendamos. La seriedad del asunto depende del dominio y de la arquitectura que tenés. Las ‘alucinaciones’ podrían llegar a exteriorizarse de una forma que vos no querés. Por ejemplo, si uso LLMs para generar casos de test y no analizo de ninguna forma la calidad del resultado (ej. cobertura de código o funcionalidad), eso puede llevarme a errar sobre la calidad del programa siendo testeado por lo que generó el LLM. Este es un caso más o menos fácil en el que el resultado de generación puede ser contrastado de alguna forma clásica pero en muchas situaciones tener una buena señal de correctitud del resultado puede ser desafiante”.

3) Por último, los LLM le agregan complejidad extra al problema de obtener alguna garantía sobre el comportamiento del software que los usa. “En primer lugar, su comportamiento es estocástico. En segundo lugar, muchas veces las evaluaciones de performance están hechas con supuestos no explícitos sobre la distribución de los datos que se van a querer transformar con ayuda del LLM”.

Para ejemplificar con otro tipo de tecnología de IA, Braberman menciona que en el contexto del desarrollo actual de los vehículos autónomos a veces, durante el testeo funcional, se descubre que los datos de entrenamiento de algunos de sus modelos de percepción posiblemente no contenían suficientes imágenes de ciertas condiciones ambientales. Esta diferencia en las distribuciones puede impactar en la seguridad del sistema.

Hacia una IA más segura y confiable

Actualmente, uno de los focos de desarrollo es la creación de agentes autónomos impulsados por LLM, capaces de realizar tareas de manera automatizada en entornos digitales, como la web. A medida que estos sistemas demuestren ser económicamente valiosos, y los incentivos económicos se alineen, su despliegue será cada vez más frecuente en más dominios. Esto ha generado un debate creciente -primero académico, pero cada vez más político y social- sobre cómo las comunidades actuales deberán prepararse para el impacto disruptivo de su adopción y los riesgos que conlleva.

Uno de los marcos conceptuales en los que se enmarca esta discusión es el AI Safety, perspectiva desde la cual estoy orientando cada vez más mi trabajo de investigación”, explica el investigador Martínez Suñé.

Dentro de este contexto, considera que la Ingeniería de Software tiene un rol crucial, en particular desde lo que se conoce como Métodos Formales para Ingeniería de Software, que emplean técnicas matemáticas para obtener garantías demostrables sobre el comportamiento de un sistema, por ejemplo, asegurar que esté libre de errores o que no genere resultados inesperados.

La aplicación de esta visión a los sistemas avanzados de IA, aunque no es la predominante dentro de AI Safety, está ganando tracción bajo el concepto de Guaranteed Safe AI. Este enfoque, respaldado por figuras influyentes en el campo de la IA, busca establecer principios rigurosos para el desarrollo de sistemas de inteligencia artificial seguros y confiables”, agrega el investigador postdoctoral.

El futuro de los empleos en software

Por último, en cuanto a cómo está impactando la inteligencia artificial generativa (LLMs especializados en código y agentes autónomos impulsados por IA) en las tareas relacionadas con el desarrollo y la ingeniería de software, ambos investigadores se muestran cautelosos y reflexivos.

Hoy en día muchísimas tareas, no sólo programar, sino diseñar y pensar conceptualmente una solución que resuelva un problema, están siendo desafiadas por el uso de la IA. Creo que en definitiva todo el trabajo intelectual, y no sólo la construcción de software, está expuesto de alguna forma por estos avances. Con tantos aspectos a considerar, no sólo técnicos sino también sociales, económicos y políticos resulta difícil estimar el impacto en términos de puestos de trabajo que serán eliminados y creados en el futuro próximo”, afirma Braberman.

Si bien estos avances están llevando a una transformación radical en las tareas de desarrollo de software, este tipo de evolución no es un fenómeno completamente novedoso. La forma en la que aprendí a programar entre finales de los 2000 y principios de los 2010 ya era muy distinta de décadas anteriores. Los entornos de desarrollo modernos ofrecían herramientas avanzadas como autocompletado de código, análisis estático, sugerencias de corrección de errores y navegación eficiente entre funciones. Si transportáramos a un programador de los ’80 a esos entornos de desarrollo, se sorprendería por el aumento en productividad que ya permitían esas herramientas”, analiza Martínez Suñé.

De este modo, el investigador considera que la transformación actual es un paso más en esa evolución y está impulsada por la capacidad de los LLMs de autoformalizar, es decir, convertir instrucciones en lenguaje natural en código en lenguajes formales, como los lenguajes de programación. “Aunque aún queda camino por recorrer para que estos sistemas puedan resolver problemas complejos de desarrollo de software de manera completamente autónoma, todo indica que en el futuro cercano la mayor parte de la escritura de código será realizada por IA”.

En este nuevo paradigma, “el rol del ingeniero de software evolucionará. En lugar de escribir código línea por línea, se enfocará en definir requerimientos, tomar decisiones clave de diseño, auditar el código generado y corregir errores cuando la IA no produzca el comportamiento esperado. Creo que la programación, entonces, se desplazará hacia un modelo más centrado en la supervisión y validación de sistemas de IA que generan código de manera automatizada”, concluye.

Víctor Braberman recibió el título de Doctor en Ciencias de la Computación de la Universidad de Buenos Aires (UBA). Es profesor asociado del Departamento de Computación, Facultad de Ciencias Exactas y Naturales, UBA y es investigador en el Instituto de Ciencias de la Computación (ICC UBA-CONICET). Sus intereses de investigación incluyen usos innovadores de abstracciones formales para el análisis, construcción y comprensión de sistemas intensivos en software. Realiza publicaciones en las principales conferencias y revistas de ingeniería de software y es revisor de las principales conferencias de la disciplina, siendo miembro actual del Consejo Editorial de Transactions on Software Engineering del IEEE. También tiene una importante experiencia industrial en consultoría y en la dirección de proyectos de I+D para empresas de software.

Agustín Martinez Suñé es investigador postdoctoral en el Oxford Control and Verification Group (OXCAV) de la Universidad de Oxford. Obtuvo su Doctorado en Ciencias de la Computación en la Universidad de Buenos Aires, donde se especializó en métodos de verificación formal para sistemas distribuidos. Actualmente, su investigación  se centra en el desarrollo de métodos formales para la construcción de inteligencia artificial segura.

2025-03-13T14:30:17-03:00 13/March/2025|Nota destacada|
Go to Top