- Los ingenieros de software efectivos construyen y mantienen un modelo mental claro de los requisitos y del código, y ejecutan un ciclo de comparación y actualización de forma repetida
- Los LLM pueden escribir y modificar código, crear pruebas y depurar, pero carecen de la capacidad de mantener un modelo mental preciso, por lo que se confunden en tareas complejas
- Actualmente, los LLM tienen limitaciones para identificar con precisión las diferencias entre el código y los requisitos y corregirlas adecuadamente debido a problemas de omisión de contexto, sesgo de recencia y alucinaciones
- Las personas pueden cambiar su forma de pensar con flexibilidad según la situación, por ejemplo almacenando temporalmente el contexto completo o escondiendo por un momento los detalles para ver el panorama general, pero los LLM no pueden implementar esto
- Los LLM son útiles para tareas con requisitos simples, pero en el desarrollo de software complejo, al final el ingeniero de software debe responsabilizarse directamente de la claridad de los requisitos y del comportamiento del código, y el LLM cumple el papel de herramienta de apoyo
El ciclo de la ingeniería de software
- Un ingeniero experimentado trabaja repitiendo los siguientes pasos
1. Construir un modelo mental de los requisitos
2. Escribir código de acuerdo con ese modelo
3. Entender lo que realmente hace el código escrito
4. Identificar las diferencias y corregir el código o los requisitos
- La clave de este ciclo es la capacidad de contar con un modelo mental preciso y sostenible
Las limitaciones de los LLM
- Los LLM pueden realizar funciones como escribir código, identificar problemas y corregirlos, crear y ejecutar pruebas, agregar logging y usar un depurador
- Sin embargo, como no pueden mantener un modelo mental, surgen problemas como los siguientes
- Suponen que el código que escribieron funciona bien
- Cuando una prueba falla, dependen de conjeturas para decidir si deben corregir el código o la prueba
- Cuando se confunden, borran todo el código y lo reescriben desde cero
- A diferencia de una persona, cuando una prueba falla les falta la flexibilidad para revisar el modelo y decidir la dirección de la corrección, o para destrabar el problema a través de la conversación cuando sienten frustración
- Un ingeniero de software ejecuta pruebas durante el trabajo y, cuando aparece un problema, puede juzgar con claridad qué parte debe corregirse
- A veces, incluso reiniciar todo el trabajo lleva a un resultado en el que la comprensión del problema se vuelve más profunda
Posibilidades futuras
- Es posible que esto cambie a medida que los modelos mejoren, pero la ingeniería de software exige más que una simple generación de código
- Cuando resuelven problemas importantes, los humanos pueden traer temporalmente a la memoria el contexto completo, concentrarse en un tema o mirar el panorama general
- Lo importante no es seguir aumentando indefinidamente la información de contexto, sino una forma de pensar que trate de manera selectiva la información necesaria
- Los LLM carecen de la capacidad de almacenar y recuperar contexto temporalmente como una persona, o de alternar entre el panorama general y los detalles al pensar
- Restricciones principales de los LLM actuales
- Omisión de contexto (Context omission): no detectan bien las partes donde falta información necesaria
- Sesgo de recencia (Recency bias): dan un peso excesivo a la información más reciente dentro de la ventana de contexto
- Alucinación (Hallucination): inventan detalles que no existen
- Si se añaden funciones de memoria, algunas cosas podrían mejorar, pero al superar cierto nivel de complejidad siguen fallando en la comprensión del contexto y el mantenimiento del modelo
- Les falta la capacidad de mantener dos modelos mentales similares, analizar sus diferencias y decidir dónde deben modificarse los requisitos o el código
El papel y uso actuales
- Los LLM destacan en la generación rápida de código y en la integración de requisitos y documentación, por lo que pueden aprovecharse suficientemente en tareas simples y claras
- Pero en problemas no triviales, es difícil mantener suficiente contexto y mejorar de forma iterativa
- Por lo tanto, la clarificación de requisitos y la validación del código siguen siendo responsabilidad del ingeniero de software
- Se busca un entorno en el que las personas y los agentes (LLM) creen software juntos, pero en el momento actual el ingeniero debe liderar y el LLM debe usarse como herramienta
Aún no hay comentarios.