El Futuro del Desarrollo de Software con Inteligencia Artificial Generativa

Jul 13 2023
IA Generativa

La Inteligencia Artificial (IA) ha estado revolucionando diversas industrias, y el desarrollo de software no es una excepción. Las herramientas de IA generativa están cambiando la forma en que desarrollamos software y afectando a los diferentes roles dentro del ciclo de desarrollo. En nuestro Whitepaper del 2022 sobre “Las 9 tendencias tecnológicas para 2023” ya apuntábamos al desarrollo asistido por IA como una de las que más iban a impactar en el sector.

¿Cuál es la Situación actual de la inteligencia artificial generativa?

La IA generativa es un paso más en una evolución en las herramientas que se inició a mediados del SXX. Sin esa evolución la cantidad de lenguajes, Frameworks y librerías necesarias para construir una solución sería desde hace mucho inmanejable.

En la actualidad, la IA se ha vuelto una herramienta indispensable en diversos campos del desarrollo de software, desde la generación de código hasta la automatización de pruebas. Los desarrolladores están comenzando a adoptar herramientas de IA generativa para mejorar la eficiencia y la calidad del código.

Con qué ecosistema nos encontramos hoy por hoy en la IA Generativa.

Aunque solo tratemos algunas de ellas, en estos momentos tenemos un ecosistema en ebullición de herramientas. Éstas no están arrinconando al desarrollador tradicional, sino que le están dotando de una potencia nunca antes vista.

El ecosistema de IA en el desarrollo de software incluye una variedad de herramientas y tecnologías que ayudan en diferentes etapas del desarrollo. Esto incluye herramientas de generación de código, pruebas automatizadas, optimización de rendimiento y más.


Tipos de Herramientas en la IA Generativa

Trataremos dos clases de herramientas con diferentes usos, algunos de ellos compartidos.
AI Pair programming. En ella la IA acompaña al desarrollador en su trabajo, proponiendo mejoras, completando lo que entiende como intención del desarrollador, detectando problemas con el código o sirviendo de referencia según el contexto.

También provee generación automática me métodos, clases o pruebas. Se indica por texto lo que quiere hacer y la IA de proponer una o varias implementaciones a modo de solución. También puede solicitar una refactorización o la reescritura de un código existente siguiendo pautas indicadas.

Estas herramientas serian GitHub Copilot, GitLab AI

Resolución de problemas complejos. Se plantea a la IA un problema de alto nivel no resoluble solo con un trozo de código, y ésta propone una combinación de librerías, componentes y piezas de código como solución

En esta clase de herramientas estarían las LLM generalistas como ChatGPT, BARD o GitHub Copilot Labs y GitLab AI-Powered DevSecOps Platform.

Qué es ChatGPT

ChatGPT, creado por OpenAI y con colaboración de Microsoft, es un modelo de lenguaje de inteligencia artificial que permite generar respuestas y mantener conversaciones coherentes con los usuarios, así como comprender y producir texto de manera fluida.

Se trata de un diseño preparado para generar texto en respuestas sobre una temática abierta y en cualquier idioma, aunque en el ámbito del desarrollo ChatGPT puede generar código en cualquier lenguaje de programación en base a problemas planteados, proponer el uso de librearías, así como proponer soluciones complejas que involucren diversas tecnologías.

Aplicaciones de chatGPT

  1. Generación de código: Generar fragmentos de código o funciones completas según los requisitos o especificaciones dados.
  2. Asistencia de sintaxis y API: Sugerir fragmentos de código y ayuda con la sintaxis de programación
  3. Soporte para depuración: Identificar problemas y sugerir soluciones para arreglar código
  4. Guía de algoritmos y estructuras: Ayuda a seleccionar el algoritmo o estructuras de datos adecuados
  5. Recursos de aprendizaje: Recomendar tutoriales y documentación para expandir el conocimiento en programación
  6. Revisión de código: Analizar y revisar código para mejores prácticas y optimizaciones
  7. Tareas de procesamiento de lenguaje natural (NLP): Asistir en tareas de NLP, como preprocesamiento de texto o extraer datos de información no estructurada
  8. Resolución de problemas: Desarrollar soluciones para problemas propuestos complejos
  9. Preguntas de programación generales: responde preguntas de programación y principios de ingeniería de software

Consideraciones sobre ChatGPT

  • La información proporcionada por ChatGPT de inicio se puede considerar como “preliminar” y por lo tanto necesita ser revisada o validada -> Posteriormente esto mejorará con los años y el uso.
  • Según la información que se solicite se necesita discriminar la veracidad de la información haciendo uso de fuentes confiables ya que a veces genera respuestas incorrectas, respuestas sin sentido, referencias inexistentes, …
  • La calidad de la respuesta depende de forma directa de la formulación inicial: Ingeniería del prompt.

Ventajas y riesgos de ChatGPT en julio del 2023

Ventajas de ChatGPT

  • Asistencia rápida para resolver problemas (“adiós StackOverflow”).
  • Exploración de soluciones: puede ayudar a explorar diferentes enfoques y soluciones, brindando ideas y perspectivas adicionales.
  • Aumento de velocidad en tareas como traducción entre lenguajes, mejora y refactorización de código.

Riesgos de ChatGPT

  • Puede generar resultados plausibles, pero completamente incorrectos o inventados.
  • Generación de código incorrecto o o inseguro, lo que podría introducir errores o vulnerabilidades en las aplicaciones
  • Conocimiento limitado del contexto específico de un proyecto o librería.
  • Dependencia excesiva en el modelo por parte de los desarrolladores.
  • No conoce lo nuevo, solo hasta la fecha de los datos con los que fue entrenado.


Qué es GitHub Copilot

Desarrollado en colaboración con OpenAI, GitHub Copilot está actualmente basado en el modelo Codex.

GitHub Copilot está disponible como extensión para Visual Studio Code, Visual Studio, Neovim y el conjunto JetBrains de entornos de desarrollo integrados (IDE).

Copilot sugiere el código a escribir (código que se desea) o código que se está modificando.

Interactúa con el programador a través de prompts (que se insertan en el código como comentarios) y a partir de ese momento Copilot empieza a sugerir código. También interactúa mientras se escribe el código sugiriendo lo próximo a escribir.

También es útil para escribir la documentación del proyecto o para describir el código sobre el que se está trabajando.

Aplicaciones GitHub Copilot

  1. Sugerir y generar código: Según las intenciones percibidas del desarrollador o nombres de archivos.
  2. Generación desde comentarios: A partir de una descripción textual y el contexto del proyecto.
  3. Sugerir autocompletado: Incluyendo nombre de funciones o métodos.
  4. Generación de tests unitarios: A partir de comentarios o nombres de m-métodos y archivos.
  5. Traducción de textos: Utilizados en variables o estructuras.
  6. Creación de diccionarios: Como nombres de países, meses del año en cualquier idioma.
  7. Crear expresiones regulares: A partir de descripciones o ejemplos.
  8. Traducción entre lenguajes: C, C++, C#, Go, Java, JavaScript, PHP, Python, Ruby, Scala, and TypeScript.
  9. Explicar código: responde preguntas de programación y principios de ingeniería de software.

Existen situaciones en las que Copilot no podrá proporcionar con el 100% de exactitud el código que esperas, en estos casos se pueden utilizar nuevos prompts o mientras se modifica el código sugerido se verá cómo Copilot va actualizando sus sugerencias hasta encontrar la que mejor se adapte a lo que se busca.

Copilot puede ser utilizado haciendo uso de prompts en distintos idiomas, como el inglés, español … Aquí un ejemplo de multi-idioma:

GIF1


Una de las ventajas más destacadas y vistosas de esta IA es que facilita enormemente tareas repetitivas sobre código, como el ejemplo que vemos a continuación

Entre los ejemplos de tareas repetitivas pueden estar la creación de diccionarios, nombres de días, provincias, países y un largo etcétera

O la creación de funciones o tests basándose en los prompts que se planteen.

Otra función es la de conversión de código entre distintos lenguajes de programación

O el soporte que necesitamos cuando no entendemos qué hace un código


Ventajas y riesgos de Copilot a julio 2023

Ventajas de GitHub Copilot

  • Aumentar de la velocidad de desarrollo y productividad.
  • Permite mantener el foco en el objetivo sin perderse en la implementación.
  • Los perfiles seniors pueden liberarse de gran parte de las tareas de mentoring a los perfiles junior.
  • Reducción de errores. Evitando los errores comunes y utilizando patrones habituales aumenta la calidad.

Riesgos de GitHub Copilot

  • Generación de código no defensivo. Se deben añadir prompts adicionales para comprobación de errores o parámetros.
  • Sugerencias incorrectas que pueden hacer perder más tiempo.
  • Parte del tiempo ganado en la generación se pierde en la revisión.
  • No sirve para desarrollos innovadores o que por ejemplo usen nuevas librerías.


Qué es GitLab AI-Powered DevSecOps Platform

Haciendo uso de su propio desarrollo con OpenAI, GitLab incorpora la IA dentro de su producto no solamente aplicando principios de IA generativa, si no también aplicando IA en otras actividades o momentos dentro del ciclo de vida del desarrollo como aquellas específicas de los equipos de Seguridad y Operación (como un Sistema Experto).

Este modelo de aplicación de la IA surge gracias a un estudio encargado por GitLab en el que se asegura que no llega al 40% el tiempo que un desarrollador emplea realizando tareas de generación de código, con lo que la aplicación de la IA Generativa no sería la solución que más eficientara la función del desarrollador pues se estima que el 39%l tiempo de los desarrolladores lo invierten entendiendo el código, escribiendo nuevo código o mejorándolo, y el 61% del tiempo es dedicado en todo lo demás.

Aplicaciones GitLab AI-Powered DevSecOps Platform

GitLab plantea la aplicación de la IA en modo predictivo y como sistema experto, aportando inteligencia en áreas como Seguridad, Observabilidad, y en general eficienciando la labor del equipo dentro del ciclo de desarrollo y entrega.

Esto nos lleva a un escenario en el que se puede dividir su aplicación en tres grandes grupos:

IA aplicada al Desarrollo

  1. Code Suggestions: (para la generación de código) soporta hasta el momento 6 lenguajes (Python, golang, SQL, Basic Scala y Javascript) y se integra a través de un plugin con el IDE.
  2. Suggested Reviewers: acelera la selección de la persona que va a realizar la revisión de la entrega seleccionnando el revisor que mejor conocimiento a nivel del contexto tenga de la entrega.
  3. Summarize MR Changes: realiza un resumen y destaca los cambios realizados en una petición de entrega (MR) para su mejor comprensión por parte del revisor
  4. Summarize my MR Review: igual que el caso anterior pero aplicado a la revisión realizada.

IA Aplicada a Seguridad y Operación

  1. Explain this Vulnerability: ayuda a la remediación de una vulnerablidad detectada, aportando conocimiento sobre la vulnerabilidad y sugiriendo la mejor forma de resolverla.
  2. Generate Test in MR: esta función generativa ayuda a la generación de Test previamente a realizar la entrega, señalando puntos de bug y sobre todo mejorando el indicador de cobertura de manera temprana.
  3. Explain this code: facilita el entendimiento del código.

IA aplicada al proceso

  1. Issue summaries: Las issues en GitLab pueden ser muy extensas, de modo que la IA facilita su entendimiento y comprensión a partir de resúmenes y señalamiento de los puntos principales.
  2. GitLab Chat: Chatbot que responde a preguntas sobre producto (how-to).
  3. Value Stream Forecast: Muestra tendencias en aportación de valor de las entregas y permite predecir futuras evoluciones y anomalías que se podrían producir.

Ventajas y riesgos de GitLab AI-Powered DevSecOps Platform

Ventajas

  • Aumentar de la velocidad de desarrollo y productividad en tareas de generación y entendimiento de código, resolución de bugs.
  • Incorpora un chatbot para hacer el mejor uso de la solución.
  • Aumenta los índices de cobertura de pruebas unitarias sugiriendo puntos de fallo que se han de controlar.
  • Mejora general del proceso, simplificando la selección de revisores, destacando los cambios en las entregas (frente a lo que no cambia) y seleccionando al mejor candidato para realizar revisiones del código.

Riesgos

  • Es el fabricante que más tarde ha anunciado la aplicación de la IA en su producto.
  • Aunque se entrega una release del producto por mes, parte de la funcionalidad está aún en Beta o Experimental.

Cómo se utilizan estas herramientas de IA en el desarrollo de software

La IA se usa en diferentes fases del desarrollo de software, incluido el análisis y diseño, desarrollo y pruebas, y despliegue. Desde la generación de diagramas de flujo hasta la creación de pipelines de CI/CD, la IA está desempeñando un papel en la mejora de la eficiencia. Se espera que la IA continúe evolucionando y desempeñando un papel aún más importante en el desarrollo de software. Los modelos de IA se volverán más sofisticados, y veremos una mayor integración de la IA en todas las fases del desarrollo.

Los desarrolladores de software, desde juniors hasta seniors, así como arquitectos de software y equipos de aseguramiento de calidad, ya están utilizando herramientas de IA en su trabajo diario.


Quién las va a utilizar

Los perfiles de desarrollo, como desarrolladores junior, senior, arquitectos y líderes técnicos, se beneficiarán de diferentes maneras. Los desarrolladores junior pueden obtener orientación y sugerencias, mientras que los desarrolladores senior y arquitectos pueden usar la IA para prototipos rápidos y pruebas de concepto.

A continuación, se muestra una proyección de que perfiles que pueden empezar a beneficiarse de la IA. El nivel de experiencia es el punto de inicio. Por ejemplo, la generación mediante prompt la puede empezar a utilizar un junior pero también la pueden utilizar el resto de los perfiles.


Modelo de transición por el uso de la IA

No es sólo la adopción de una nueva tecnología, es una nueva forma de trabajar. Por eso se dice que la inclusión de IA en el ciclo de desarrollo no es una revolución, sino una evolución.

Para ello, se tendrán que adaptar y reestructurar los equipos de trabajo a estas nuevas herramientas como ya se hizo en el pasado con las herramientas colaborativas, o IDEs avanzado con intellisense o sugerencias de mejora. Esto requerirá la capacitación y adaptación de los roles existentes. Los equipos necesitarán aprender cómo usar eficazmente estas herramientas y adaptar sus procesos de trabajo para incorporar la IA.

La evolución de los perfiles de desarrollo de software por la IA generativa

Los perfiles de los equipos van a ser más amplios acortando distancias entre los juniors y seniors. El señioritie se encontrará por el multicampo y no apostando por la especialización. A continuación, presentamos como consideramos que será la evolución de los diferentes perfiles de desarrollo de software con la aplicación de la IA generativa

  • Desarrolladores Junior: Estos perfiles van a ser capaces de aprender de los modelos de la IA de una manera diferente a la tradicional de “prueba y error”, pero deberán tener unos fundamentos sólidos de la tecnología y los conceptos para ser capaces de sacarle partido al prompting.
  • Desarrolladores Senior: Estos perfiles podrán centrarse en el objetivo a alcanzar en lugar de perder detalles de la implementación, o hacer mentoring de los perfiles junior. Las tareas pasan de desarrollar a supervisar.
  • Arquitectos y líderes técnicos: A corto plazo la AI no va a ser capaz de ofrecer soluciones complejas que tengan en cuenta múltiples factores técnicos y no técnicos, pero los arquitectos podrán ayudarse de la IA para poner en marcha pruebas de concepto o de error más rápidamente.
  • Equipo de QA: La automatización de tareas la irá realizando la IA en lugar de la persona, abarcando en el futuro las pruebas funcionales. De esta manera se acelerará el trabajo de calidad. Con la IA no habrá excusa para tener coberturas de código del 100%.

¿Como se estima ahora un desarrollo teniendo en cuenta la IA Generativa?

La estimación del tiempo y los recursos necesarios para completar un proyecto es una tarea crucial en la gestión de proyectos. Para lograr una estimación precisa, los equipos de desarrollo utilizan una variedad de enfoques y técnicas. En este contexto, se explorarán cinco métodos ampliamente utilizados:

  • Estimación basada en la experiencia: Se utiliza el conocimiento y la experiencia previa del equipo de desarrollo para estimar la duración y los recursos necesarios para completar un proyecto. Se toman en cuenta proyectos anteriores similares, considerando la cantidad de trabajo, las tareas involucradas y los posibles obstáculos.
  • Estimación por analogía: Se compara el proyecto actual con proyectos similares realizados en el pasado y se utiliza esa información como base para la estimación.
  • Estimación por descomposición: Consiste en descomponer el proyecto en tareas más pequeñas y estimar el tiempo y los recursos necesarios para completar cada una de ellas. Luego, se suman estas estimaciones para obtener una estimación total del proyecto. Esta técnica se basa en el principio de que es más fácil y preciso estimar tareas más pequeñas que el proyecto completo.
  • Estimación por history points: Se utiliza en metodologías ágiles, como Scrum. Los puntos de historia son una medida relativa del tamaño y complejidad de las características o funcionalidades del software. El equipo asigna puntos a cada historia de usuario en función de su dificultad y esfuerzo estimado. Luego, se utiliza el histórico de velocidad del equipo para determinar cuántos puntos se pueden completar en un período de tiempo determinado.
  • Estimación paramétrica: Se utilizan modelos matemáticos y estadísticos para estimar la duración y los recursos necesarios del proyecto. Estos modelos se basan en datos históricos y en la relación entre variables, como el tamaño del proyecto, el número de desarrolladores y la productividad promedio. Se pueden utilizar herramientas y técnicas especializadas para aplicar este tipo de estimación.

A través de estos métodos, los equipos de desarrollo pueden tomar decisiones informadas y mejorar la planificación y gestión de sus proyectos, maximizando la eficiencia y logrando resultados exitosos.

¿Cómo se mide el aumento de productividad en el desarrollo de software gracias a la aplicación de la IA Generativa?

Medir el aumento de la productividad es tan o más complicado como realizar estimaciones sobre lo que se tarda en hacer un desarrollo. Ya que en este caso tenemos que comparar la estimación inicial de lo que se espera que se va a tardar en realizar un desarrollo con el valor final de lo que se de lo que se ha tardado en realizarlo.

Métodos subjetivos

Estos métodos se basan en preguntar a los miembros de los equipos cuanto creen que han ido más rápido utilizando las herramientas respecto a lo que están acostumbrados.

Métodos objetivos

  • Ratio de aceptación. La ratio aceptación significa el número de veces que un código propuesto a un programador ha sido aceptado como válido sin ser reescrito o sin ser borrado. Este feedback es bastante fiable porque proviene de las mismas herramientas que saben si el código ha sido aceptado o no y no da lugar a interpretaciones.
  • Grupos de control. Este método es el más fiable, aunque también el más costoso. Trata de que dos equipos con experiencia y capacidades similares desarrollen una funcionalidad, uno con ayuda de la IA y otro sin ella. Y al final se comparen los resultados.

Mejora estimada de la eficiencia en el desarrollo de software

La mejora “estimada” que proponemos a continuación se debe principalmente a dos razones:

  • Quedarían fuera todas las tareas como toma de requisitos, reuniones o sprint reviews
  • Una medida objetiva, como la aceptación de código generado (mediante prompt o sugerencia) es la ratio de aceptación reportado por las ejecuciones de GitHub Copilot

Respecto al segundo punto, según datos de GitHub, la aceptación de código generado por GitHub Copilot ha aumentado de un 27% en junio de 2022 a un 46% en febrero de 2023. Como muestra el siguiente gráfico:



Esto sugiere una tendencia creciente en la mejora de la eficiencia en codificación con la ayuda de la IA. ¿Cuándo llegaríamos al 100%? Si estos datos se confirman, la figura real tendrá una forma de serie de potencias, en la cual el 95% del código sugerido seria aceptado por el programador a inicio de 2023 como se puede apreciar en el siguiente gráfico:

Posibles escenarios y consecuencias de la IA Generativa en el desarrollo de software

Hay dos escenarios principales:

  1. **No tiene un efecto significativo en los desarrollos**: La IA se incorporará progresivamente en el conjunto de herramientas. Los planes de formación deberán incluir el uso de IA.
  2. **Tiene un gran efecto en los desarrollos**: Los clientes podrían decidir hacer lo mismo con menos recursos, hacer más con los mismos recursos, o aumentar la producción y los recursos. En todos los casos, se requiere un plan de capacitación acelerado.

Las consecuencias iniciales incluyen un impacto en comunidades en línea como StackOverflow. ChatGPT alcanzó 100 millones de usuarios en solo dos meses, mientras que el tráfico de StackOverflow ha estado disminuyendo. Además, a cada día que pasa más desarrolladores adoptan el Copilot.

Como añadidura podemos prever una revolución en la forma de buscar información en internet, teniendo Google que replantear su modelo de negocio basado en buscador. De forma que post como este dejaran de ser tan leídos, y serán inteligencias artificiales quienes nos den respuesta a nuestras dudas y consultas de forma más o menos sintetizada según nuestras necesidades.

Conclusiones

La IA generativa está destinada a tener un impacto significativo en el desarrollo de aplicaciones. Los humanos seguirán siendo esenciales en el proceso, pero la IA puede aumentar la productividad. Los departamentos de IT pueden utilizar esta eficiencia para reducir presupuestos o incrementar la producción y competitividad. Es esencial que todos se adapten y se formen en los fundamentos de la IA, ingeniería de prompts y uso de herramientas generativas.

Etiquetas

IA

Comparte este artículo

Etiquetas

IA

Utilizamos cookies propias y de terceros para ofrecerte una mejor experiencia y servicio, dentro de nuestra Web de acuerdo a tus hábitos de navegación. Si continúas navegando, consideramos que aceptas expresamente su utilización. Puedes obtener más información de cómo gestionar y configurar las cookies en nuestra Política de Cookies.

×

Preferencias de Cookies


Cookies esenciales
Cookies funcionales
Cookies de análisis
Cookies de marketing