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

La petición del ayuntamiento de la ciudad de Bruselas es una aplicación que permita a sus ciudadanos tener un mapa donde puedan colocar marcadores en distintos sitios. Actualmente solo permite marcar sitios con diferentes tipos de marcadores dependiendo del lugar, los lugares posibles serán bares, restaurantes, monumentos, paisajes o tiendas. Los ciudadanos podrán crear sus propios mapas personalizados y compartirlos con sus amigos.

1.1. Descripción general de los requisitos

1.1.1. Requisitos de alto nivel

  • La aplicación permitirá a los usuarios visualizar un mapa donde estos podrán añadir diferentes marcadores.

  • Permitirá añadir diferentes tipos de marcadores dependiendo de si este se trata de un restaurante, un bar, un monumento, un paisaje o una tienda.

  • En la creacion de estos marcadores se permitirá añadir comentarios o valoraciones, puntuaciones, fotos de estos lugares.

  • La aplicación permitirá agregar amigos.

  • Se podrá compartir los distintos marcadores con los amigos del usuario donde estos podrán ver las valoraciones, fotos, etc que este marcador tiene asociadas.

  • El sistema permitirá utilizar filtros dentro del mapa ya sea por tipo de marcador o por amigo.

1.1.2. Requisitos opcionales

  • Permitir crear rutas de marcadores.

  • Permitir comparar mapas por categorias o tipos de marcadores.

  • Permitir que los distintos establecimientos tengan un POD donde los usuarios se puedan conectar.

  • Crear un mapa en conjunto, es decir, tener la posibilidad de que varios usuarios añadan marcadores a un mismo mapa.

  • Añadir roles entre los diferentes usuarios, como pueden ser: ciudadano, turista y dueño de negocio.

1.2. Objetivos de calidad

Objetivos Descripcion

Privacidad

Se utlizará los principios SOLID para garantizar la seguridad de los datos del usuario, quien será quien nos de acceso a los datos que considere oportunos a través del uso un POD, que será privado e independiente para cada usuario.

Usabilidad

La aplicación debe ser fácil de usar y entender para el cliente, con el fin de que puedan aprender a utilizarla rápidamente y sin mayores dificultades. De esta manera, se busca mejorar la experiencia del usuario al utilizar la aplicación y reducir el tiempo que requiere para familiarizarse con ella reduciendo la curva de aprendizaje.

Eficiencia

Se buscara unos cortos tiempos de respuesta de la aplicación, cosa que mejorará a la experiencia del cliente.

1.3. Stakeholders / Personas interesadas

Role/Nombre Contacto Expectativas

Equipo de desarrollo

HappySw

Desarrollar la aplicación según las especificaciones y requisitos del cliente

Cliente

Ayuntamiento de Bruselas

Se espera que entregue una especificación de los requisitos y que siga el projecto para comprobar que se ajusta a los requisitos especificados. También se espera que pueda añadir sitios, comentarios, valoraciones, etc a la aplicación

Cliente Potencial

Ayuntamientos de otras ciudades

No se espera que participe en el proyecto, pero se espera que pueda contratar el servicio para tener la aplicación en el futuro para su ciudad

Usuario Final

Ciudadanos

Que pueda utilizar la aplicación sin problemas con una esperada facilidad de uso y fluidez

2. Restricciones de Arquitectura

2.1. Restricciones técnicas

Restricción Explicación

SOLID

Nos permitirá almacenar los datos de los usuarios finales de la aplicación de forma segura en almacenes de datos descentralizados llamados Pods. Estos usuarios podrán aceptar, o bien rechazar, el acceso a sus datos por parte de otros usuarios.

Github

En él tendremos un repositorio remoto para el desarrollo del proyecto. Nos facilitará la gestión de las distintas tareas pendientes por realizar, así como llevar un control de versiones.

Arc42

Seguiremos la plantilla Arc42 para la realización de la documentación del sistema.

2.2. Organización

Restricción Explicación

Equipo

El equipo es impuesto por la organización de la asignatura, tanto su tamaño como sus integrantes. Debemos intentar que las decisiones organizacionales sean lo más ágiles y fluidas posible.

Planificación

El sistema debe cumplir los requisitos funcionales planteados antes de cada/la entrega de este.

Control de versiones

Como decisión impuesta utilizaremos Git para llevar a cabo un control de versiones para gestionar el desarrollo del proyecto.

Experiencia

Poseemos una baja experiencia en las tecnologías planteadas para la realización del proyecto.

Reuniones

Realizaremos reuniones en cada clase de laboratorio (una vez a la semana). Si fuese necesario, acordaremos entre todos los integrantes del grupo alguna reunión extra.

Pruebas

Realizaremos diferentes escenarios de pruebas para comprobar el funcionamiento del sistema.

2.3. Normas

Tecnología Explicación

Lenguaje

Todos los integrantes del grupo nos esforzaremos en aprender a utilizar de forma adecuada los diferentes lenguajes de programación citados a utilizar en el desarrollo del sistema.

Código

Nos esforzaremos en mantener el código limpio y bien documentado, de modo que este sea más fácil de entender y mantener.

Accesibilidad

El sistema debe ser usable y accesible por cualquier usuario de la app.

Protección de datos

Debemos tener especial cuidado en el trato de los datos sensibles de los usuarios de nuestra aplicación.

3. Alcance y contexto del sistema

3.1. Contexto empresarial

Bussines context diagram

  • Usuario: cliente principal de LoMap, interactúa con la aplicación y posee un POD.

  • POD: almacén de los datos personales de un único usuario, de manera que aumenta el nivel de privacidad y descentralización.

  • PodProvider: Proveedor de servicios de PODs externo a nuestra app.

  • OpenStreetMaps API: API del servicio externo de mapas utilizado para la localización geográfica de los lugares de interés.

3.2. Contexto técnico

Technical context diagram

  • WebClient: aplicación ejecutada en el lado del cliente, realiza peticiones y recibe respuestas html.

  • Webapp: comparte red con el cliente, recibe peticiones y devuelve respuestas en html.

  • POD: almacenamiento individual del usuario, personal y descentralizado.

  • PodProvider: Proveedor de servicios de PODs externo a nuestra app.

4. Soluciones estratégicas

4.1. Decisiones Tecnológicas

Las diferentes tecnologias utilizadas en nuestra aplicación serán las siguientes:

  • GitHub: herramienta que se utilizara para almacenar todo el código de nuestra aplicación y que nos servirá como control de versiones y también como planificador de tareas mediante el uso de los issues.

  • SOLID: la aplicación seguira las pautas de SOLID para descentralizar los datos de los diferentes usuarios de la aplicación mediante pods, lo que permitirá a los propios usuarios tener el control absoluto de sus datos privados.

  • NodeJS: se escogió este entorno para desarrollar el backend de la aplicación , ya que permitira que esta sea facilmente escalable y rápida.

  • React: se utilizara esta biblioteca para crear las interfaces de usuario para la aplicación, ya que permite hacer interfaces mas complejas al ser sus componentes independientes y, por tanto, reusables.

4.2. Decisiones de calidad

  • Privacidad → uso de SOLID para asegurar la privacidad de los datos de todos los clientes ya que cada uno de nuestros clientes tendra un POD personal en el que almacenará sus datos personales y del cual tendrá el control absoluto, cediendo a la aplicación los datos que considere oportunos.

  • Usabilidad → se desea que esta aplicación sea usable, es decir, que todos los usuarios puedan interactuar con la aplicación de forma sencilla. Para ello la aplicación debe tener una interfaz clara, accesible y facil de entender para cualquier tipo de usuario.

4.3. Decisiones organizativas

  • Uso de ramas en GitHub: para el desarrollo del proyecto hemos decidido crear varias ramas, en principio hay una rama principal master de la que salen otra dos que serian las de documentationDevelop (rama utilizada para la creacion y/o modificacion de la documentacion del proyecto) y la rama develop (que sera utilizada para el propio desarrollo de la aplicación). En un futuro se crearan otras ramas para que cada integrante del equipo pueda programar en la aplicación sin interrumpir el avance de los demas miembros del equipo.

  • Uso de pull request y issues: se utilizaran las issues para indicar las diferentes tareas que se van a realizar respecto al desarrollo de la aplicación, además se ha decidido usar pull requests para hacer los merges github, intentando que haya las colisiones o problemas al mezclar el código ya que estas requests deben ser aceptadas por al menos un integrante del equipo.

  • Uso de la Wiki de GitHub para dejar constancia de los temas tratados en las diferentes reuniones, así como sus asistentes y las diferentes decisiones que se hayan podido tomar en ella.

  • Uso de un proyecto en GitHub donde se iran moviendo las diferentes issues en el backlog, indicando asi el estado actual de dicha tarea.

5. Vista de bloque de creación

5.1. Sistema general de caja blanca

Motivación

A continuación, se pretende dar una visión general del sistema por medio de una abstracción de su estructura de modo que sea fácil de entender.

5.2. Level 1

Caja blanca de LoMap
Nombre Responsabilidad

Cliente

Cliente final de la aplicación.

LoMap

El sistema como tal. Los clientes interactúan con el.

POD

Almacén de datos para cada cliente de la aplicación. El cliente posee el control absoluto de sus datos privados. Es externo al sistema.

PodProvider

Proveedor externo que nos proporciona los PODs nombrados.

OpenStreetMaps API

Nos permite generar los mapas en la aplicación.

5.3. Level 2

LoMap

En este apartado profundizamos en el sistema LoMap.

Nombre Responsabilidad

webapp

Contiene las interfaces de usuario. Permite que los clientes finales de la aplicación puedan interactuar con esta. Además, a través de ella se recopilan datos del cliente.

5.4. Level 3

Webapp

En este apartado profundizamos en el webapp del sistema, con la cual el cliente de la aplicación interactúa.

Nombre Responsabilidad

Página inicial

Contiene el menú de la aplicación. En esta se muestra información de la aplicación, un botón "Comenzar" que redirige a Inrupt-Solid para el inicio de sesión y un enlace a la web oficial de Solid. En el caso de que el cliente tenga la sesión iniciada, muestra su mapa además de permitirle crear nuevos marcados y comentarios.

Documentación

Muestra la documentación de la app.

Información

Página en la que le hacemos una breve presentación al cliente de la app.

Perfil

Página en la que el cliente con sesión iniciada puede ver parte de sus datos almacenados en el pod y tiene acceso a su mapa, sus marcadores y a la vista para buscar amigos.

6. Vista de tiempo de ejecución

6.1. Inicio de sesión

Login

6.2. Añadir marcador

Partiendo del inicio correcto en sesión (primera imagen). :imagesdir: images/ Add marker

6.3. Eliminar marcador

Partiendo del inicio correcto en sesión (primera imagen). :imagesdir: images/ Remove marker

6.4. Compartir marcador

Partiendo del inicio correcto en sesión (primera imagen). :imagesdir: images/ Share marker

6.5. Filtrar

Partiendo del inicio correcto en sesión (primera imagen). :imagesdir: images/ Filter

7. Vista de implementación

Deployment View

Funcionamiento

El usuario accederá a una aplicación web dockerizada en webapp. Existe conexión entre el webapp y el pod provider, de donde extrae información de los usuarios.

Las peticiones se realizan por HTTP al webapp.

La aplicación sigue un esquema cliente-servidor, con la inclusión de los PODs personales.

7.1. Modelo del dominio

Domain model diagram

  • Internacionalización → el único idioma de la aplicación será el castellano, ya que no hay planes de internacionalizarla por el momento

  • Seguridad → la seguridad de la aplicación es una caracteristica muy importante de la que se hay de preocupar, sobre todo en cuanto lo que se refiere a la información sensible de los usuarios. En este caso, serán ellos mismos quienes tengan el control de todos sus datos mediante los pods, llevando a que la aplicación no guarde datos privados del usuario.

  • Persistencia → no se utilizará ninguna base de datos, pues los datos a guardar se encontrarán en los PODs de los usuarios finales.

  • Testeabilidad → la aplicación será testeada para comprobar y asegurar su correcto funcionamiento y ante cualquier nueva implementación se deberán realizar una serie de funcionalidad y rendiminto.

8. Decisiones de diseño

Decisión Detalles Pros Cons

Uso de Pods

Se utilizarán los Pods para almacenar la información de cada cliente

Seguridad de datos, escalabilidad y alta disponibilidad

Curva de aprendizaje, SetUp complejo

React

Usaremos React como framework para realizar el frontend

Alta eficiencia, uso de componentes reutilizables y fácil integración

Curva de aprendizaje y no es un framework completo

TypeScript

Usaremos TypeScript para el desarrollo del frontend

Mejor seguridad debido al tipado estático, mejor calidad de código y amplia compatibilidad

Curva de aprendizaje, mas complejidad en algunos casos y tiempo de desarrollo adicional

OpenStreetMaps API

Para la generación de mapas utilizaremos esta API

Es gratuita

Curva de aprendizaje

9. Requisitos de calidad

9.1. Árbol de calidad

Quality Tree

9.2. Escenarios de calidad

Cualidad Escenario Prioridad

Accesibilidad

La aplicación se adapta a la vista de los diferentes dispositivos

Alta

Usabilidad

El usuario puede funcionar con la aplicación de manera intuitiva y sencilla

Alta

Privacidad

Solamente el usuario puede acceder a sus datos personales ya que se almacenan en su Pod personal

Alta

Integridad

Los datos guardados siempre se manejarán siguiendo las medidas necesarias para que se mantengan completos, precisos y consistentes en todo momento

Media

Seguridad

La información sensible de los usuarios será protegida, además, se necesita autorización para acceder a ubicación y demás servicios

Alta

Mantenibilidad

Que sea susceptible y flexible a cambios

Media-Alta

Descentralización

Los datos de los usuarios no estan en un servidor central, esta fuertemente relacionado con la privacidad

Media

Buenas prácticas

La aplicación cumple con las buenas prácticas de desarrollo de software

Media

10. Riesgos y deuda técnica

Table 1. Lista de riesgos
Id Riesgo ¿Por qué? Medidas

1

Abandono del proyecto

Por causas controlables o no, un miembto del equipo puede abandonar el proyecto

Hacer un reparto sensato de tareas y mantenernos al día entre nosotros

2

Conocimientos SOLID insuficientes

Tecnología nueva para todos más allá de la teoría

Informarnos correctamente, buscar materiales, preguntar

3

Lenguajes nuevos

Typescript o node son totalmente nuevos para casi todos los componentes del equipo

Ayudarnos entre nosotros, seguir tutoriales

4

Falta de organización

No hacer un buen uso de las herramientas de git o una falta de comunicación puede generar retrasos innecesarios

Mantenerse atento a las notificaciones de GitHub, buscar interacción de todos los miembros del equipo

5

Falta de tiempo

Todos tenemos obligaciones fuera del proyecto

Organizar el tiempo de la mejor manera que podamos para mantenernos al día

11. Glosario

Contents

The most important domain and technical terms that your stakeholders use when discussing the system.

You can also see the glossary as source for translations if you work in multi-language teams.

Motivation

You should clearly define your terms, so that all stakeholders

  • have an identical understanding of these terms

  • do not use synonyms and homonyms

Form

A table with columns <Term> and <Definition>.

Potentially more columns in case you need translations.

Término Definición

React

React es una biblioteca de JavaScript de código abierto utilizada para construir interfaces de usuario interactivas y dinámicas en aplicaciones web y móviles. Se basa en la creación de componentes reutilizables que permiten el desarrollo rápido y eficiente de interfaces de usuario escalables.

Node.js

Se trata de un entorno de tiempo de ejecución de JavaScript de código abierto que se ejecuta en el lado del servidor. Permite a los desarrolladores utilizar JavaScript tanto en el lado del servidor como en el lado del cliente

POD

Contenedor perteneciente a un usuario con sus datos que usaremos junto con SOLID

SOLID

Aunque se nombre de la misma manera que los principios de SOLID de diseño de software propuesto por Robert C. Martin, no se refiere a estos, sino al proyecto de descentralización de datos en la web dirigido por Tim Berners-Lee

Chinchetas

Cuando se habla de chinchetas, se refiere a un marcador en un mapa

API

Se refiere a Application Programming Interface, que es una interfaz de programación de aplicaciones que define las interacciones entre diferentes componentes de un software

Front-end

Se refiere a la parte que se encuentra en el cliente y que es visible para el usuario

Github

Es una plataforma de desarrollo colaborativo para alojar proyectos utilizando el sistema de control de versiones Git

Git

Es un sistema de control de versiones distribuido, diseñado para manejar todo, desde proyectos pequeños a muy grandes, con velocidad y eficiencia

MVC

Se refiere a Modelo-Vista-Controlador, que es un patrón de arquitectura de software que separa los datos y la lógica de negocio de una aplicación de la interfaz de usuario

Stakeholders

Son las personas que tienen un interés en el proyecto y que pueden influir en el mismo

JSON

Es un formato de texto ligero para el intercambio de datos

arc42

Es un estándar de documentación de arquitectura de software

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.