El auge de los modelos de lenguaje (LLMs) ha abierto la puerta a la posibilidad de que estos sistemas generen código de software de forma autónoma, desde cero. Esto implica la creación de agentes capaces de tomar decisiones arquitectónicas complejas y gestionar bases de código extensas con mínima intervención humana. Sin embargo, las herramientas de evaluación existentes se centran en tareas fragmentadas, como la corrección de errores específicos o la implementación de funcionalidades aisladas, lo que no refleja la complejidad de la ingeniería de software a gran escala.
Para abordar esta limitación, un equipo de investigadores ha presentado ProgramBench, una nueva herramienta de evaluación diseñada para medir la capacidad de los agentes de IA para desarrollar software de forma holística. En ProgramBench, los agentes reciben un programa y su documentación, y deben reconstruir una base de código que reproduzca el comportamiento del programa original. La evaluación se realiza a través de pruebas de comportamiento generadas automáticamente por el propio agente (fuzzing), lo que evita imponer una estructura de implementación predefinida. Esto es crucial porque permite evaluar si el agente realmente comprende el qué del programa, no solo cómo implementarlo de una manera específica.
El conjunto de tareas de ProgramBench es considerable, abarcando desde pequeñas utilidades de línea de comandos hasta software ampliamente utilizado como FFmpeg (un transcodificador multimedia), SQLite (un sistema de gestión de bases de datos) y el intérprete de PHP. La evaluación de nueve modelos de lenguaje reveló que ninguno de ellos logró resolver completamente ninguna de las tareas. El mejor modelo solo superó el 95% de las pruebas en un 3% de las tareas. Un aspecto preocupante es la tendencia de los modelos a generar implementaciones monolíticas, concentradas en un único archivo, lo que difiere significativamente de la forma en que los humanos estructuran el código.
Implicaciones y Consideraciones: ProgramBench destaca la brecha existente entre la capacidad de los LLMs para generar código fragmentado y su habilidad para construir sistemas de software complejos y bien estructurados. La tendencia a crear implementaciones monolíticas sugiere una falta de comprensión de los principios de modularidad y diseño de software. Si bien los LLMs muestran un potencial prometedor, es crucial desarrollar herramientas de evaluación más completas, como ProgramBench, para impulsar su progreso y garantizar que puedan asumir roles más significativos en el proceso de desarrollo de software. El uso de fuzzing para generar pruebas es una técnica innovadora que permite una evaluación más objetiva y flexible. El éxito futuro en este campo dependerá de la capacidad de los modelos para comprender no solo la lógica del programa, sino también sus implicaciones arquitectónicas y de diseño.
