Metodología
Como metodología de trabajo para el proyecto se empleará Combat Agile[]. Esta metodología se basa en el marco de trabajo Scrum[], heredando todas sus fases y productos. Los desarrollos basados en Scrum dividen el trabajo en Sprints, los cuales son etapas de aproximadamente 4 semanas de duración. A lo largo de cada Sprint se realizan una serie de hitos que permiten identificar el trabajo pendiente y auditar si el desarrollo progresa hacia el objetivo.
Los hitos de Scrum son los que se describen a continuación:
-
Sprint Planning:
Se define el trabajo del Product Backlog (PB) que se realizará durante el Sprint. Los desarrolladores desglosan cada ítem del PB seleccionado en tareas concretas llamadas Issues. Durante esta reunión también se establece el objetivo del Sprint para constituir el Sprint Backlog, que incluye el objetivo del Sprint, los PBIs seleccionados y los Issues generados a partir de estos PBIs. -
Daily Scrum:
Reunión diaria de máximo 15 minutos en la que el equipo informa sobre las tareas realizadas, las pendientes y los impedimentos encontrados. -
Sprint Review: Al finalizar el Sprint, se presenta el trabajo completado a todo el personal interesado en este, especialmente al cliente, para recibir retroalimentación y actualizar el PB según sea necesario.
-
Sprint Retrospective:
El equipo analiza cómo ha trabajado durante el Sprint y propone mejoras a implementar en los siguientes Sprints. En esta reunión se abordan únicamente aspectos metodológicos, no relacionados con el producto.
Basándose en los principios del Manifiesto Ágil[] y en Scrum, la metodología Combat Agile se caracteriza por cinco puntos clave:
- Flexible: La configuración del equipo se adapta en función del trabajo que haya que realizar.
- Eficiente: Emplea un enfoque "only-once" que fomenta la autodocumentación y el diseño emergente, siguiendo buenas prácticas y promoviendo la colaboración entre perfiles funcionales y técnicos mediante Behavior-Driven Development (BDD).
- Accesible: Se implementa utilizando la mínima cantidad de herramientas específicas para evitar que surjan barreras técnicas.
- Enfocado: Prioriza las tareas que generan mayor valor y reducen al máximo la incertidumbre del proyecto.
- Lean[]: Se revisa cada proceso para optimizar su eficiencia en cada iteración.
Arquitectura
La arquitectura de la aplicación se basará en un enfoque Full Stack[], con el frontend desarrollado en Vue.js versión 3[] y el backend utilizando el arquetipo de defensa Medusa (basado en Spring Boot[], el framework más utilizado de Java[]) y MySQL[] como gestor de base de datos. Tan solo se desarrollará el cliente web para ordenador ya que no se prevé que la aplicación tenga que ser utilizada desde ningún otro dispositivo.
Tecnología
El frontend en Vue.js ofrece una interfaz de usuario dinámica y receptiva, permitiendo una interacción fluida y eficiente con el backend. Mediante llamadas API RESTful[], el frontend se comunica con el backend para ejecutar operaciones basadas en los permisos de cada usuarios. El backend gestiona la lógica de negocio y las operaciones de datos utilizando el arquetipo Medusa, que integra Spring Data JPA[], su propia seguridad y autenticación contra Active Directory[], y emplea Spring Data REST[] para exponer la API con endpoints HATEOAS de nivel 3[]. Por último, MySQL proporciona un almacenamiento rápido y eficiente para datos estructurados.
Calendario de plazos
El desarrollo de Deméter se dividirá en diferentes Sprints hasta alcanzar, como mínimo, un MVP[].
| Plazos | Sprint |
|---|---|
| 1 abril - 15 mayo | 1 |
| 20 mayo - 16 junio | 2 |
| 1 - 30 septiembre | 3 |
| 1 - 28 octubre | 4 |
| 29 octubre - 18 noviembre | 5 |
Otras tecnologías y entornos
- FrontEnd: Desarrollo basado en HTML5[], CSS[] y JavaScript[], utilizando Vue.js versión 3 con Options API[] y Bootstrap[] versión 5.
- Herramientas de desarrollo: IDE Eclipse[] para Java y Spring Boot; IDE Visual Studio Code[] para el frontend.
- Control de versiones: Uso de Git[] para control de versiones, con repositorio en GitLab[].
- Cliente API REST: Postman[] y Bruno[].