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 Objetivos
La aplicación WIChat permite a los usuarios participar a un concurso online de preguntas y respuestas similar a "Saber y Ganar".
El usuario ve una imagen en pantalla y puede seleccionar diferentes opciones para adivinar de que lugar se trata.
El usuario puede recibir pistas sobre la imagen hablando con el chat con inteligencia artificial incluido en el juego.
Tanto las pistas como las imágenes son generadas automaticamnete a partir de Wikidata (https://www.wikidata.org/)
1.1. Resumen de Requisitos
-
Se deberá poder acceder desde la web.
-
El sistema mostrará imagenes, las respuestas y un sistema de pistas.
-
Los usuarios podrán registrarse en el sistema.
-
Los usuarios registrados podrán ver su historial de participaciones.
-
Se podrá interactuar con la aplicación para obtener pistas gracias a un modelo de lenguaje.
-
Las preguntas y las pistas serán genrados automaticamente a partir de los datos de Wikidata.
-
El sistema permitirá acceder a los datos de los usuarios y de las preguntas generadas mediante una API.
-
Habrá un plazo de tiempo determinado para responder a las preguntas.
1.2. Objetivos de Calidad
Prioridad | Objetivos de calidad | Escenarios concretos |
---|---|---|
1 |
Seguridad |
Los datos de los usuarios (credenciales, historial de juegos) deben estar cifrados. El sistema debe prevenir ataques comunes (SQL injection, XSS). |
2 |
Usabilidad |
Los usuarios deben poder interactuar con el sistema de manera intuitiva, registrarse, jugar y obtener pistas con la menor dificultad posible. El tiempo de respuesta para mostrar una pregunta o pista no debe superar los 2 segundos. |
3 |
Fiabilidad |
El sistema debe garantizar una disponibilidad del 99%. Las pistas generadas por el LLM deben ser correctas en un 95% de los casos, minimizando alucinaciones y respuestas erróneas. |
4 |
Rendimiento |
El sistema debe soportar hasta 100 usuarios concurrentes sin degradación del rendimiento. El tiempo de respuesta de la API de Wikidata y del LLM no debe superar los 1000 ms en el 95% de las solicitudes. |
5 |
Mantenibilidad |
El código debe estar documentado y modularizado, permitiendo que todos los implicados en el desarrollo puedan trabajar con ello lo mejor posible. |
1.3. Partes Interesadas
Rol/Nombre | Contacto | Expectativas |
---|---|---|
Profesor/Jose Emilio Labra Gayo |
Que se emplee el conocimiento lo mejor posible para tomar las decisiones arquitectónicas más adecuadas favoreciendo el aprendizaje. |
|
Profesor/Pablo González |
Que se emplee el conocimiento lo mejor posible para tomar las decisiones arquitectónicas más adecuadas favoreciendo el aprendizaje. |
|
Profesor/Irene Cid Rico |
Que se emplee el conocimiento lo mejor posible para tomar las decisiones arquitectónicas más adecuadas favoreciendo el aprendizaje. |
|
Universidad/Uniovi |
Que se emplee el conocimiento lo mejor posible para tomar las decisiones arquitectónicas más adecuadas favoreciendo el aprendizaje. |
|
Cliente/RTVE |
Que las decisiones arquitectónicas sean las más adecuadas para que la aplicación funcione de la manera que esperan. |
|
Empresa/ChattySw |
Que las decisiones arquitectónicas sean las más adecuadas para que la aplicación funcione de la manera que esperan los clientes. |
|
Empresa/Empathy |
Interesada en que durante el desarrollo se utilice su tecnología de procesamiento de lenguaje natural de la manera más eficiente y adecada para que tengamos un buen aprendizaje y para realizar pruebas que aporten la mayor parte . |
|
Alumno/Jorge Puente García |
Que las decisiones arquitectónicas sean las más adecuadas y que tengan una aplicabilidad dentro de las posibilidades de los desarrolladores. |
|
Alumno/Claudia Rodriguez Fuertes |
Que las decisiones arquitectónicas sean las más adecuadas y que tengan una aplicabilidad dentro de las posibilidades de los desarrolladores. |
|
Alumno/German García de la Llana |
Que las decisiones arquitectónicas sean las más adecuadas y que tengan una aplicabilidad dentro de las posibilidades de los desarrolladores. |
|
Alumno/Iván García García |
Que las decisiones arquitectónicas sean las más adecuadas y que tengan una aplicabilidad dentro de las posibilidades de los desarrolladores. |
2. Restricciones arquitectonicas
2.1. Restricciones de documentación
Restricción | Descripción |
---|---|
Arc42 |
El proyecto debe seguir la estructura de documentación de Arc42. |
2.2. Restricciones técnicas
Restricción | Descripción |
---|---|
Acceso a datos |
La información de los usuarios deberá ser accesible a través de una API para garantizar la seguridad de los datos. |
APIs externas |
La aplicación hará uso de la API de Wikidata para obtener los datos necesarios y generar imágenes y preguntas de los lugares. Además, se integrará con la API del LLM externo Empathy AI para generar pistas sobre las imagenes de forma conversacional. |
Despliegue |
La aplicación debe estar desplegada y accesible en la web. |
Pruebas |
La aplicación debera de pasar una serie de pruebas para asegurar su correcto funcionamiento. |
2.3. Organizativas
Restricción | Descripción |
---|---|
Evaluación |
El proyecto será evaluado cada tres semanas, por lo que cada módulo avanzará a través de varias versiones, las cuales estarán alineadas con las evaluaciones parciales. |
Git y GitHub |
El uso de Git como sistema de control de versiones es obligatorio. El proyecto se alojará en un repositorio público en la plataforma GitHub, y todo el trabajo realizado, así como las decisiones tomadas deben reflejarse en dicho repositorio. |
Equipo |
El equipo estará formado por 4 personas. |
Reuniones |
Se realizará obligatoriamente una reunión semanal. |
3. Alcance y contexto del sistema
3.1. Contexto de negocio
WIChat es una aplicación web de preguntas y respuestas basada en imágenes, desarrollada por ChattySw para RTVE. La aplicación permite a los usuarios registrarse, jugar y obtener premios por responder correctamente a preguntas sobre imágenes generadas automáticamente. Además, tendrá integrado un modelo de lenguaje (LLM) que proporcionará pistas para ayudar a los concursantes a responder correctamente.
Usuario: Identidad que iteractúa con el sistema.
WiChat: Maneja las entradas del usuario y se conecta a las APIs externas.
Wikidata: Proporciona datos precisos y actualizados que se utilizan para generar las preguntas y respuestas de la aplicación.
LLM: Modelo de inteligencia artificial que procesa las consultas de los usuarios, generando respuestas coherentes y relevantes basadas en el contexto y los datos obtenidos de Wikidata y la base de datos.
Base de datos: Almacena los datos de los usuarios, estadísticas de juegos y registros de consultas.
3.2. Technical Context
4. Estrategia de solución
4.1. Decisiones tecnológicas
Para el desarrollo de la aplicación se decidió utilizar las siguientes tecnologías:
-
JavaScript será el lenguaje de programación principal.
-
Se ha tomado esta decisión debido a la facilidad de integración con las tecnologías seleccionadas para el desarrollo de la aplicación.
-
-
React.js para construir interfaces de usuario.
-
Se ha seleccionado React.js por su facilidad de uso y su capacidad para crear interfaces de usuario interactivas y usables.
-
-
Node.js para construir el back-end.
-
Se ha seleccionado Node.js por su capacidad para manejar múltiples conexiones simultáneas y su facilidad de integración con otras tecnologías.
-
-
GitHub para el control de versiones.
-
Se ha seleccionado GitHub por su facilidad de uso y su capacidad para gestionar proyectos de software de forma colaborativa.
-
-
Docker para la contenerización de la aplicación.
-
Se ha seleccionado Docker por su capacidad para crear contenedores ligeros y portátiles que pueden ejecutarse en cualquier entorno.
-
-
Azure para el despliegue de la aplicación.
-
Se ha seleccionado Azure por su capacidad para escalar la aplicación de forma automática y su facilidad de integración con otras tecnologías.
-
-
Wikidata API.
-
Se ha seleccionado Wikidata API para obtener información sobre las imágenes de forma programática.
-
-
Empathy API.
-
Modelo largo de lenguaje (LLM) para ofrecer la posibilidad de obtener pistas de las imagenes de forma conversacional.
-
Se han considerado otras tecnologías para el desarrollo back-end como Spting Boot, pero finalmente se decidió utilizar JavaScript por su enfoque en el desarrollo ágil junto con la facilidad de integración con Node.js y React.js.
4.2. Descomposición de alto nivel
4.3. Decisiones para alcanzar objetivos de máxima calidad
Objetivo de calidad |
Decisión |
Seguridad |
Se ha decidido seguir las mejores prácticas de seguridad en el desarrollo de la aplicación, como la validación de datos de entrada y la protección contra ataques de inyección de código. |
Usabilidad |
Se realizaran pruebas de usabilidad con usuarios reales. Serán al menos 4 tandas de 3 usuarios cada una, teniendo en cuenta qe se aborden diferentes intervalos de edad y de con diferente manejo de la informática. |
Fiabilidad |
Se ha tomado la decisión de realizar pruebas de regresión y pruebas de integración para garantizar la fiabilidad de la aplicación. |
Rendimiento |
Se realizarán pruebas de carga para garantizar el rendimiento de la aplicación para poder tener al menos 100 usuarios a la vez. |
Mantenibilidad |
Se utilizarán patrones de diseño y buenas prácticas de programación para garantizar la mantenibilidad de la aplicación. |
Eficiencia |
Se optimizará el uso de recursos para garantizar que la aplicación funcione de manera eficiente donde se despliegue, además de usar los recursos externos también de manera eficiente. |
Portabilidad |
La aplicación se desarrollará utilizando tecnologías y frameworks multiplataforma, asegurando que pueda desplegarse en diferentes entornos (Windows, Linux, macOS) sin generar problemas. |
4.4. Decisiones de organización relevantes
El flujo de trabajo se organizará en reuniones semanales, que se llevarán a cabo según sea necesario. Una de las reuniones se realizará durante la clase de laboratorio y se centrará en decisiones y tareas menores. Las reuniones posteriores se relaizarán de manera remota y estarán dedicadas a deciones mas detalladas y exhaustivas.
Cada tarea asignada, así como problemas encontrados, se documentará como un Issue en GitHub. Además se utilizará GitHub Projects para la organización de las tareas del equipo. No habrá una división estricta entre front-end y back-end, todos los miembros del equipo trabajarán en ambas áreas. Para cada tarea asiganada, se creará una rama específica, y el trabajo realizado se volcará una rama develop mediante pull requests. Una vez que se haya completado una funcionalidad, se fusionará la rama develop con la rama master.
5. Vista de bloques de construcción
5.1. Sistema general de caja blanca
- Motivation
-
El propósito principal del sistema es ejecutar un juego de preguntas con imágenes utilizando información obtenida dinámicamente de la Wikidata API y además teniendo la posibilidad de interactuar con un LLM para solicitar su ayuda. Esto permite a los usuarios interactuar con datos reales y actualizados, mejorando la experiencia de usuario y la utilidad de la aplicación.
- Bloques de construcción contenidos
Building Blocks | Description |
---|---|
WICHAT |
Parte principal de la aplicación, que controla el juego y la conexión con el resto de bloques. |
BD |
Base de datos encargada de almacenar los datos relacionados con los usuarios. |
Wikidata |
Fuente de datos a la que se conecta la aplicacion para obtener las imágenes de las preguntas. |
LLM |
Modelo de lenguaje con el que el usuario puede interactuar para obtener pistas sobre las preguntas del juego. |
- Interfaces importantes
-
-
Frontend ↔ API Gateway: Interfaz RESTful para la comunicación entre el frontend y el backend.
-
API Gateway ↔ Backend: Interfaz interna para enrutar solicitudes a los microservicios.
-
Backend ↔ Base de Datos: Interfaz para acceder y gestionar los datos almacenados.
-
5.2. Nivel 2
- Contained Building Blocks
Building Blocks | Description |
---|---|
WICHAT App |
Parte central del proyecto, encargada de comunicar al usuario con el resto de servicios de la aplicación. |
Question Generator Service |
Parte de la aplicación encargada de conectarse a Wikidata y obtener imagenes e información para las preguntas del juego. |
User Service |
Parte encargada de tratar la información del usuario: puntuación, historial…. Se conecta al base de datos para almacenar esta información. |
Authentication Service |
Parte encargada de administrar la autentificación de usuarios. Se conecta a la base de datos para almacenar y comprobar los nombres y contraseñas. |
LLM Service |
Parte encargada de la comunicación con el modelo de lenguaje. Envía la información necesaria para obtener las pistas del jugador y devolverlas. |
5.3. Level 3
5.3.1. White Box <_building block x.1_>
<white box template>
5.3.2. White Box <_building block x.2_>
<white box template>
5.3.3. White Box <_building block y.1_>
<white box template>
6. Vista de ejecución
6.1. Registro
Inicio de sesión
6.2. Jugar
6.3. Consultar historial
6.4. Interactuar con el chat
7. Vista de Despliegue
7.1. Nivel de Infraestructura 1
- Motivación
-
El sistema se desplegará en una infraestructura distribuida (Azure) para garantizar escalabilidad, alta disponibilidad y rendimiento. Esto permite que los componentes del sistema se ejecuten en diferentes entornos (desarrollo, pruebas y producción) y se adapten a las necesidades de los usuarios finales.
- Características de Calidad y/o Rendimiento
-
-
Seguridad y Privacidad: La infraestructura se desplegará en la nube de Azure, que cuenta con certificaciones de seguridad y privacidad. Además, se utilizarán mecanismos de seguridad cifrado y autenticación para proteger los datos y la información del sistema.
-
Escalabilidad: La infraestructura está diseñada para escalar horizontalmente, lo que permite añadir más recursos o contenedores según la demanda.
-
Alta Disponibilidad: Se utilizará un sistema de virtualización en la nube para favorecer la disponibilidad.
-
Portabilidad: La infraestructura se basa en contenedores Docker, lo que permite que los componentes del sistema se ejecuten en cualquier entorno.
-
- Asignación de Bloques de Construcción a la Infraestructura
-
-
Frontend: Desplegado en un servidor web (Apache) al que puedan acceder los usuarios.
-
Backend: Los microservicios (AuthService, UserService, LLM) se ejecutarán en contenedores Docker.
-
Base de Datos: Se utilizará una base de datos mongoDB para toda la gestión de los datos de la aplicación.
-
API Gateway: actúa como punto de entrada único para todas las solicitudes del usuario. Está desplegado en Azure utilizando el servicio Azure API Management, que permite gestionar, monitorizar y proteger las APIs del sistema.
-
7.2. Nivel de Infraestructura 2
7.2.1. <Docker (Contenedores)>
Explicación:
Docker es la tecnología utilizada para empaquetar los microservicios en contenedores. Cada contenedor incluye:
-
Imágenes Docker: Contienen el código, las dependencias y la configuración necesaria para ejecutar cada microservicio.
-
Volúmenes: Para persistir datos (por ejemplo, logs o archivos temporales).
-
Redes Docker: Para facilitar la comunicación entre contenedores.
8. Conceptos tranversales
8.1. Modelo del dominio
8.2. Conceptos de experiencia de usuario (UX)
Aunque el desarrollo aún no ha comenzado, se tiene como objetivo crear una aplicación intuitiva, accesible y atractiva, que permita a los usuarios disfrutar de la experiencia de juego de manera fluida.
-
Diseño Responsivo: La aplicación se adaptará a diferentes dispositivos y tamaños de pantalla.
-
Accesibilidad: Cumplimiento de estándares WCAG para garantizar que la aplicación sea usable por personas con discapacidades.
-
Feedback Visual: Proporcionar retroalimentación visual inmediata para las acciones del usuario.
-
Prototipos: "url prototipos"
8.3. Conceptos de seguridad y protección
Aún sin desarrollar. Sin embargo, se contemplan las siguientes consideraciones iniciales:
-
Autenticación y Autorización: Se buscará realizrar una correcta autenticación de usuarios.
-
Protección de Datos: Garantizar la privacidad de los usuarios.
-
Cifrado: Uso de HTTPS para la transmisión de datos y cifrado de datos sensibles.
8.4. Patrones de arquitectura y diseño
Serán utilizados dos patrones:
API Gateway: Este actúa como punto de entrada único para todas las solicitudes que realice el usuario delegandolas en sus servicios correspondientes.
Patrón de Micoservicios: Cada componente, como AuthService, UserService y LLM, es un servicio independiente que se enfoca en una funcionalidad específica, facilitando el mantenimiento del sistema.
Consultar los patrones utilizado en " "
8.5. Conceptos técnicos
Aún sin desarrollar. Sin embargo, se contemplan las siguientes tecnologías y herramientas:
-
Lenguajes de Programación: JavaScript para el frontend.
-
Frameworks: React para el frontend.
-
Bases de Datos: MongoDB para la gestión de datos.
-
Despliegue: Uso de Docker para la contenerización y orquestación de servicios.
8.6. Conceptos de desarrollo
Hemos decidido empezar nuestro proyecto de cero pero basándonos en proyectos del año anterior. Esto nos permitirá tener una base más sólida para implementar la nueva funcionalidad de pistas generadas por la AI y poder incluso realizar una desarrollo mas eficiente.
-
Metodología Ágil: Uso de Scrum para la gestión del proyecto.
-
Control de Versiones: Uso de Git y GitHub para el control de versiones y colaboración.
-
Integración Continua: Con total intención de automatizar pruebas y despliegues.
8.7. Conceptos operativos
-
Monitorización: Es importante asegurarse de que el sistema funcione correctamente en todo momento. Para ello, se utilizarán herramientas que permitan supervisar el rendimiento del sistema, detectar errores y medir el uso de recursos. Esto nos ayudará a identificar problemas antes de que afecten a los usuarios.
9. Decisiones arquitectónicas
Para documentar las decisiones arquitectónicas se han usado las páginas de la wiki de GitHub. A continuación se muestra una lista con las decisiones tomadas y un enlace a su documentación.
10. Requisitos de calidad
10.1. Árbol de calidad
10.2. Escenarios de calidad
Escenarios de uso:
Objetivo de calidad | Escenario | Sistema |
---|---|---|
Usabilidad |
Un usuario inicia la aplicación por primera vez |
La interfaz guía al usuario con un diseño intuitivo y sencillo, permitiéndole registrarse facilmente y comenzar a utilizar la aplicación sin dificultades. |
Seguridad |
Un usuario introduce sus credenciales e inicia sesión en la aplicación |
Valida las credenciales y si son correctas, genera un token de autenticación seguro, permitiendole el acceso a la aplicación |
Fiabilidad |
Un usuario completa el formulario de registro |
Si algún campo está incompleto o incorrecto muestra un mensaje claro indicando el error y no permite proceder hasta que el usuario corrija el error. |
Rendimiento |
Varios usuarios juegan simultaneamente en la aplicación |
Mantiene los tiempos de respuesta rápidos sin que los usuarios sufran interrupciones o esperas |
Manteniabilidad |
Un miembro del equipo realiza cambios en el codigo para agregar una nueva funcionalidad |
El código está estructurado por módulos de tal forma que pemite agregar nuevas funcionalidades facilmente sin afectar en otras áreas de la aplicación |
Portabilidad |
Un usuario inicia la aplicación en un dispositivo móvil |
La aplicación se ejecuta correctamente en el dispositivo |
Eficiencia |
Un usuario carga una página con múltiple contenido multimedia como imágenes |
La página se carga rápidamente sin comprometer la experencia del usuario |
11. Risks and Technical Debts
11.1. Riesgos
Riesgo | Descripcion |
---|---|
Bajo conocimiento de algunas herramientas y lenguajes |
Algunos miembros del grupo nunca han trabajado o no tienen mucha experiencia con algunas de las herramientas o lenguajes utilizados para el desarrollo de la aplicación. Esto puede llevar a errores o retrasos debido a su falta de conocimiento. |
Nunca se ha trabajado con un LLM |
Esta es la primera vez que el equipo trabaja con un modelo de lenguaje o con ese en particular. Esto puede llevar a un retraso debido a la necesidad de obtener información sobre el funcioanmiento de este. |
Tiempos de respuesta de Wikidata y el LLM |
Al ser parte integral de la aplicación la conexión con Wikidata y el modelo de lenguaje si hay algún problema en la conexión que haga que sus tiempos de respuesta sean demasiado largos esto puede repercutir en nuestra aplicación. |
Trabajo en equipo |
Los miembros del equipo no se conocen ni han trabajado en conjunto anteriormente, se desconoce las formas de trabajo y nivel de compromiso de cada uno. Hay que tener en cuenta la posibilidad de abandono de uno de los integrantes. |
11.2. Deuda Técnica
12. Glosario
Término | Definición |
---|---|
ADR |
Architectural Decision Record. Documento que describe una decisión arquitectónica tomada, incluyendo el contexto, las opciones consideradas y la justificación de la elección. |
API |
Application Programming Interface. Conjunto de reglas y definiciones que permiten la comunicación entre diferentes sistemas o aplicaciones. |
LLM |
Large Language Model. Modelo de inteligencia artificial que ha sido entrenado con enormes cantidades de texto para poder entender, generar y responder en lenguaje natural. |