About arc42
arc42, the template for documentation of software and system architecture.
Template Version 8.2 EN. (based upon AsciiDoc version), January 2023
Created, maintained and © by Dr. Peter Hruschka, Dr. Gernot Starke and contributors. See https://arc42.org.
1. Introducción y Metas
El propósito de este proyecto es mejorar una aplicación existente de preguntas y respuestas, donde los usuarios deben responder correctamente entre varias opciones, de las cuales solo una es la correcta. La aplicación se basa en imágenes, presentando a los jugadores diversas temáticas sobre las cuales deberán responder preguntas relacionadas con el contenido visual.
Como nueva funcionalidad, este proyecto integrará un modelo de lenguaje (LLM) que permitirá ofrecer pistas a los jugadores. Estas pistas estarán basadas en la imagen y en el contexto de la pregunta, ayudando a los usuarios a deducir la respuesta correcta sin revelar directamente la solución. Esto no solo aumentará la accesibilidad y la experiencia del usuario, sino que también fomentará el aprendizaje y el razonamiento.
1.1. Requerimientos Funcionales
Los requerimientos funcionales describen que debe hacer el sistema.
-
Interfaz de usuario
-
El sistema contará con un frontend web
-
El frontend mostrará imágenes
-
El frontend mostrará respuestas
-
-
Sistema de preguntas y respuestas
-
El sistema generará automáticamente preguntas a partir de Wikidata
-
El sistema creará una respuesta correcta para cada pregunta
-
El sistema generará respuestas incorrectas para cada pregunta
-
Los usuarios podrán contestar a las preguntas dentro de un plazo de tiempo determinado
-
El sistema debe garantizar que no se repitan preguntas en una misma sesión de juego
-
-
Sistema de pistas
-
El sistema contará con un sistema de pistas
-
El sistema permitirá a los usuarios solicitar pistas de forma opcional, sin obligarles a usarlas
-
El sistema de pistas permitirá a los usuarios obtener pistas sobre las imágenes
-
Las pistas se generarán utilizando un LLM
-
El sistema generará las pistas mediante la información de Wikidata
-
-
Registro e historial del usuario
-
Los usuarios deberán poder registrarse
-
Los usuarios registrados deberán poder consultar su histórico de participación
-
El histórico mostrará
-
Número de juegos jugados
-
Preguntas falladas
-
Pregunatas acertadas
-
-
-
APIs
-
El sistema permitirá acceder a la información del usuario mediante una API
-
El sistema permitirá acceder a la información de las preguntas mediante una API
-
1.2. Requerimientos No Funcionales
Los requerimientos no funcionales describen cómo debe comportarse el sistema y aspectos técnicos.
-
Disponibilidad y despliegue
-
La web deberá estar desplegada
-
La web deberá estar disponible en la web
-
-
Rendimiento y tiempos de respuesta
-
El sistema deberá generar automáticamente las preguntas en tiempo razonable (<1s)
-
Las pistas deben generarse en un tiempo óptimo para no afectar la experiencia del usuario
-
Los tiempos de carga del sistema deben ser mínimos para garantizar una experiencia fluida
-
-
Escalabilidad y mantenimiento
-
El sistema debe poder escalar para soportar un gran número de usuarios concurrentes
-
El uso del LLM y Wikidata debe ser eficiente en términos de consumo de recursos
-
La arquitectura del sistema debe ser modular, permitiendo la fácil actualización de preguntas, pistas o la integración de otros modelos de IA en el futuro
-
-
Seguridad y acceso
-
El sistema debe asegurar que los datos de los usuarios estén protegidos
-
Solo los usuarios autenticados podrán acceder a su historial de participación
-
La API debe contar con mecanismos de autenticación y control de acceso
-
-
Accesibilidad y Usabilidad
-
El diseño debe ser intuitivo y accesible
-
La interfaz debe ser responsiva
-
1.3. Metas de Calidad
Caracteristica de calidad | Prioridad | Motivación | Escenario |
---|---|---|---|
Usabilidad |
Alta |
El sistema debe de ser intuitivo para que todos los usuarios usen la aplicacion. |
Si un usuario no entiende la aplicacion y no encuentra lo que necesita es posible que este deje de utilizar nuestra aplicacion |
Rendimiento |
Alta |
La aplicacion deberá realizar la mayoria de las peticiones dentro de un marco de tiempo razonable y no debera verse afectado cuando haya varios usuarios utilizando el sistema. |
Si en algun momento un usuario o varios no reciben respuesta del sistema dentro de un marco de tiempo razonable es posible que piensen que no funciona y dejen de usarla |
Fiabilidad |
Alta |
El sistema debe de estar disponible para el usuario la mayoria de las veces que el usuario quiera utilizarla (> 99% de las veces) |
Si un usuario quiere entrar en el sistema pero este no esta disponible en varias ocasiones en las que lo intente esto podria llevarnos a que ese usuario no vuelva a intentarlo cuando si que este disponible perdiendo un potencial usuario |
Compatibilidad |
Media |
El sistema debera poder utilizarse en todos los navegadores, ya sean Chrome, Firefox… |
Los usuarios usan diversos buscadores, si un usuario que dispone de un Mac intenta acceder a nuestro sistema pero este o no funciona o se encuentra todo descolocado el usuario es probable que no lo intente con otro buscador y que perdamos a un usuario |
1.4. Partes interesadas (Stakeholders)
Rol/Nombre | Contacto | Expectativas |
---|---|---|
RTVE |
Equipo de RTVE |
Esperamos que RTVE nos facilite la suficiente informacion de que se espera de la aplicacion |
Equipo de desarrollo |
Alberto Martinez Olivar - uo282069@uniovi.es |
Se espera que el grupo de desarrollo realice todas las actividades asignadas a tiempo y en caso de no realizarlas en el plazo asignado que esten finalizadas lo antes posible. Tambien se espera que el equipo de desarrollo aprenda lo suficiente de las tecnlogias escogidas para que puedan realizar correctamente el sistema deseado. |
Empathy |
Esperamos que empathy mantenga disponible su LLM lo maximo posble para que podamos realizar este proyecto con su tecnologia. |
|
Usuarios |
Todo usuario que utilice la aplicación |
Se espera que los usuarios ayuden a los desarrolladores avisando en caso de encontrar algun error o bug para poder solucionarlos rapidamente. |
Profesores |
Jose Emilio Labra Gayo - labra@uniovi.es |
Son los encargados de evaluar el proyecto realizado por el equipo de desarrollo, asi como la organización del grupo, y el trabajo cooperativo de todos los miembros del equipo. |
2. Restricciones de la Arquitectura
Antes de detallar la arquitectura del sistema, es fundamental definir las restricciones que condicionan su diseño e implementación. Estas restricciones pueden derivar de decisiones tecnológicas, organizativas, limitaciones del negocio o requisitos legales que deben cumplirse. A continuación, se presentan los principales aspectos que influirán en el desarrollo del sistema.
2.1. Restricciones Tecnológicas
Restricción | Explicación |
---|---|
Wikidata |
La información de las preguntas será generada automáticamente a partir de los datos de Wikidata. |
LLM |
Será posible interactuar con la aplicación en cada pregunta para poder obtener pistas sobre las mismas. Para ello se utilizará un modelo de lenguaje (LLM). |
Frontend |
El sistema contará al menos con un frontend web que mostrará las imágenes, preguntas y respuestas. |
Despliegue |
La web deberá estar desplegada y accesible a través de la Web. |
Pruebas |
El proyecto deberá incluir distintos tipos de pruebas para garantizar el resultado esperado y un producto de calidad (pruebas de aceptación, de carga, cobertura, etc.). |
2.2. Restricciones Organizativas
Restricción | Explicación |
---|---|
Tiempo |
El proyecto debe ser desarrollado antes de la fecha límite de entrega de este cuatrimestre. El tiempo estará repartido en 2 horas de trabajo presencial en clase de laboratorio cada semana y trabajo individual. |
Tamaño del Equipo |
El equipo está compuesto por 6 miembros, por lo que será necesario mantener una buena cooperación durante el desarrollo del proyecto. |
Reuniones |
El equipo se reunirá al menos una vez a la semana para poner en común el trabajo realizado y organizar futuras tareas. |
Actas |
En cada reunión se deberá crear un acta donde queden reflejados los miembros del equipo que participaron, las decisiones que han sido tomadas durante la sesión y la organización y reparto de tareas para la semana siguiente. |
GitHub |
Se utilizará GitHub para coordinar el trabajo del proyecto, realizar un seguimiento de los cambios y gestionar el flujo de trabajo. |
2.3. Convenciones
Restricción | Explicación |
---|---|
ARC42 |
La documentación debe seguir la estructura de ARC42. |
Idioma |
El proyecto será desarrollado en español. |
3. Alcance y Contexto del Sistema
3.1. Contexto de Negocio
Este apartado indica cómo se va a comunicar la aplicación con los diferentes actores y servicios:

-
Usuario
Persona real que utilizará la aplicación. Interactuará con ella eligiendo una de las múltiples respuestas que se le presentarán según la imagen utilizada.
-
Wikidata
Base de datos general de donde obtendremos las imágenes y datos relacionados con ellas. La aplicación se comunica y obtiene información de Wikidata a través de su API.
-
Mistral
Modelo de Lenguaje creado por Empathy. Es el modelo de lenguaje que usaremos para apoyar al usuario en caso de que necesite pistas.
3.2. Contexto Técnico
Este apartado indica cómo las diferentes partes de la aplicación se comunican entre sí:

Participantes |
Vía de comunicación |
Motivo de la comunicación |
Usuario - Webapp |
HTTP |
Interacción con la aplicación |
Webapp - Gateway |
HTTP |
Intercambio de datos entre Frontend y Backend |
Gateway - User service |
HTTP |
Registro |
Gateway - Auth service |
HTTP |
Inicio de sesión |
Gateway - LLM service |
HTTP |
Chat en tiempo real |
Gateway - Query service |
HTTP |
Interacción con Wikidata |
Query service - Wikidata |
HTTPS |
Obtención de imágenes y datos |
User service - Mongo DB |
HTTP |
Registro |
Auth service - Mongo DB |
HTTP |
Inicio de sesión |
LLM service - Mistral |
HTTPS |
Chat en tiempo real |
4. Estrategia de solución
4.1. Decisiones tecnológicas
4.1.1. Lenguajes y Frameworks
-
TypeScript: lenguaje de programación utilizado para el desarrollo de aplicaciones web, tanto del lado del cliente como del servidor. Elegimos este lenguaje en vez de otras alternativas debido a su tipado dinámico, que facilita la detección de errores, además de la facilidad de usarlo tanto con Node como con React.
-
React: biblioteca de JavaScript ampliamente utilizada para construir interfaces de usuario dinámicas. Elegimos usarla en el proyecto ya que permite la reutilización de componentes, y, al ser muy utilizada en la actualidad, hay mucha documentación y ejemplos disponibles.
-
Express: es un framework minimalista y flexible para aplicaciones web en Node.js. Permite construir APIs y servidores web de manera sencilla y eficiente. Elegimos este framework por su sencillez y rapidez.
4.1.2. Backend y APIs
-
Node: entorno de ejecución de JavaScript en el servidor. Lo elegimos debido a que al ejecutarse en el servidor y no en el cliente es más eficiente para aplicaciones de tiempo real.
-
API SPARQL: API que permite obtener datos de WikiData mediante consultas parametrizables. Elegimos esta API debido a que otras alternativas no permiten consultas lo suficientemente específicas para generar las preguntas del juego.
-
Mistral: modelo LLM de propósito general, diseñado para adaptarse a diversas tareas. Escogimos Mistral debido a que queremos participar en el concurso de Empathy, y consideramos es la más adecuada para el tipo de preguntas que se realizarán en la aplicación. Además, hay muchos recursos educativos que facilitan su uso e integración en proyectos.
4.1.3. Despliegue
-
Azure: plataforma de computación en la nube que ofrece distintos servicios. En nuestro caso, la utilizaremos para tener una máquina virtual en la que ejecutar la aplicación. Escogimos Azure para esto ya que ya tenemos experiencia con ella, además de que tenemos crédito para Azure proporcionado por la universidad.
-
Docker: herramienta para construir aplicaciones portátiles con todas sus dependencias. Escogimos Docker por la flexibilidad para desplegar aplicaciones en distintas plataformas.
4.1.4. Bases de datos
-
MongoDB: sistema de gestión de bases de datos NOSQL que utiliza esquemas flexibles. Decidimos utilizarlo porque se ajusta a nuestras necesidades y el despliegue ya estaba configurado para él.
4.1.5. Herramientas de documentación
-
PlantUML: herramienta de creación de diagramas por texto. Decidimos utilizarlo para crear los diagramas de la documentación debido a su simplicidad.
4.1.6. Decisiones descartadas
-
Microsoft SQL Server: sistema de Gestión de Bases de Datos SQL de Microsoft. Inicialmente lo habíamos elegido porque que es la única opción que ofrece Azure para crear una base de datos en la nube, pero finalmente decidimos que MongoDB era una mejor opción puesto que el despliegue ya estaba configurado para esa base de datos.
4.2. Decisiones sobre cómo alcanzar objetivos clave de calidad
-
Usabilidad: las interfaces serán intuitivas, basándose en aplicaciones ya existentes, de modo que cualquier usuario pueda utilizarlas sin experiencia previa. Además, la comunicación con el LLM también deberá ser sencilla, de forma que todos los usuarios puedan utilizar la funcionalidad de las pistas sin tener conocimientos acerca cómo utilizar una IA.
-
Rendimiento: para mejorar el rendimiento de la aplicación se reducirán lo máximo posible el número de llamadas a la API de SPARQL para obtener los datos de WikiData y generar las preguntas.
-
Fiabilidad: con Azure podemos tener la aplicación desplegada en casi todo momento, si bien hay que tener en cuenta que las dependencias de servicios externos como MongoDB, la API de SPARQL, WikiData o la API del LLM pueden reducir la disponibilidad.
-
Compatibilidad: la aplicación deberá funcionar en los navegadores más utilizados (Chrome, Firefox, Edge…). Para ello, evitaremos usar tecnologías específicas de un navegador concreto, así como aquellas que no estén disponibles para todos los navegadores estándar.
4.3. Decisiones organizativas
-
GithHub:
-
Issues: decidimos crear una issue por funcionalidad a desarrollar, asignando cada una a una única persona y en casos de funcionalidades más complejas a dos personas.
-
Ramas de Github: para el control de versiones decidimos utilizar ramas distintas por cada issue de GitHub a realizar, de modo que sólo haya una única persona trabajando sobre una misma rama. En caso de que varias personas trabajasen en una misma issue, decidimos crear también una rama por persona.
-
Pull Request: decidimos utilizar Pull Request para la revisión del código, asignando dos revisores por miembro del equipo para asegurar tanto una mayor calidad del código como que no sólo el desarrollador de una funcionalidad concreta conozca el código de esa parte.
-
-
Whatsapp: utilizamos Whatsapp como medio de comunicación entre los miembros del equipo por la comunicación instantánea que permite.
-
Reuniones semanales: una vez a la semana nos reunimos entre todos los miembros del equipo para comunicar el trabajo realizado a lo largo de la semana y comentar problemas encontrados.
5. Vista de Bloques
5.1. Visión General
El siguiente diagrama muestra una visión general de los principales componentes del sistema y sus interacciones:

5.1.1. Componentes que intervienen:
Componente | Descripción |
---|---|
User |
Representa el usuario final de la aplicación. Este interactua con el sistema jugando al juego de preguntas |
WiChat |
Es el componente principal de la aplicación. Este maneja la parte lógica del juego, la creación de preguntas a través de consultas a la API de wikidata, el envío y consultas de resultados a la base de datos, la interacción con el ranking y el login de la aplicación |
Wikidata |
Es un servicio externo a la aplicación, utilizado por esta, para obtener información y generar las preguntas. |
Mistral |
Es un servicio externo a la aplicación, utilizado por esta, para obtener pistas a partir de la información de wikidata. |
5.2. Nivel 2

5.2.1. Componentes que intervienen:
Componente | Descripción |
---|---|
User |
Representa el usuario final de la aplicación. Este interactua con el frontend del sistema. |
Frontend |
Es el componente responsable de la iterfaz de usuario con la que el usuario final llevará a cabo la interacción. Se comunica con el backend para llevar a cabo el juego. |
Backend |
Es el componente que manejala parte lógica del juego. También se encarga de almacenar y recuperar los datos de la base de datos. Utiliza las APIs wikidata y la correspondiente al llm. |
MongoDB |
Sistema de base de datos NoSQL diseñado para almacenar grandes volúmenes de datos de manera flexible y escalable. |
Wikidata |
Base de conocimiento colaborativa y estructurada. Almacena datos y permite la utilización de estos al proyecto. Estos datos se obtienen a través de su API. |
Mistral |
Modelo de lenguaje que permite a la aplicación interactuar con él a través de su API. |
5.3. Nivel 3: Backend

5.3.1. Componentes que intervienen en el backend:
Componente | Descripción |
---|---|
Gateway |
Punto de acceso al backend de la aplicación. A traves de ella, el frontend se comunicará con las distintas partes del backend que intervienen en la aplicación. |
User service |
Servicio utilizado para el registro de nuevos usuarios en la aplicación. |
Auth service |
Servicio utilizado para la autenticación de usuarios en la aplicación. |
LLM service |
Servicio de modelo de lenguaje, utilizado para la generación de pistas a partir de la información obtenido de wikidata. |
6. Vista de Ejecución
6.1. <Registro de nuevo usuario>
Este diagrama de secuencia representa el flujo que tendra la peticion de un usuario para registrarse como nuevo usuario.

6.2. <Inicio de sesion>
Este diagrama de secuencia hace referencia a las llamadas entre los distintos objetos de la aplicacion web para que un usuario inicie sesion.

6.3. <Generacion de pregunta y respuestas>
Este driagrama de secuencia resume el flujo de la aplicacion web para generar las preguntas y respuestas una vez iniciado el juego por parte del usuario.

6.4. <Generacion de una pista>
Este diagrama de secuencia representa como se genera una pista para una pregunta determinada tras ser solicitada por el usuario que esta jugando.

6.5. <Consulta de estadisticas>
Este diagrama de secuencia representa el flujo de la peticion de un usuario que haya iniciado sesion en el sistema y quiera saber sus estadisticas de juego.

7. Vista de despliegue
7.1. Nivel de Infraestructura 1

- Motivación
-
En el anterior diagrama podemos ver que cada componente se encuentra encapsulado en un Docker que son contenedores en los que se encapsula el software para simplificar su despliegue. La interfaz de nuestra aplicación se encuentra en Webapp donde el usuario se conecta mediante un buscador desde su dispositivo. La aplicación se conecta con los servicios internos de la aplicación mediante Gatewayservice que distribuye las llamadas de la aplicación entre el resto de los servicios de la misma. Nuestra aplicacion tambien cuenta con una base de datos en la que almacenamos la información de los usuarios y de sus autenticaciones
- Características de calidad/rendimiento
-
Gracias al uso de docker nuestro sistema es portable (podriamos cambiarlo de maquina y seguiria funcionando sin muchos cambios) y escalable ya que podemos crear nuevos contenedores y nuevas instancias en el caso de que sean necesarias. Tambien gracias a que almacenamos la base de datos dentro de la misma maquina que nuestra aplicación las llamadas a la misma seran mas rapidas que si se encontrase fuera de la misma.
- Mapeo de los Bloques de Construcción a Infraestructura
Bloque de Construcción | Infraestructura |
---|---|
WebApp |
Es el frontend de nuestra aplicación |
BBDD MongoDB |
Es la base de datos donde almacenaremos la información de los usuarios |
Gatewayservice |
Es el servicio mediante el cual llamamos al resto de los servicios de la aplicacion, tanto internos como externos |
authservice |
Es el servicio de autenticaciones de los usuarios |
userservice |
Es el servicio que almacena a los usuarios |
LLMService |
Es el servicio que realizará las llamadas al LLM |
Azure |
Es el servicio que va a hostear el servidor en el que estara almacenada nuestra aplicación |
LLM |
Es un modelo extenso de lenguaje localizado en un servidor ajeno al que accederemos mediante una API key |
Wikidata |
Es una base de datos externa de la cual sacaremos las posibles preguntas de la aplicación asi como las respuestas |
8. Conceptos Transversales (Cross-cutting)
8.1. Conceptos de dominio
En el siguiente diagrama se muestra el modelo de dominio.
8.2. Conceptos de experiencia de usuario (UX)
La usabilidad es un aspecto fundamental en el diseño de cualquier aplicación, ya que influye directamente en la satisfacción de los usuarios. Crear interfaces intuitivas que permitan una interacción fluida y sin esfuerzo con el sistema es un factor clave para garantizar una experiencia positiva.
Concepto | Descripción |
---|---|
Interfaz Usable |
La aplicación debe ofrecer una experiencia clara y accesible para todos los usuarios, priorizando la facilidad de navegación y evitando sobrecargar la interfaz con elementos innecesarios. |
Facilidad de Uso |
Se garantizará un diseño intuitivo y limpio, con una disposición lógica de los elementos. Las funciones más importantes estarán accesibles con el menor número de interacciones posible. |
Intuitiva |
La interfaz debe seguir principios de usabilidad, como consistencia en los diseños, reconocimiento sobre memorización y retroalimentación visual clara. |
Solidez |
Se optimizará el rendimiento de la aplicación para minimizar tiempos de carga y evitar interrupciones en la experiencia de usuario. Se priorizará una arquitectura estable que prevenga errores y garantice un funcionamiento fluido. |
Retroalimentación Inmediata |
Tras cada respuesta, la aplicación debe proporcionar un feedback inmediato que indique si la opción seleccionada es correcta o incorrecta. Esto mejora la experiencia del usuario. |
Indicadores de Progreso |
Es esencial proporcionar a los usuarios una representación visual de su avance dentro del juego. Mostrar el progreso ayuda a que comprendan en qué punto se encuentran y cuánto les falta por completar. |
8.3. Conceptos de seguridad
La seguridad es un aspecto esencial en el diseño de aplicaciones, ya que protege la información sensible de los usuarios y asegura la integridad de los datos. A continuación se muestran algunos conceptos clave.
Concepto | Descripción |
---|---|
Control de Acceso Seguro |
Se implementará un sistema de autenticación robusto que valide correctamente las credenciales del usuario antes de conceder el acceso. En caso de datos incorrectos, se denegará el ingreso. |
Privacidad |
La información de los usuarios será completamente privada y no será visible para otros usuarios. |
Almacenamiento Seguro |
Las contraseñas de los usuarios nunca serán almacenadas en texto plano. Se emplearán técnicas de cifrado y hash seguro para proteger la información sensible y evitar accesos no autorizados. |
8.4. Conceptos de Arquitectura
-
Microservicios: La arquitectura de microservicios es un enfoque en el desarrollo de software que organiza la aplicación como una colección de servicios pequeños e independientes. Estos microservicios se comunican entre sí a través de APIs bien definidas, lo que permite que cada uno cumpla funciones específicas y se enfoque en capacidades concretas. Al adoptar este patrón de diseño, nuestra aplicación se beneficia de una estructura flexible y escalable. La separación de responsabilidades entre servicios no solo facilita el mantenimiento y las actualizaciones, sino que también permite una mayor adaptabilidad ante cambios.
8.5. Conceptos de Desarrollo
-
Integración continua: Para asegurar la calidad y la eficiencia del proceso, se implementará un sistema de Integración Continua, permitiendo que el código se despliegue de manera automática en una máquina virtual de Azure. Esta práctica no solo optimiza el flujo de trabajo, sino que también garantiza que las nuevas funcionalidades y correcciones se integren de forma rápida y segura.
-
Testing: Para garantizar la robustez y el buen funcionamiento de la aplicación, y evitar errores, realizaremos distintos tipos de pruebas, incluyendo pruebas unitarias, de aceptación, de carga y de cobertura. Dado que la aplicación consiste en un juego de preguntas, es fundamental validar tanto la lógica del cuestionario como la interacción del usuario, asegurando que la experiencia de juego sea fluida y atractiva. Esto incluye verificar que las preguntas se presenten correctamente, que las respuestas se registren adecuadamente y que el sistema funcione sin interrupciones durante las partidas. También llevaremos a cabo pruebas de usabilidad y adaptabilidad de la interfaz, garantizando que los usuarios puedan interactuar con la aplicación de manera intuitiva y satisfactoria.
9. Decisiones de Diseño
9.1. Acceso a Wikidata
Problema: Tenemos que acceder de alguna forma a las imágenes y etiquetas proporcionadas por Wikidata.
Alternativas consideradas:
-
Búsqueda con Elasticsearch via la API "wbsearchentities"
-
Búsqueda son SPARQL via endpoint propio de Wikidata
Decisión tomada: Decidimos usar el endpoint de SPARQL ya que era la forma de acceso a los datos de Wikidata que más se ajustaba a nuestro proyecto.
9.2. Modelo de lenguaje usado
Problema: Necesitamos usar un LLM en la aplicación para proporcionar un chat interactivo en tiempo real.
Alternativas consideradas:
-
Gemini de Google
-
Mistral de Empathy
Decisión tomada: El Modelo de Lenguaje que decidimos usar será Mistral de la empresa Empathy.
9.3. Despliegue
Problema: Necesitamos desplegar la aplicación para su uso.
Decisión: La aplicación se desplegará usando Docker por la flexibilidad para desplegar en distintas plataformas.
10. Requerimientos de Calidad
10.1. Árbol de Calidad

10.2. Escenarios de calidad
10.2.1. Escenarios de uso
Atributo de calidad |
Escenario |
Usabilidad |
El usuario debe poder entender cómo jugar al juego en un máximo de 10 minutos sin tener conocimientos previos. |
Usabilidad |
El usuario debe poder pedir pistas al LLM sin tener conocimientos previos acerca de cómo utilizar una IA. |
Rendimiento |
El sistema debe cargar las preguntas en menos de 2s. |
Compatibilidad |
La aplicación debe funcionar en las versiones más nuevas de los navegadores más utilizados (Chrome, Firefox, Edge…). |
Compatibilidad |
La aplicación debe funcionar en distintos dispositivos (móvil, tablet y ordenador). |
Privacidad |
Las contraseñas de los usuarios deben guardarse encriptadas en la base de datos. |
Privacidad |
El usuario sólo debe tener acceso a sus propios datos. El sistema debe evitar que un usuario logre acceder a los datos de otros usuarios. |
Accesibilidad |
Los textos de la interfaz deben tener un tamaño mínimo de 16px para garantizar que sean legibles. |
10.2.2. Escenarios de cambios
Atributo de calidad |
Escenario |
Mantenibilidad |
Las pruebas deben estar automatizadas de modo que cuando se añada una nueva funcionalidad se pueda comprobar fácilmente que la funcionalidad anterior sigue funcionando. |
Mantenibilidad |
El código debe estar bien documentado y separado en distintos módulos, permitiendo fácilmente modificaciones. |
11. Riesgos y Deuda Técnica
11.1. Riesgos
Riesgo | Descripción | Impacto | Probabilidad | Mitigación |
---|---|---|---|---|
Abandono de componentes del equipo |
Si se da el caso de que uno o más componentes del equipo lo abandonan durante el desarrollo, la carga de trabajo del resto de componentes se verá aumentada. |
Alto |
Media |
Código bien documentado y estructurado, de forma que cualquier componente, haya o no participado en esa parte del desarrollo, pueda entenderla y trabajar en ella. |
Mala comunicación entre el equipo |
Una comunicación deficiente entre los miembros del equipo puede generar malentendidos, retrasos y conflictos en el proyecto. |
Medio |
Baja |
Reuniones de forma rutinaria recogiendo en acta los puntos tratados y las responsabilidades de cada miembro. |
Poca experiencia en trabajos green field |
El quipo cuenta con poca experiencia desarrollando proyectos de cero, así como haciendo la toma de decisiones de tecnologías a usar. Esto puede derivar en retrasos o partes del proyecto poco eficientes. |
Alto |
Media |
Investigación y formación previa. |
Seguridad en el sistema de login |
El almacenamiento y tratamiento de credenciales de usuarios podría ser vulnerable. |
Alto |
Baja |
Utilización de una encriptación segura. Normas mínimas de seguridad a la hora de establecer contraseñas. |
Escalabilidad de la base de datos |
Según aumentan los usuarios y el ranking de partidas, el rendimiento de la base de datos puede verse perjudicado. |
Bajo |
Baja |
Optimización de consultas e índices adecuados. |
Dependencia de la disponibilidad de la base de datos en la nube |
El proyecto utiliza una base de datos alojada en la nube, por lo que introduce una dependencia de la infraestructura de la nube. |
Medio |
Baja |
Replicación de datos mediante copias de seguridad periódicas. |
Tiempos de respuesta del LLM |
El modelo de lenguaje puede presentar tiempos de respuesta elevados, así como verse afectado por la alta demanda. |
Bajo |
Baja |
Elección de modelo eficiente y optimización de consultas. |
Respuestas no coherentes del LLM |
El modelo de lenguaje puede generar respuestas irrelevantes, incorrectas o incoherentes. |
Medio |
Media |
Definición de prompts adecuados. |
Dependencia de la disponibilidad de la API externa |
El sistema depende de una API externa para la obtención de imágenes y preguntas. Si esta API sufre caídas, el juego podría verse afectado impidiendo la carga de contenido esencial. |
Alto |
Baja |
Evaluar APIs de respaldo o cachear las últimas respuestas de esta. |
Uso concurrente de la aplicación |
El uso concurrente de la aplicación puede llevar a un menor rendimiento de esta, fallos en la base de datos o la caída del sistema. |
Medio |
Media |
Pruebas de carga y uso de cache evitando consultas repetitivas. |
11.2. Deuda Técnica
Deuda Técnica | Descripción | Consecuencia | Mitigación |
---|---|---|---|
Estructura de la base de datos |
El modelo de datos establecido al inicio del desarrollo puede no ser óptimo para futuras expansiones del proyecto. |
Problemas de rendimiento y retrasos al tener que modificar la estructura de la base de datos. |
Diseñar utilizando principios de normalización. |
Rendimiento del LLM |
El modelo de lenguaje utilizado puede generar tiempos de respuesta elevados, así como respuestas irrelevantes al contexto. |
Afecta la experiencia de usuario. |
Optimización de prompts y monitoreo de rendimiento. |
Ausencia de pruebas |
La falta de pruebas puede provocar que cada cambio en el código pueda introducir errores sin ser detectados. |
Fallos en la aplicación y difícil detección de estos. |
Implementación de pruebas unitarias, de integración y automatizadas. |
Código poco mantenible |
El código no sigue buenas prácticas de arquitectura y estructuración. |
Cualquier cambio en el código puede volverse complicado y costoso de implementar. |
Desarrollar código que cumpla los principios SOLID. |
12. Glosario
Término | Definición |
---|---|
API |
(Interfaz de Programación de Aplicaciones) Conjunto de reglas y definiciones que permiten la comunicación entre diferentes sistemas o componentes de software. |
Microservicio |
Estilo arquitectónico en el que una aplicación se divide en pequeños servicios independientes que se comunican entre sí mediante APIs. |
Gateway |
Punto de entrada que gestiona y dirige el tráfico entre clientes y servicios, actuando como intermediario. |
Front-end |
Parte de una aplicación con la que interactúa el usuario, encargada de la presentación y experiencia visual. |
Back-end |
Parte de una aplicación que gestiona la lógica de negocio, el procesamiento de datos y la comunicación con la base de datos, funcionando en el servidor y respondiendo a las solicitudes del front-end. |