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

DeDe es un proyecto para la asignatura de Arquitectura de Software de la Universidad de Oviedo. Esta versión será desarrollada por los miembros del equipo es1c que son:

  • Héctor Martín Gutierrez

  • Laura Vigil Laruelo

  • Ivan Valle Soto

  • Álvaro López Fueyo

DeDe es un sistema de venta online descentralizado que respeta la privacidad de los clientes.

1.1. Resumen de requisitos

La aplicación se ejecutará en el servidor, y la información del usuario se almacenará en su pod. Para obtener información de otros usuarios, la aplicación consultará sus correspondientes pods. Todos estos requisitos son compatibles con el proyecto SOLID, ya que la información de los usuarios no se almacena de forma centralizada.

En la aplicación web los usuarios podrán comprar, el sistema calculará los costes de envío consultando la dirección deseada del usuario en su pod y calculando los costes de acuerdo a la distancia del centro de distribución a dicha dirección.

Los usuarios podrán tanto confirmar la compra desde su carrito, como ver su historico de pedidos realizados.

1.1.1. Requisitos técnicos

Para la ejecución del proyecto se compila y ejecuta restapi y webapp. El despligue será realizado en Heroku.

Se controlará el correcto funcionamiento mediante los siguientes tipos de pruebas:

  • Pruebas unitarias

  • Pruebas de aceptación

  • Pruebas de carga (Incluidas en el ANEXO IV)

  • Pruebas de usabilidad. (Incluidas en el ANEXO I)

1.2. Objetivos de calidad

Objetivo de calidad Motivación

Usabilidad

La aplicación debería de poder ser usada por cualquier tipo de usuario independientemente de su nivel. Para llevar a cabo este objetivo se ha realizado un estudio con una muestra de 15 personas comprendiendo un amplio rango de edad. Los resultados obtenidos, así como la prueba realizada se pueden apreciar en el ANEXO I de esta documetación.

Privacidad

La gestión de información es descentralizada. En la aplicación no se guarda ningún dato que pueda comprometer al usuario. Sino que, todos los datos relativos a estos, se encuentran en un POD (Personal Online Data)

Seguridad

La aplicación no debería de tener ninguna vulnerabilidad. Esto se demuestra gracias a la integración con SonarCloud.

Portabilidad

Que la aplicación pueda adaptarse de forma correcta a distintos dispositivos. Nuestra aplicación se encuentra desarrollada principalmente para verse de forma correcta en ordenadores, pero tambien, tal y como se puede apreciar en el ANEXO II, se encuentra adaptada a dispositivos móviles.

1.3. Stakeholders

Rol Expectativas

Profesores del curso

Implementar y mostrar un proyecto que refleje lo explicado en clase.

Clientes

Sea intuitiva y fácil de utilizar independientemente del nivel, además de que sus datos se encuentren almacenados de forma segura.

Administrador

Encargado de solucionar los futuros problemas que vayan surgiendo en la aplicación.

2. Restricciones de Arquitectura

2.1. Restricciones técnicas

Restriccion

Description

React

Debemos usar el framework React para desarrollo del front-end de la aplicacion

Typescript

Es el lenguaje de programacion principal de la aplicacion

SOLID

Debemos seguir el principio SOLID de descentralizacion de los datos de los clientes

Node.js

Entorno para la manejar la comunicacion entre el back-end y el front-end de la aplicacion

Git/Github

El software de control de versiones de este proyecto

2.2. Restricciones organizativas

Restriccion

Descripcion

Revisiones

Tendremos diversas presentaciones y revisiones del proyecto, hasta la entrega final

Equipo

El equipo cuenta con un maximo de 5 miembros

Reuniones continuas

El equipo esta obligado a realizar reuniones periodicas sobre el proyecto

Fechas límites

Respetar las fechas indicadas por el profesor para la entrega de los diferentes versiones de la aplicación

Presentación

Hay que realizar una presentación con una demo del proyecto una vez finalizado.

2.3. Convenios

Convenciones

Descripcion

Arc42

La plantilla que usaremos para la documentacion es el modelo Arc42

Git-Flow

Usamos el patrón git-flow trabajando en la rama develop principalmente, además de rama hotfix para solucionar problemas rápidos.

Anexos

Determinadas partes de la documentación que entren dentro del modelo Arc42, se pondrán en ANEXOS, ya que pueden aportar información para entender mejor el proyecto.

3. Alcance y contexto del sistema

Objetivos

Esta aplicacion consiste en una tienda online de venta de videojuegos fisicos, por lo tanto tendremos que manejar tanto datos de usuarios como los propios productos. Por la naturalidad del concepto de tienda, se manejaran datos de productos como son el nombre, descripción del producto, precio, stock y el coste asociado al envío de todos estos productos al cliente. Sobre los datos de los usuarios trabajamos de acuerdo al principio SOLID, es decir tenemos descentralizados los datos de los usuarios en PODs. Cada usuario tiene su propio POD realizando todas las gestiones con ellos mediante el provedor de PODs Inrupt. Un usuario que no tenga un POD no podrá realizar una compra en nuestra tienda, lo único que podrá hacer es visualizar los productos.

3.1. Contexto empresarial

Veremos con este diagrama cual va a ser el contexto de la aplicacion y los PODs.

Punto3:DCE

3.2. Contexto tecnico

Nuestra tienda DeDe se adecua a los principios SOLID de descentralizacion de datos personales mediante el almacenamiento de los mismos en PODs independientes para cada usuario, nuestro proovedor de PODs es Inrupt. El front-end se encuentra desarrollado mediante el framework React implementando componentes ya desarrolladas, o bien, creados por nosotros mismos, ademas el lenguaje para el desarrollo de las diversas funcionalidades de las pantallas es TypeScript. Por la parte del back-end, nuestro SGDB es Mongo.db y mediante Node.js express realizamos todas las transacciones a la base de datos, donde almacenamos los datos de los productos. La mayoria de peticiones se realiza mediante el protocolo web HTTP. Para calcular los costes de los envíos hacemos uso de una API externa muy popular, Geocoding.

A continuación, se muestra un diagrama para ilustrar los componentes de la aplicación que se encuentran afectados por cada tecnología.

Punto3:DT

4. Estrategia de Solución

4.1. Decisiones Técnicas

Para el desarrollo del proyecto se han tomado las siguientes decisiones:

Nombre de la tecnológia Objetivo

TypeScript

Lenguaje principal del proyecto

React

Biblioteca que facilitará el desarrollo de la interfaz gráfica

MongoDB

Base de datos que permitirá guardar los datos de los usuarios,centros de distribución y diferentes productos

Github

Herramienta de control de versiones que mejora el trabajo en equipo

SOLID

Especificación que permite a las personas almacenar sus datos de forma segura en almacenes de datos descentralizados llamados Pods.

Heroku

Utilizaremos Heroku para desplegar nuestra aplicación, de este modo no habrá preocupación por la infraestructura.

Geocoding

Consumiremos una API externa para calcular el precio de los envios.

4.2. Decisiones sobre la descomposición de alto nivel del sistema

Se ha decidido utilizar el patrón arquitectónico MVC para desarrollar la aplicación

4.3. Decisiones para lograr objetivos de calidad

Para lograr cumplir con los diversos objetivos de calidad hemos realizado las siguientes acciones:

  • Privacidad: Para asegurar la mejor privacidad a los usuarios se usan los PODs de SOLID,los cuáles nos permiten almacenar los datos de usuario en un formato interoperable, y brindarles controles de autorización.

  • Usabilidad: Para mejorar este objetivo nuestras interfaces son lo más fluidas, simples e intuitivas posibles, ayudandonos siempre de metáforas como por ejemplo el icono de la casa para marcar el inicio o el de un carro para el carrito del cliente.

  • Eficiencia: Como el uso de los Pods de SOLID ralentiza la aplicación, solo será necesario tener iniciado el POD de usuario en otra ventana e introducirlo en el login, la aplicación no lo pedirá nunca más.

  • Testeabilidad: Se han realizado diferentes tipos de test para comprobar la robustez del proyecto, entre los que destacamos test unitarios, de usabilidad y test de carga.

4.4. Decisiones para la organización

  • Reuniones Durante la semana se ha planificado una reunión presencial, en la que se han expuesto los puntos ha realizar antes de la siguiente, además se han tratado los problemas u obstaculos encontrados, todo esto ha quedado reflejado a través de actas, disponibles en nuestra wiki, formando un total de más de 18 reuniones. Cuando ha surgido algun problema durante la realización del proyecto se ha podido planificar reuniones online a través de Discord.

  • Github Para poder realizar un buen control de versiones del proyecto se ha utilizado Github, donde se crearon diferentes ramas:

    • Master: producto final.

    • Develop: rama en la que se encuentra el producto en desarrollo.

    • Nombre del miembro: dentro de develop cada miembro tiene una rama en la que pueden trabajar.

    • Hotfix: rama para hacer cambios rápidos a la rama principal sin tener que pasar por otras de más bajo nivel. Esta rama se ha dividido en hotfix a secas para cambios de proyecto, hotfixDocu para cambios en documentación y hotfixTest para solucionar problemas de testing.

    • Backend: en esta rama se trabaja todo el código del Backend de manera conjunta. Añadiendo en la parte final del proyecto la rama backendFinal a partir de la release v1.0.0.

    • Nombre/documentacion: aquí cada miembro del equipo subió las partes de la documentación que fue desarrollando al principio, donde se planteo un esbozo de lo que finalmente sería la aplicación

Todo lo realizado en el proyecto, tanto problemas como distintas aportaciones se han recogido a modo de issues en el repositorio de github del proyecto. Cada issue ha sido asignada a distintos miembros del equipo y cerrada por otros. Añadiendo distintas etiquetas que hacen referencia a la parte del proyecto correspondiente.

Por otro lado, los miembros del equipo han realizado pull request antes de mergear con otra rama, estos han sido aceptados por compañeros revisando el código antes de que realizar el merge. Salvo para casos en los que la rama a mergear era una simple actualización.

5. Vista de construccion

vista general

5.1. Nivel 1: Vista general del sistema

nivel1

Motivacion

En este diagrama podemos observar los principales agentes de la aplicacion, entraremos en detalle de los mismos mas adelante. La tienda DeDe ofrecera varios servicios al cliente algunos de los cuales implicaran manejar con datos convencionales (realizar un pedido, mostrar el catalogo de la tienda) o con los datos descentralziados de los clientes(PODs) como identificacion o registro.

Table 1. Contenedores

Nombre

Responsabilidad

DeDe

Es la aplicacion en si, esta contenida en ella todas las funcionalidades y servicios necesarios.

5.2. Nivel 2

nivel2

Motivacion

Mostrar las dos partes principales que componen la aplicacion DeDe

Table 2. Contenedores

Nombre

Responsabilidad

Capa de servicio

Tambien conocida como front-end en ingles, es la interfaz de la aplicacion, la cara visible hacia el usuario.

Capa de datos

Tambien conocida como back-end en ingles, corresponde a las operaciones de tratamiento de datos de la aplicacion (registro, log-in).

5.3. Nivel 3

nivel3

Motivacion

La principal motivación perseguida es la de, descomponer las dos partes principales vistas en el nivel anterior con detalle respecto a operaciones concretas de los usuarios y las acciones de acceso datos que estas conllevan, tanto a POD como a la BBDD.

Table 3. Contenedores

Nombre

Responsabilidad

Catalogo

Mostrar el catalogo de productos a los usuarios

Ver perfil

Mostrar informacion del usuario relativa a su historico de pedidos.

Comprar

Los clientes podran comprar juegos

6. Vista en tiempo de ejecución

Los siguientes casos de secuencias explican algunos de los escenarios que se pueden dar lugar en DeDe

6.1. Login de Usuario

Login diagrama

6.2. Registro de usuarios

Registro diagrama

6.3. Vista del carrito con productos del usuario no identificado

AñadirCarrru diagrama

6.4. Vista del carrito con productos del usuario con datos POD correctos

AñadirCarrro diagrama

6.5. Vista del carrito con productos del usuario con datos POD incorrectos

AñadirCarro diagrama

6.6. Compra de los productos

Compra diagrama

7. Vista de implementación

7.1. Algunas consideraciones

  • Nuestra aplicación funcionará desde cualquier ordenador a través del navegador. De esta forma los requisitos necesarios para ejecutarla se ven reducidos, haciendo la aplicación más accesible para personas con equipos menos potentes. Se puede visualizar en el ANEXO III.

  • Se recomienda el uso de los navegadores clásicos, como son Google Chrome y Firefox. Otros navegadores como Safari, Edge u Opera, también pueden ser utilizados aunque en determinadas circustancias podrían dar algún tipo de problema debido a sus restricciones de seguridad.

  • La dirección de envío se obtiene desde el POD de cliente, por lo que no es necesario tener la ubicación del navegador activada.

  • Los datos del cliente siempre se mantendrán por separado en un POD, siguiendo los principios SOLID. De esta forma, dejamos claro que los datos de clientes y productos se encuentran separados y que no se tiene acceso a los datos de clientes.

  • La aplicación se podrá visualizar también desde el navegador de un dispositivo móvil, para ello simplemente bastará con meter la dirección url donde se encuentre alojada la tienda. Se recomienda el uso de las aplicaciones de navegador móvil mencionadas anteriormente. Se puede ver en el ANEXO II

7.2. Infraestructura técnica

7.2.1. Despliegue

A la hora de desplegar el proyecto se dan dos opciones, desplegarlo de manera local o mediante un servicio de hosting web.

Tipo de hosting

Características

Local

Se puede lanzar la aplicación mediante un servidor local en el propio ordenador, esto es una opción para los usuarios más técnicos con algun conocimiento previo.

En servidor web

Servicio que sirve para alojar la aplicación en un servidor remoto, pudiendo hacer accesible la aplicación para el resto de personas. Existen multitud de servicios de hosting que cuentan con soporte técnico.

Se ha utilizado para el despliegue Heroku, de esta forma no es necesario preocuparse por la infraestructura, soportando además múltiples lenguajes de programación. Esto lo realiza mediante el uso de contenedores Linux llamados dynos.

7.3. Motivación

Nuestra filosofía para desarrollar esta aplicación se basa en no utilizar para nada los datos de los usuarios, puesto que no tenemos ningún interes en estos. Creemos en el código abierto y en los principios SOLID de desarrollo de software, donde cada usuario es el dueño de sus datos. La técnica utilizada durante el desarrollo es ponerse desde la vista de usuario haciendo la aplicación lo más accesible posible.

8. Conceptos transversales

8.1. Conceptos de dominio

Rol Explicación

Usuario

Representa un usuario de la aplicación, toda su información se guardará en un POD.

Posición de envío para el usuario

Se conoce la posición de envío para el usuario gracias al POD. Se puede calcular un precio diferente dependiendo de la distancia al centro de distribución.

Productos

Lista de productos disponibles con toda la información relevante como precio, descripción y una imagen ilustrativa del producto.

8.1.1. Conceptos de experiencia de usuario

La aplicación está desarrollada para que el usuario pueda interaccionar con ella de manera sencilla, no es necesario que tenga conocimientos previos, pero como es lógico si ya se encuentra familiarizado con plataformas de compra electrónica como Steam u Origin, siempre le será más sencillo.

El usuario podrá identificarse haciendo clic en la parte derecha del panel introduciendo su POD, o bien acceder a crear un POD en la página de inrupt donde se le redirige si su POD no es válido o no se encuentra con inrupt iniciado. La única forma de compra y acceso a la aplicación es la de usuario propietario de un POD con inrupt iniciado, nos tomamos muy enserio la privacidad y creemos que esta es la mejor manera de interacción con nuestro sistema.

8.1.2. Conceptos de seguridad y protección

En líneas generales, nuestra aplicación es segura. Hemos utilizado los principios SOLID, esto es que, los datos de los usuarios serán almacenados de forma segura en almacenes de datos llamados PODS. Los PODS (Personal online data stores) pueden contener cualquier tipo de información, en nuestro caso contiene email que será el usuario, password, nombre, apellido, teléfono, país, provincia, ciudad, código postal, calle, número, piso y letra del piso. El acceso a los datos de los PODS se puede restringir y controlar de manera segura, eligiendo las reglas de acceso determinadas.

Se ha prestado especial atención en fortificar la base de datos, ya que muchos de los ataques conocidos se centran en esta parte de las aplicaciones, separando los PODS de usuarios de la propia base de datos de la aplicación.

8.1.3. Arquitectura y patrones de diseño

Una de las decisones más importantes a la hora de desarrollar una aplicación es pensar en el diseño, uno de los referentes que hemos tenido en cuenta es el libro de Erich Gamma, Design Patterns. En esta obra se explican algunos de los principios más populares para el desarrollo de software mantenible y de calidad. Además tambien hemos consultado multitud de artículos donde se explican tecnicas para un buen desarrollo y un bajo acoplamientro, con esto hemos decidido aplicar varias cosas:

  • Modularidad: esto es que la aplicación se encuentra compuesta por varios componentes, que juntandose hacen una aplicación funcional. Si uno de los componentes cambia, el resto no se verá afectado.

  • Fachada: haciendo referencia al patrón de diseño arquitectónico, hacemos la separación e interacción necesaria con SOLID para que todo funcione y se mantenga un minimo acoplamiento.

  • MVC (Modelo vista controlador): para poder gestionar las vistas en el frontend con las peticiones en el backend.

8.1.4. "Bajo el capó" conceptos de desarrollo

La aplicación cuenta con un frontend y un backend perfectamente comunicados. La parte del frontend es la que ve el usuario y a la que tendrá acceso, aquí se incluyen todos los menus, botones y vistas de la aplicación.

Tanto la lógica de la aplicación como la base de datos forman parte del backend, el frontend hará peticiones al backend y todo esta sincronizado para que así ocurra. Como ya se menciono anteriormente, los datos de usuario son guardados en un POD, separandose de la base de datos de productos de la aplicación para seguir los principios SOLID y aumentar la seguridad.

8.1.5. Conceptos operativos

Las operaciones básicas que se pueden realizar desde la aplicación con el rol de usuario son:

  • Autenticación de usuario: Hace referencia a identificarse en la aplicación como usuario registrado mediante su POD.

  • Compra de producto: El usuario podrá adquirir los productos que considere, como si se tratase de un comercio fisico.

  • Operaciones en carrito: Hace referencia a operaciones de añadir o eliminar productos dentro del carrito.

  • Filtrar por categorias: Una función que consiste en que el usuario pueda ver de manera más concreta determinado tipo de productos.

  • Filtrar por nombre: Una función que consiste en que el usuario pueda buscar un producto por su nombre.

Es importante destacar que el filtro por nombre funciona sobre el filtro de las categorías, es decir, si en primer lugar filtramos por ejemplo por la categoría aventura y luego aplicamos el filtro por nombre. La aplicación nos devolverá los resultados para ese nombre dentro de la categoría del filtro.

En el siguiente diagrama se puede apreciar de forma gráfica las operaciones que puede realizar el usuario explicadas anteriormente:

conceptos operativos

9. Decisiones de diseño

En este documento se recoge de manera continuada las distintas decisiones de diseño que se han tomando en el desarrollo del proyecto. Se describe a modo de tabla formada por cinco columnas:

-Orden: se trata del orden de aplicación.

-Sección: Se explicará a la sección que pertenece la decisión. P.e: Base de datos.

-Decisión: La decisión tomada respecto a la sección. P.e: Para la sección Base de datos, la decisión es utilizar MongoDB.

-Ventajas: Refleja las ventajas de utilizar la tecnología reflejada en decisión.

-Inconvenientes: Dificultades tanto de miembros del equipo como de la propia tecnología.

Orden

Sección

Decisión

Ventajas

Inconvenientes

1

Base de datos

Utilizar MongoDB como base de datos para almacenar la información de la tienda

Versatilidad NoSQL, buena implementación con TypeScript

Ningún miembro del equipo lo ha utilizado antes, pueden surgir problemas técnicos

2

Lenguaje de programación

Utilizar TypeScript como lenguaje principal en el desarrollo de la aplicación

Escalabilidad del código, fácil testeo

Desconocimiento técnico sobre el lenguaje, lol que podría hacer que se generase deuda de código y deuda de diseño.

3

Librerias

Utilizar React y Material UI para las interfaces de usuario

Es de código abierto, mucha documentación en la web

No cuenta con documentación oficial ni con estandar de desarrollo.

4

Despliegue

Utilizar Heroku para el despliegue

No hay que preocuparse por la infraestructura, soporte de muchos lenguajes de programación

Desconocimiento técnico, nadie del grupo lo ha utilizado nunca.

5

Test

Utilizar test para probar Backend y Frontend

Probar el código de manera automatizada

Si se diseñan mal puede dar lugar a deuda de prueba.

6

Test

Utilizar Codecov para comprobar porcentaje de test

Obtendremos el porcentaje exacto de partes del código que se encuentran testadas

Puede llevar tiempo aprender a implementarlo en el proyecto.

7

Documentación

Utilizar Arc42 para la documentación

Es un estandár ya probado

Su complejidad puede provocar deuda de documentación.

8

APIs

Consumir Geocoding como API externa para calcular el precio de envío de los productos.

Poder calcular costes de envío

Hay que aprender a consumir la API.

9

Test

Utilizar Gatling par test de carga

Comprobamos con distintos niveles de carga de usuario el funcionamiento de la aplicación

Nadie sabe usar previamente Gatling.

10. Requerimientos de calidad

10.1. Árbol de calidad

Quality tree

10.2. Escenarios de calidad

Tabla con nuestros objetivos de calidad, los escenarios y las prioridades:

Objetivos de calidad Escenarios Prioridad Dificultad

Usabilidad

La aplicación debería de poder ser usada por cualquier tipo de usuario independientemente de su nivel, para probar esto utilizaremos test con personas ajenas al proyecto. Los resultado obtenidos se pueden visualizar en ANEXO I.

Alta

Alta

Privacidad

La gestión de información es descentralizada. El usuario no se debe de preocupar acerca de sus datos ya que solo se le pedirá su email y contraseña, el resto de datos van almacenados en un POD externo y seguro. Sin un POD correcto es imposible comprar en la aplicación.

Alta

Media

Seguridad

La aplicación debe de ser extremadamente segura para que nada referido a la información personal de los usarios pueda ser filtrada. Para ello, todos los datos de usuarios será metidos en un POD en lugar de en la propia aplicación, complementando al objetivo de privacidad.

Alta

Alta

Portabilidad

Que la aplicación pueda adaptarse de forma correcta a distintos dispositivos, la aplicación se verá de manera correcta en el navegador de un pc y de un smartphone. Ver ANEXOS II Y III.

Media

Media

Testeabilidad

Que la aplicación haya sido probada y se sepa de forma segura que no va a romper por ningún sitio. Para ello se alcanzará más de un 80% de cobertura de test unitarios, además de test de usabilidad y de carga sobre el despliegue.

Alta

Media

Modificabilidad

En caso de tener que añadir algún mejora, es facil de modificar y no influye en el resto de partes del proyecto gracias al bajo acoplamiento con el que se encuentra programada.

Baja

Alta

11. Riesgos y Deudas Técnicas

11.1. Tabla de riesgos

Prioridad Riesgo Explicación Solución

1

SOLID

Nadie del equipo ha utilizado SOLID, por lo que todos carecemos de conocimiento sobre este framework.

Leer más artículos relacionados con este tema o verse alguna guía.

2

React

Nadie tiene experiencia con REACT, aunque todos los miembros del equipo ya conocen JavaScript

Adaptar el conocimiento de JavaScript a TypeScript.

3

MongoDB

Nunca hemos trabajado con esta base de datos en concreto pero todos los miembros ya han utilizado una no relacional.

Comprender su funcionamiento mirando documentación al respecto

4

GitHub

Aunque todo el equipo trabaja bien con GitHub falta soltura a la hora de realizar ciertas acciones.

Esto no supone un gran inconveniente, se resolverá a medida que nos vayan saliendo los problemas.

5

Heroku

Nunca nadie del equipo ha realizado ningún despliegue con Heroku.

Los miembros del equipo se apoyarán en la documentación oficial donde se encuentra explicado.

11.2. Tabla deuda técnica

Riesgo Explicación Solución

Conflictos en gitHub

A la hora de mergear puede dar fallos

Hacer una reunión para solucionarlo

Robustez

Al tener poca experencia en trabajar en este tipo de proyectos en grupo puede darse la situación de que el código no quede robusto

Tener mucha comunicación

Retardo al hacer login

Al cargar los datos del POD de inrupt.net se provoca cierto retardo

Tener una buena conexión cableada

Retardo al cargar imágenes

Al cargar los datos de imagenes del drive del proyecto se provoca cierto retardo

Tener una buena conexión cableada

12. Glosario

Termino Definición

Discord

Servicio de mensajería instantánea freeware de chat de voz VolP, video y chat por texto

SOLID

Proyecto desarrollado por Tim Berners-Lee que busca descentralizar los datos de los usuarios del resto de datos de la aplicacion almacenandolos en POD

Pod

Almacenamiento personal de datos alojado en un servidor elegido por el usuario.

Github

Plataforma de desarrollo colaborativo para alojar proyectos utilizando el sistema de versiones Git.

MongoDB

Sistema de base de datos NoSQL, orientado a documentos y de código abierto

REACT

Biblioteca Javascript de código abierto diseñada para crear interfaces de usuario con el objetivo de facilitar el desarrollo de aplicaciones en una sola página

Whitebox

En diagramas, un componente que nos muestra los componentes que tiene en su interior.

Blackbox

En digaramas, un componente opaco que no nos permite ver las partes que tiene en el interior.

Inrupt

Empresa colaboradora con el proyecto SOLID de Tim Berners-Lee ofrece un servicio de provedor de PODs, su url es Inrupt.net

Material-UI

Libreria de componentes para React con multiples estilos.

HTTP

Protocolo de transferencia de hipertexto, es el protocolo usado para las comunicaciones entre maquinas en la web

Videojuego

Juego electrónico que se visualiza en una pantalla de un televisor, ordenador o otro dispositivo electronico

Heroku

Es un Paas(Platform as a Service) que nos permite desplegar nuestras aplicaciones sin preocupaciones por la infraestructura.

Geocoding

Es una API muy utilizada para dar servicios de direcciones físicas.

Anexos

En este apartado se recogen varios anexos para enriquecer el entendimiento de determinadas partes de la documentación.

1. Anexo I

En este anexo se recoge el cuestionario utilizado para medir la usabilidad de la aplicación. Se ha elaborado un cuestionario con 10 preguntas, algunas con respuesta corta, otras de opción multiple y tambien se han incluido una para valorar en escala likert.

El cuestionario se planteo mediante google forms, con una muestra de 15 personas de diferentes edades y con distinto nivel técnico.

nivel3

nivel3

nivel3

Las respuestas obtenidas a este cuestionario han sido las siguientes:

Respecto a la edad, podemos observar que el grupo predominante es el de más de 50 años, seguido por el de entre 10 y 20. Esto es debido a que el cuestionario se ha realizado a familiares cercanos en su mayoría como por ejemplo madres, padres, hermanos o primos. De igual forma se puede apreciar como hay gente en todos los grupos de edad en la muestra.

nivel3

Una de los grandes problemas en la aplicación ha sido al utilizar el login, el 66,7% afirma que ha tenido problemas al realizarlo, es decir casí 7 de cada 10. Tan solo el 33,3% ha podido loguearse sin problemas, posiblemente personas con conocimiento más técnico. Junto a esta pregunta se daba la opción en la siguiente de explicar estos problemas.

nivel3

Las opiniones más repetidas al respecto tienen que ver con "no entender muy bien el tema de los POD" o que "eso no se usa en otras plataformas estilo Amazon". Utilizar los POD y SOLID es uno de los requisitos del trabajo y por ello lo hemos utilizado.

nivel3

Se ha realizado una pregunta cerrada con tres opciones de respuesta respecto a la navegación por la tienda. El resultado obtenido ha sido que el 80% afirma que la navegación es clara e intuitiva. Para esto hemos utilizado la metáfora del carrito y también la metáfora de la casa para llevar al inicio. Tan solo el 20% de los encuestados hace hincapié en que de alguna manera la navegación de la aplicación en alguna ocasión puede llevar a confusión.

nivel3

A pesar de ser algo muy subjetivo, quisimos que los entrevistados valorasen la estética de la aplicación, con el fin de establecer campos de mejora. Se estableció una escala del 1 al 10, en la que 1 es una estética muy pobre y 10 es una estética sobresaliente. Los resultados obtenidos han sido por encima de 6 puntos siempre, incluso en algún caso alcanzando el 10. La moda ha sido de 9 sobre 10, lo que denota que la estética de la aplicación, en lineas generales ha sido atractiva para los encuestados.

nivel3

En los casos en los que les era imposible el acceso debido al POD, se les enseñó como entrar con un POD propio y se les pidio que realizasen una compra. En el cuestionario tambien se les pidio si podían evaluar este proceso de compra reguntandoles si les había resultado sencillo. El 93,3% afirmaba que fue sencillo realizar la compra.

nivel3

Se realizó una pregunta sobre el filtro por categorías, donde el 100% afirma que han podido utilizar bien el filtro sin ninguna complicación.

nivel3

Para finalizar el cuestionario se les animo a escribir unas palabras sobre lo que les había parecido la aplicación a modo de observaciones. La mayoría afirman que la aplicación es bonita y que se puede comprar en ella sin problemas, el unico problema que se repite es el de entender el uso de los POD y de porqué su uso es tan útil.

nivel3

2. Anexo II

En este anexo se recoge algunas imagenes de como se ve la aplicación en un smartphone.

En primer lugar de como se muestra el catálogo de juegos, completamente funcional haciendo scroll.

nivel3

En segundo lugar, el carrito con sus productos añadidos y el precio a pagar por la ubicación del POD.

nivel3

En tercer lugar, un juego al detalle, donde se muestra su descripción, precio y posibilidad de compra.

nivel3

Por último tambien se muestra la pantalla de login, que redirige a inrupt.net para posteriomente una vez identificado, volver a la aplicación de manera automática.

nivel3

3. Anexo III

En este anexo se recoge la vista de la aplicación desde el ordenador a modo complementarío.

El login en la aplicación se realiza mediante el login de inrupt.net que, una vez iniciada la sesión, nos lleva a la ventana de cliente.

nivel3

El home de la aplicación cuenta con todo el catálogo de juegos.

nivel3

Los juegos se pueden filtrar por distintas categorías.

nivel3

Además, tambien se puede realizar busquedas por nombre sobre el propio filtro y de manera bidireccional. Según se van completando letras del nombre, van saliendo resultados.

nivel3

Se cuenta con una ventana de detalle, en la que cada juego cuenta con una descripción, una imagen y el precio del juego.

nivel3

Cada usuario puede consultar su histórico de pedidos, que cuenta con la fecha, el email y la cantidad como datos adicionales al juego.

nivel3

Se cuenta con un carrito donde se pueden añadir y eliminar productos, además de que nos da un precio de envío dependiendo del lugar donde tengamos nuestra dirección de POD.

nivel3

4. Anexo IV

En este apartado se incluirán los aspectos relativos a las pruebas de carga.

Hemos realizado pruebas de carga sobre el ultimo despliege de la aplicacion a fin de conocer los limites de carga de trabajo que puede manejar y los tiempos de respuesta de la aplicación para diversas acciones de los usuarios. La herramienta utilizada para medir esto es Gatling. A continuacion, mostramos los informes de los resultados obtenidos.

Acceso simultaneo de 100 usuarios a la web

nivel3

Acceso simultaneo de 1000 usuario a la web

nivel3

LogIn de 50 usuarios en 60 segundos

nivel3

LogIn de 10 usuarios/segundo durante 60 segundos

nivel3

LogIn de 100 usuarios/segundo durante 60 segundos

nivel3

Acceden a un juego 5 usuarios/segundo durante 60 segundos

nivel3

Acceden a un juego 30 usuarios/segundo durante 60 segundos

nivel3

Añaden 3 juegos al carrito 5 usuarios/segundo durante 60 segundos

nivel3

Añaden 3 juegos al carrito 30 usuarios/segundo durante 60 segundos

nivel3

Comprar un juego 5 usuario/segundo durante 60 segundos

nivel3

Comprar un juego 30 usuario/segundo durante 60 segundos

nivel3

5. Anexo V

En este apartado se incluirán los aspectos de mejora del proyecto establecidos en la reunión previa a la última release. Estos aspectos surgen del análisis de los cuestionarios realizados y de la opinión de los desarrolladores del proyecto.

  • Cambiar el servicio externo de las imagenes para evitar el cuello de botella que se genera en determinadas ocasiones.

  • Sería interesante añadir el rol de administrador también a la parte de front, ya que en el back end si que esta disponible.

  • Tambien estaría bien cambiar datos del POD desde DeDe, para por ejemplo, modificar la dirección de envío.

  • La optimización para dispositivos móviles podría ser mejorable.

  • El redimensionado de las imagenes tambien se podría mejorar para que se adapten sin cortes.

  • Enviar un correo al usuario con los datos del pedido. Esto se trato de realizar pero por problemas de compatibilidad no fue posible.

Los miembros del grupo opinan que, en lineas generales con mayor tiempo para investigar sobre estos aspectos, podrían haberse llevado a cabo.

About arc42

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

By Dr. Gernot Starke, Dr. Peter Hruschka and contributors.

Template Revision: 7.0 EN (based on asciidoc), January 2017

© We acknowledge that this document uses material from the arc 42 architecture template, http://www.arc42.de. Created by Dr. Peter Hruschka & Dr. Gernot Starke.