Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19

 
SEGUIR LEYENDO
Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19
Desarrollo de un sistema de rastreo para la
                 Covid-19
   Development of a tracking system of
                 Covid-19

                Trabajo Fin de Grado
                  Curso 2020-2021

                      Autores
             Fátima Irene García Delgado
               Marina Lozano Lahuerta

                     Director
              Antonio Sarasa Cabezuelo

            Grado en Ingeniería del Software
               Facultad de Informática
       Universidad Complutense de Madrid

               13 de septiembre de 2021
Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19
Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19
Desarrollo de un sistema de rastreo para la
                 Covid-19
   Development of a tracking system of
                Covid-19

           Grado en Ingeniería del Software

                         Autores
                Fátima Irene García Delgado
                  Marina Lozano Lahuerta

                        Director
                 Antonio Sarasa Cabezuelo

                 Convocatoria: septiembre 2021

       Trabajo Fin de Grado en Ingeniería del Software
                   Facultad de Informática
            Universidad Complutense de Madrid

                  13 de septiembre de 2021
Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19
Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19
Agradecimientos

0.1.     Fátima Irene García Delgado

Quisiera trasmitir mi más sincero agradecimiento a todas aquellas personas que me han
ayudado a lo largo del desarrollo del Trabajo de Fin de Grado, y han ayudado de manera
directa o indirectamente en esta investigación.
En primer lugar, a mi tutor, Antonio Sarasa, por su ayuda en la planificación y organi-
zación en este Trabajo de Fin de Grado.
En segundo lugar, a mi familia; mi madre Angelines y mi padre Jesús. A mis fieles amigos
y a mi pareja, que han estado a lo largo de todo mi desarrollo formativo apoyándome
en todo momento y animándome a seguir adelante, incluso cuando yo no veía fin a las
temporadas de exámenes.
Por último, a mis compañeros de clase, ha sido un período de aprendizaje y desarollo
conjunto, donde entre todos o la mayoría, hemos intentando siempre lo mejor para la
clase.
A todos ellos, muchísimas gracias.

0.2.     Marina Lozano Lahuerta

En primer lugar, quiero agradecer especialmente a mi familia, a mis padres y a mis
hermanos, por todo el apoyo que siempre me han dado, por estar ahí siempre animándome
a seguir. También a mis amigos, que me han acompañado a lo largo del camino.
Por otro lado, quiero agradecer a todos los compañeros maravillosos que me he ido encon-
trando a lo largo de mi carrera académica a los que, a algunos de ellos, tengo la suerte de
llamar amigos, su ayuda y apoyo ha sido imprescindible para mí, me alegra haber podido
compartir esta etapa de mi vida con ellos y haber podido crecer juntos.
Y por supuesto, a mi tutor del Trabajo de Fin de Grado, Antonio Sarasa, por toda su
ayuda a lo largo de todo el desarrollo del proyecto.

                                            v
Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19
Resumen

     El presente Trabajo de Fin de Grado consiste en una aplicación Android que permite
a los usuarios que interactúan con ella llevar un control de su exposición frente a la Covid-
19. Para ello, los usuarios que usen esta plataforma, podrán consultar el riesgo de contagio
actual, calculado según las localizaciones en las que ha estado o, en caso de dar positivo,
notificarlo y alertar al resto de usuarios. Permitiendo de esta manera una monitorización
de la exposición al virus, y a su vez ayudando a que otros usuarios hagan lo mismo, siendo
una relación simbiótica entre usuarios.
    Por otro lado, los rastreadores que utilicen la aplicación pueden usar esas ubicaciones
para avisar a otras personas de su situación con respecto a su exposición al virus y añadir
ubicaciones de usuarios no registrados aumentando la fiabilidad de la aplicación.
    Se han utilizado las técnicas más usadas para el desarrollo de este tipo de aplicaciones,
con tecnologías modernas, que ofrecen una mayor seguridad tanto para el desarrollador
como los usuarios que interactúan con ella.
    El principal objetivo esta aplicación es lograr un control sobre un virus altamente
contagioso, como lo es la Covid-19, además de reducir la incidencia y parar la cadena de
contagio avisando a los usuarios de la exposición real en cada momento.

                                             vi
Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19
Palabras clave

 • Covid
 • Coronavirus
 • Android
 • API
 • Java
 • REST
 • Spring

                 vii
Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19
Abstract

     This Final Degree Project consists of an Android application that allows users who
interact with it to keep track of their exposure to Covid-19. To do this, users who use
this platform will be able to consult the current contagion risk, calculated according to
the locations where they have been or, in case of testing positive, notify and alert other
users. Allowing in this way a monitoring of exposure to the virus, and in turn helping
other users to do the same, being a symbiotic relationship between users.
     On the other hand, trackers using the application can use these locations to alert
other people to their situation regarding their exposure to the virus and add unregistered
user locations increasing the reliability of the application.
    The most commonly used techniques have been used for the development of this
type of application, with modern technologies, which offer greater security for both the
developer and the users who interact with it.
     The main objective of this application is to achieve control over a highly contagious
virus, such as Covid-19, in addition to reducing the incidence and stopping the chain of
contagion by notifying users of the actual exposure at all times.

                                           viii
Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19
Key Words

 • Covid
 • Coronavirus
 • Android
 • API
 • Java
 • REST
 • Spring

                 ix
Desarrollo de un sistema de rastreo para la Covid-19 Development of a tracking system of Covid-19
Índice

   0.1. Fátima Irene García Delgado . . . . . . . . . . . . . . . . . . . . . . . .                                           v
   0.2. Marina Lozano Lahuerta . . . . . . . . . . . . . . . . . . . . . . . . . . .                                          v

1. Introducción                                                                                                                1
   1.1. Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                       1
   1.2. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                        1
   1.3. Estructura de la memoria . . . . . . . . . . . . . . . . . . . . . . . . . .                                           2

1. Introduction                                                                                                                3
   1.1. Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                       3
   1.2. Goals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                      3
   1.3. Document’s structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                         4

2. Estado del arte                                                                                                             5

3. Especificación de requisitos y Casos de            uso.                                                                     7
   3.1. Actores . . . . . . . . . . . . . . . . . .   . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
        3.1.1. Usuario . . . . . . . . . . . . .      . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
        3.1.2. Rastreador . . . . . . . . . . . .     . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    7
        3.1.3. Administrador . . . . . . . . . .      . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    8
   3.2. Módulo funcional “Gestión de usuarios”        . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .    9
   3.3. Módulo funcional “ubicaciones” . . . .        . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   18
   3.4. Módulo funcional “rastreadores” . . . .       . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   22

4. Planificación                                                                                                              25

5. Tecnologías                                                                                                                26
   5.1. Spring Java Framework . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
   5.2. Retrofit . . . . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   26
   5.3. Android Studio . . . . . . . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
   5.4. Firebase . . . . . . . . . . . . . . . . . . . . . .          .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
   5.5. Google API - Firebase Cloud Messaging (FCM)                   .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
   5.6. Google API - Google Maps . . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   27
   5.7. XAMPP y phpMyAdmin . . . . . . . . . . . . .                  .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
   5.8. MySQL . . . . . . . . . . . . . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
   5.9. Postman . . . . . . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   28
   5.10. Git y Github . . . . . . . . . . . . . . . . . . .           .   .   .   .   .   .   .   .   .   .   .   .   .   .   28

                                              x
ÍNDICE                                                                                                                                          xi

6. Arquitectura y modelo de datos                                                                                                               30
   6.1. Arquitectura . . . . . . . . . . . .            .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   30
        6.1.1. API Rest . . . . . . . . .               .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
   6.2. Patrones de diseño . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
        6.2.1. Modelo-Vista-Controlador                 .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   31
        6.2.2. Singleton . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
        6.2.3. DAO . . . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   33
        6.2.4. Adapter . . . . . . . . . .              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34
   6.3. Modelo de datos . . . . . . . . . .             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   34

7. Implementación                                                                                                                               38
   7.1. Diseño . . . . . . . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
        7.1.1. Elementos de Android . . . . . .                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   38
   7.2. Clases principales . . . . . . . . . . . . .                    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
        7.2.1. AndroidManifest . . . . . . . . .                        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
        7.2.2. Java . . . . . . . . . . . . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
        7.2.3. Resources . . . . . . . . . . . . .                      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
        7.2.4. Gradle Scripts . . . . . . . . . . .                     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   45
   7.3. Implementación de la API REST . . . .                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
   7.4. Acceso al repositorio Github del proyecto                       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48

8. Conclusiones y trabajo a futuro                                                                                                              49
   8.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                        49
   8.2. Trabajo a futuro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                          50

8. Conclusions and future work                                                                                                                  51
   8.1. Conclusions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                         51
   8.2. Future work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                         52

9. Aportaciones individuales                                                                                                                    53
   9.1. Fátima Irene García Delgado . . . . . . . . . . . . . . . . . . . . . . . .                                                             53
   9.2. Marina Lozano Lahuerta . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                            54

   Bibliografía y enlaces de referencia                                                                                                         55

Anexos.                                                                                                                                         59
I. Manual de Instalación                                                                                                                        59
   I.1. Herramientas necesarias .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   59
        I.1.1. Xampp . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   59
        I.1.2. Eclipse . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   59
        I.1.3. Android Studio . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   59
   I.2. Ejecución de la aplicación      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   60

II. Manual de Usuario                                                                                                                           62
    II.1. Registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                      62
    II.2. Solicitud de Registro . . . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                       63
    II.3. Iniciar y/o cerrar Sesión . . . . . . . . . . . . . . . . . . . . . . . . . . .                                                       64
xii                                                                                                                                 ÍNDICE

      II.4. Opciones de Usuarios registrados        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
            II.4.1. Inicio / Home . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
            II.4.2. Consultar alertas . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
            II.4.3. Exposición . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
            II.4.4. Modificar datos . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   67
            II.4.5. Ubicaciones . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
            II.4.6. Darse de baja . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   69
      II.5. Opciones de Rastreadores . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   69
            II.5.1. Inicio / Home . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   70
            II.5.2. Gestión usuarios . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   70
            II.5.3. Añadir usuarios anónimos        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71
            II.5.4. Ubicaciones . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   72
      II.6. Opciones de Administradores . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   73
            II.6.1. Inicio / Home . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   74
            II.6.2. Listar usuarios . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   74
            II.6.3. Solicitudes . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
Índice de figuras

 3.1. Casos de uso de Gestión de Usuarios . . . . . . . . . . . . . . . . . . . .                                             9
 3.2. Casos de uso de Gestión de Ubicaciones . . . . . . . . . . . . . . . . . . .                                           18
 3.3. Casos de uso de Gestión de Rastreadores . . . . . . . . . . . . . . . . . .                                            23

 5.1. Diagrama de Tecnologías implementadas en Covrad . . . . . . . . . . . .                                                29

 6.1.    Diagramas de componentes . . . . . . . . . . . . . . . . . . . . . .                                .   .   .   .   30
 6.2.    Esquema básico de arquitectura API Rest . . . . . . . . . . . . .                                   .   .   .   .   31
 6.3.    Entidad Usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . .                              .   .   .   .   32
 6.4.    Controlador Usuarios . . . . . . . . . . . . . . . . . . . . . . . . .                              .   .   .   .   32
 6.5.    Ejemplo de implementación de Singleton, . . . . . . . . . . . . . .                                 .   .   .   .   33
 6.6.    ejemplo de implementación de DAO . . . . . . . . . . . . . . . . .                                  .   .   .   .   34
 6.7.    Patrón Adapter aplicado a las listas de localizaciones del proyecto                                 .   .   .   .   34
 6.8.    Modelo Entidad-Relación . . . . . . . . . . . . . . . . . . . . . . .                               .   .   .   .   34
 6.9.    Modelo Relacional . . . . . . . . . . . . . . . . . . . . . . . . . .                               .   .   .   .   35

 7.1. Estructura de carpetas en Android Studio.          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   39
 7.2. Nombre definido en el Manifest . . . . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   40
 7.3. Componentes definidos en el Manifest . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
 7.4. Permisos definidos en el Manifest . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   41
 7.5. Organización de carpetas de Activities. . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   42
 7.6. Ejemplo de Activity. LoginActivity. . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
 7.7. Ejemplo de Model. Location. . . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   43
 7.8. Ejemplo de Servicio. UserService. . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   44
 7.9. Configuración de depencias en Gradle . . .         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
 7.10. Configuración de recursos en Gradle . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   46
 7.11. Objeto Repository de las alertas . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   47
 7.12. Objeto Entity de las alertas . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   48

 I.1.    Arranque de los servicios Apache y MySQL en             Xampp               .   .   .   .   .   .   .   .   .   .   60
 I.2.    Arranque de API REST en Eclipse . . . . . .             . . . . .           .   .   .   .   .   .   .   .   .   .   60
 I.3.    IP en Android Studio . . . . . . . . . . . . . .        . . . . .           .   .   .   .   .   .   .   .   .   .   61
 I.4.    Ejecutar aplicación en Android Studio . . . .           . . . . .           .   .   .   .   .   .   .   .   .   .   61

 II.1.   Navegación de Login a Registro . . . . . . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   62
 II.2.   Ejemplo formulario de registro relleno. . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
 II.3.   Ejemplo formulario para solicitar un registro       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   63
 II.4.   Iniciar sesión. . . . . . . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   64
 II.5.   Cerrar sesión. . . . . . . . . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   64

                                             xiii
xiv                                                                                ÍNDICE DE FIGURAS

  II.6. Menu de Usuario registrado. . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
  II.7. Inicio de Usuario registrado. . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   65
  II.8. Estados del Usuario registrado. . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
  II.9. Consultar alertas de Usuario registrado. . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   66
  II.10.Exposicion de Usuario, según su estado. . .        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   67
  II.11.Edición de datos del usuario. . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   67
  II.12.Mensaje de solicitud de contraseña. . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   68
  II.13.Ubicaciones del usuario. . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   69
  II.14.Darse de baja de un usuario . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   69
  II.15.Menú de un rastreador. . . . . . . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   70
  II.16.Inicio de un rastreador. . . . . . . . . . . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   70
  II.17.Gestión de usuarios de un rastreador. . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71
  II.18.Agregar usuarios anónimos de un rastreador.        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   71
  II.19.Ubicaciones de un rastreador. . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   72
  II.20.Registro de una ubicación de un rastreador.        .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   73
  II.21.Menú de un administrador. . . . . . . . . . .      .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   73
  II.22.Inicio de un administrador. . . . . . . . . . .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   74
  II.23.Listar usuarios de un administrador. . . . .       .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   75
  II.24.Solicitudes de un administrador. . . . . . . .     .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   76
Índice de tablas

 3.1. Requisito Iniciar sesión . . . . . . . . . . . . . . . . . . .                                                  .   .   .   .   .   .   .   .   .   10
 3.2. Requisito Cerrar sesión . . . . . . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   10
 3.3. Requisito Mostrar datos . . . . . . . . . . . . . . . . . .                                                     .   .   .   .   .   .   .   .   .   11
 3.4. Requisito Modificar datos . . . . . . . . . . . . . . . . .                                                     .   .   .   .   .   .   .   .   .   11
 3.5. Requisito Modificar estado . . . . . . . . . . . . . . . . .                                                    .   .   .   .   .   .   .   .   .   12
 3.6. Requisito Consultar alertas . . . . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   12
 3.7. Requisito Dar de alta . . . . . . . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   13
 3.8. Requisito Registrar usuarios anónimos . . . . . . . . . .                                                       .   .   .   .   .   .   .   .   .   14
 3.9. Requisito Solicitar darse de alta . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   14
 3.10. Requisito Dar de baja . . . . . . . . . . . . . . . . . . .                                                    .   .   .   .   .   .   .   .   .   15
 3.11. Requisito Listar usuarios . . . . . . . . . . . . . . . . . .                                                  .   .   .   .   .   .   .   .   .   15
 3.12. Requisito Listar solicitudes de alta . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   16
 3.13. Requisito Gestionar solicitudes de alta . . . . . . . . . .                                                    .   .   .   .   .   .   .   .   .   17
 3.14. Requisito Dar de baja . . . . . . . . . . . . . . . . . . .                                                    .   .   .   .   .   .   .   .   .   18
 3.15. Requisito Registrar ubicación manual . . . . . . . . . . .                                                     .   .   .   .   .   .   .   .   .   19
 3.16. Requisito Registrar ubicación automática . . . . . . . . .                                                     .   .   .   .   .   .   .   .   .   20
 3.17. Requisito Listar ubicaciones . . . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   20
 3.18. Requisito Listar ubicaciones por usuario . . . . . . . . .                                                     .   .   .   .   .   .   .   .   .   21
 3.19. Filtrar ubicaciones por usuario . . . . . . . . . . . . . . .                                                  .   .   .   .   .   .   .   .   .   21
 3.20. Filtrar ubicaciones por estado . . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   22
 3.21. Requisito Eliminar ubicación . . . . . . . . . . . . . . . .                                                   .   .   .   .   .   .   .   .   .   22
 3.22. Requisito Notificar alerta . . . . . . . . . . . . . . . . . .                                                 .   .   .   .   .   .   .   .   .   23
 3.23. Requisito Modificar estado de usuario específico . . . . .                                                     .   .   .   .   .   .   .   .   .   24
 3.24. Requisito registrar ubicación de usuario usuario específico                                                    .   .   .   .   .   .   .   .   .   24

 6.1.   Tabla   Usuarios .    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   35
 6.2.   Tabla   Alertas . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   36
 6.3.   Tabla   Ubicaciones   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   36
 6.4.   Tabla   Solicitudes   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   37

                                                              xv
Capítulo 1

Introducción

1.1.     Motivación

     El contexto actual de crisis sanitaria provocada por la COVID-19, ha afectado a
todas las actividades de la sociedad y economía, ya que el riesgo de contagio es muy alto
en las interacciones sociales. En este sentido, el contacto cercano entre personas es la
forma más fácil de propagar el virus.
     La finalidad de este proyecto es desarrollar una aplicación móvil que indique a la
persona que la utilice, en tiempo real, su riesgo de exposición actual dada su localiza-
ción.
      La aplicación mantendrá actualizada la exposición de la persona, avisándole en caso
de correr riesgo de contagio, intentando de esta manera reducir el número de conta-
gios.

1.2.     Objetivos

    El objetivo principal de este proyecto es desarrollar una aplicación que permita a
una persona consultar su exposición a la Covid-19 dada su localización. Este objetivo se
puede desglosar en los siguientes objetivos más específicos:
   • Desarrollar una aplicación móvil que permita a un usuario consultar su nivel de
     exposición al virus a partir de las localizaciones en las que ha estado.
   • Recibir alertas y/o notificaciones sobre su nivel de exposición.
   • Permitir a los rastreadores registrar a personas que se hayan hecho las pruebas del
     Covid-19 y mejorar la capacidad predictiva de la aplicación.
   • Presentar una aplicación amigable y sencilla al usuario.
   • Mostrar al usuario datos fiables y reales.
   • Desarrollar una aplicación robusta y estable.

                                            1
2                                                               Capítulo 1. Introducción

1.3.     Estructura de la memoria

     La memoria de este proyecto se estructura de la siguiente manera.
     En el capítulo 1 se plantea la motivación y los objetivos que se pretenden conseguir
con el desarrollo de esta aplicación.. Así mismo se describe la estructura de la memo-
ria.
    En el capítulo 2 se revisan algunas soluciones con una funcionalidad semejante a la
desarrollada en este trabajo.
     En el capítulo 3 describen los casos de uso de la aplicación agrupados en tres módulos:
gestión de usuarios, ubicación y rastreador.
     En el capítulo 4 se describe la planificación del desarrollo del proyecto.
     En el capítulo 5 se comenta la tecnología empleada para la implementación de la
aplicación.
     El capítulo 6 presenta la arquitectura y los patrones de diseño utilizados en la apli-
cación, así como el modelo de datos utilizado.
     El diseño y funcionalidad de la aplicación móvil desarrollada se describe en el capítulo
7.
     Las conclusiones y el trabajo futuro, y las aportaciones individuales se desarrollan
en los capítulos 8, y 9, respectivamente.
     En último lugar se encuentra la bibliografía y los anexos, en los que se incluyen una
guía de instalación de la aplicación y una guía de uso.
Capítulo 1

Introduction

1.1.     Motivation

     The current context of the health crisis caused by COVID-19 has affected all activities
of society and the economy, since the risk of contagion is very high in social interactions.
Close contact between people is the easiest way to spread the virus.

    The purpose of this project is to develop a mobile application that indicates to the
person who uses it, in real time, their current risk of exposure given their location.

     The application will keep the person’s exposure up to date, warning them in case of
risk of contagion, thus trying to reduce the number of infections.

1.2.     Goals

    The main goal of this project is to develop an application that allows a person to
consult their exposure to Covid-19 given their location. This objective can be broken
down into the following more specific objectives:

   • Develop a mobile application that allows a user to check their level of exposure to
     the virus from the locations where they have been.

   • Receive alerts and/or notifications about your level of exposure.

   • Allow health personnel to register people who have been tested for Covid-19 and
     improve the predictive capacity of the application.

   • Present a friendly and simple application to the user.

   • Show the user reliable and real data.

   • Develop a robust and stable application.

                                             3
4                                                            Capítulo 1. Introduction

1.3.     Document’s structure

    This document is structured as follows.
     Chapter 1 raises the motivation and objectives to be achieved with the development
of this application. Likewise, the memory structure is described.
    In chapter 2 some solutions with a similar functionality to that developed in this
work are reviewed.
   In Chapter 3 the use cases of the application are described and grouped into three
modules: user management, location and tracker.
    Chapter 4 describes project development planning.
    In chapter 5 the technology used to implement the application is discussed.
     Chapter 6 presents the architecture and design patterns used in the application, as
well as the data model used.
    The design and functionality of the developed mobile application is described in
chapter 7.
     The conclusions and future work, and individual contributions are developed in chap-
ters 8 and 9, respectively.
     Lastly, there is the bibliography and the annexes, which include an application ins-
tallation guide and a user guide.
Capítulo 2

Estado del arte

     Teniendo en cuenta la situación que está viviendo el planeta entero con la Covid-19
y siendo un tema tan importante se han desarrollado varias aplicaciones semejantes a al
proyecto implementado, muchas de ellas puestas en marcha por los propios gobiernos de
distintos países.
    Algunas aplicaciones móviles que encontramos son:
   • Radar Covid [1]
          Es una aplicación oficial del gobierno de España la cual lleva un registro de los
          usuarios con los que se ha tenido un contacto estrecho, utilizando esa informa-
          ción para determinar el riesgo de haberse infectado por la Covid-19. Utiliza la
          API de notificación creada por Android y Apple [2], la cuál no recopila ningún
          dato de geolocalización sino que utiliza Bluetooth Low Energy para intercam-
          biar códigos que cambian varias veces cada hora. Estos códigos son guardados
          durante 14 días.
   • CovTracer [3]
          Es la aplicación oficial del gobierno de Chipre. Esta aplicación, al igual que
          la anterior, utiliza tecnología Bluetooth para medir la distancia y la duración
          del contacto entre personas (generalmente más de quince minutos en menos de
          dos metros). Utiliza claves aleatorias diarias que comparte con los dispositivos
          cercanos y en caso de que un usuario resulte positivo se alerta a los usuarios
          que han estado en contacto con esa persona.
   • SwissCovid [4]
          Esta aplicación funciona de manera similar a las anteriores, todas ellas uti-
          lizan el SDK de Android DP3T (Decentralised Privacy-Preserving Proximity
          Tracing) [5] que se basa en las notificaciones de exposición de Google y Apple.
   • HaMagen [6]
          Es una aplicación lanzada por el Ministerio de Salud de Israel. HaMagen noti-
          fica a aquellos usuarios que han estado en contacto estrecho con un positivo en
          la Covid-19. Utiliza el historial de ubicaciones (GPS) de las últimas dos sema-
          nas y el historial de las redes inalámbricas WIFI para comprobar la exposición

                                            5
6                                                          Capítulo 2. Estado del arte

          a personas contagiadas.
    Esta última aplicación al igual que la aplicación implementada utiliza la localización
que provee el dispositivo móvil para hacer referencias cruzadas con las de otros usuarios
y poder, de esta forma, calcular el nivel de exposición de los usuarios.
Capítulo 3

Especificación de requisitos y Casos de
uso.

      En este capítulo se van a especificar los requisitos de la aplicación desarrollada. Para
ello, en primer lugar se describirán los actores que interactuarán con la aplicación, y a
continuación se desarrollarán los casos de uso en los que intervienen los actores agrupados
por módulos funcionales.

3.1.       Actores

       En la aplicación planteada en este proyecto se han definido los siguientes acto-
res:

3.1.1.      Usuario

    Son aquellas personas que compartirán sus datos de localización y su estado de salud
para facilitar el control de los brotes de contagios.
   • Usuario registrado.
     Aquellas personas que manualmente se han descargado la aplicación y se han regis-
     trado en el sistema ellos mismos.
   • Usuario anónimo.
     Aquellas personas que directa o indirectamente han estado en contacto con un
     usuario registrado positivo y no se han dado de alta voluntariamente en la aplicación
     sino que han sido de alta por un rastreador.

3.1.2.      Rastreador

    Aquellas personas encargadas de localizar, identificar y seguir casos positivos de
contagio de la enfermedad.

                                              7
8                            Capítulo 3. Especificación de requisitos y Casos de uso.

3.1.3.    Administrador

     Son aquellas personas encargadas de gestionar los usuarios dentro de la aplica-
ción.

    La funcionalidad de la aplicación se ha agrupado en módulos funcionales:
    • GESTIÓN DE USUARIOS
    • UBICACIÓN
    • RASTREADOR
En los siguientes apartados se desarrollan cada uno de estos módulos.
3.2. Módulo funcional “Gestión de usuarios”                                        9

3.2.     Módulo funcional “Gestión de usuarios”

     En este módulo se ha agrupado toda la funcionalidad referente a la gestión de la
información de los usuarios.

                   Figura 3.1: Casos de uso de Gestión de Usuarios

   A continuación se van a describir los casos de uso que forman parte de este módulo
como se muestra en la Figura 3.1:
10                         Capítulo 3. Especificación de requisitos y Casos de uso.

     RADCOV01                Iniciar Sesión
     Actor                   Usuario, rastreador, administrador
     Descripción             Acceso de un usuario registrado en la aplicación.
     Precondición            El usuario debe existir dentro del sistema, y no tener
                             una sesión ya iniciada.
     Secuencia normal
                              a). El usuario clica sobre inicio de sesión, donde
                                  se mostrará un formulario con las credenciales
                                  necesarias para poder iniciar sesión en la apli-
                                  cación.
                              b). El usuario introduce sus credenciales
                              c). El sistema verifica las credenciales.
                              d). Se muestra la pantalla de inicio del usuario iden-
                                  tificado.

     Postcondición           El usuario tiene una sesión activa.
     Excepciones
                                  Pto. a: datos erróneamente introducidos, serán
                                  marcados a través de un mensaje de error.
                                  Pto. b: credenciales erróneas. Se muestra men-
                                  saje de error y se vuelve a la pantalla del for-
                                  mulario.

     Comentarios

                        Tabla 3.1: Requisito Iniciar sesión

     RADCOV02                Cerrar Sesión
     Actor                   Usuario, rastreador, administrador
     Descripción             Se cierra la sesión del usuario.
     Precondición            El usuario tiene que tener una sesión activa.
     Secuencia normal
                              a). El usuario clica sobre cerrar sesión.
                              b). El sistema borra la sesión del usuario.
                              c). Se vuelve a la pantalla de inicio (inicio de sesión)
                                  de la aplicación.

     Postcondición           No hay ninguna sesión activa del usuario.
     Excepciones
                                  Pto. a: error en el cierre de sesión. Se manda
                                  mensaje de error.

     Comentarios

                        Tabla 3.2: Requisito Cerrar sesión
3.2. Módulo funcional “Gestión de usuarios”                                               11

   RADCOV03                    Mostrar datos
   Actor                       Usuario, rastreador, administrador
   Descripción                 Muestra los datos de un usuario del sistema.
   Precondición                El usuario tiene que estar dado de alta y con la sesión
                               activa en el sistema.
   Secuencia normal
                                 a). Usuario selecciona la opción para ver sus datos.
                                 b). El sistema carga los datos del usuario y los
                                     muestra.

   Postcondición               El usuario tiene acceso a los datos de su perfil. No se
                               modifica la base de datos.
   Excepciones
   Comentarios                 Cada actor tiene sus atributos propios y/o comunes
                               para mostrar.

                          Tabla 3.3: Requisito Mostrar datos

   RADCOV04                    Modificar datos
   Actor                       Usuario
   Descripción                 Modifica los datos de un usuario del sistema.
   Precondición                El usuario tiene que estar dado de alta en el sistema.
   Secuencia normal
                                 a). Se modifican aquellos datos que el sistema per-
                                     mita.
                                 b). Confirmación de desear cambiar esos datos.
                                 c). Actualización de los datos en el sistema.
                                 d). Mensaje de satisfacción al usuario.

   Postcondición               Usuario con los datos actualizados en el sistema.
   Excepciones
                                     Pto. a: en caso de haber errores, se notifican los
                                     errores para que los corrijan.
                                     Pto. b: en caso de producirse un error al actua-
                                     lizar los datos se notificará error al usuario.

   Comentarios                 Cada actor tiene sus atributos propios y/o comunes
                               para mostrar.

                         Tabla 3.4: Requisito Modificar datos
12                           Capítulo 3. Especificación de requisitos y Casos de uso.

     RADCOV05                 Modificar estado
     Actor                    Usuario
     Descripción              Modifica el estado del usuario.
     Precondición             El usuario tiene que estar dado de alta en el sistema.
     Secuencia normal
                                a). El usuario cambia su estado de positivo a nega-
                                    tivo o viceversa.
                                b). Confirmación de cambio de estado.
                                c). Actualización de los datos en el sistema.
                                d). Mensaje de satisfacción al usuario.

     Postcondición            Usuario con el estado actualizado en el sistema.
     Excepciones
                                    Pto. a: en caso de cancelar, se mantiene el estado
                                    inicial.
                                    Pto. b: en caso de producirse un error al actua-
                                    lizar los datos se notificará error al usuario.

     Comentarios              Cuando se produce un cambio de estado, el sistema
                              se encarga de buscar otros usuarios que puedan haber
                              estado en contacto para mandar una alerta.

                        Tabla 3.5: Requisito Modificar estado

     RADCOV06                 Consultar alertas
     Actor                    Usuario
     Descripción              Muestra registro de alertas que el sistema ha notifi-
                              cado.
     Precondición             Deben existir alertas registradas en el sistema.
     Secuencia normal
                                a). El usuario clica sobre “Consultar alertas”.
                                b). Se cargar las notificaciones que se han registrado
                                    por parte del sistema.

     Postcondición            Usuario con el estado actualizado en el sistema.
     Excepciones
     Comentarios

                        Tabla 3.6: Requisito Consultar alertas
3.2. Módulo funcional “Gestión de usuarios”                                                 13

   RADCOV07                     Dar de alta
   Actor                       Usuario, administrador
   Descripción                 Añadir un nuevo usuario al sistema de la aplicación
                               con sus datos (nombre, DNI, email, . . . )
   Precondición                Hay campos obligatorios que debe rellenar el usuario
                               para poder darse de alta en el sistema.
   Secuencia normal
                                 a).   Se muestra formulario de inscripción al usuario.
                                 b).   Se pide confirmación de alta al usuario.
                                 c).   Alta del usuario en el sistema.
                                 d).   Se manda mensaje de confirmación del alta.

   Postcondición               Se genera un identificador único asociado al nuevo
                               usuario dentro del sistema.
   Excepciones
                                       Pto. a: si rechaza el alta, volverá a la página de
                                       registro.
                                       Pto. b: usuario ya registrado con algunos datos
                                       unívocos. Se notifica al usuario que revise los
                                       datos.

   Comentarios                 Este requisito es padre de:
                                     RADCOV08 Registrar usuarios anóni-
                                     mos: un rastreador puede registrar usuarios
                                     anónimos positivos, que se tendrán en cuenta
                                     dentro del sistema.
                                     RADCOV13 Gestionar solicitudes de al-
                                     ta: a través de una solicitud, un administrador
                                     gestionará las solicitudes.

                           Tabla 3.7: Requisito Dar de alta
14                           Capítulo 3. Especificación de requisitos y Casos de uso.

     RADCOV08                  Registrar usuarios anónimos
     Actor                     Rastreador.
     Descripción               Registra un nuevo usuario anónimo según el Requisito
                               RADCOV07-02 de la tabla [3.7]
     Precondición
     Secuencia normal
                                 a). Se rellena el formulario para el registro de un
                                     usuario anónimo.
                                 b). Se indica si el usuario es Positivo/Negativo.
                                 c). Se confirma registro.

     Postcondición             Se registra nuevo usuario tipo Anónimo en la base de
                               datos.
     Excepciones               Pto. c: Salta una mensaje de error de registro.
     Comentarios

                   Tabla 3.8: Requisito Registrar usuarios anónimos

     RADCOV09                   Solicitar darse de alta
     Actor                     Rastreador, administrador
     Descripción               Se solicita al administrador que registre nuevos ras-
                               treadores/administradores en el sistema.
     Precondición              Debe existir algún administrador en el sistema.
     Secuencia normal
                                 a). Se rellena formulario de inscripción.
                                 b). Se sube formulario al sistema y se selecciona el
                                     tipo de solicitud (Administrador/ Rastreador).
                                 c). Se confirma la solicitud.

     Postcondición             Se registrará la solicitud en el sistema.
     Excepciones
                                     Pto. a: error en el formato del formulario. Se
                                     notifica error.

     Comentarios               Una vez recibido el formulario el proceso continuará
                               con el Req. RADCOV07 [3.7]: Dar de alta.

                      Tabla 3.9: Requisito Solicitar darse de alta
3.2. Módulo funcional “Gestión de usuarios”                                             15

   RADCOV10                     Dar de baja
   Actor                       Usuario, adminsitrador
   Descripción                 Se elimina usuario del sistema.
   Precondición                El usuario tiene que estar dado de alta en el sistema.
   Secuencia normal
                                 a). Usuario marca botón de darse de baja en su
                                     interfaz.
                                 b). Se pide confirmación de querer darse de baja.
                                 c). Se elimina al usuario del sistema.
                                 d). Se indica mensaje de confirmación de la baja.
                                 e). Se vuelve a la pantalla de inicio/registro de la
                                     aplicación.

   Postcondición               Usuario inactivo dentro del sistema.
   Excepciones
   Comentarios                 Un usuario registrado puede darse de baja a sí mismo.
                               En caso de ser un rastreador o administrador solo se
                               puede gestionar su baja a través de otro administra-
                               dor.

                          Tabla 3.10: Requisito Dar de baja

   RADCOV11                     Listar usuarios
   Actor                       Rastreador, administrador
   Descripción                 Lista de los usuarios registrados en el sistema.
   Precondición                Debe existir al menos un usuario registrado en el sis-
                               tema.
   Secuencia normal
                                 a). El administrador clica sobre la opción de listar
                                     usuarios.
                                 b). El sistema carga los datos.
                                 c). Se muestran los usuarios activos en el sistema.

   Postcondición               Se tendrá acceso a los usuarios. No se realiza ninguna
                               modificación en la base de datos.
   Excepciones
                                     Pto b: No existen usuarios, se muestra mensaje
                                     de error.

   Comentarios                 Un rastreador solo podrá visualizar a los usuarios re-
                               gistrados y/o anónimos. Un administrador, podrá ver
                               a usuarios registrados/anónimos, rastreadores y/o ad-
                               ministradores.

                         Tabla 3.11: Requisito Listar usuarios
16                            Capítulo 3. Especificación de requisitos y Casos de uso.

     RADCOV12                    Listar Solicitudes de alta
     Actor                      Administrador
     Descripción                Lista las solicitudes de alta por parte de un rastrea-
                                dor/administrador.
     Precondición               Para mostrar solicitudes disponibles, deben haber
                                completado el cuestionario de registro previamente
                                indicado en Req. RADCOV09 [3.9] Solicitar dar
                                de alta.
     Secuencia normal
                                  a). El administrador clica sobre la opción de listar
                                      solicitudes.
                                  b). El sistema carga los datos.
                                  c). Se muestran los solicitudes registradas en el sis-
                                      tema.

     Postcondición              No se realiza ninguna modificación en la base de da-
                                tos.
     Excepciones
                                      Pto b: No existen solicitudes, se muestra men-
                                      saje de error.

     Comentarios

                     Tabla 3.12: Requisito Listar solicitudes de alta
3.2. Módulo funcional “Gestión de usuarios”                                               17

   RADCOV13                    Gestionar solicitudes de alta
   Actor                       Administrador
   Descripción                 Dada una lista de peticiones, se podrán aceptar o re-
                               chazar.
   Precondición                Debe existir al menos una solicitud en el sistema de
                               base de datos en base al Req. RADCOV09 [3.9]
                               Solicitar dar de alta.
   Secuencia normal
                                 a). El administrador clica sobre la opción de listar
                                     solicitudes.
                                 b). El administrador podrá seleccionar 2 botones en
                                     cada solicitud:
                                       a) Aceptar: si se pulsa esta opción. Se regis-
                                           trará un nuevo usuario en la base de datos
                                           con los datos de la solicitud.
                                       b) Rechazar: se pedirá mensaje de confirma-
                                           ción. La solicitud queda en estado rechaza-
                                           do.

   Postcondición               Nuevo usuario tipo rastreador/administrador en el
                               sistema.
   Excepciones
                                     Pto a.a: Los datos del nuevo usuario son erró-
                                     neos. Se notificará a través del email de registro
                                     que no se ha podido dar de alta.

   Comentarios

                  Tabla 3.13: Requisito Gestionar solicitudes de alta
18                             Capítulo 3. Especificación de requisitos y Casos de uso.

     RADCOV14                    Dar de baja
     Actor                       Usuario registrado, administrador
     Descripción                 Dado una lista de usuarios, se podrá/n dar de baja
                                 del sistema.
     Precondición                Debe existir al menos dos usuarios en el sistema de
                                 base de datos.
     Secuencia normal
                                   a). El administrador podrá seleccionar 1 botón de
                                       borrado sobre un listado de usuarios:
                                        a) Borrar: si se pulsa esta opción. Se confir-
                                            mará la solicitud de baja del usuario selec-
                                            cionado:
                                             1) Se acepta: se eliminará dicho usuario.
                                             2) Se cancela: se vuelve al listado de
                                                usuarios.

     Postcondición               Usuario borrado de la base da datos.
     Excepciones
     Comentarios                 Un usuario registrado puede darse de baja a sí mismo.
                                 Un rastreador/administrador deben ser dados de baja
                                 por otro administrador.

                            Tabla 3.14: Requisito Dar de baja

3.3.     Módulo funcional “ubicaciones”

     En este módulo se ha agrupado la funcionalidad referente a la gestión de la informa-
ción de las ubicaciones de los usuarios.

                    Figura 3.2: Casos de uso de Gestión de Ubicaciones
3.3. Módulo funcional “ubicaciones”                                                       19

   A continuación se van a describir los casos de uso que forman parte de este módulo
como se muestra en la Figura [3.2]:

   RADCOV15                    Registrar ubicación manual
   Actor                       Usuario registrado, rastreador
   Descripción                 Añadir una ubicación manualmente al sistema de la
                               aplicación con sus datos (coordenadas, usuario, hora).
   Precondición                Debe existir al menos un usuario registrado en el sis-
                               tema.
   Secuencia normal
                                 a). El sistema muestra un mapa interactivo, se
                                     mantiene pulsado sobre la ubicación que se
                                     desee registrar.
                                 b). EL usuario clica sobre la opción .Añadir ubica-
                                     ción".
                                 c). El sistema informa de que la ubicación ha sido
                                     registrada correctamente.

   Postcondición               El sistema registra una nueva ubicación la cual ya
                               puede ser utilizada para realizar el rastreo.
   Excepciones
                                      Pto a: Coordenadas erróneas, se muestra men-
                                      saje de error de las coordenadas y se pide volver
                                      a introducirlo.
                                      Pto c: Error al registrar los datos en la base de
                                      datos, se muestra mensaje de error.

   Comentarios                 Un usuario registrado puede darse de baja a sí mismo.
                               Un rastreador/administrador deben ser dados de baja
                               por otro administrador.

                   Tabla 3.15: Requisito Registrar ubicación manual
20                             Capítulo 3. Especificación de requisitos y Casos de uso.

     RADCOV16                    Registrar ubicación automática
     Actor                       Sistema
     Descripción                 Añadir una ubicación al sistema de la aplicación con
                                 sus datos (coordenadas, usuario, hora)
     Precondición                Debe existir al menos un usuario registrado en el sis-
                                 tema.
     Secuencia normal
                                   a). El sistema cada x minutos o cada vez que se
                                       cambie la ubicación registra una nueva ubica-
                                       ción.

     Postcondición               El sistema registra una nueva ubicación la cual ya
                                 puedeser utilizada para realizar el rastreo.
     Excepciones
     Comentarios                 Requisito propio del sistema.

                   Tabla 3.16: Requisito Registrar ubicación automática

     RADCOV17                    Listar ubicaciones
     Actor                       Usuario registrado, rastreador.
     Descripción                 Se muestran todas las ubicaciones y los datos de las
                                 ubicaciones.
     Precondición                Debe haber al menos una ubicación registrada en el
                                 sistema.
     Secuencia normal
                                  a). Se selecciona el filtro por el que se quiere buscar
                                      y se indica un valor.
                                  b). El sistema muestra una lista con todas las ubi-
                                      caciones.

     Postcondición               Se mostrarán los datos de las ubicaciones. No se mo-
                                 difica ningún dato en la base de datos.
     Excepciones
     Comentarios                 Los filtros serán únicamente para los rastreadores. Los
                                 usuarios registrados tendrán acceso solo a sus ubica-
                                 ciones.

                         Tabla 3.17: Requisito Listar ubicaciones
3.3. Módulo funcional “ubicaciones”                                                        21

   RADCOV18                    Listar ubicaciones por usuario
   Actor                       Usuario registrado.
   Descripción                 Se muestran todas las ubicaciones y los datos de las
                               ubicaciones del usuario que ha iniciado sesión.
   Precondición                Debe haber al menos una ubicación registrada en el
                               sistema.
   Secuencia normal
                                 a). El sistema muestra una lista con todas las ubi-
                                     caciones del usuario.

   Postcondición               Se mostrarán los datos de las ubicaciones. No se mo-
                               difica ningún dato en la base de datos.
   Excepciones
   Comentarios

                 Tabla 3.18: Requisito Listar ubicaciones por usuario

   RADCOV19                    Filtrar ubicaciones por usuario
   Actor                       Rastreador.
   Descripción                 Se muestran las ubicaciones y los datos de las ubica-
                               ciones del usuario seleccionado.
   Precondición                Debe haber al menos una ubicación registrada en el
                               sistema.
   Secuencia normal
                                 a). Se introduce el id del usuario por el que se quiere
                                     buscar.
                                 b). El sistema muestra una lista con todas las ubi-
                                     caciones del usuario introducido.

   Postcondición               Se mostrarán los datos de las ubicaciones. No se mo-
                               difica ningún dato en la base de datos.
   Excepciones
   Comentarios

                      Tabla 3.19: Filtrar ubicaciones por usuario
22                             Capítulo 3. Especificación de requisitos y Casos de uso.

     RADCOV20                    Filtrar ubicaciones por estado
     Actor                       Rastreador.
     Descripción                 Se muestran las ubicaciones y los datos de las ubica-
                                 ciones de los usuarios con el estado seleccionado.
     Precondición                Debe haber al menos una ubicación registrada en el
                                 sistema.
     Secuencia normal
                                   a). Se selecciona el estado del usuario por el que se
                                       quiere buscar.
                                   b). El sistema muestra una lista con todas las ubi-
                                       caciones de los usuarios con el estado seleccio-
                                       nado.

     Postcondición               Se mostrarán los datos de las ubicaciones. No se mo-
                                 difica ningún dato en la base de datos.
     Excepciones
     Comentarios

                        Tabla 3.20: Filtrar ubicaciones por estado

     RADCOV21                    Eliminar ubicación
     Actor                       Rastreador.
     Descripción                 Se elimina la ubicación del sistema..
     Precondición                Debe existir al menos una ubicación registrada en el
                                 sistema.
     Secuencia normal
                                   a). Se pide confirmación para eliminar las ubicacio-
                                       nes.
                                   b). Se elimina la ubicación del sistema.

     Postcondición               Ubicación eliminada del sistema.
     Excepciones
     Comentarios

                        Tabla 3.21: Requisito Eliminar ubicación

3.4.     Módulo funcional “rastreadores”

     En este módulo se ha agrupado toda la funcionalidad referente a la gestión de los
niveles de riesgo de los usuarios y las alertas que se producen en función de los niveles de
riesgo.
3.4. Módulo funcional “rastreadores”                                                      23

                 Figura 3.3: Casos de uso de Gestión de Rastreadores

   A continuación se van a describir los casos de uso que forman parte de este módulo
como se muestra en la Figura [3.3]:

   RADCOV22                    Notificar alerta
   Actor                       Sistema
   Descripción                 Se invoca una alerta y se envía a el/los usuario/s se-
                               leccionado/s.
   Precondición                Debe existir al menos un usuario registrado en el sis-
                               tema.
   Secuencia normal
                                 a). Se escogen los usuarios que recibirán la alerta de
                                     la lista de usuarios según su exposición a otra
                                     persona contagiada.
                                 b). El sistema envía la notificación al usuario.

   Postcondición               Se registra una nueva alerta en el sistema.
   Excepciones
   Comentarios

                         Tabla 3.22: Requisito Notificar alerta
24                            Capítulo 3. Especificación de requisitos y Casos de uso.

     RADCOV23                   Modificar estado de usuario específico
     Actor                      Usuario
     Descripción                Modifica el estado del usuario.
     Precondición               El usuario tiene que estar dado de alta en el sistema.
     Secuencia normal
                                  a). El rastreador cambia el estado del usuario, el
                                      estado puede ser: positivo, negativo o alerta/-
                                      riesgo.
                                  b). Confirmación de cambio de estado.
                                  c). Actualización de los datos en el sistema.
                                  d). Mensaje de satisfacción al usuario.

     Postcondición              Usuario con el estado actualizado en el sistema.
     Excepciones
                                      Pto. a: en caso de cancelar, se mantiene el estado
                                      inicial.
                                      Pto. b: en caso de producirse un error al actua-
                                      lizar los datos se notificará error al usuario.

     Comentarios                Se accede a esta opción a través de una lista de usua-
                                rios.

              Tabla 3.23: Requisito Modificar estado de usuario específico

     RADCOV24                   Registrar ubicación de usuario específico
     Actor                      Rastreador.
     Descripción                Registra una nueva ubicación de un usuario según el
                                el Req. RADCOV14 [3.15]: Registrar ubicación
                                manual.
     Precondición
     Secuencia normal
                                  a). Se selecciona un punto en el mapa interactivo.
                                  b). Se indica el usuario relacionado a esa ubicación.
                                       a) Se selecciona un usuario registrado.
                                        b) No se selecciona un usuario registrado.
                                        c) Se selecciona la fecha y hora de la ubica-
                                           ción.
                                  c). Se confirma registro.

     Postcondición              Se registra la ubicación de un usuario en la base de
                                datos.
     Excepciones                Pto. c: Salta una mensaje de error de registro.
     Comentarios

         Tabla 3.24: Requisito registrar ubicación de usuario usuario específico
Capítulo 4

Planificación

     Durante los primeros meses del curso: octubre, noviembre y diciembre; se realizó una
fase de búsqueda e investigación de las herramientas que se utilizarían en el proyecto.
      Además, durante ese tiempo, se comenzó a definir las funcionalidades del proyec-
to.
     Posteriormente se comenzó a trabajar en el código, para ello se hizo primero la
estructura de la base de datos, y una vez terminada se realizó la estructura del código
tanto del backend en la REST API como en el frontend en Android Studio. Se planteó
el diseño de la aplicación, realizando bocetos de las vistas para luego poder reproducirlas
en la aplicación. Una vez terminado todo el trabajo de planteamiento del proyecto se
repartió el trabajo.
     Se comenzó a realizar la parte backend y frontend por separado, probando las funcio-
nalidades a la vez que se iban finalizando. Para probar las partes del backend se utilizaba
Postman y para las del frontend se utilizaban datos locales en el propio Android Stu-
dio.
    Una vez probadas por separado ambas partes se realizaba la conexión y se volvía a
probar.
     Cada vez que se terminaba alguna funcionalidad se realizaba una reunión para rea-
lizar las pruebas y seguir repartiendo el trabajo.
    Por último, una vez terminada la implementación de la aplicación se comenzó con la
redacción de la memoria.

                                            25
Capítulo 5

Tecnologías

    En este capítulo se van a presentar las tecnológias utilizadas para el desarrollo de
Covrad. Se puede observar un resumen de éstas tecnologías en la Figura [5.1].

5.1.     Spring Java Framework

     Spring [7] es un framework de código abierto creado para el desarrollo de aplicaciones
muy variadas, pero a día de hoy, su uso se está viendo incrementado en el desarrollo de
aplicaciones web. Spring se divide en diversos módulos, que ofrecen multitud de funcio-
nalidades. Las inyecciones de dependencias a los distintos componentes hacen el código
más ágil y fácil de programar incluyendo también el uso de patrones que se nombran en
el Capítulo 6.

      Principalmente se emplea este framework para la parte lógica de Covrad. Se ha
utilizado la funcionalidad Web, que crea los controladores web para las aplicaciones REST,
en este caso es el punto de conexión con las vistas de Android. Otra parte implementada
en Spring es el acceso de datos a través de conectores, para poder validar las interacciones
con la aplicación.

5.2.     Retrofit

     Retrofit [8] es un cliente de servidores REST para Android y Java. Retrofit produce
llamadas HTTP para obtener resultados estructurados acorde a lo que se solicite. Permite
hacer peticiones al servidor de tipo: GET, POST, PUT, DELETE, entre otras. Éstas
peticiones pueden llevar parámetros que el servidor luego puede interpretar por un tipo
de dato en concreto. A través de este cliente se ha podido interactuar entre la parte del
frontend (Android) y la parte del backend (Spring Java), haciendo el intercambio de datos
muy fácil de configurar.

                                            26
5.3. Android Studio                                                                         27

5.3.     Android Studio

     Android Studio [9] es una herramienta que permite el desarrollo de aplicaciones An-
droid en diferentes plataformas (tablets, móviles, relojes, televisiones, etc. . . ). El código
elegido para el desarrollo ha sido Java, pero también está disponible Kotlin. Android
Studio incluye un gestor de dispositivos virtuales de Android (AVD), que permiten si-
mular y lanzar la aplicación desarrollada. Éstos dispositivos se pueden configurar con
diferentes versiones de android, RAM y niveles de señal, entre otras características, lo
que resulta muy útil para poder ver el comportamiento de la aplicación en diferentes
escenarios).
     Se decide usar esta herramienta dada la gran documentación que hay, y que todos
los ejemplos para la iniciación en Android, usan este programa para sus tutoriales.

5.4.     Firebase

     Firebase [10] es una plataforma cloud para el desarrollo de aplicaciones web y móviles.
Permite conectarse con dispositivos Android, iOS y web. Firebase presenta una base de
datos en tiempo real. Ofrece muchas funcionalidades como por ejemplo: monitoreo de
compilación, como se utiliza en las autenticaciones de los usuarios que usan la aplicación
o acceso a la base de datos en tiempo real.
     La decisión de usar Firebase para el desarrollo se tomó debido a la funcionalidad de
gestión de usuarios que ofrece, haciendo esta parte fácil y segura. La autenticación de
usuarios así como el registro ofrecen esa seguridad y facilidad, tanto para el desarrollador
como para el usuario, ya que con solo indicar su correo electrónico y contraseña, ya se
registra correctamente en el sistema. También la gestión de las notificaciones es decisiva
para usar Firebase para Covrad, punto que se explica a continuación.

5.5.     Google API - Firebase Cloud Messaging (FCM)

     Para la gestión de notificaciones a los usuarios a su dispositivo móvil, se ha usado
FCM [11]. FCM proporciona una conexión rápida y fiable entre el servidor y los disposi-
tivos móviles de los usuarios. Con esta herramienta se ha conectado este servicio con el
servidor backend (desarrollada en Spring), el cuál es el encargado de mandar las notifi-
caciones en tiempo real a los distintos usuarios que hay conectados en Firebase.

5.6.     Google API - Google Maps

     Para la interacción del usuario con las localizaciones de la aplicación, se ha usa-
do Google Maps API [12]. Esta API permite tener comunicación de la aplicación con
los servicios de Google Maps. Los usuarios pueden visualizar el mapa, personalizando
e incorporando ubicaciones a la aplicación. Para ello se ha usado SDK de Maps para
28                                                             Capítulo 5. Tecnologías

Android. Posteriormente, las localizaciones se guardan en una base de datos diferente a
la Firebase.

5.7.     XAMPP y phpMyAdmin

     Xampp [13] es un software que integra en una sola aplicación un servidor web Apache
y un servidor de bases de datos MySQL. Haciendo la configuración del servidor backend
muy sencilla. La instalación es intuitiva y permite integrar la misma base de datos en
diferentes entornos.
    Xampp incluye phpMyAdmin que es un herramienta que ofrece una interfaz web
para el manejo de bases de datos, muy amigable para el desarrollador.

5.8.     MySQL

     MySQL [14] es un sistema de administración de base de datos relacional. Todos
los datos de notificaciones, usuarios y demás objetos han sido persistidos en este tipo
de base de datos. Se eligió este tipo de bases de datos, dado el conocimiento de ambas
desarrolladoras a lo largo de otros proyectos. El hecho de ser gratuita y familiar también
fueron detonantes para el uso de esta base de datos.

5.9.     Postman

     Postman [15] es una herramienta que permite crear peticiones al servidor backend
para poder probar las API’s, así como si los datos que se están manipulando son los
correctos. Postman ofrece además una extensión de Google Chrome fácil de usar y ligera,
sin necesidad de descargar el programa, y gratuito. Se decidió usar esta aplicación para
el testeo de la implementación API REST en la parte de negocio ya que permitía simular
el envío de las peticiones a través de peticiones HTTP.

5.10.      Git y Github

     Git [16] es una herramienta para el sistema de control de versiones y desarrollo
continuo entre los desarrolladores de un mismo proyecto. La flexibilidad que permite git
es idóneo para el desarrollo de la aplicación. Cada desarrollador puede trabajar de manera
independiente y una vez finalizada la parte de desarrollo integrarlo directamente en la
rama principal, y en caso de tener conflictos resolverlos manteniendo seguro el código
desarrollado.
     Github [17] es un servicio para importar y gestionar proyectos utilizando el sistema
de control de versiones de Git mencionado en el párrafo anterior. Desde Github se pueden
rastrear y gestionar todos los cambios que se realizan en el repositorio que contiene el
5.10. Git y Github                                                                29

código en tiempo real. La interfaz que ofrece Github hace más fácil la gestión de las
versiones, así como la creación de ramas, y fusiones entre varias ramas.

           Figura 5.1: Diagrama de Tecnologías implementadas en Covrad
Capítulo 6

Arquitectura y modelo de datos

     Este capítulo se centra en presentar el enfoque metodológico enseñando la arqui-
tectura y el modelo de datos llevados a cabo para el desarollo de Covrad tal y como se
muestra en el diagrama de la Figura [6.1].

                         Figura 6.1: Diagramas de componentes

6.1.     Arquitectura

     En la arquitectura se encuentran los servicios de frontend implementados en Android
Studio y de backend implementados en la API REST. El desarrollo de frontend se enfoca
en la experiencia del usuario con la aplicación, mientras que en el backend se proporciona
acceso a los datos, los servicios y otros sistemas actuales que permiten el funcionamiento
de la aplicación en su conjunto. Se ha utilizado un sistema de capas. El cliente puede

                                           30
6.2. Patrones de diseño                                                                   31

estar conectado mediante la interfaz al servidor, y éste se conectará al servidor para que
le proporcione los datos que se soliciten.

6.1.1.    API Rest

    Se trata de una arquitectura principalmente para desarrollo web que se usa en clien-
tes HTTP para poder recibir o enviar operaciones sobre datos en diferentes formatos.
Con esta arquitectura se puede dar una mayor escalabilidad a la aplicación, en caso de
querer interactuar con otros componentes a través del protocolo HTTP, que actualmente
son muchos como por ejemplo Twitter, Google o Amazon

    Esta arquitectura mostrada en la Figura [6.2] como se puede ver es intuitiva ya que
presenta un conjunto de operaciones simples para poder obtener los recursos necesarios.

     El uso de capas o servidores intermedios se usa para aumentar la escalabilidad y/o
para implementar políticas de seguridad de una forma accesible de forma que el usuario
solo tiene que solicitar información y recibir lo que solicita, sin entrar en detalle de cómo
se le proporciona esa información.

                  Figura 6.2: Esquema básico de arquitectura API Rest

6.2.     Patrones de diseño

     Los patrones que se han empleado ofrecen una solución general para el diseño de la
aplicación Covrad. A continuación se nombran los patrones principales aplicados.

6.2.1.    Modelo-Vista-Controlador

     Este patrón se ha utilizado en la API REST para separar y estructurar los datos
de la aplicación, la interfaz y la lógica en componentes diferentes. Esto ha permitido
en el desarollo del proyecto organizados los diferentes componentes, siguiendo un flujo
ordenado y fácil de programar.
También puede leer