About arc42

arc42, the template for documentation of software and system architecture.

Template Version 8.2 EN. (based upon AsciiDoc version), February 2025

Created, maintained and © by Dr. Peter Hruschka, Dr. Gernot Starke and contributors. See https://arc42.org.


Note

This version of the template contains some help and explanations. It is used for familiarization with arc42 and the understanding of the concepts. For documentation of your own system you use better the plain version.

1. Introducción y Objetivos

El proyecto WIChat es una iniciativa llevada a cabo en la Universidad de Oviedo, bajo la solicitud de la empresa de desarrollo de software ChattySW y contratada por RTVE, con el propósito de desarrollar una versión online del concurso de preguntas y respuestas "Saber y Ganar".

El equipo comprometido con este desarrollo está formado por:

  • Bruno Isla Sierra

  • Guillermo Villacorta Moro

  • Jorge Blanco Sánchez

  • Marcelo Díez Domínguez

  • Pablo Urones Clavera

En la aplicación, los usuarios podrán registrarse y participar en un juego de preguntas. Dicho juego consistirá en que la aplicación mostrará una imagen y los jugadores deberán adivinar preguntas sobre el lugar representado. Como novedad de la aplicación, se ofrecerá la posibilidad de obtener pistas sobre la imagen mediante una conversación con un chatbot.

1.1. Descripción de los requisitos

  • Los usuarios deberán registrarse en la aplicación para jugar, o bien iniciar sesión en una cuenta ya existente.

  • Los usuarios registrados podrán acceder a un historial de su participación.

  • La información de las preguntas será generada por el sistema automáticamente basándose en datos extraídos de Wikidata.

  • Cada una de las preguntas tendrá 4 respuestas posibles, siendo solo una respuesta correcta y el resto distractoras o incorrectas.

  • Los usuarios contarán con un plazo de tiempo determinado para responder las preguntas.

1.2. Objetivos de calidad

Objetivo de calidad Descripción

Rendimiento

Se buscará que los tiempos de espera de la aplicación sean reducidos, para que el usuario pueda disfrutar de una experiencia fluida y con las mínimas interrupciones posibles.

Testeabilidad

Nuestra aplicación podrá ser testeable, es decir, estará sometida a una serie de pruebas que realizaremos para garantizar el correcto funcionamiento del sistema. También nos ayudará a identificar errores y solucionarlos.

Usabilidad

La aplicación deberá ser intuitiva y fácil de usar, para que cualquier usuario pueda disfrutar de la experiencia sin necesidad de instrucciones previas. El ojetivo es que el usuario pueda navegar sin dificultades y se sienta cómodo en la aplicación.

Mantenibilidad

Se tratará de cuidar la arquitectura de la aplicación para futuras nuevas implementaciones, modificaciones o correcciones. Se buscará que el código sea limpio y fácil de entender, para que cualquier miembro del equipo pueda trabajar en él. También se revisará periódicamente la documentación para mantenerla actualizada.

1.3. Partes interesadas (Stakeholders)

Rol/Nombre Contacto Expectativas

Equipo de desarrollo (Estudiantes)

Bruno Isla Sierra, Guillermo Villacorta Moro, Jorge Blanco Sánchez, Marcelo Díez Domínguez, Pablo Urones Clavera

Desarrollar un sistema de preguntas y respuestas, mejorando sus habilidades de programación, desarrollo y trabajo en equipo.

Usuarios

Cualquier usuario de la aplicación

Participar en una aplicación intuitiva y fácil de usar/entender.

Profesores

Jose Emilio Labra Gayo, Pablo González, Irene Cid Rico

Evaluar el resultado final de la aplicación, además de ayudar a los estudiantes con el desarrollo de la aplicación.

RTVE

Radiotelevisión Española

Cumplimiento de los requisitos establecidos para presentar la aplicación a sus espectadores.

2. Restricciones arquitectónicas

En este apartado se enumerarán y describirán brevemente las restricciones que condicionan las decisiones arquitectónicas de la aplicación. Se debe tener en cuenta que, aunque no todas tienen la misma importancia, todas condicionan en menor o mayor medida la arquitectura o forma final que tendrá el proyecto.

2.1. Restricciones técnicas y estructurales

Restricción

Descripción

Documentación

La documentación del proyecto debe realizarse utilizando la plantilla Arc42.

Control de versiones

El control de versiones se realizará mediante Git y se alojará en GitHub.

Host

La aplicación será desplegada en un host de Docker.

API

Se utilizará una API de WikiData para obtener información a la hora de generar preguntas (distintas fotografías) y respuestas.

2.2. Restricciones organizativas y de proceso

Gestión de tareas

Se utilizará la funcionalidad de Github "Github Issues" para asignar y gestionar las tareas de cada miembro del equipo.

Reuniones de equipo

Se realizará por lo menos una reunión semanal durante las horas de clase, en nuestro caso los martes de 9 a 11 a.m. en la Escuela de Ingeniería Informática. Además, reuniones extras se podrán llevar a cabo cuando se estime necesario, de forma tanto presencial como telemática.

Control de decisiones

En cada reunión, un miembro (el cual se irá rotando) rellenará un acta en el que se recogerán las decisiones tomadas, así como cualquier otra información que sea relevante.

División de ramas

Cada componente del equipo trabajará en una rama propia, la cual se fusionará con la rama develop una vez se haya completado la tarea asignada, y con la rama master una vez se vaya a lanzar una nueva versión revisada de la aplicación.

3. Contexto y Alcance

3.1. Contexto Empresarial

WIChat es una aplicación web desarrollada por la empresa ChattySw para RTVE con el propósito de modernizar y ampliar la experiencia de juego en línea basada en concursos de preguntas y respuestas. La aplicación se inspira en el formato televisivo de "Saber y Ganar", proporcionando una plataforma interactiva donde los usuarios deben identificar lugares a partir de imágenes generadas automáticamente desde Wikidata.

El sistema añade una innovación clave respecto a versiones anteriores al integrar un modelo de lenguaje (LLM) que permite a los jugadores obtener pistas conversacionales sobre las imágenes, mejorando así la experiencia de usuario.

Los principales objetivos comerciales de WIChat son:

  • Mejorar la experiencia de los usuarios: Ofreciendo una plataforma de aprendizaje interactivo y entretenido.

  • Fomentar la participación: Incentivar a los jugadores mediante recompensas por respuestas correctas y rankings competitivos.

  • Expandir la accesibilidad y el alcance del juego: Implementando internacionalización y soporte para múltiples idiomas.

  • Aprovechar tecnologías de inteligencia artificial: Generando automáticamente preguntas, respuestas y pistas basadas en datos estructurados.

31 BusinessContext

3.2. Contexto tecnico

WIChat es una aplicación web compuesta por diversos módulos y tecnologías que permiten su funcionamiento fluido y escalable. La arquitectura se basa en un enfoque de microservicios, con integración de APIs para la generación de preguntas y el procesamiento de lenguaje natural.

Componentes principales:

  • Frontend Web: Desarrollado con tecnologías modernas siendo está React.js para garantizar una interfaz interactiva y dinámica.

  • Backend:

API RESTful para gestionar autenticación, preguntas y estadísticas de los usuarios.

Integración con una base de datos para almacenamiento de información.

  • Módulo de generación de preguntas:

Obtiene datos desde Wikidata.

Genera preguntas y respuestas (correctas e incorrectas) automáticamente.

  • Sistema de pistas conversacionales:

Implementado con un modelo de lenguaje grande (LLM) accesible vía API.

  • Gestión de usuarios:

Registro e inicio de sesión mediante OAuth o autenticación tradicional.

  • Despliegue y monitoreo:

Infraestructura basada en contenedores Docker para escalabilidad.

Integración con herramientas de CI/CD de GitHub para automatización del despliegue de documentanción y Microsoft Azure para despliegue de la Apliación.

Este enfoque técnico garantiza que WIChat sea una plataforma robusta, escalable y fácil de mantener, alineada con los requisitos del proyecto.

32 tecnicalContext

4. Estrategia de solución

4.1. Decisiones tecnológicas

  • Git: Sistema de control de versiones.

  • GitHub: Servicio basado en la nube que aloja el sistema de control de versiones, Git.

  • JavaScript: Lenguaje de programación interpretado, dialecto del estándar ECMAScript. Se utiliza para crear páginas web dinámicas.

  • React: Biblioteca de JavaScript para construir interfaces de usuario.

  • Node.js: Entorno de ejecución para JavaScript en el servidor, con alto rendimiento y velocidad, ideal para aplicaciones en tiempo real.

  • CSS: Lenguaje de programación gráfico orientado a definir la representación de un documento.

  • MongoDB: Sistema de bases de datos no relacional, orientada a documentos.

  • Wikidata: Base de datos libre, colaborativa y multilingüe que se usara para sacar información para las preguntas.

  • Modelo largo de lenguaje (LLM): modelo de inteligencia artificial basado en aprendizaje profundo, diseñado para procesar y generar texto en lenguaje natural.

  • Docker: se utiliza para hacer el despliegue de la aplicación.

  • Maquina Virtual: por decidir

4.2. Decisiones sobre cómo alcanzar los objetivos clave de calidad

  • Rendimiento: Se buscará minimizar los tiempos de procesamiento de datos y tareas, para así mejorar la experiencia del usuario.

  • Testeabilidad: El equipo testeará la aplicación manual y automáticamente mediante pruebas de cobertura (unitarias e integración), pruebas de aceptación (e2e) y pruebas de carga.

  • Usabilidad: La aplicación será clara, intuitiva y familiar para el usuario.

  • Mantenibilidad: La aplicación será mantenible gracias al diseño por componentes, lo que nos permitirá tener un código con baja acoplamiento y alta mucha cohesión, ayudándonos a que realizar cambios sea más sencillo y rápido. La documentación se revisará para tenerla actualizada.

4.3. Decisiones organizativas relevantes

  • Los miembros del equipo mantenemos comunicación a través de WhatsApp y Discord para las dudas que surjan u otras decisiones que haya que tomar entre todos los miembros del equipo.

  • Se realizan reuniones semanales en las que se expone el trabajo realizado, si alguno ha tenido algún problema y se revisarán las tareas que tiene cada miembro del equipo.

  • Utilizamos un tablero Kanban dentro de GitHub para organizar las tareas que cada miembro del equipo tiene que realizar/está realizando.

5. Vista de Bloques

La vista por bloques muestra como se descompone el contexto general del sistema en diferentes bloques, los cuales representan los diversos aspectos de la aplicación. De esta forma se obtiene una imagen visual y clara tanto del sistema como de su interior.

5.1. Sistema General Whitebox

05 VistaBloques Whitebox
Motivación

WIChat es la estructura general del sistema, donde los usuarios se registran, participan en el juego o visualizan su historial de partidas, entre otras funcionalidades.

Table 1. Bloques de construcción contenidos
Actores Descripción

Usuario

Cliente/Usuario de la aplicación que interactúa con ella.

WIChat

Sistema desarrollado para el uso de los espectadores/usuarios.

Wikidata

API que genera la información de las preguntas y la proporciona al sistema.

5.2. Nivel 2

05 VistaBloques Nivel2
Motivación

Muestra el funcionamiento interno de la aplicación y el flujo de datos entre la WebApp, los Microservicios, la Base de Datos y Wikidata.

Table 2. Bloques de construcción contenidos
Actores Descripción

Usuario

Cliente/Usuario de la aplicación que interactúa con ella.

WIChat

Sistema desarrollado para el uso de los espectadores/usuarios.

WebApp

Contiene la interfaz de usuario y la rama de desarrollo (frontend y backend respectivamente).

Microservicios

Servicios que se encargan de las funcionalidades del sistema.

Base de Datos

Base de datos que almacena la información sobre los usuarios y las preguntas.

Wikidata

API que genera la información de las preguntas y la proporciona al sistema.

5.3. Nivel 3

05 VistaBloques Nivel3
Motivación

Muestra el funcionamiento interno de la aplicación y el flujo de datos entre la WebApp, los Microservicios, la Base de Datos y Wikidata.

Table 3. Bloques de construcción contenidos
Actores Descripción

Usuario

Cliente/Usuario de la aplicación que interactúa con ella.

WIChat

Sistema desarrollado para el uso de los espectadores/usuarios.

WebApp

Contiene la interfaz de usuario y la rama de desarrollo (frontend y backend respectivamente).

Microservicios

Servicios que se encargan de las funcionalidades del sistema.

AuthService

Gestiona la autenticación de usuarios (inicio de sesión).

UserService

Gestiona la creación de nuevos usuarios.

HistoryService

Gestiona el historial de los usuarios.

QuestionService

Gestiona la creación de las preguntas.

Base de Datos

Base de datos que almacena la información sobre los usuarios y las preguntas.

Wikidata

API que genera la información de las preguntas y la proporciona al sistema.

6. Vista de ejecución

06 RuntimeView

En el diagrama anterior se muestra como un usuario válido, interactúa con la aplicación.

Tras iniciar sesión la aplicación genera una pregunta con su imagen correspondiente y se la mostrará al usuario. El usuario podrá responder a la pregunta, haciendo uso o no del LLM, y una vez que responda la pregunta, la aplicación le mostrará si la respuesta fue correcta o no.

7. Vista de despliegue

07 DeploymentView
Motivación

El objetivo de la vista de despliegue es conocer cómo el producto software se distribuye sobre la infraestructura hardware. Siendo importante conocer su vista por los siguientes motivos:

  • Facilitar la identificación de posibles cuellos de botella y puntos de fallo.

  • Proveer una base para la planificación de la capacidad y la escalabilidad.

  • Ayudar en la resolución de problemas y en el mantenimiento del sistema.

Mapeo de los servicios a la infraestructura
Servicios API de terceros
  • WIKIDATA API: Servidor API externo que provee información gráfica para las preguntas.

  • LLM: Chat Bot que ofrece ayuda al usuario.

Servicios de la aplicación en servidor propio
  • Authentication Service: Valida que el usuario esté autenticado.

  • User Service: Provee información de los usuarios.

  • Questions Generator Service: Genera preguntas para el usuario.

  • History Service: Guarda el historial de preguntas del usuario.

  • Database: Base de datos que almacena la información de los usuarios y las preguntas.

Servicio en el cliente
  • Web Browser: Interfaz de usuario que permite la interacción del usuario con el sistema.

8. Conceptos transversales

8.1. Gestión de Proyecto

  • Metodología de desarrollo

Se utilizara una metodología agil en el proyecto intentando seguir scrum de la mejor manera posible.

  • Tareas y proridades

Las tareas y prioridades se gestionaran mediante la una planificación en GitHub y se recogeran en un acta durante cada reunion semanal.

8.2. Arquitectura y patrones de diseño

El proyecto sigue una arquitectura de microservicios, que es un patrón de diseño el cual estructura una aplicación como una colección de servicios acoplados de manera flexible. Esto hace que la aplicación sea más escalable y fácil de mantener.

…​

8.3. Libreria ChatBotify

Libreria encargada de la gestion del chatbot, se encargara de la gestion de las peticiones del usuario y respuestas del chatbot.

8.4. Modelo de dominio

Se desarrollara segun la aplicación avance

9. Decisiones arquitectónicas

En este apartado se tratarán de justificar las decisiones relacionadas con la arquitectura de la aplicación, de una forma en la que se pueda comprender el porqué de cada una de ellas desde el punto de vista de cualquier usuario.

Decisión

Justificación

Git para el control de versiones

Escogemos Git como sistema de control de versiones por ser la principal opción en el mercado y por ser un sistema de control de versiones distribuido, lo que nos permite trabajar de forma más eficiente y simple.

GitHub para gestión de código compartido en la nube

Se trata del servicio Git basado en la nube más popular y con más funcionalidades, lo que nos permite tener un control total sobre los cambios de nuestra aplicación, además de tener la seguridad de que no vamos a perder ni una línea de código, aunque esta se sobreescriba en algún momento.

Utilización de JavaScript

La mayor parte de integrantes del grupo tiene experiencia previa en este lenguaje, por lo que se conoce la versatilidad y utilidad de este lenguaje para el desarrollo de aplicaciones web.

BD con MongoDB

Es una de las principales soluciones del mercado, y ha sido elegida por su facilidad de uso y por la previa experiencia de alguno de los componentes con esta base de datos.

Despliegue con Node.js

Se ha escogido por ser un entorno de ejecución para JavaScript en el servidor, con alto rendimiento y velocidad, ideal para aplicaciones web en tiempo real como la que nos concierne.

Desarrollo con React

Se ha escogido por ser una de las opciones más populares a la hora de desarrollar JavaScript con interfaces de usuario.

Wikidata para la obtención de información

Esta era una opción clara por ser una base de datos libre, colaborativa y multilingüe, con la que conseguir la información para las diferentes preguntas será muy sencillo.

Uso de la LLM de Empathy

Se utilizará la LLM de Empathy para poder generar respuestas en tiempo real con el chatbot de inteligencia artificial que se implementará en la aplicación.

Contents

Important, expensive, large scale or risky architecture decisions including rationales. With "decisions," we mean selecting one alternative based on given criteria.

Please use your judgement to decide whether an architectural decision should be documented here in this central section or whether you better document it locally (e.g. within the white box template of one building block).

Avoid redundancy. Refer to section 4, where you already captured the most important decisions of your architecture.

Motivation

Stakeholders of your system should be able to comprehend and retrace your decisions.

Form

Various options:

  • ADR (Documenting Architecture Decisions) for every important decision

  • List or table, ordered by importance and consequences or:

  • more detailed in form of separate sections per decision

Further Information

See Architecture Decisions in the arc42 documentation. There you will find links and examples about ADR.

10. Requisitos de calidad

10.1. Árbol de calidad

Árbol de calidad

10.2. Escenarios de calidad

Requisito de calidad

Escenario de calidad

Prioridad

Rendimiento

Los tiempos de espera o respuesta de la aplicación sean reducidos, para que el usuario pueda disfrutar de una experiencia fluida y con las mínimas interrupciones posibles. Se buscará que los tiempos sean no superirores a 1 segundo.

Medio

Testeabilidad

Nuestra aplicación podrá ser testeable, es decir, estará sometida a una serie de pruebas que realizaremos para garantizar el correcto funcionamiento del sistema. El 80% del código tendrá cobertura con pruebas unitarias exitosas. También nos ayudará a identificar errores y solucionarlos.

Medio-Alto

Usabilidad

La aplicación deberá ser intuitiva y fácil de usar, para que cualquier usuario pueda disfrutar de la experiencia sin necesidad de instrucciones previas. Se usarán paletas de colores aptas para daltónicos. El ojetivo es que el usuario pueda navegar sin dificultades y se sienta cómodo en la aplicación. Registrase como nuevo usuario será un proceso sencillo y rápido que no requerirá más de 1 minuto.

Alto

Mantenibilidad

Se tratará de cuidar la arquitectura de la aplicación para futuras nuevas implementaciones, modificaciones o correcciones. Se buscará que el código sea limpio y fácil de entender, para que cualquier miembro del equipo pueda trabajar en él. También se revisará periódicamente la documentación para mantenerla actualizada. Se puede añadir una funcionalidad sin modificar más del 10% del código.

Medio-Alto

11. Riesgos y Deuda Técnica

11.1. Riesgos

Riesgo Descripción Prioridad

Dependencia de Wikidata

Si la API de Wikidata falla o se vuelve inestable, la generación de preguntas podría paralizarse y verse afectado el sistema.

Alta

Generación incorrecta de pistas

Las "alucinaciones" del modelo de lenguaje pueden generar pistas confusas en el chatbot, afectando a la experiencia del usuario.

Alta

Rendimiento y escalabilidad

Los tiempos de respuesta y la capacidad para manejar múltiples usuarios simultáneos podrían verse afectados en caso de que el sistema no esté bien optimizado.

Alta

Seguridad

Si el sistema de registro y la API no están bien protegidos, podría haber riesgos de acceso no autorizado a datos sensibles de los usuarios.

Alta

Falta de pruebas

Si no se implementan las pruebas adecuadas entre el frontend, backend y la API externa, podrían surgir errores no detectados.

Media

Desactualización de datos

Si los datos de Wikidata no se actualizan regularmente, las preguntas podrían volverse confusas o imprecisas con el tiempo.

Baja

…​

…​

…​

11.2. Deuda Técnica

Deuda Técnica Descripción

…​

…​

12. Glosario

Término Definición

API

Application Programming Interface. Conjunto de reglas y especificaciones que las aplicaciones pueden usar para comunicarse entre sí.

LLM

Large Language Model. Es un modelo de IA poderoso que aprende del lenguaje humano y puede usarse en diversas aplicaciones para generar y comprender texto.