Un diagrama de flujo con varias formas y símbolos, incluido un globo de diálogo azul, un signo de interrogación y una marca de verificación
Visión general

La IA puede revolucionar el desarrollo de aplicaciones generando, optimizando y traduciendo código a lo largo de todo el ciclo de vida del desarrollo de software. La adopción de la IA generativa puede llevar a una creación de software coherente, a una utilización óptima de la creatividad de los desarrolladores y a una mejora de las habilidades de los desarrolladores. Por ejemplo:

  • Para los desarrolladores de Python y Java, la IA generativa puede aumentar sus capacidades automatizando tareas de bajo valor como la generación de código y la búsqueda de errores. También puede mejorar la optimización del código, aplicar estándares de codificación y ayudar en la selección de API y bibliotecas, lo que conduce a aplicaciones más eficientes y sólidas.
  • En lenguajes tradicionales como COBOL, la IA generativa puede dar nueva vida a sistemas legados. Al refactorizar y optimizar el código COBOL existente, la IA generativa puede mejorar la capacidad de mantenimiento y el rendimiento de estos sistemas. También puede ayudar a convertir el código COBOL a lenguajes más modernos, como Java, proporcionando una valiosa herramienta en los esfuerzos de modernización del sistema.
  • Para los ingenieros de fiabilidad del sitio (SRE) que trabajan con Ansible, la IA generativa puede automatizar la creación de guías de estrategias, optimizar los guiones existentes o incluso identificar posibles errores. Esta automatización puede reducir significativamente el tiempo dedicado a tareas rutinarias, lo que permite a los SRE centrarse en desafíos más complejos.
¿Por qué la IA generativa en el desarrollo de aplicaciones?

La aplicación de la IA generativa al desarrollo de aplicaciones tiene importantes beneficios potenciales:

  • Coherencia: al aplicar la IA generativa para revisar y refactorizar el código, los desarrolladores pueden mantener unos estándares de codificación coherentes, lo que facilita la resolución de problemas y el mantenimiento del software.
  • Optimización de la creatividad: la IA generativa puede automatizar tareas de poco valor, liberando a los desarrolladores para que se centren en tareas más complejas, lo que conduce a ciclos de desarrollo más cortos y cambios más frecuentes.
  • Amplificación de habilidades: la IA generativa puede actuar como mentora para los desarrolladores jóvenes, lo que les permite actuar a un nivel sénior o incluso de experto.

La aplicación de la IA generativa para revisar, refactorizar y aplicar estándares de codificación empresarial al software da como resultados un software más consistente, por ejemplo, enfoques comunes para resolver problemas recurrentes, estructura de código común, código autodocumentado, etc., independientemente de qué desarrollador haya escrito el código. Esto, a su vez, facilita la resolución de problemas y el mantenimiento de la aplicación resultante, ya que los encargados del mantenimiento no necesitan comprender primero la estructura y las peculiaridades de las diferentes secciones del código.

Al igual que con otros dominios, la IA generativa tiene el potencial de liberar a los desarrolladores de aplicaciones de tareas de bajo valor, como escribir código simple/de memoria, o identificar el origen de un error problemático. Con más tiempo para centrarse en tareas de mayor valor, los desarrolladores pueden permitir ciclos de desarrollo más cortos, más funcionalidad por versión de software y cambios más pequeños y frecuentes.

Por último, la aplicación de la IA generativa al desarrollo de aplicaciones puede amplificar las habilidades de los desarrolladores, permitiendo a los desarrolladores junior rendir a un nivel superior o incluso experto. Los desarrolladores sénior pueden incorporar el entrenamiento de modelos en sus ciclos de lanzamiento, incorporando prácticas líderes a medida que se mejora el código. La IA generativa puede actuar como un mentor experto para el personal junior, liberando a los desarrolladores senior para que se centren en otras tareas y mejorando el nivel de habilidades del equipo de desarrollo en general.

Casos de uso para desarrollo de aplicaciones

La IA generativa puede aplicarse al desarrollo de aplicaciones en varios casos de uso amplios. Muchos modelos generales, como Llama 2, se entrenan en código de aplicación escrito en varios lenguajes de programación contemporáneos, y también hay disponibles modelos ajustados para la generación de código.

Los casos de uso que vemos que se benefician de la IA generativa incluyen:

  • Generación de código: la IA generativa puede generar código nuevo a partir de instrucciones en lenguaje natural.
  • Optimización y refactorización del código: la IA puede utilizarse para optimizar y reestructurar el código, haciéndolo más eficiente y eliminando duplicidades.
  • Aplicación de las normas de codificación: la IA puede hacer cumplir las normas y convenciones de codificación, lo que también puede ayudar a cumplir con las normas reguladoras.
  • Conversión de código: la IA puede convertir código de un lenguaje a otro.
  • Comprensión del código/Documentación/Búsqueda de errores: la IA puede interpretar el código y generar explicaciones sobre su funcionalidad, así como identificar errores.
  • Selección de API y bibliotecas: la IA puede ayudar a los desarrolladores a elegir las API y las bibliotecas de software adecuadas para sus aplicaciones.

A continuación se describen cada uno de estos casos de uso.

La capacidad de generación de texto nativo de los modelos de lenguaje de gran tamaño (LLM) se puede utilizar para generar nuevo código a partir de instrucciones en lenguaje natural. Por ejemplo, un desarrollador puede enviar la instrucción “Escriba una consulta SQL para recuperar el nombre y apellido de un cliente de la tabla de clientes” y recibir una consulta SQL a cambio.

El uso de LLM para la generación de código puede aumentar significativamente las habilidades de desarrollo de aplicaciones de los principiantes o incluso de los no desarrolladores, pero puede llegar rápidamente a un punto de rendimiento decreciente a medida que las salidas requeridas se vuelven más complejas o a medida que el nivel de detalle requerido en las instrucciones se acerca al código que se generará.

 

La optimización y refactorización del código, el proceso de mejorar el código para que sea más eficaz y mejor estructurado, puede considerarse como una combinación de dos capacidades de LLM: generación de texto y resumen de texto. Mediante un LLM general o ajustado, un desarrollador puede dar instrucción para optimizar o reestructurar un fragmento de código para hacerlo más eficaz y/o eliminar el código duplicado.

Los LLM funcionan bien para optimizar y refactorizar fragmentos de código más pequeños que encajan en la ventana de contexto de los modelos, pero requieren soluciones más amplias que mantengan los metadatos sobre toda la aplicación de software para lograr resultados aceptables en fragmentos de código más grandes y/o sistemas de software completos.

Al igual que la optimización de código, los LLM se pueden utilizar para aplicar y hacer cumplir los estándares de codificación empresarial en torno a temas como la denominación de funciones y variables, la estructura del código y las convenciones de codificación empresarial. Normalmente se aplican a nivel de repositorio como parte del proceso de revisión y confirmación del código, los LLM ajustados a los estándares de codificación de la empresa pueden traducir el código enviado para que cumpla con los estándares de la empresa. Estos estándares también pueden incluir convenciones de endurecimiento que ayudan a la empresa a cumplir con las normas regulatorias.

Como los lenguajes de programación son como cualquier otro lenguaje, la capacidad de traducción de texto nativo de los LLM puede traducir software escrito en un lenguaje de programación a otro, por ejemplo, convertir C# a Java.

Al igual que la optimización de código, los LLM por sí solos funcionan bien para convertir pequeños fragmentos de código que encajan dentro de la ventana de contexto del modelo, pero se necesitan soluciones más grandes que mantengan metadatos y otra información contextual importante para convertir fragmentos de código más grandes o sistemas de software completos.

Gracias a sus capacidades de conversión de código, la IA generativa también puede facilitar la traducción de código entre distintos lenguajes de programación, como la traducción de código COBOL a Java. Esto puede ser particularmente útil en entornos multilingües o durante las migraciones del sistema, ahorrando a los desarrolladores el tiempo y el esfuerzo de reescribir manualmente el código.

La comprensión del código es el análogo de la generación de código. En lugar de convertir las instrucciones en lenguaje natural en código, la explicación del código toma un fragmento de código como entrada y genera una explicación en lenguaje natural de la funcionalidad del código. Por ejemplo, una instrucción como “Explique la función de este fragmento de código python” seguida de una sección de Python puede generar un resumen línea por línea y general del propósito del código.

Esta capacidad también puede utilizarse para detectar errores en el código, lo que también se conoce como caza de fallos, solicitando al modelo que “Identifique por qué está fallando este fragmento de código”.

La selección de API y bibliotecas es la aplicación de la generación aumentada por recuperación (RAG) a la gestión empresarial de API y bibliotecas de software. Un desarrollador que busque una API para usar con una aplicación podría componer una instrucción RAG que consulte una base de datos empresarial de nombres de API, descripciones, endpoints, etc., para responder a preguntas como: “¿Tenemos una API que hace xyz?” En la medida en que las descripciones de la API y la biblioteca de códigos se mantengan con alta calidad y palabras clave, dicha aplicación podría ajustarse para proporcionar respuestas coherentes que aceleren el desarrollo de aplicaciones, así como la incorporación de desarrolladores.

Decisiones y consideraciones arquitectónicas

Los arquitectos deben tomar una serie de decisiones de arquitectura importantes al diseñar soluciones de desarrollo de aplicaciones utilizando LLM.

¿El modelo ofrece indemnización o protección por derechos de autor, y cómo puedes identificar si el código generado está limitado por los términos de licencia? Incluso los modelos entrenados con licencias permisivas pueden verse obstaculizados por cláusulas de licencia como la concesión de crédito al titular original de los derechos de autor.

Los arquitectos que crean soluciones destinadas a hacer cumplir y aplicar los estándares de codificación de la empresa deben tener en cuenta el esfuerzo necesario para ajustar un LLM para que 'comprenda' los estándares de la empresa, y tomar una decisión informada sobre si otros métodos, como las herramientas de linting, están mejor instrumentados para lograr una capacidad similar.

La asistencia para completar automáticamente los códigos de estilo debe responder rápidamente para no interferir con el flujo de pensamiento del desarrollador. Los arquitectos deben considerar la ubicación y la conectividad de los modelos de asistencia a los desarrolladores para garantizar que los apoyos a los desarrolladores sean beneficiosos y no intrusivos.

No se garantiza que los modelos de lenguaje de gran tamaño produzcan un código funcionalmente correcto, sobre todo si el código generado o revisado debe encajar en un sistema de software mayor. Aunque no existe una solución directa a este problema (y cada vez menos a medida que evolucionan los LLM), los arquitectos deben ser conscientes de que el código generado por LLM debe estar sujeto a los mismos controles de garantía de calidad y seguridad que el código producido por desarrolladores humanos.

Los LLM generalmente disponibles suelen entrenarse en un pequeño número de lenguajes de programación contemporáneos, como Python, Javascript, C# y otros. Los arquitectos de soluciones que necesitan dar soporte a lenguajes antiguos o especializados pueden encontrarse con pocas opciones de modelos disponibles, o pueden verse obligados a ajustar de forma agresiva un modelo general para satisfacer sus necesidades específicas.

Próximos pasos

Hable con nuestros expertos sobre la implementación de un patrón de implementación de nube híbrida.

Colaboradores

Pete Nuwayser, Chris Kirby, Mihai Criveti

Actualizado: 30 de noviembre de 2023