Tecnologías existentes para la automatización de los productos software

Tecnologías existentes para la automatización de los productos software
Autores:

Estrategias para la innovación de productos software

Cuando nos enfrentamos a un proyecto de software, uno de los retos más relevantes es la incertidumbre que tienen la gran mayoría de estos proyectos, sobre todo en lo que respecta al negocio (qué debemos construir) ya la tecnología (cómo construirlo). El reto es mayor cuando se trata de un proyecto de I+D en el que el objetivo es obtener una innovación que permita adquirir una ventaja competitiva. Los proyectos (o las operaciones) software pueden ser de diferente naturaleza, pero no siempre nos planteamos cuál es la estrategia (DevOps, Lean Inception, Personas, XP, Scrum, OKR, etc.) o la combinación de estrategias más adecuada para llevarlos a cabo de forma eficiente y eficaz. En los últimos años, han surgido nuevos enfoques («low code» y «no code») ‎[1]‎[2] y herramientas (por ej. Appinventor ‎[5] , Budibase ‎[7] , WebRatio ‎[4] , etc.) que permiten construir software con pocos conocimientos tecnológicos, así como herramientas basadas en IA que generan código de forma automática (GitHub copiloto ‎[18] o OpenAI ‎[19] basadas en GPT3). Gartner estima que en 2025 7 de cada 10 aplicaciones estarán desarrolladas con este tipo de tecnologías (en 2020, el desarrollo con este tipo de tecnologías era menor a un 25%).

Figura 1. Evolución de la demanda de perfiles Low-Code en una selección de países europeos (Fuente: ‎[3])

Si la capacidad de construir y explotar productos software aumenta, las empresas más competitivas serán aquellas que tengan mayor capacidad al explorar o descubrir nuevas innovaciones en forma de productos o servicios. Entonces habrá que entender qué implica «innovar» y cuál es la estrategia más eficiente y eficaz para conseguirlo.

¿Qué tecnologías existen para automatizar el desarrollo y asistir al desarrollador?

Actualmente, existen tecnologías (artefactos o herramientas de software) que son ampliamente conocidas y que nos permiten automatizar el desarrollo y asistir a los desarrolladores en actividades de construcción del software. Veamos a continuación, con algo más de detalle, algunas de estas tecnologías Low Code/No Code y de tecnologías de IA que ya se están utilizando como asistente o ayuda al desarrollo así como el origen de éstas.

Low Code / No Code

La generación de código de forma automática no es nueva, tiene más de treinta años, y en función de si es 100% parametrizable (No Code) o no (Low Code), tendría su origen, bien en las técnicas y herramientas desarrolladas en últimos años sobre las llamadas líneas de productos software ‎[20] (con un enfoque más orientado hacia el No Code) o en la ingeniería guiada por modelos (con un enfoque más orientado hacia el Low Code), que incluye además los trabajos realizados sobre ingeniera web guiada por modelos ‎[21], qué es dónde nos centraremos principalmente para entender cómo han evolucionado estas herramientas hasta la fecha (principalmente, desde el paradigma de la ingeniería web guiada por modelos).

Figura 2. Comparativa entre segmentos No-Code y Low-Code(Fuente: [3])

En Rossi Et En 2016 se describe el estado del arte de técnicas y herramientas que permiten, a partir de modelos, generar código. Durante todo ese tiempo, surgieron técnicas y herramientas con diferentes características, unas se centraban más en el modelo de datos, otras se centraban en el modelo de navegación, otras en el modelo de presentación o la interfaz. Pocas han sido las técnicas y herramientas que han sobrevivido, el tiempo, sin duda, actúa de filtro, y algunas de las mencionadas en RossiEtAl parecen haber sobrevivido a todos estos años. Prueba de ello es la herramienta Web Ratio que ofrece soporte a las técnicas que se han investigado y que han conseguido ser explotadas como productos/servicios en el mercado. En 2000, surge WebML que acabó evolucionando hacia una técnica denominada IFML (estándar del OMG ‎[22]) y que incluían una serie de ventajas que consiguieron sobrevivir hasta la fecha. Ya no se habla de métodos de ingeniería web guiados por modelos, sino de Low-code. El concepto es el mismo, sólo ha cambiado su nombre. Quizás fruto de esta exposición en el mercado con una herramienta comercial como WebRatio, podría ser el motivo por el que la herramienta tiene una serie de características que le dan ciertas ventajas competitivas. La mayoría de estas características se pueden consultar en la web de la misma herramienta ‎[4], donde se puede observar una dinámica de trabajo iterativa-incremental muy orientada hacia las siguientes actividades: (1) Diseño de un prototipo, ( 2) Validación del prototipo con usuarios, si es validado, se diseñan el resto de modelos, (3) Generación del software a partir del prototipo, (4) Integración con otros sistemas empresariales (si es necesario), (5) Vuelta al actividad 1. En este contexto, como si se tratara de un proceso de selección natural, en los últimos años han surgido una gran diversidad de herramientas relacionadas (Appinventor ‎[5], Budibase ‎[7], WebRatio‎[4], Mendix ‎ [8], Zoho ‎[12], Saltcorn ‎[6], Velneo ‎[9], Appian ‎[13], Microsoft PowerApps ‎[10], Converteixo ‎[14], Oracle VisualBuilder ‎[11], Joget ‎[15], Figma ‎[16], Debuild ‎[17]) que tienen características comunes en WebRatio. La mayoría de las herramientas existentes se centran principalmente en el diseño de las interfaces y el uso de componentes funcionales. En todas ellas se utilizan interfaces gráficas y configuraciones fáciles de utilizar para crear las soluciones. Sin embargo, si la solución que queremos diseñar y construir es 100% parametrizable (No Code), entonces nos permiten generar una versión completamente funcional de forma automática. En cambio, si la solución incluye funciones más complejas (Low Code), requerirán que llevemos a cabo trabajos manuales de diseño y desarrollo de código. Sin embargo, ¿hay herramientas que nos ayuden a generar estos diseños y la construcción de código?

IA como asistente:

En la sección anterior, hemos hablado de técnicas y herramientas que nos permiten generar software de forma automática. Sin embargo, cuando las soluciones no son 100% parametrizables, todavía es necesario que llevemos a cabo trabajos de diseño y desarrollo del código de forma manual. Al respecto, ya existen herramientas que nos ayudan en estas tareas. Prueba de ello es Github copiloto, que es una herramienta desarrollada por Github y OpenAI que, basadas en el modelo de inteligencia artificial GPT3, permite asistir a los desarrolladores en entornos de desarrollo como Visual Studio Code, Visual Studio, Neovim o JetBrains . En la web oficial de GitHub se indica que la productividad aumenta en torno al 30% y que, de media, los usuarios aceptan el 26% de todas las finalizaciones mostradas por GitHub Copilot y más del 27% de los archivos de código que genera el herramienta. Además, en ciertos lenguajes como Python puede alcanzar incluso el 40%. En esta misma línea, existen lenguajes donde estos porcentajes son similares. Puedes encontrar más información en la web oficial de GitHub Copilot ‎[18].

Además, OpenAI dispone de una API (versión beta) que es capaz de generar cualquier cosa que necesitamos automáticamente. Por ex. le puedes pedir que te genere la función de Fibonacci o, por ejemplo, una lista de preguntas para un seminario sobre estrategias de innovación.

Figura 3. Ejemplo de uso de la API de OpenAI (Fuente: elaboración propia)

Y si todo esto ya parece increíble, nos encontramos ya con soluciones que integran los motores anteriores de inteligencia artificial con las herramientas Low Code y No Code anteriores, siendo capaces de generar un prototipo o un conjunto de interfaces a partir de una descripción sobre la misma. Prueba de ello son los plugins desarrollados para la herramienta Debuild (ver Figura 4) o Figma ‎[23].

Figura 4. Generación de interfaces con Debuild (Fuente: ‎[17])

Si esto no fuera suficiente, una red neuronal llamada DALL-E ‎[24], ya es capaz de crear una gran variabilidad de imágenes sólo a partir de conceptos que sean expresados en lenguaje natural. Además, Microsoft también está apostando por este tipo de tecnologías, prueba de ello es su modelo NUWA INFINITY ‎[27], que incluso es capaz de generar vídeos a partir de imágenes. Por tanto, se podría esperar que pronto, todas estas herramientas pudieran ayudarnos a generar una gran variabilidad de prototipos. Por supuesto, la validación de los mismos (decidir qué versión del prototipo aporta mayor valor), todavía queda reservada a los humanos.

Por los resultados obtenidos en algunos trabajos de investigación [25][26], parece que todavía queda trabajo por hacer para que podamos sacar el máximo partido a estas herramientas, principalmente en cuanto a mejorar la calidad del código (o de los datos) que es usa para entrenar estos modelos. Al parecer, son capaces de reconocer algoritmos fundamentales y generar código óptimo, pero siempre que las descripciones sean cortas y escuetas. En algunos casos: (1) todavía es necesario invocar varias veces el algoritmo para recibir soluciones correctas, y además (2) también generan código innecesariamente complicado para algunas descripciones sencillas.

Conclusiones

Por último, finalizaremos con las conclusiones más relevantes:

  • Les tecnologies Low Code i No Code ens permeten automatitzar el desenvolupament. La majoria d’aquestes eines tenen un enfocament de disseny centrat en l’usuari (disseny d’interfícies que poden ser validades pels usuaris i ús de components funcionals). S’utilitzen interfícies gràfiques i configuracions fàcils de fer servir per crear les solucions:
    • Si la solución que queremos diseñar y construir es 100% parametrizable (No Code)
    • Si la solución incluye funciones más complejas (Low Code), requerirán que llevemos a cabo trabajos manuales de diseño y desarrollo de código.
  • Además, existen herramientas tecnológicas de IA que pueden utilizarse como asistente en las tareas de diseño y desarrollo de código. Sin embargo, todavía queda trabajo por hacer para que podamos sacar el máximo partido a estas herramientas.

Referencias

[1]. El País, “Low Code cómo aparender a programar sin saber programar”, accesible online: https://elpais.com/tecnologia/2022-05-06/low-code-como-aprender-a-programar-sin-saber-programar.html, últim accés: Juliol 2022

[2]. ITUSER, ”Estos son los principales beneficios del lowcode en el desarrollo de aplicaciones”, accesible online: https://www.ituser.es/actualidad/2022/05/estos-son-los-principales-beneficios-del-lowcode-en-el-desarrollo-de-aplicaciones, últim accés: Juliol 2022

[3]. Mobile World Capital Barcelona (MWCapital) y NTT Data, en el marco Barcelona Digital Talent, “Análisis del low-code: nuevo paradigma en el desarrollo del software”, accesible online: https://barcelonadigitaltalent.com/report/analisis-low-code/, últim accés: Juliol 2022

[4]. WebRatio, accessible online: https://www.webratio.com/site/content/es/plataforma-de-desarrollo, últim accés: Juliol 2022

[5]. MIT Appinventor, accesible online: https://appinventor.mit.edu, últim accés: Juliol 2022

[6]. Saltcorn, accesible online: https://github.com/saltcorn/saltcorn, últim accés: Juliol 2022

[7]. BuidBase, accesible online: https://budibase.com, últim accés: Juliol 2022

[8]. Mendix, accesible online: https://www.mendix.com, últim accés: Juliol 2022

[9]. Velneo, accesible online: https://velneo.es, últim accés: Juliol 2022

[10]. Microsoft PowerApps, accesible online: https://powerapps.microsoft.com, últim accés: Juliol 2022

[11]. Oracle Visual Builder, accesible online: https://developer.oracle.com/es/visual-builder/, últim accés: Juliol 2022

[12]. Zoho, accessible online: https://www.zoho.com/es-xl/creator/, últim accés: Juliol 2022

[13]. Appian, accesible online: https://appian.com/platform/overview.html, últim accés: Juliol 2022

[14]. Convertigo, accesible online: https://es.www.convertigo.com, últim accés: Juliol 2022

[15]. Joget, accesible online: https://www.joget.org, últim accés: Juliol 2022

[16]. Figma, accesible online: https://www.figma.com/, últim accés: Juliol 2022

[17]. Debuild, accessible online: https://debuild.app/, últim accés: Juliol 2022

[18]. GitHub copilot, accesible online: https://github.com/features/copilot, últim accés: Juliol 2022

[19]. OpenAI examples, accesible online: https://beta.openai.com/examples/, últim accés: Juliol 2022

[20].Automated analysis of feature models 20 years later: A literature review. Information systems, 35(6), 615-636.

[21].25 years of model-driven web engineering. what we achieved, what is missing. CLEI Electronic Journal, 19(3), 5-57.

[22]. IFML: The interaction Flow Modeling Language, accessible online: https://www.ifml.org/, últim accés: Juliol 2022

[23]. GPT3 + FIGMA, accessible online: https://gpt3demo.com/apps/gpt-3-figma-plugin, últim accés: Juliol 2022

[24]. DALL-E by OpenAI, accessible online: https://gpt3demo.com/apps/openai-dall-e, últim accés: Juliol 2022

[25]. S. Imai, «Is GitHub Copilot a Substitute for Human Pair-programming? An Empirical Study,» 2022 IEEE/ACM 44th International Conference on Software Engineering: Companion Proceedings (ICSE-Companion), 2022, pp. 319-321, doi: 10.1109/ICSE-Companion55297.2022.9793778.

[26]. Dakhel, A. M., Majdinasab, V., Nikanjam, A., Khomh, F., Desmarais, M. C., & Ming, Z. (2022). GitHub Copilot AI pair programmer: Asset or Liability?. arXiv preprint arXiv:2206.15331.

[27]. Microsoft NUWA INFINITY, accesible online: https://nuwa-infinity.microsoft.com/#/, últim accés: Juliol 2022