1. Introduction and Goals
Dede es un proyecto que se desarrolla en el curso 21-22 para la asignatura Arquitectura del Software del Grado en Ingeniería del Software de la Universidad de Oviedo.
Dede consiste en una aplicación web de venta de productos alimenticios para animales. El proyecto seguirá la especificación SOLID y uno de sus grandes objetivos es asegurar que cada usuario es propietario de su propia información personal
1.1. Requirements Overview
La aplicación ofrece un servicio de compra de alimentos para distintas familias de animales, más allá de eso, la aplicación guardará los datos personales del usuario en PODS; de esta manera, la información personal del comprador no la almacenan los propietarios de la aplicación, la almacena el usuario, teniendo así el control sobre ella.
1.2. Quality Goals
Cualidad | Motivación |
---|---|
Privacidad |
Se persigue que sea el usuario el único propietario de sus datos, para ello el almacenamiento de estos estará descentralizado |
Seguridad |
Tanto para proteger al usuario como a la aplicación, esta debe de ser segura y no producir errores ni tener vulnerabilidades que puedan ser atacadas |
Funcionalidad |
Con el fin de que la experiencia del usuriario sea positiva, la aplicación no ha tener fallos que interrumpan su uso |
Accesibilidad |
Para llegar al mayor público posible, la web debe ser intuitiva y poder ser usada por usuarios no experimentados |
1.3. Stakeholders
Role/Name | Contact | Expectations |
---|---|---|
Profesores |
Deberán aportar apoyo al equipo de desarrollo para recibir a cambio una aplicación de la mejor calidad posible |
|
Equipo de desarrollo |
Enol González García Paula Puerta González |
Se espera aprender de una experiencia de trabajo en equipo, dando como resultado nuevos conocimientos de desarrollo, arquitectura, así como un buen dominio de proyectos SOLID |
Usuarios |
Necesitarán una web amigable, que les facilite el proceso de compra y cumpla con los atributos de calidad establecidos |
2. Architecture Constraints
Restricción | Descripción |
---|---|
React |
La aplicación será programada en React para el front-end |
Almacenamiento |
Los datos de los usuario serán almacenados en pods |
Typescript |
La aplicación será implementada en Typescript |
Github |
Se utilizará Github como control de versiones. Cada miembro del equipo trabajará en una rama particular y se realizarán revisiones de código mediante pull requests. |
Restricción | Descripción |
---|---|
Tiempo |
La aplicación deberá estar finalizada al final del cuatrimestre. |
Tamaño del equipo |
Los equipos están compuestos habitualmente por 5 personas. Este equipo está compuesto por dos personas. |
Diferentes asignaturas y planificación de reuniones |
Los miembros de este equipo están cursando otras asignaturas, lo que hace un poco más complicada la organización para reuniones. Además las reuniones se están llevando de forma telemática para facilitar la organización. |
Restricción | Descripción |
---|---|
Typescript Conventions |
La aplicación seguirá las convenciones de código de Typescript https://makecode.com/extensions/naming-conventions |
Idioma |
La aplicación estará en el idioma español. |
Buenas prácticas de código |
El equipo seguirá buenas prácticas de código para que la aplicación sea mantenible y fácil de extender en caso de necesitar amplicaciones. |
Principios SOLID |
La aplicación seguirá los principios Solid https://makecode.com/extensions/naming-conventions |
3. System Scope and Context
3.1. Business Context
3.2. Technical Context
El sistema DeDe estará implementado con el lenguaje TypeScript y la tecnología React. Siguiendo las bases de almacenacmiento descentralizado se hará uso de los PODs, estos actúan como un servidor de datos de carácter personal, gracias a este formato de almacenamiento para la información más sensible, la seguridad del sistema se multiplica.
4. Solution Strategy
4.1. Tecnologías
- React
-
El equipo usará React para la parte gráfica de la aplicación
- Solid
-
Para que el usuario tenga siempre el control de sus datos se usará Solid con el objetivo de cuidar la privacidad de los usuarios
- Docker
-
La aplicación se desplegará en Docker
4.2. Estructura de la aplicación
- Patrón MVC
-
La aplicación seguirá el patrón Modelo Vista Controlador que separa la lógica de negocio de la presentación y del módulo que gestiona las peticiones
4.3. Objetivos clave
- Privacidad
-
Mediante el uso de los pods de Solid queremos que el usuario tenga el control de sus datos lo que sus datos estén menos expuestos lo que lo hace menos vulnerable a sufrir ataques
- Calidad del software
-
Mediante el uso del patrón MVC y el uso de convenciones de código el equipo quiere hacer que la aplicación sea sencilla de mantener en el futuro además de que sea más fácil de ampliar si así lo requiere en el futuro.
4.4. Decisiones organizativas
- Lenguaje de código
-
El código será escrito en inglés por cuestiones de mantenibilidad.
- Reparto de trabajo
-
El equipo ha implementado un tablero Kanban donde mediante issues se repartirán las tareas entre los miembros del equipo
- Issues
-
Cada miembro del equipo abrirá issues en caso de que se encuentré con un problema. Esto generará un espacio de debate y permitirá resolver las dudas que surgan de manera más sencilla.
- Canales de comunicación
-
El equipo realizará las reuniones a través de Microsoft Teams además de estar comunicados sus integrantes por la red social Whatsapp. No obstante, la manera oficial de expresar nuestras dudas y el reparto de tareas será a través de issues y el tablero Kanban.
5. Building Block View
5.1. Whitebox Overall System
- Motivation
-
<text explanation>
- Contained Building Blocks
-
<Description of contained building block (black boxes)>
- Important Interfaces
-
<Description of important interfaces>
5.1.1. <Name black box 1>
<Purpose/Responsibility>
<Interface(s)>
<(Optional) Quality/Performance Characteristics>
<(Optional) Directory/File Location>
<(Optional) Fulfilled Requirements>
<(optional) Open Issues/Problems/Risks>
5.2. Level 2
5.2.1. White Box <building block 1>
<white box template>
5.2.2. White Box <building block 2>
<white box template>
…
5.2.3. White Box <building block m>
<white box template>
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. Runtime View
6.1. <Runtime Scenario 1>
-
<insert runtime diagram or textual description of the scenario>
-
<insert description of the notable aspects of the interactions between the building block instances depicted in this diagram.>
It is possible to use a sequence diagram:
6.2. <Runtime Scenario 2>
6.3. …
6.4. <Runtime Scenario n>
7. Deployment View
El sistema se desplegará únicamente en formato web y su despliegue en producción se realizarámediante integración continua.
Previo a su despliegue en el entorno de producción, el sistema se desplegará en un entorno de test. Esto nos servirá para comprobar que la aplicación funciona correctamente al ser ejecutada en un entorno diferente al local.
Para la creación de entornos usaremos la herramienta Docker.
7.1. Infrastructure Level 1
<Overview Diagram>
- Motivation
-
<explanation in text form>
- Quality and/or Performance Features
-
<explanation in text form>
- Mapping of Building Blocks to Infrastructure
-
<description of the mapping>
7.2. Infrastructure Level 2
7.2.1. <Infrastructure Element 1>
<diagram + explanation>
7.2.2. <Infrastructure Element 2>
<diagram + explanation>
…
7.2.3. <Infrastructure Element n>
<diagram + explanation>
8. Cross-cutting Concepts
8.1. Conceptos de dominio
Concepto |
Descripción |
Usuario |
Representa al usuario de la tienda. Se obtendrá su información a través de los pods si acepta los permisos necesarios |
8.2. Seguridad
La aplicación es segura debido a que el usuario tiene el control sobre los datos que usa la aplicación. Además se controlará el acceso a la aplicación mediante un sistema de roles.
8.3. Logging
El usuario se identificará en la aplicación con su usuario y contraseña. Si la identificación es correcta se le redirigirá a la vista correspondiente. En caso contrario se mostrará un mensaje de error y seguirá en la vista de identificación.
8.4. Internacionalización
La aplicación estará en idioma español aunque el equipo está valorando internacionalizar la aplicación para que esté también disponible en idioma inglés
9. Design Decisions
9.1. Role ADMIN
Se necesita un rol administrador para poder cargar productos nuevos de forma fácil.
Es la forma más sencilla de implementar y también de usar una vez que la web esté desplegada. Por ello se decide que el rol admin tenga una vista a la que sólo este pueda acceder.
Aceptada
Habrá que tener en cuenta detalles de seguridad para que este no sea un agujero de seguridad del sistema.
10. Quality Requirements
El equipo ha confeccionado una tabla con los atributos de calidad
Atributo | Motivación | Prioridad | Dificultad |
---|---|---|---|
Privacidad |
El usuario será el único propietario de sus datos. Por ello el almacenamiento estará descentralizado |
Alta |
Media |
Seguridad |
Para proteger al usuaruio y a la aplicación esta debe de ser segura y no debe producir errores ni tener vulnerabilidades que puedan ser atacadas |
Alta |
Media |
Funcionalidad |
Con el fin de que la experiencia sea positiva, la aplicación no debe tener fallos que interrumpan su uso |
Alta |
Media |
Accesibilidad |
Para llegar al mayor público posible, la web debe de ser intuitiva y poder ser usada por usuarios no experimentados |
Media |
Media |
10.1. Quality Tree
10.2. Quality Scenarios
11. Risks and Technical Debts
Riesgo | Reflexión |
---|---|
Abandono de un desarrollador |
Si uno de nos integrantes del equipo de desarrollo abandona el proyecto, se queda una sóla persona desarrollando, el proyecto tendría una gran probabilidad de fracasar. |
Incapacidad del equipo para llegar a acuerdos |
Discrepancias entre los componentes podrían retrasar considerablemente el avance. |
Falta de tiempo |
Los desarrolladores pueden tener problemas para encontrar tiempo suficiente para que el desarrollo del sistema sea satisfactorio. |
Deuda técnica | Reflexión |
---|---|
Desconocimiento de los lenguajes |
La carencia de experiencia de todos los desarrolladores en los lenguajes hará que el progreso del proyecto sea más lento |
Funcionalidades no testeadas |
Funcionalidades que no se prueben en profundidad pueden fallar, si se sigue desarrollando a partir de estas, se arrastran fallos y pueden surgir fallos en cascada que no se entienda por qué suceden. |
12. Glossary
Término | Definición |
---|---|
Solid |
Proyecto de descentralización de datos en la web dirigido por Tim Berners-Lee que tiene como objetivo mejorar la privacidad siendo el usuario quien decide dónde almacenar sus datos |
Pods |
Lugar donde se almacenan los datos en Solid |
React |
Biblioteca diseñada para crear interfaces de usuario con el objetivo de facilitar el desarrollo de aplicaciones en una sola página. Es mantenido por Facebook y la comunidad de software libre |
MongoDB |
Sistema de bases de datos NoSQL orientado a documentos y de código abierto |
Typescript |
Lenguaje de programación libre y de código abierto desarrollado y mantenido por Microsoft. Es un superconjunto de JavaScript que añade tipos estáticos y objetos basados en clases |
Docker |
Proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos. |
Term | Definition |
---|---|
<Term-1> |
<definition-1> |
<Term-2> |
<definition-2> |
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.