doi: 10.56294/ai2025132
ORIGINAL
Prototyping and Validation of a Low-Code Platform for Dynamic Code Generation in Microservices
Prototipo y Validación de una Plataforma Low-Code para Microservicios con Generación Dinámica de Código
Tomás Darquier1, Pablo Alejandro Virgolini1
1Universidad Siglo 21, Licenciatura en Informática, S.C de Bariloche. Argentina.
Citar como: Darquier T, Virgolini PA. Prototyping and Validation of a Low-Code Platform for Dynamic Code Generation in Microservices. EthAIca. 2025; 3:132. https://doi.org/10.56294/ai2024132
Enviado: 16-08-2023 Revisado: 04-01-2024 Aceptado: 24-05-2024 Publicado: 25-05-2024
Editor: PhD.
Rubén
González Vallejo
ABSTRACT
Introduction: the project addressed the issue of developing microservice architectures, a practice increasingly adopted in the software industry due to its benefits in terms of scalability and maintenance. However, its implementation involves a high degree of technical complexity, especially in the design, integration, and deployment stages. Given this scenario, the development of a low-code web platform was proposed to facilitate the visual design of microservices, reducing development times and technical barriers.
Method: to carry out the proposal, the agile Scrum methodology was applied, allowing for iterative and incremental construction of the system. The platform was developed with technologies such as Java and Spring Framework in the backend, HTML, CSS, JavaScript, and Thymeleaf in the frontend, and PostgreSQL as the database. Apache Kafka was incorporated for asynchronous communication, MinIO for storage, and semantic technologies such as RDF and SPARQL managed by Apache Jena. Code generation was performed with Apache Velocity, based on predefined templates.
Results: the system allowed users to design microservice architectures using a visual interface (canvas), configure specific properties, and automatically generate source code. In addition, it incorporated validations that ensured the consistency of the designs and offered mechanisms for authentication and export of the generated code.
Conclusions: the platform achieved its goal of simplifying microservice development through a low-code approach. Its usefulness as a support tool for developers was validated, reducing complexity and time spent on repetitive technical tasks.
Keywords: Microservices; Low-Code; Code Generation; Distributed Architecture; Agile Development.
RESUMEN
Introducción: el proyecto abordó la problemática del desarrollo de arquitecturas de microservicios, una práctica cada vez más adoptada en la industria del software por sus beneficios en escalabilidad y mantenimiento. Sin embargo, su implementación implica una alta complejidad técnica, especialmente en las etapas de diseño, integración y despliegue. Frente a este escenario, se planteó el desarrollo de una plataforma web Low-code que facilitara el diseño visual de microservicios, reduciendo tiempos de desarrollo y barreras técnicas.
Método: para llevar a cabo la propuesta, se aplicó la metodología ágil Scrum, permitiendo una construcción iterativa e incremental del sistema. La plataforma se desarrolló con tecnologías como Java y Spring Framework en el backend, HTML, CSS, JavaScript y Thymeleaf en el frontend, y PostgreSQL como base de datos. Se incorporaron Apache Kafka para comunicación asincrónica, MinIO para almacenamiento, y tecnologías semánticas como RDF y SPARQL gestionadas por Apache Jena. La generación de código se realizó con Apache Velocity, en base a plantillas predefinidas.
Resultados: el sistema permitió a los usuarios diseñar arquitecturas de microservicios mediante una interfaz visual (canvas), configurar propiedades específicas y generar código fuente automáticamente. Además, incorporó validaciones que aseguraron la consistencia de los diseños y ofreció mecanismos de autenticación y exportación del código generado.
Conclusiones: la plataforma logró cumplir su objetivo de simplificar el desarrollo de microservicios a través de un enfoque Low-code. Se validó su utilidad como herramienta de apoyo para desarrolladores, reduciendo la complejidad y el tiempo invertido en tareas técnicas repetitivas.
Palabras clave: Microservicios; Low-Code; Generación de Código; Arquitectura Distribuida; Desarrollo Ágil.
INTRODUCCIÓN
El desarrollo de aplicaciones modernas plantea desafíos cada vez más complejos, especialmente cuando se adoptan arquitecturas distribuidas como los microservicios.(1,2,3,4) Este enfoque, aunque altamente beneficioso en términos de escalabilidad, modularidad y mantenimiento, introduce dificultades importantes durante el diseño, implementación e integración de los distintos componentes.(5,6,7,8) Frente a esta realidad, el presente proyecto propuso como solución el diseño e implementación de una plataforma Low-code orientada a facilitar la creación de arquitecturas de microservicios de forma visual, intuitiva y personalizable, apuntando especialmente a desarrolladores de software.(9,10,11)
Con el objetivo de lograr un producto funcional y flexible, se adoptó la metodología ágil **Scrum**, que permitió el desarrollo incremental del sistema a través de iteraciones conocidas como Sprints. Esta estrategia facilitó la incorporación de mejoras continuas y la rápida adaptación frente a obstáculos técnicos, cambios de tecnología o reorientaciones del diseño, sin comprometer el avance general del proyecto.(12,13,14)
Durante su implementación, el sistema integró una variedad de tecnologías organizadas en distintos niveles. Para el **Front-end**, se utilizó HTML5, CSS y JavaScript, complementados con Bootstrap y Thymeleaf, permitiendo una experiencia de usuario fluida y adaptable. En el **Back-end**, se empleó Java con Spring Framework para construir una base robusta y segura, con autenticación vía OAuth2 provista por Okta. También se incorporaron herramientas como PostgreSQL para la gestión de datos, Apache Kafka para la comunicación asíncrona, y MinIO para el almacenamiento de código generado.(15,16,17)
Una de las características más innovadoras del sistema fue la generación automática de código a partir de la interacción del usuario con el canvas. Esta funcionalidad fue posible gracias al uso de tecnologías semánticas como RDF y SPARQL, gestionadas mediante Apache Jena, y potenciadas por Apache Velocity para la creación de archivos personalizables.(18,19,20)
La recopilación de datos para el diseño y validación del proyecto combinó fuentes académicas especializadas y foros de discusión técnicos presentes en redes sociales como Reddit, Twitter y Medium. Esta fusión entre teoría y práctica permitió una mejor comprensión del problema y fundamentó las decisiones tecnológicas tomadas.
En resumen, la plataforma desarrollada busca disminuir la barrera técnica en el diseño de sistemas distribuidos, promoviendo el uso de componentes reutilizables y configurables, todo dentro de un entorno visual Low-code capaz de generar arquitecturas listas para desplegar con mínima intervención manual.
¿Cómo facilitar el diseño, configuración e integración de arquitecturas de microservicios mediante una plataforma Low-code, que reduzca la complejidad técnica y el tiempo de desarrollo sin comprometer la calidad del software generado?
Objetivo
Desarrollar una plataforma Low-code que permita a los desarrolladores diseñar, configurar e integrar arquitecturas de microservicios de forma visual e intuitiva, mediante el uso de componentes reutilizables, automatizando la generación de código y optimizando tiempos de desarrollo con validaciones que aseguren la calidad del sistema.
MÉTODO
Diseño Metodológico
Herramientas Metodológicas
Durante el desarrollo del presente sistema se siguieron los lineamientos establecidos por la metodología ágil Scrum, un marco de trabajo que facilita la colaboración entre equipos para entregar productos de manera iterativa e incremental, permitiendo adaptarse rápidamente a los cambios e incentivando la mejora continua.
De esta forma, al finalizar cada Sprint, se logró obtener porciones funcionales de código, aunque el sistema completo no esté desarrollado, aprendiendo en cada iteración y aplicando el conocimiento en la siguiente a realizar. Así el producto se benefició de las características mencionadas, permitiendo incluso cambiar de tecnologías, en base al conocimiento obtenido durante el proceso de desarrollo sin represalia alguna.
Herramientas de Desarrollo
En el desarrollo del proyecto fueron utilizadas múltiples tecnologías, las cuales serán explicadas y justificadas a continuación, organizadas en 4 grupos según su actividad especifica: herramientas referidas al Front-end, aquellas destinadas al Back-end para autenticación lógica básica e intercambio con el Front-end embebido en el Gateway, por otra parte las tecnologías orientadas al Back-end para la generación automática de código y, finalmente, las tecnologías utilizadas para facilitar el despliegue y escalabilidad del sistema.
En cuanto a las herramientas empleadas en el desarrollo del Front-end se encuentra, el ya estándar conjunto de JavaScript, HTML5 y CSS, permitiendo crear un aspecto visual completo y con alta compatibilidad, además de una correcta y adaptable lógica de comunicación con el Back-end. A su vez, estas herramientas fueron potenciadas con Boostrap, que con la ayuda de sus componentes prediseñados alivianó la carga de trabajo referida al diseño estético, permitiendo gestionar múltiples funcionalidades dentro de la misma página sin descuidar este aspecto. De esta forma y con la ayuda de Thymeleaf el Front-end fue acoplado al API Gateway para evitar complejidades innecesarias.
El Back-end fue desarrollado en su gran mayoría en Java 17, haciendo uso del framework Spring y de sus conocidas librerías para una correcta, limpia y eficiente comunicación entre servicios mediante, en su mayoría, el estilo de arquitectura REST. La seguridad se administró e implementó mediante OAuth2 partiendo del servicio ofrecido por Okta, un estándar que permite a sitios web o aplicaciones acceder a recursos alojados en otras aplicaciones, en nombre y con permiso previo, del usuario. Los aspectos que requirieron persistencia de datos relacional fueron provistos de una instancia de base de datos PostgreSQL, elegida debido a su entorno open source, además de su destacable flexibilidad, integridad de datos y escalabilidad. Además, se manejaron comunicaciones asíncronas para él envió de notificaciones mediante Apache Kafka.
La lógica referida a la generación dinámica de código se administró semánticamente mediante RDF, que permitió especificar de forma correcta y estructurada las combinaciones y decisiones realizadas por el usuario en el canvas presente en el Front- end, para poder así ser enviadas al Back-end, consultadas a través del lenguaje de consulta SPARQL y administradas mediante Apache Jena en los servicios Java. Para concluir el proceso y generar el código especificado y solicitado por el usuario se decidió utilizar Apache Velocity, debido a su alta capacidad en la tarea requerida y MinIO, para el almacenamiento y descarga de los archivos resultantes, evadiendo de esta forma, dependencia a soluciones de almacenamiento en la nube específicas.
Finalmente, la administración del despliegue y escalabilidad del sistema se llevó a cabo mediante Docker, potenciado con Kubernetes. De esta forma, al igual que otras decisiones previamente expuestas, se reduce el acoplamiento a soluciones cloud brindando al sistema una mayor versatilidad y capacidad independiente de despliegue.
Recolección de Datos
Para comprender adecuadamente el problema a abordar, se inició con el análisis de fuentes bibliográficas académicas. Este enfoque permitió identificar los principales desafíos en el desarrollo de arquitecturas distribuidas, así como los costos asociados.
Otro método de recolección de datos utilizado fue el análisis de redes sociales. Esta metodología, debido al potencial público del proyecto, resultó altamente enriquecedora gracias a plataformas como Twitter, Reddit y Medium, donde desarrolladores de software comparten y discuten ideas y experiencias sobre temas y situaciones del ámbito informático.
De esta forma, se obtuvieron dos enfoques ciertamente antagónicos, justificando de esta manera la elección de las técnicas presentadas. Estos enfoques se dividen en los estrictamente teóricos, basados en documentos académicos, y por el otro extremo, mediante redes sociales, los enfoques basados en las experiencias diarias y cotidianas de los desarrolladores, quienes, al fin y al cabo, son los perjudicados por la problemática.
Planificación del Proyecto
Para facilitar la comprensión, se presentará primero la planificación de forma separada, y luego se mostrará el diagrama de Gantt utilizado para organizar los objetivos del presente Trabajo Final de Graduación.
A continuación, se presentan las tareas especificadas en conjunto con las fechas correspondientes para, posteriormente presentar el diagrama de Gantt mencionado.
Figura 1. Plan de Desarrollo
Figura 2. Diagrama de Gantt
RESULTADOS
Descripción del Sistema
Product Backlog
A continuación, se presenta el Product Backlog del prototipo a desarrollar. Cabe aclarar que las historias de usuario expuestas corresponden únicamente a las funcionalidades básicas necesarias para exponer el propósito del sistema. Es por este motivo que únicamente se presentan componentes personalizables del tipo ecommerce, ya que así se logran exponer las funcionalidades referidas a la combinación y personalización de componentes compatibles dentro del canvas de la aplicación.
Tabla 1. Product Backlog |
||||
ID |
Historia de Usuario |
Prioridad |
Puntos de Historia |
Dependencias |
HU-001 |
Registro a la plataforma vía Google |
Alta |
5 |
- |
HU-002 |
Iniciar sesión vía Google |
Alta |
2 |
HU-001 |
HU-003 |
Cerrar sesión de usuario |
Media |
2 |
HU-002 |
HU-004 |
Diseño visual drag-and-drop |
Media |
5 |
- |
HU-005 |
Plantilla de servicio de usuarios |
Alta |
5 |
- |
HU-006 |
Servicio de usuarios |
Alta |
2 |
HU-005 |
HU-007 |
Plantilla de servicio de catálogo de productos |
Alta |
5 |
- |
HU-008 |
Servicio de catálogo de productos |
Alta |
3 |
HU-007 |
HU-009 |
Plantilla de servicio de carrito de compras |
Alta |
5 |
- |
HU-010 |
Servicio de carrito de compras |
Alta |
3 |
HU-009 |
HU-011 |
Plantilla de servicio de ordenes |
Alta |
5 |
- |
HU-012 |
Servicio de órdenes |
Alta |
3 |
HU-011 |
HU-013 |
Plantilla de servicio de envíos |
Alta |
5 |
- |
HU-014 |
Servicio de envíos |
Media |
3 |
HU-013 |
HU-015 |
Plantilla de servicio de notificación |
Alta |
8 |
- |
HU-016 |
Servicio de notificaciones |
Media |
3 |
HU-015 |
HU-017 |
Interactuar con componentes disponibles |
Media |
5 |
HU-006 |
HU-018 |
Compatibilidad de componentes |
Media |
5 |
HU-017 |
HU-019 |
Eliminar componentes del diseño |
Baja |
3 |
HU-018 |
HU-020 |
Seleccionar persistencia en componentes |
Baja |
3 |
HU-016 |
HU-021 |
Configurar endpoints en componentes |
Media |
3 |
HU-016 |
HU-022 |
Seleccionar metodología de comunicación |
Media |
8 |
HU-016 |
HU-023 |
Especificar seguridad JWT |
Alta |
3 |
HU-016 |
HU-024 |
Especificar configuración global |
Media |
5 |
HU-016 |
HU-025 |
Especificar API Gateway |
Media |
8 |
HU-016 |
HU-026 |
Traducción de JSON a RDF |
Alta |
5 |
HU-025 |
HU-027 |
ZIP de la arquitectura resultante |
Baja |
8 |
HU-026 |
HU-028 |
Estado de proceso de generación dinámica |
Baja |
5 |
HU-027 |
HU-029 |
Acceder a archivos ZIP |
Baja |
3 |
HU-027 |
HU-030 |
Dockerfiles de componentes |
Alta |
3 |
HU-026 |
HU-031 |
Guía de tareas pendientes |
Baja |
5 |
HU-025 |
HU-032 |
Documentación de componentes |
Media |
5 |
HU-025 |
HU-033 |
Guía de uso de la plataforma |
Media |
5 |
HU-032 |
Historias de Usuario
Tabla 2. HU-001 Registro a la plataforma vía Google |
|||||
ID |
HU-001 |
Nombre |
Registro a la plataforma vía Google |
||
Descripción |
Como usuario, quiero registrarme en el sistema mediante mi cuenta de Google, para poder crear mi perfil. |
||||
Criterios de Aceptación |
Dado un usuario de Google existente, cuando este decida registrarse, el sistema debe redireccionarlo a una pestaña para brindar los permisos necesarios, permitiendo el registro e informando al usuario, una vez completada la acción. Dado un usuario de Google previamente registrado mediante su cuenta en la plataforma, cuando este sea provisto para registrarse, el sistema debe informar que ya existe una cuenta registrada con ese usuario, invitándolo a iniciar sesión mediante un hipervínculo a la sección correspondiente. |
||||
Prioridad |
Alta |
Puntos de historia estimados |
5 |
||
Tabla 3. HU002 Iniciar sesión vía Google |
||||||
ID |
HU-002 |
Nombre |
Iniciar sesión vía Google |
|||
Descripción |
Como usuario, quiero iniciar sesión en el sistema mediante mi cuenta de Google, para acceder a la plataforma y a mis arquitecturas previas. |
|||||
Criterios de Aceptación |
Dado un usuario previamente registrado mediante su cuenta de Google, cuando ingrese mediante la cuenta mencionada, el sistema debe otorgar acceso, redirigiéndolo al canvas de la plataforma. Dado un usuario que no se encuentre registrado mediante su cuenta de Google, cuando intente ingresar mediante la cuenta no registrada, el sistema debe informar que no se encuentra registrado, invitándolo a hacerlo mediante un hipervínculo a la sección correspondiente. |
|||||
Prioridad |
Alta |
Puntos de historia estimados |
2 |
|||
Tabla 4. HU-003 Cerrar sesión de usuario |
||||
ID |
HU-003 |
Nombre |
Cerrar sesión de usuario |
|
Descripción |
Como usuario, quiero cerrar sesión en el sistema mediante mi cuenta de Google, para evitar accesos no deseados a mi perfil. |
|||
Criterios de Aceptación |
Dado un usuario ingresado en el sistema mediante credenciales validas, cuando decida errar su sesión, el sistema debe anular las credenciales temporales que permiten su acceso en la sesión actual. |
|||
Prioridad |
Media |
Puntos de historia estimados |
2 |
Tabla 5. HU-004 Diseño visual drag-and-drop |
||||
ID |
HU-004 |
Nombre |
Diseño visual drag-and-drop |
|
Descripción |
Como usuario, quiero arrastrar componentes al canvas para poder diseñar una arquitectura de forma visual. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión, cuando el usuario presione y arrastre al canvas la representación visual de un componente, el sistema debe moverlo al área donde el usuario deposite el elemento. |
|||
Prioridad |
Media |
Puntos de historia estimados |
5 |
Tabla 6. HU-005 Plantilla de servicio de usuarios |
||||
ID |
HU-005 |
Nombre |
Plantilla de Servicio de Usuarios |
|
Descripción |
Como usuario, quiero que el sistema utilice una plantilla predefinida para la creación automática de servicios de usuarios, de manera que se generen todos los componentes necesarios para gestionar usuarios y permisos sin intervención manual. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuando genere una arquitectura que contenga "Servicio de Usuarios" dentro del canvas de diseño, el sistema debe asociar automáticamente el servicio a una plantilla predefinida para la gestión de usuarios. Dado un usuario que ha iniciado sesión en la plataforma, cuando combine cierto servicio compatible a “Servicio de Usuarios”, el sistema debe adaptar la generación de código de forma acorde para una correcta interacción. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
5 |
Tabla 7. HU-006 Servicio de usuarios |
||||
ID |
HU-006 |
Nombre |
Servicio de usuarios |
|
Descripción |
Como usuario, quiero disponer de un servicio de manejo de usuarios para incorporar en mi arquitectura, para poder manejar su información y permisos. |
|||
Criterios de Aceptación |
Dado que un usuario ha iniciado sesión en la plataforma, cuando arrastre el componente visual "Usuarios" al canvas de diseño, el sistema debe asociar automáticamente el servicio de órdenes a la plantilla de código predefinida. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
3 |
Tabla 8. HU-007 Plantilla de servicio de catálogo de productos |
||||
ID |
HU-007 |
Nombre |
Plantilla de Servicio de catálogo de productos |
|
Descripción |
Como usuario, quiero que el sistema utilice una plantilla predefinida para la creación automática de un servicio de catálogo de productos, para que pueda exponer mi inventario actual. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuando genere una arquitectura que contenga "Servicio de Catálogo de Productos" dentro del canvas de diseño, el sistema debe asociar automáticamente el servicio a una plantilla predefinida para la gestión de usuarios. Dado un usuario que ha iniciado sesión en la plataforma, cuando combine cierto servicio compatible a “Servicio de Catálogo de Productos”, el sistema debe adaptar la generación de código de forma acorde para una correcta interacción. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
5 |
Tabla 9. HU-008 Servicio de catálogo de productos |
||||
ID |
HU-008 |
Nombre |
Servicio de catálogo de productos |
|
Descripción |
Como usuario, quiero disponer de un servicio de catálogo de productos para incorporar en mi arquitectura, para poder exponer mi stock actual al público. |
|||
Criterios de Aceptación |
Dado que un usuario ha iniciado sesión en la plataforma, cuando arrastre el componente visual "Catálogo de Productos" al canvas de diseño, el sistema debe asociar automáticamente el servicio de órdenes a la plantilla de código predefinida. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
3 |
Tabla 10. HU-009 Plantilla de servicio carrito de compras |
||||
ID |
HU-009 |
Nombre |
Plantilla de Servicio de carrito de compras |
|
Descripción |
Como usuario, quiero que el sistema utilice una plantilla predefinida para la creación automática de un servicio de carrito de compras, para que los usuarios puedan realizar compras de múltiples productos. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuando genere una arquitectura que contenga "Servicio de Carrito de Compras" dentro del canvas de diseño, el sistema debe asociar automáticamente el servicio a una plantilla predefinida para la gestión de usuarios. Dado un usuario que ha iniciado sesión en la plataforma, cuando combine cierto servicio compatible a “Servicio de Carrito de Compras”, el sistema debe adaptar la generación de código de forma acorde para una correcta interacción. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
5 |
Tabla 11. HU-010 Servicio de carrito de compras |
||||
ID |
HU-010 |
Nombre |
Servicio de carrito de compras |
|
Descripción |
Como usuario, quiero disponer de un servicio de carrito de compras para incorporar en mi arquitectura, para que los usuarios de mi sistema puedan realizar compras de múltiples artículos simultáneamente. |
|||
Criterios de Aceptación |
Dado que un usuario ha iniciado sesión en la plataforma, cuando arrastre el componente visual "Carrito de Compras" al canvas de diseño, el sistema debe asociar automáticamente el servicio de órdenes a la plantilla de código predefinida. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
3 |
Tabla 12. HU-011 Plantilla de servicio de órdenes |
||||
ID |
HU-011 |
Nombre |
Plantilla de Servicio de órdenes |
|
Descripción |
Como usuario, quiero que el sistema utilice una plantilla predefinida para la creación automática de un servicio de órdenes, para gestionar el proceso de emisión y administración de órdenes. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuando genere una arquitectura que contenga "Servicio de Ordenes" dentro del canvas de diseño, el sistema debe asociar automáticamente el servicio a una plantilla predefinida para la gestión de usuarios. Dado un usuario que ha iniciado sesión en la plataforma, cuando combine cierto servicio compatible a “Servicio de Ordenes”, el sistema debe adaptar la generación de código de forma acorde para una correcta interacción. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
5 |
Tabla 13. HU-012 Servicio de órdenes |
||||
ID |
HU-012 |
Nombre |
Servicio de órdenes |
|
Descripción |
Como usuario, quiero disponer de un servicio capaz de administrar órdenes para incorporar a mi arquitectura, para manejar las ordenes emitidas dentro del sistema y actuar en consecuencia. |
|||
Criterios de Aceptación |
Dado que un usuario ha iniciado sesión en la plataforma, cuando arrastre el componente visual "Órdenes" al canvas de diseño, el sistema debe asociar automáticamente el servicio de órdenes a la plantilla de código predefinida. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
3 |
Tabla 14. HU-013 Plantilla de servicio de envíos |
||||
ID |
HU-013 |
Nombre |
Plantilla de Servicio de envíos |
|
Descripción |
Como usuario, quiero que el sistema utilice una plantilla predefinida para la creación automática de un servicio de envíos, de manera que pueda gestionar el estado de los envíos. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuando genere una arquitectura que contenga "Servicio de Envíos" dentro del canvas de diseño, el sistema debe asociar automáticamente el servicio a una plantilla predefinida para la gestión de usuarios. Dado un usuario que ha iniciado sesión en la plataforma, cuando combine cierto servicio compatible a “Servicio de Envíos”, el sistema debe adaptar la generación de código de forma acorde para una correcta interacción. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
5 |
Tabla 15. HU-014 Servicio de envíos |
||||
ID |
HU-014 |
Nombre |
Servicio envíos |
|
Descripción |
Como usuario, quiero disponer de un servicio capaz de administrar el estado de los envíos de mi sistema para incorporar a mi arquitectura, para poder rastrear y actualizar el estado de los envíos. |
|||
Criterios de Aceptación |
Dado que un usuario ha iniciado sesión en la plataforma, cuando arrastre el componente visual "Envíos" al canvas de diseño, el sistema debe asociar automáticamente el servicio de órdenes a la plantilla de código predefinida. |
|||
Prioridad |
Media |
Puntos de historia estimados |
3 |
Tabla 16. HU-015 Plantilla de servicio de notificaciones |
||||
ID |
HU-015 |
Nombre |
Plantilla de Servicio de notificaciones |
|
Descripción |
Como usuario, quiero que el sistema utilice una plantilla predefinida para la creación automática de un servicio de notificaciones, de manera que pueda enviar alertas y mensajes a los usuarios. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuando genere una arquitectura que contenga "Servicio de Notificaciones" dentro del canvas de diseño, el sistema debe asociar automáticamente el servicio a una plantilla predefinida para la gestión de usuarios. Dado un usuario que ha iniciado sesión en la plataforma, cuando combine cierto servicio compatible a “Servicio de Notificaciones”, el sistema debe adaptar la generación de código de forma acorde para una correcta interacción. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
8 |
Tabla 17. HU-016 Servicio de notificaciones |
||||
ID |
HU-016 |
Nombre |
Servicio de notificaciones |
|
Descripción |
Como usuario, quiero disponer de un servicio de notificaciones para incorporar en mi arquitectura, para enviar mensajes y alertas a los usuarios del sistema sobre eventos importantes. |
|||
Criterios de Aceptación |
Dado que un usuario ha iniciado sesión en la plataforma, cuando arrastre el componente visual "Notificaciones" al canvas de diseño, el sistema debe asociar automáticamente el servicio de órdenes a la plantilla de código predefinida. |
|||
Prioridad |
Media |
Puntos de historia estimados |
3 |
Tabla 18. HU-017 Visualizar componentes disponibles |
||||
ID |
HU-017 |
Nombre |
Interactuar con componentes disponibles |
|
Descripción |
Como usuario, quiero visualizar los componentes disponibles para poder seleccionarlos y combinarlos en el canvas según mis necesidades. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuanto deposite un componente en el canvas y lo desee unir con otro compatible, el sistema debe crear una unión grafica mediante una línea para expresar la relación exitosa. Dado un usuario que ha iniciado sesión en la plataforma, cuando deposite un componente en el canvas y lo desee unir con otro no compatible, el sistema debe presentar mediante “pop up” que la combinación no es legal, invitando al usuario a revisar la documentación de la plataforma. |
|||
Prioridad |
Media |
Puntos de historia estimados |
5 |
Tabla 19. HU-018 Compatibilidad de componentes |
||||
ID |
HU-018 |
Nombre |
Compatibilidad de componentes |
|
Descripción |
Como usuario, quiero ver con que componentes es compatible el seleccionado, para combinarlos correctamente en el canvas. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuando interactúe sobre el botón “+” anexado al componente presente en el canvas, el sistema debe destacar los botones “+” del resto de componentes compatibles presentes en el canvas. Dado un usuario que ha iniciado sesión en la plataforma, cuando destaque las compatibilidades de un componente y vuelva a tocar el canvas, el sistema debe desmarcar las conexiones previamente remarcadas. |
|||
Prioridad |
Media |
Puntos de historia estimados |
5 |
Tabla 20. HU-019 Eliminar componentes del diseño |
||||
ID |
HU-019 |
Nombre |
Eliminar componentes del diseño |
|
Descripción |
Como usuario, quiero eliminar un componente del canvas para quitarlo de la arquitectura diseñada. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuando ubique el ratón sobre un componente desplegado en el canvas, el sistema debe presentar un icono “X” referido a la opción de eliminar el componente. Dado un usuario que ha iniciado sesión en la plataforma, cuando interactúe con el botón “X” de un componente en el canvas, el sistema debe consultar si desea eliminar el componente, en caso positivo ejecuta la acción y en caso negativo quita el pop-up de consulta. |
|||
Prioridad |
Baja |
Puntos de historia estimados |
3 |
Tabla 21. HU-020 Seleccionar persistencia en componentes |
||||
ID |
HU-020 |
Nombre |
Seleccionar persistencia en componentes |
|
Descripción |
Como usuario, quiero configurar la base de datos de un componente para poder elegir la que mejor se adapta a los requerimientos de mi arquitectura. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuando interactúe con la base de datos predeterminada adjunta al componente dentro del canvas, el sistema debe desplegar las opciones alternativas presentes para el servicio, permitiendo modificar la predeterminada. |
|||
Prioridad |
Baja |
Puntos de historia estimados |
3 |
Tabla 22. HU-021 Configurar endpoints en componentes |
||||
ID |
HU-021 |
Nombre |
Configurar endpoints en componentes |
|
Descripción |
Como usuario, quiero configurar la URL de los endpoints de un componente para adecuarlo a mis requerimientos de infraestructura. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, cuando deposite el ratón sobre un componente en el canvas, el sistema debe desplegar un botón representando una “tuerca” para acceder a un pop-up con las configuraciones del servicio. Dado un usuario que ha iniciado sesión en la plataforma, cuando interactúe con el botón de configuración de un microservicio, el sistema debe presentar la opción de modificar el prefijo de los endpoints del microservicio, aplicando los cambios mediante un botón “aceptar”. Dado un usuario que ha iniciado sesión en la plataforma, cuando ingrese una cadena no valida como URL como prefijo de endpoints y presione “aceptar”, el sistema debe notificar que no se realizó ningún cambio debido a caracteres inválidos, manteniendo al usuario en el pop-up mostrando la cadena previa al ingreso ilegal. |
|||
Prioridad |
Media |
Puntos de historia estimados |
3 |
Tabla 23. HU-022 Seleccionar metodología de comunicación |
||||
ID |
HU-022 |
Nombre |
Seleccionar metodología de comunicación |
|
Descripción |
Como usuario, quiero seleccionar la metodología de comunicación entre dos componentes para que se adapten a las necesidades de mi sistema. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al crear una conexión entre 2 componentes compatibles, el sistema debe presentar en medio de la conexión un símbolo que al interactuar con el desplegara una lista con los tipos de conexión compatibles entre ambos microservicios permitiendo seleccionar la opción deseada. |
|||
Prioridad |
Media |
Puntos de historia estimados |
8 |
Tabla 24. HU-023 Especificar seguridad JWT |
||||
ID |
HU-023 |
Nombre |
Especificar seguridad JWT |
|
Descripción |
Como usuario, quiero especificar la utilización de JWT como medio de seguridad para que la seguridad de la arquitectura se ajuste a mis requerimientos. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al acceder al canvas, el sistema debe exponer en la esquina superior derecha una opción global para asegurar la arquitectura mediante JWT, permitiendo desactivarlo o activarlo. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
3 |
Tabla 25. HU-024 Especificar configuración global |
||||
ID |
HU-024 |
Nombre |
Especificar configuración global |
|
Descripción |
Como usuario, quiero especificar la utilización de un servidor de configuración global para que la arquitectura se ajuste a mis requerimientos. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al acceder al canvas, el sistema debe exponer en la esquina superior derecha, debajo de “JWT” una opción para administrar la totalidad de las configuraciones de los servicios mediante un configuration server, permitiendo desactivarlo o activarlo. |
|||
Prioridad |
Media |
Puntos de historia estimados |
5 |
Tabla 26. HU-025 Especificar API Gateway |
||||
ID |
HU-025 |
Nombre |
Especificar API Gateway |
|
Descripción |
Como usuario, quiero especificar la generación de un API Gateway para que los componentes interactúen de forma directa |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al acceder al canvas, el sistema debe exponer en la esquina superior derecha, debajo de “Config Server” una opción para administrar la totalidad de las interacciones de la arquitectura mediante un API gateway, permitiendo desactivarlo o activarlo. |
|||
Prioridad |
Media |
Puntos de historia estimados |
8 |
Tabla 27. HU-026 Traducción de JSON a RDF |
||||
ID |
HU-026 |
Nombre |
Traducción de JSON a RDF |
|
Descripción |
Como usuario, quiero que el sistema convierta automáticamente los datos que especifican la arquitectura generada de formato JSON a RDF para garantizar la una especificación estructurada. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al solicitar el procesamiento de la arquitectura resultante, el sistema debe representar la información mediante un JSON, traduciéndola posteriormente en contenido semántico RDF para brindar estructura y posibilidad de realizar consultas. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
5 |
Tabla 28. HU-027 ZIP de la arquitectura resultante |
||||
ID |
HU-027 |
Nombre |
ZIP de la arquitectura resultante |
|
Descripción |
Como usuario, quiero solicitar un archivo ZIP desde el canvas con la arquitectura diseñada para obtener los archivos que la componen y así configurarlo en mi entorno local. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al configurar una arquitectura y solicitar su generación, el sistema debe convertir el código generado en un archivo ZIP, informando al usuario cuando se haya completado el proceso, invitándolo a descargarlo desde su perfil de usuario. |
|||
Prioridad |
Baja |
Puntos de historia estimados |
8 |
Tabla 29. HU-028 Estado de proceso de generación dinámica |
||||
ID |
HU-028 |
Nombre |
Estado de proceso de generación dinámica |
|
Descripción |
Como usuario, quiero conocer en qué estado se encuentra la generación dinámica de mi arquitectura para estimar cuando concluirá. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al configurar una arquitectura y solicitar su generación, el sistema debe presentar un pop-up indicando al usuario en qué estado se encuentra el proceso, mostrando los estados: Creando los pom.xml Generando el código Comprimiendo la arquitectura Proceso finalizado |
|||
Prioridad |
Baja |
Puntos de historia estimados |
5 |
Tabla 30. HU-029 Acceder a archivos ZIP previos |
||||
ID |
HU-029 |
Nombre |
Acceder a archivos ZIP |
|
Descripción |
Como usuario, quiero acceder a mis archivos ZIP generados previamente para poder volver a descargarlos |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al seleccionar el símbolo de perfil presente en la esquina superior derecha, el sistema debe redireccionar al usuario a una pantalla donde se presentan sus últimas 5 arquitecturas generadas, permitiendo descargarlas con un simple clic en el botón adosado a la derecha de cada una. |
|||
Prioridad |
Baja |
Puntos de historia estimados |
3 |
Tabla 31. HU-030 Dockerfiles de componentes |
||||
ID |
HU-030 |
Nombre |
Dockerfiles de componentes |
|
Descripción |
Como usuario, quiero disponer de Dockerfiles asociados a los componentes de la arquitectura para facilitar su despliegue. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al obtener el zip resultante de una arquitectura, el sistema debe incluir dentro de ese archivo, un Dockerfile individual por cada componente de la arquitectura, para permitir su despliegue y el de su componente de persistencia. |
|||
Prioridad |
Alta |
Puntos de historia estimados |
3 |
Tabla 32. HU-031 Guía de tareas pendientes |
||||
ID |
HU-031 |
Nombre |
Guía de tareas pendientes |
|
Descripción |
Como usuario, quiero obtener una guía de tareas pendientes (TO-DO's) en el código generado para ajustar y personalizar la arquitectura descargada. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al obtener el zip resultante de una arquitectura, el sistema debe incluir dentro de ese archivo, un archivo .txt explicando los TO-DO’s presentes en el código y su motivo de existencia. |
|||
Prioridad |
Baja |
Puntos de historia estimados |
5 |
Tabla 33. HU-032 Documentación de componentes |
||||
ID |
HU-032 |
Nombre |
Documentación de componentes |
|
Descripción |
Como usuario, quiero acceder a la documentación de componentes para entender su estructura y funcionamiento detallado. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al presionar el apartado presente referido a la documentación en la zona superior de la pantalla, el sistema debe redireccionarlo a una pantalla con un menú lateral donde se listen los componentes disponibles. Dado un usuario que ha iniciado sesión en la plataforma, al presionar un componente especifico en la documentación, el sistema debe exponer la misma, especificando su funcionalidad, compatibilidades y endpoints. |
|||
Prioridad |
Media |
Puntos de historia estimados |
5 |
Tabla 34. HU-033 Guía de uso de la plataforma |
||||
ID |
HU-033 |
Nombre |
Guía de uso de la plataforma |
|
Descripción |
Como usuario, quiero acceder a una guía de uso de la plataforma para comprender su funcionamiento general y sacarle el máximo provecho. |
|||
Criterios de Aceptación |
Dado un usuario que ha iniciado sesión en la plataforma, al presionar el apartado presente referido a la instrucción de uso de la plataforma en la zona superior de la pantalla, el sistema debe dirigirlo a la pantalla correspondiente, donde se presente una breve guía de uso de la plataforma. |
|||
Prioridad |
Media |
Puntos de historia estimados |
5 |
Sprint Backlog
En la siguiente tabla, se presenta el Backlog referido al primer Sprint del prototipo a desarrollar con una duración establecida de 14 días.
Tabla 35. Sprint Backlog |
|||||
Sprint |
Historia de Usuario |
Tareas |
Prioridad |
Estimado (días) |
Estado |
1 |
Registro a la plataforma vía Google (HU-001) |
Definir e implementar metodología y estructura de persistencia de datos |
Alta |
1 |
Hecho |
1 |
|
Codificar e integrar módulo de registro y conexión con Google OAUTH2 |
Alta |
2 |
Hecho |
1 |
|
Diseñar interfaz grafica |
Media |
1 |
Hecho |
1 |
|
Realizar testing unitario al módulo desarrollado |
Alta |
1 |
Hecho |
1 |
Iniciar sesión vía Google (HU-002) |
Codificar e integrar módulo de inicio de sesión |
Alta |
1 |
Hecho |
1 |
|
Diseñar interfaz grafica |
Media |
½ |
Hecho |
1 |
|
Realizar testing unitario al módulo desarrollado |
Alta |
½ |
Hecho |
1 |
Cerrar sesión de usuario (HU-003) |
Codificar e integrar módulo de cierre de sesión |
Media |
1 |
Hecho |
1 |
|
Diseñar interfaz grafica |
Media |
1 |
Hecho |
1 |
|
Realizar testing unitario al módulo desarrollado |
Media |
1 |
Hecho |
1 |
Plantilla de servicio de usuarios (HU- 005) |
Diseñar esquema y compatibilidades para la plantilla de servicio de usuarios |
Alta |
1 |
Hecho |
1 |
|
Codificar plantilla de servicio de usuarios |
Alta |
2 |
Hecho |
1 |
|
Realizar testing unitario a los componentes generados producto de la utilización de la plantilla desarrollada |
Alta |
1 |
Hecho |
Estructura de Datos
El proyecto posee cuatro estructuras de datos en las cuales soporta sus procesos e interacciones, brindándole al sistema desde una correcta persistencia de información, hasta una notable mejoría en cuanto eficiencia general del sistema y la posibilidad de enviar notificaciones de forma asíncrona a usuarios dentro de la plataforma.
A continuación, se presenta el diagrama DER de la base de datos relacional PostgreSQL, la cual cumple con la administración y gestión de usuarios y sus correspondientes identificadores, incluyendo los provistos por el servidor de identificación OAUTH2.
Figura 3. DER base de datos relacional para gestión de usuarios
A continuación, se presentan los diccionarios de datos de la base de datos relacional recién presentada:
Tabla 36. Diccionario tabla users |
|||
Tabla: users |
|||
Campo |
Longitud |
Tipo de Dato |
Descripción |
user_id |
19 |
Numérico |
Identificador de usuario |
oauth_provider |
16 |
Alfabético |
Proveedor OAUTH |
oauth_id |
19 |
Numérico |
Numero identificador provisto por OAUTH |
|
254 |
Alfabético |
Email provisto por proveedor OAUTH |
name |
254 |
Alfabético |
Nombre provisto por proveedor OAUTH |
created_at |
19 |
Timestamp |
Momento de creación de la cuenta |
Tabla 37. Diccionario tabla user_activity |
|||
Tabla: user_activity |
|||
Campo |
Longitud |
Tipo de Dato |
Descripción |
activity_id |
19 |
Numérico |
Identificador de sesión |
user_id |
19 |
Numérico |
Identificador de usuario |
activity_type |
254 |
Alfabético |
Tipo de actividad realizada |
ip_address |
15 |
Numérico |
Direccion IPv4 |
created_at |
19 |
Timestamp |
Momento de realización de la actividad |
Durante el diseño del sistema, se detectó que incluir un almacenamiento temporal del tipo “caché” podría brindar una reducción temporal en la respuesta del sistema hacia el usuario, aprovechando los procesamientos realizados previamente. Es por esto que fue implementado un almacenamiento temporal con REDIS, el cual busca reducir las llamadas al API de Spring Initializr, analizando las llamadas previas en un tiempo cercano en busca a una igual a la que se desea realizar.
El siguiente diagrama ejemplifica el proceso mencionado:
Figura 4. Explicación de funcionalidad de sistema cache
De esta forma, en muchos casos, se logra ahorrar el valioso tiempo consumido por una llamada hacia una API externa.
La simple estructura de datos del caché mencionado se expone a continuación:
Figura 5. Estructura de datos de caché para la generación de poms
A continuación, se presenta el diccionario de la estructura de datos presentada.
Tabla 38. Diccionario de datos presentes en caché |
|||
Campo |
Longitud |
Tipo de Dato |
Descripción |
url_SHA256 |
64 |
Alfabético |
Hash SHA-256 de la url utilizada para la petición hacia la API de Spring Initializr |
pom_file |
65535(max) |
Alfabético |
Contenido del archivo pom.xml resultante del request |
También se definió una estructura de datos encargada de almacenar las arquitecturas diseñadas por los usuarios en la plataforma y su código correspondiente generado de forma automática. De esta forma, mediante MinIO, el sistema tiene una plataforma donde trabajar dinámicamente con el código, permitiendo a los usuarios pueden descargar un archivo .zip con la arquitectura diseñada. La estructura de datos mencionada cumple con el siguiente formato:
Figura 6. Estructura de archivos para almacenar y generar código
Además, el sistema requirió para un correcto funcionamiento en procesos asíncronos la inclusión de un sistema de mensajería, en este caso se optó por utilizar Apache Kafka. La herramienta mencionada cumple con dos tareas cruciales para el sistema:
· Informar de la presencia de una nueva arquitectura a generar y brindar su especificación.
· Mantener actualizado al usuario sobre el proceso de generación del código que solicitó, informándole en qué estado se encuentra la generación del producto final.
· Los tópicos utilizados para las funciones mencionadas son service-generation- request y service-generation-status respectivamente, los cuales interaccionan con los servicios del sistema de la siguiente forma:
Figura 7. Diagrama de explicación del sistema asíncrono de mensajes
Como se puede apreciar en el diagrama presentado, el servicio está compuesto por un único bróker y service-generation-request posee dos particiones a comparación de service-generation-status, que solo posee una. Esta decisión está basada en la posibilidad de procesamiento paralelo en las solicitudes generadas por los usuarios que brinda la presencia de más de una partición, algo no tan necesario en el caso de los mensajes de progreso de la generación de código.
Se procede a exponer el modelo de datos de cada tópico mencionado.
Service-generation-status:
Mediante la información contenida por el tópico expuesto, el sistema es capaz de mantener al usuario informado en materia del progreso transcurrido referido a la generacion de codigo del sistema que diseñó en el canvas.
Figura 8. Estructura de datos del tópico ‘service-generation-status’
A continuación, se presenta el diccionario de la estructura de datos presentada:
Tabla 39. Diccionario de datos de tópico ‘service-generation-status’ |
|||
Campo |
Longitud |
Tipo de Dato |
Descripción |
status |
32 |
Alfabético |
Mensaje informativo del proceso de generación dinámica de código |
progress |
1 |
Numérico |
Rango de números del 1 al 3, indicando en que paso del proceso se encuentra la generación dinámica de código |
timestamp |
19 |
Alfabético |
Momento de actualización de estado de la actividad |
Service-generation-request: la información transportada por el presente tópico definido es crítica para el funcionamiento del sistema, ya que en base a él JSON ejemplificado a continuación, el sistema recibe de forma asíncrona las nuevas tareas a procesar y construye el código necesario solicitado por el usuario. Es importante aclarar que el JSON posee muchos atributos que para el prototipo podrían parecer innecesarios ya que no permiten personalización, pero de esta forma el sistema se encuentra listo para ampliar las personalizaciones en un hipotético caso de un desarrollo completo.
Figura 9. Estructura de datos del tópico ‘service-generation-request’
A continuación, se presenta el diccionario de la estructura de datos presentada:
Tabla 40. Diccionario de tópico ‘service-generation-request’ |
||
Campo |
Tipo de Dato |
Descripción |
projectName |
Alfabético |
Nombre del proyecto general |
versión |
Numérico |
Versión del proyecto, 1,0 por defecto |
services |
Alfabético |
Contiene y define los componentes de la arquitectura |
name |
Alfabético |
Nombre del componente |
type |
Alfabético |
Tipo de componente, es decir de que trata el servicio |
versión |
Numérico |
Versión de la plantilla utilizada |
description |
Alfabético |
Descripción del componente |
endpoints |
Alfabético |
Sección referida a los endpoints del componente |
path |
Alfabético |
Url base del componente |
dependencies |
Alfabético |
Dependencias del componente |
connections |
Alfabético |
Conexiones entre componentes especificadas en el canvas |
source |
Alfabético |
Punto A de la conexión |
target |
Alfabético |
Punto B de la conexión |
protocol |
Alfabético |
Protocolo de la comunicación |
type |
Alfabético |
Metodología utilizada para la comunicación |
databases |
Alfabético |
Contiene los elementos de persistencia de los servicios |
name |
Alfabético |
Nombre del elemento de persistencia |
owner |
Alfabético |
Servicio que interactúa con el elemento de persistencia |
type |
Alfabético |
Herramienta utilizada |
version |
Numérico |
Versión de la herramienta utilizada |
infrastructure |
Alfabético |
Contiene los elementos de configuración e infraestructura |
name |
Alfabético |
Nombre del componente de infraestructura |
type |
Alfabético |
Tipo de componente de infraestructura |
port |
Numérico |
Puerto del componente de infraestructura |
security |
Alfabético |
Contiene los elementos de seguridad global del sistema |
auth |
Alfabético |
Especifica como se realiza la autenticación en el sistema |
type |
Alfabético |
Metodología de autenticación |
configurations |
Alfabético |
Contiene información para la personalización de seguridad |
secretKey |
Alfabético |
Clave secreta utilizada para asegurar el sistema |
Prototipos de Interfaces de Pantallas
Al acceder a la plataforma web, se solicita de forma obligatoria ingresar por medio de la cuenta de Google perteneciente al usuario.
Figura 10. Pantalla de inicio de sesión
Una vez es validado y/o registrado el usuario en el sistema, el mismo es enviado a la página principal de la plataforma, donde se encuentra su funcionalidad core, referida al diseño de sistemas distribuidos.
Figura 11. Pantalla de inicio
Dentro de la pantalla principal, el usuario es capaz de arrastrar los componentes participes de la arquitectura al canvas, para comenzar a diseñar el sistema.
Figura 12. Funcionalidad Drag-and-Drop
Los componentes depositados sobre el canvas a su vez, si su compatibilidad lo permite, se pueden unir entre sí, para generar funcionalidades más complejas mediante la interacción de los mismos.
Figura 13. Funcionalidad de unión de componentes
Para permitir la personalización de cada componente depositado en el canvas, el usuario debe presionar el engranaje correspondiente para acceder al menú de configuración.
Figura 14. Pantalla de configuración de componente
Una vez que el usuario diseñó y configuró a su gusto una arquitectura específica, este puede generar el código correspondiente presionando el botón verde situado en la esquina inferior derecha del canvas, donde recibirá en tiempo real el progreso que lleva el proceso de generación dinámica de código.
Figura 15. Pantalla de proceso de generación de código
Para que el usuario conozca los diferentes componentes utilizables en el canvas, su composición, funcionamiento, metodología de persistencia y compatibilidades, puede acceder a la sección de documentación, donde se encontrará con la información necesaria para comprender cada pieza disponible.
Figura 16. Pantalla de documentación
Si el usuario desea comprender el funcionamiento de la plataforma en sí, existe un apartado denominado Guía de Uso, donde puede acceder a la información mencionada
Figura 17. Pantalla de guía de uso
Cuando el usuario del sistema genera arquitecturas en el canvas, las ultimas 5 son registradas y accesibles para su descarga en el apartado Perfil, donde se expone información básica de utilidad sobre las arquitecturas mencionadas y un enlace para su correspondiente descarga.
Figura 18. Pantalla de perfil de usuario
Finalmente, para concluir su actividad en la plataforma, el usuario puede cerrar su sesión mediante el botón presente en la esquina superior derecha, luego de confirmar definitivamente su deseo de realizar tal acción.
Figura 19. Pantalla de cierre de sesión
Diagrama de Arquitectura
A continuación, se presenta el diagrama de arquitectura correspondiente al proyecto tratado en el presente documento. Debido a las decisiones tomadas apreciables en el diagrama, se logró un sistema altamente escalable y eficiente para el fin que persigue.
Figura 20. Diagrama de arquitectura
Seguridad
Acceso a la Aplicación
Como fue expresado en reiteradas ocasiones a lo largo del presente documento, el proyecto gestiona a los usuarios mediante OAuth2, específicamente mediante el inicio de sesión vía Google, siendo una alternativa muy conveniente para una aplicación como la desarrollada, debido a su permiso de acceso al público general.
Si bien por motivos de respaldo, auditoria y gestión de recursos el propio proyecto almacena la información de los usuarios registrados en la plataforma, las contraseñas son manejadas por Google, debido a que es mediante un usuario de la plataforma mencionada que el sistema concede el acceso al proyecto. Por lo tanto, los usuarios se deben adecuar a los requerimientos de Google para la creación de sus credenciales. A continuación, se listan los requerimientos al día de la fecha dispuestos por Google para la creación de un email bajo su dominio y su respectiva clave de acceso.
Requerimientos para la creación de un email:
· Debe seguir el formato estándar de una dirección de correo electrónico, es decir nombre@dominio.com. En este caso, el dominio es @gmail.com.
· El nombre de usuario, es decir el texto previo al ‘@’, debe contener entre 6 y 30 caracteres.
· Únicamente se permiten caracteres del tipo a-z y A-Z, además de números 0-9 y los caracteres especiales como el punto (.), el guion bajo (_) y el medio (-).
· La dirección de correo no debe estar en uso en Gmail. Es decir que cada dirección de correo debe ser única.
Requerimientos para la especificación de una contraseña:
· La contraseña debe contener más de 8 caracteres.
· Si bien no existe una limitación relacionada, se recomienda la utilización de minúsculas, mayúsculas, números y caracteres especiales.
· No debe formar parte de la lista de contraseñas consideradas comunes por Google.
A su vez, Google almacena las contraseñas de los usuarios utilizando funciones de hash que convierten la contraseña en una cadena de texto irreversible, además de añadir un valor aleatorio denominado ‘salt’ para dificultar los intentos de ataque por fuerza bruta. También cabe destacar la existencia de la posibilidad para los usuarios de Google de activar la autenticación de dos factores, conocida como 2FA, añadiendo una capa extra de seguridad al requerir un segundo elemento para acceder a la cuenta de usuario.
Respecto a los roles de usuario expuestos a continuación, debido a la naturaleza del proyecto y el desarrollo únicamente de las funcionalidades core para el prototipo, el usuario administrador no tiene ninguna ventaja o capacidad diferencial. Aun así, fue añadido de forma “lógica” en el sistema, con el fin de disponer del mismo pensando en futuras actualizaciones que provean características que requieran de un control extra dentro de la aplicación.
Perfiles presentes en la aplicación:
· Usuario común: tiene acceso a la totalidad de funcionalidades presentes en el prototipado tecnológico, es decir, la especificación, configuración y descarga de servicios referenciados a su perfil de usuario y la capacidad de consulta tanto a documentación presente en la plataforma, como a la guía de uso.
· Usuario administrador: como fue explicado de forma previa, actualmente el usuario administrador no posee permisos diferenciales respecto al usuario común, aun así, se encuentra presente en el sistema teniendo en cuenta posibles actualizaciones.
Política de Respaldo de Información
Con el fin de respaldar la información referida tanto al código de la aplicación, como a la información producida producto de su uso y ejecución, se almacenan 2 copias del código fuente de la aplicación y 3 copias de los datos de usuario.
Los datos de usuario, en primera instancia son almacenados en el propio hosting donde se almacena el volumen del contenedor referido al motor de base de datos. En este caso se trata del proveedor de servicios cloud DigitalOcean. Como segunda instancia de back-up, el sistema ejecuta un proceso cada día a las 00:00 (GMT-3), con el fin de persistir una copia del contenido de la base de datos en el servidor local de las oficinas de desarrollo. Finalmente, y con el objetivo de maximizar la integridad de los datos de usuario, se persiste de forma semanal una copia de los datos de usuario en un disco duro externo, siendo este almacenado en una ubicación confidencial, en un edificio diferente al servidor local, y de conocimiento únicamente por parte de los cargos gerenciales de la empresa.
En cuanto al código fuente de la aplicación, este es tratado y persistido en Github, donde los desarrolladores trabajan en él. A su vez, como se mencionó anteriormente, las versiones funcionales son respaldadas y persistidas al momento de su completitud en dos instancias. En primera instancia el código es almacenado de forma manual en el servidor local de la empresa, para finalmente, en segunda instancia, ser almacenado en un disco duro externo reservado en una ubicación confidencial, en un edificio diferente al que se encuentran las oficinas de la empresa, y de conocimiento únicamente por los cargos gerenciales de la misma.
El servidor local mencionado tanto en el respaldo de código fuente como de datos de usuario se trata de un NAS presente en las oficinas de desarrollo, configurado con RAID 10, para obtener un alto nivel de redundancia además de un notable rendimiento, asegurando una destacable disponibilidad de la información incluso en caso de incidentes, brindando una veloz recuperación del contenido persistido.
Por parte de DigitalOcean la disponibilidad también es tenida en cuenta y, de hecho, es uno de los factores que incidieron en que el sistema sea ejecutado sobre sus servicios en la nube, ya que, en los productos utilizados para el despliegue y ejecución del proyecto desarrollado, la plataforma mencionada presume de un tiempo de actividad del 99,99 %.(1)
Análisis de Costos
A continuación, se presentan desglosados, los costos estimados del proyecto en referencia a los recursos humanos necesarios para el desarrollo del sistema informático. Los mismos fueron obtenidos de la web del Consejo Profesional de Ciencias Informáticas de la provincia de Córdoba el día 21 de octubre del año 2024.
Tabla 41. Análisis de costos RRHH |
|||
Rol |
Honorarios |
Meses |
Subtotal (AR$) |
Analista Programador Senior |
$1 697 430,72 |
3 |
$5 092 292,16 |
Desarrollador Backend |
$1 985 445,37 |
3 |
$5 956 335,93 |
Desarrollador Frontend |
$1 883 828,08 |
2 |
$3 767 656,16 |
Analista Testing de Aplicaciones |
$1 646 481,38 |
2 |
$3 292 962,76 |
Total Desarrollo |
$18 109 247,01 |
Ya presentados los valores referidos a la mano de obra, a continuación, se presentan los costos operativos considerados necesarios para el correcto despliegue y funcionamiento del proyecto.
Tabla 42. Análisis de costos operativos |
||||
Recurso |
Cant. |
Fuente |
Subtotal AR$ |
Mensual AR$ |
* Kubernetes Basic Node (DigitalOcean) 8gb RAM 4 vCPU 160GB storage |
2 |
- |
$94 464 |
|
Nombre de dominio .com |
1 |
- |
$2144 |
|
NAS Drive S.O Linux Compatible RAID 10 Capacidad 4 HDD |
1 |
https://www.compel.com.ar/almacenamiento/almacenamiento/nas-drive-au-4b-25- 35a335696.html |
$816 851 |
- |
HDD 3T NAS |
4 |
https://www.compel.com.ar/almacenamiento/hdd-internos/hdd-3t-sea-35-nas- ironwol-328858.html |
$636 660 |
- |
Total Costo Inicial |
$1 453 511 |
|
||
Total Costos Fijos |
$96 608 |
|||
Nota: * Valor original en USD, convertido a AR$ considerando 1 USD equivalente a 948 AR$ en base a la cotización brindada por el Banco Central de la República Argentina el día 21 de octubre del año 2024.(2) |
En cuanto a los costos referidos al software utilizado para el desarrollo del proyecto, se tomó la decisión de recurrir a plataformas de código abierto, accediendo a planes gratuitos, para ahorrar costos en cuanto a licenciamiento. Aun así, se exponen estas herramientas a modo informativo.
Tabla 43. Análisis de costos herramientas de desarrollo |
|
Herramienta |
Subtotal (AR$) |
PostgreSQL |
$0 |
Apache Kafka |
$0 |
MinIO |
$0 |
Docker |
$0 |
Kubernetes |
$0 |
Spring Framework |
$0 |
Total Licencias de Software |
$0 |
A modo de conclusión del análisis de costos, se expone el resumen de los mismos excluyendo los valores de los salarios previamente detallados.
Tabla 44. Resumen de costos excluyendo RHHH |
||||
|
Capital Humano |
Software y Licencias |
Infraestructura y Hardware |
Total |
Costo Inicial (AR$)* |
$18 109 247,01 |
$0 |
$1 453 511 |
19 562 758,01 |
Costo Fijo Mensual (AR$)** |
$0 |
$0 |
$96 608 |
$96 608 |
Nota: * Comprende todo costo relacionado con los primeros tres meses de actividad, es decir, hasta concluir el desarrollo del sistema, excluyendo el despliegue de este. ** Comprende los costos de mantener el sistema, una vez desarrollado, desplegado en la nube. |
Análisis de Riesgos
A continuación, se presentan descriptos y detallados los riesgos que se pueden presentar durante el transcurso del desarrollo del proyecto, dividiendo los mismos en diferentes tablas según su razón de origen. En ellas se presenta tanto la probabilidad como el impacto, valores que basaran su significado en la matriz que se expone luego.
Riesgos Técnicos
Tabla 45. Riesgos Técnicos |
|||||
ID |
Tipo |
Riesgo |
Probabilidad |
Impacto |
Causa |
1 |
Técnico |
El tiempo de respuesta de la plataforma no cumple con los estándares de respuesta esperados |
0,40 |
4 |
Ineficiencias en la arquitectura o falta de optimización en las comunicaciones |
2 |
Técnico |
Vulnerabilidad de seguridad en servicios que interactúan con bases de datos. |
0,70 |
2 |
Falta de sanitización y validación adecuada de las entradas de usuario |
Tabla 46. Riesgos del Proyecto |
|||||
ID |
Tipo |
Riesgo |
Probabilidad |
Impacto |
Causa |
3 |
Proyecto |
Dependencia de API’s de terceros para integración o creación de servicios que no estén disponibles |
0,80 |
3 |
Falta de control sobre la calidad y disponibilidad de servicios utilizados en el sistema |
4 |
Proyecto |
Dificultad para conseguir el personal técnico necesario para llevar a cabo el desarrollo del sistema |
0,35 |
3 |
Temática muy específica debido al objetivo final del sistema, enfocado en sistemas distribuidos |
5 |
Proyecto |
Recursos insuficientes para el desarrollo del proyecto |
0,45 |
4 |
Falta de inversión en recursos humanos y/o tecnológicos |
6 |
Proyecto |
El campo de investigación no brinda información útil sobre la cual partir |
0,60 |
2 |
El campo de investigación de microservicios puede ser incompleto debido a su reciente inclusión |
Una vez expuestos los riesgos identificados del proyecto, se procede con la siguiente matriz de riesgo previamente mencionada, con el fin de ponderar las probabilidades de ocurrencia y sus impactos relacionados.
Figura 21. Matriz de Riesgos
En base a la matriz presentada, se desarrollaron tanto las tablas previamente expuestas como la definida a continuación, referida al análisis cuantitativo de los riesgos.
Tabla 47. Análisis cuantitativo de riesgos |
|||||
Riesgo |
Probabilidad de Ocurrencia |
Impacto |
Grado de Exposición |
Porcentaje |
Porcentaje Acumulado |
Dependencia de API’s de terceros para integración o creación de servicios que no estén disponibles |
0,80 |
3 |
2,40 |
25,40 |
25,40 |
Recursos insuficientes para el desarrollo del proyecto |
0,45 |
4 |
1,80 |
19,06 |
44,46 |
El tiempo de respuesta de la plataforma no cumple con los estándares de respuesta esperados |
0,40 |
4 |
1,60 |
16,93 |
61,39 |
Vulnerabilidad de seguridad en servicios que interactúan con bases de datos. |
0,70 |
2 |
1,40 |
14,81 |
76,20 |
El campo de investigación no brinda información útil sobre la cual partir |
0,60 |
2 |
1,20 |
12,70 |
88,90 |
Dificultad para conseguir el personal técnico necesario para llevar a cabo el desarrollo del sistema |
0,35 |
3 |
1,05 |
11,10 |
100 |
Una vez presentado el grado de exposición al riesgo correspondiente para cada riesgo detectado, es momento de utilizar el Principio de Pareto para centrar la atención en los aspectos importantes y críticos, ignorando los más triviales. A continuación, se expone el grafico correspondiente.
Figura 22. Principio de Pareto de la Exposición al Riesgo
Una vez identificados los riesgos más amenazantes utilizando el Principio de Pareto, se elaboraron planes de contingencia específicos para mitigar dichas amenazas. A continuación, se presentan los detalles de estos planes.
Tabla 48. Planes de contingencia |
|
Riesgo |
Plan de Contingencia |
Dependencia de API’s de terceros para integración o creación de servicios que no estén disponibles |
Desarrollar soluciones internas mínimas viables para reducir la dependencia crítica de API’s externas. Establecer contratos con proveedores clave para asegurar tiempos de respuesta y disponibilidad, y definir mecanismos de monitorización para detectar fallos y actuar rápidamente. |
Recursos insuficientes para el desarrollo del proyecto |
Establecer desde el inicio un plan de asignación flexible de recursos, que permita redistribuir esfuerzos en función de las prioridades del proyecto. Proponer fases adicionales o ajustes en el alcance del proyecto para adaptarse al presupuesto disponible. |
El tiempo de respuesta de la plataforma no cumple con los estándares de respuesta esperados |
Realizar una revisión exhaustiva de la arquitectura y aplicar optimizaciones puntuales en las áreas críticas. Integrar soluciones de monitoreo en tiempo real para detectar problemas de rendimiento y ajustar la capacidad del sistema. |
Vulnerabilidad de seguridad en servicios que interactúan con bases de datos. |
Implementar capas adicionales de seguridad, como firewalls a nivel de aplicación y encriptación de los datos sensibles. Realizar revisiones periódicas de código centradas en la seguridad y aplicar parches inmediatos ante cualquier vulnerabilidad descubierta. |
CONCLUSIONES
El presente proyecto permitió demostrar que la combinación de arquitecturas de microservicios con enfoques Low-code no solo es posible, sino también altamente beneficiosa para reducir la complejidad en el diseño y desarrollo de sistemas distribuidos. A través de la implementación de una plataforma visual e intuitiva, se logró ofrecer una solución capaz de acortar significativamente los tiempos de desarrollo, facilitar la integración de componentes y disminuir los errores comunes durante la codificación manual.
Uno de los principales logros alcanzados fue la construcción de un entorno funcional que permite a los desarrolladores arrastrar, configurar y relacionar microservicios de forma visual, para luego generar automáticamente el código correspondiente. Esta funcionalidad, respaldada por tecnologías como RDF, SPARQL y Apache Velocity, constituye un avance relevante en la automatización del desarrollo de software, asegurando consistencia estructural sin sacrificar flexibilidad.
La elección de herramientas modernas y open source como Java con Spring Framework, PostgreSQL, Apache Kafka, MinIO, Docker y Kubernetes resultó clave para asegurar la escalabilidad, portabilidad y robustez del sistema. Además, se implementaron prácticas seguras de autenticación con OAuth2 (vía Google), junto con mecanismos de respaldo y distribución que aseguran la integridad y disponibilidad de los datos.
En el aspecto metodológico, el uso de Scrum como marco de trabajo ágil permitió una evolución iterativa del producto, fomentando la mejora continua y una rápida respuesta ante obstáculos técnicos o cambios en los requerimientos. Esta dinámica fue fundamental para ajustar detalles en tiempo real, mejorar el diseño funcional del canvas, y adaptar la lógica de generación de código según los resultados obtenidos en cada sprint.
La recopilación de información mediante el análisis de literatura científica, complementado con observaciones en redes sociales utilizadas por desarrolladores, brindó una visión completa del problema a abordar. Esta integración entre teoría y práctica facilitó la validación de las necesidades reales del usuario objetivo y guió el diseño de funcionalidades clave de la plataforma.
En síntesis, el sistema desarrollado cumple con el objetivo de facilitar la creación de arquitecturas de microservicios, proporcionando una herramienta potente, accesible y adaptable. Si bien se trata de un prototipo funcional, su estructura y diseño anticipan una futura evolución con mayores posibilidades de personalización, ampliación de plantillas, y compatibilidad con entornos de producción empresariales. El camino hacia la democratización del desarrollo distribuido, mediante plataformas Low-code, queda así abierto y potenciado con esta propuesta tecnológica.
REFERENCIAS BIBLIOGRÁFICAS
1. DigitalOcean. DigitalOcean Managed Kubernetes. 2024. https://www.digitalocean.com/products/kubernetes
2. Banco Central de la República Argentina (BCRA). Cotizaciones por fecha. 2024. http://www.bcra.gob.ar/PublicacionesEstadisticas/Cotizaciones_por_fecha_2.asp
3. Chaudhary HAA, Ahmed T. Integration of micro-services as components in modeling environments for low code development. ISP RAS. 2021;33(4):19-30. doi:10.15514/ISPRAS-2021-33(4)-2
4. Dhoke P, Lokulwar P. Evaluating the Impact of No-Code/Low-Code Backend Services on API Development and Implementation: A Case Study Approach. In: 14th International Conference on Computing Communication and Networking Technologies (ICCCNT); 2023 Jul 11-13; Chennai, India. Piscataway: IEEE; 2023. p. 1-5. doi:10.1109/ICCCNT56998.2023.10306945
5. Apache Software Foundation. Apache Kafka. 2024. https://kafka.apache.org/
6. IBM. Minio. 2021. https://www.ibm.com/docs/es/cloud-private/3.2.x?topic=private-minio
7. JetBrains. IntelliJ IDEA features. 2024. https://www.jetbrains.com/es-es/idea/features/
8. Kubernetes. ¿Qué es Kubernetes? 2022. https://kubernetes.io/es/docs/concepts/overview/what-is-kubernetes/
9. Lewis J, Fowler M. Microservices: a definition of this new architectural term. 2014. https://martinfowler.com/articles/microservices.html
10. Lopez BM, Garcia JL. Impacto de arquitecturas de microservicios en el desarrollo web [Tesis de maestría]. Madrid: Universidad Politécnica de Madrid; 2019. https://oa.upm.es/55917/1/TESIS_MASTER_BRUNO_MARTIN_LOPEZ.pdf
11. Mozilla Developer Network. HTML5. 2023. https://developer.mozilla.org/es/docs/Glossary/HTML5
12. Postman. What is Postman? 2024. https://www.postman.com/product/what-is-postman/
13. Richardson C. Microservices patterns: With examples in Java. New York: Manning Publications; 2019.
14. Rock Content. What is Bootstrap? 2020. https://rockcontent.com/es/blog/bootstrap/
15. Said M, Ezzati A, Arezki S. Microservice-specific language, a step to the low-code platforms. In: Lecture Notes in Networks and Systems. 2023;637:817-28. doi:10.1007/978-3-031-26384-2_72
16. Spring. Spring Framework. 2024. https://spring.io/projects/spring-framework
17. The Thymeleaf Team. Thymeleaf. 2024. https://www.thymeleaf.org/
18. Trello. Trello Tour. 2023. https://trello.com/es/tour
19. Vincent P, Lijima K, Driver M, Wong J, Natis Y. Gartner magic quadrant for enterprise low-code application platforms. Stamford: Gartner, Inc.; 2019. https://www.gartner.com/en/documents/3956079
20. World Wide Web Consortium. SPARQL 1.1 Query Language. 2013. https://www.w3.org/TR/sparql11-query/
FINANCIACIÓN
Ninguna.
CONFLICTO DE INTERESES
Los autores declaran que no existe conflicto de intereses.
CONTRIBUCIÓN DE AUTORÍA
Conceptualización: Tomás Darquier, Pablo Alejandro Virgolini.
Curación de datos: Tomás Darquier, Pablo Alejandro Virgolini.
Análisis formal: Tomás Darquier, Pablo Alejandro Virgolini.
Investigación: Tomás Darquier, Pablo Alejandro Virgolini.
Metodología: Tomás Darquier, Pablo Alejandro Virgolini.
Administración del proyecto: Tomás Darquier, Pablo Alejandro Virgolini.
Recursos: Tomás Darquier, Pablo Alejandro Virgolini.
Software: Tomás Darquier, Pablo Alejandro Virgolini.
Supervisión: Tomás Darquier, Pablo Alejandro Virgolini.
Validación: Tomás Darquier, Pablo Alejandro Virgolini.
Visualización: Tomás Darquier, Pablo Alejandro Virgolini.
Redacción – borrador original: Tomás Darquier, Pablo Alejandro Virgolini.
Redacción – revisión y edición: Tomás Darquier, Pablo Alejandro Virgolini.