Desktop Application for Device Cloud Explorer

Transcripción

Desktop Application for Device Cloud Explorer
TRABAJO FIN DE GRADO
Título
Desktop Application for Device Cloud Explorer
Autor/es
Jesús Nieto Cuartero
Director/es
Juan José Olarte Larrea
Facultad
Facultad de Ciencias, Estudios Agroalimentarios e Informática
Titulación
Grado en Ingeniería Informática
Departamento
Curso Académico
2013-2014
Desktop Application for Device Cloud Explorer, trabajo fin de grado
de Jesús Nieto Cuartero, dirigido por Juan José Olarte Larrea (publicado por la
Universidad de La Rioja), se difunde bajo una Licencia
Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.
Permisos que vayan más allá de lo cubierto por esta licencia pueden solicitarse a los
titulares del copyright.
©
©
El autor
Universidad de La Rioja, Servicio de Publicaciones, 2014
publicaciones.unirioja.es
E-mail: [email protected]
Facultad
Facultad de Ciencias, Estudios Agroalimentarios e Informática
Titulación
Grado en Ingeniería Informática
Título
Desktop Application for Device Cloud Explorer
Autor/es
Jesús Nieto Cuartero
Tutor/es
Juan José Olarte Larrea
Departamento
Curso académico
2013-2014
Resumen
Hoy en día, podemos utilizar múltiples dispositivos conectados para comunicarnos además de
equipos de mesa, portátiles, tabletas, etc. Digi Internation Spain, empresa en la cual se realiza
el proyecto, se encarga de ofrecer este tipo de soluciones M2M (Machine to Machine)
permitiendo la comunicación directa entre máquinas para optimizar múltiples áreas.
El proyecto consiste en la simulación de estas soluciones, creando una aplicación de escritorio
que permita simular dispositivos conectados a la nube y su comportamiento, de tal forma que
los clientes de Digi puedan comprender las características y beneficios de una solución M2M
sin la necesidad de llevar a cabo su instalación y despliegue, la cual es compleja y costosa.
Abstract
Nowadays, we can use multiple connected devices in order to communicate us each other
besides computers, laptops, tablets, etc. Digi International Spain, enterprise in which the
project is developed, puts in charge of this type of M2M (Machine to Machine) solutions,
allowing direct communication between machines in order to optimize multiple areas.
The project consists of a simulation of these solutions, developing a desktop application that
can simulate devices connected to the cloud and their behavior, so that Digi clients could
understand the features and advantages of an M2M solution without the need of installing
and
deploying
it,
which
is
a
complex
and
expensive
task.
1
Índice general
1. Introducción .. .............................................. ...................................................
1.1. Antecedentes ....................................................................................................
1.2. Objetivos ...........................................................................................................
1.3. Planificación ......................................................................................................
1.4. Seguimiento del proyecto .................................................................................
2. Desarrollo ..... .............................................. ...................................................
2.1. Análisis .. ...........................................................................................................
2.1.1.Identificación de usuarios participantes ...................................................
2.1.2.Catálogo de requisitos del sistema ...........................................................
2.1.3.Casos de uso ..............................................................................................
2.2. Diseño ... ...........................................................................................................
2.2.1.Diseño de la interfaz de usuario ................................................................
2.2.2.Diagrama de navegación ............................................................................
2.2.3.Arquitectura del sistema ...........................................................................
2.2.4.Almacenamiento de datos ........................................................................
2.2.5.Diseño de clases ........................................................................................
2.2.6.Diseño del plan de pruebas .......................................................................
2.3. Implementación ................................................................................................
2.3.1.Tecnologías usadas ....................................................................................
2.3.2.Librerías empleadas ..................................................................................
2.3.3.Desarrollo de la aplicación ........................................................................
2.4. Pruebas . ...........................................................................................................
3. Conclusiones .............................................. ...................................................
4. Bibliografía ... .............................................. ...................................................
3
3
5
5
8
12
12
12
12
17
25
25
30
30
31
32
34
35
35
36
36
44
47
49
2
Capítulo 1. Introducción
En esta memoria quedan recogidos los aspectos más relevantes del trabajo de fin de grado
realizado por Jesús Nieto Cuartero titulado “Desktop Application for Device Cloud Explorer”.
Este proyecto ha sido desarrollado en el ámbito de la empresa Digi International Spain S.A.U.
1.1. Antecedentes
En la actualidad el mundo está conectado, podemos acceder a internet y comunicarnos desde
multitud de lugares. Desde el tradicional ordenador hasta el teléfono móvil que llevamos
siempre encima, pasando por las tabletas u otros dispositivos. Hasta hace pocos años, el
paradigma de computación correspondía fundamentalmente al de persona-ordenador, es
decir, una persona sentada frente a un ordenador interactuando con él. Esto está
evolucionando, añadiendo conectividad a dispositivos que en principio no habían sido
diseñados para ello y permitiendo comunicación entre máquinas. De tal forma que hoy en día
disponemos de comunicación entre agentes no humanos, como podría ser un dispositivo
embebido con diferentes sensores que recogen información sobre su entorno y se comunican
con
un
servidor
para
enviar
estos
datos.
Digi International es una empresa norteamericana especializada en el desarrollo de soluciones
M2M (Machine to Machine) para el manejo más eficiente de diferentes negocios. Digi ofrece
soluciones específicas para mercados como el energético (energía alternativa, automatización
de la distribución, etc), el de activos móviles (como ferrocarriles), el médico o el mercado de
tanques, entre otros. Estas soluciones consisten en la comunicación de diferentes máquinas
utilizando dispositivos embebidos encargados de realizar la comunicación y servidores
encargados de organizar el envío, recepción y gestión de la información de las máquinas
utilizadas.
Actualmente, Digi ofrece varias soluciones para optimizar y mejorar el funcionamiento de
empresas de diferente tipo. El objetivo principal de estos sistemas es la monitorización y
manipulación del comportamiento de dispositivos conectados de diferente índole. Así, una
empresa podría controlar su red de tanques con una solución M2M, monitorizando las
características básicas de cada tanque como el nivel o el estado de las válvulas y permitiendo
modificar
otros
aspectos
como
la
temperatura.
Entre sus productos, Digi cuenta con una nube, denominada Etherios Device Cloud, que
permite conectar dispositivos para disponer de un control en tiempo real sobre los mismos.
Etherios Device Cloud fue desarrollado con el objetivo de llevar a cabo soluciones
denominadas “Internet of Anything”. De esta forma, Digi ofrece una herramienta para
desarrollar soluciones M2M, proporcionando conectividad entre dispositivos y
almacenamiento de datos.
El problema a resolver con este proyecto surge cuando un potencial cliente de Digi está
evaluando las posibilidades de instalar un sistema M2M para gestionar de manera más
eficiente su actividad. Este problema deriva de la complejidad de estos sistemas, ya que su
instalación y puesta a punto es costosa en tiempo y recursos, lo que hace que no sea factible
una prueba del mismo. Esto es lo que ha motivado este proyecto, cuyo objetivo principal será
el de ofrecer una simulación de un sistema M2M. De esta forma, nuestro proyecto permitirá la
creación de dispositivos simulados en una aplicación de escritorio. Estos dispositivos tendrán
un comportamiento similar al de un dispositivo real y estarán conectados a la nube para poder
monitorizar y manipular su comportamiento desde una aplicación web. Así, un futuro cliente
3
de Digi que esté sopesando la posibilidad de contratar una solución M2M podrá hacerse una
idea de las ventajas y posibilidades que ofrece el uso de sistemas embebidos combinados con
el Cloud para la mejora de su negocio.
Este proyecto fue propuesto por la empresa Digi International Spain durante los periodos de
Prácticas I y Prácticas II. Durante los meses de Noviembre y Diciembre se comenzó a definir el
proyecto, pensando los diferentes dispositivos que sería más recomendable simular,
realizando una especificación con los principales requisitos que debería cumplir el proyecto,
así como un principio de diseño, llevando a cabo unos prototipos de la interfaz gráfica tanto de
la aplicación de escritorio como de la aplicación web. También se comenzó con la
implementación de pruebas para comprender el funcionamiento de la nube y comenzar con la
simulación de dispositivos. Estos aspectos serán integrados en el proyecto.
Fundamentalmente, el sistema a desarrollar estará compuesto de una aplicación de escritorio
funcionando en un ordenador, el Device Cloud y un servidor de aplicaciones donde se
encontrará alojada una aplicación web. La aplicación de escritorio será la encargada de crear
los dispositivos y simular su comportamiento, a la vez que conectarlos con la nube y enviar
datos sobre su estado. Por otro lado, la aplicación web alojada permitirá acceder a los datos de
la nube sobre los dispositivos simulados. Esta aplicación será la encargada de monitorizar el
comportamiento de dichos dispositivos y de enviar peticiones a los mismos, permitiendo así
comunicación en ambas direcciones. En la Figura 1 se ilustra la arquitectura básica del sistema
a desarrollar.
Figura 1. Arquitectura del sistema
También se manejó la posibilidad de realizar todo el proyecto en una o varias aplicaciones
web. La decisión de realizar una aplicación de escritorio y una aplicación web viene de la idea
de poder simular al máximo el comportamiento de los sistemas M2M. Por ello, se decidió que
el hecho de tener un dispositivo real (ordenador) en el que simulamos los dispositivos y los
conectamos a la nube se acerca más a las soluciones M2M ofrecidas por Digi, ya que si se
desarrollara todo mediante aplicaciones web aumentaría la abstracción del sistema y se
difuminaría la separación entre dispositivos simulados y nube.
Debido a la magnitud del sistema que se pretende desarrollar, la empresa sugirió la división del
mismo entre dos de los alumnos que se encontraban de prácticas. De esta forma, Alejandro
Vaquero Blanco será el autor de la aplicación web encargada de la monitorización de los
4
dispositivos simulados mientras que el proyectante realizará la aplicación de escritorio, con la
simulación y conexión de dispositivos.
1.2. Objetivos
El principal objetivo del proyecto es crear un sistema que permita a los futuros clientes de Digi
comprobar el potencial de las soluciones M2M. De esta forma, el usuario podrá ver cómo será
el sistema sin la necesidad de comprar dispositivos reales o de instalar software en dichos
dispositivos.
Como objetivos generales, destacamos los siguientes:



El sistema estará compuesto por dos partes diferenciadas: aplicación de escritorio en
la que se producirá la simulación de dispositivos y aplicación web en la que se
monitorizarán los datos de los mismos.
El sistema debe proporcionar una comunicación bidireccional, de tal forma que desde
la aplicación web se puedan recoger datos enviados por los dispositivos simulados y,
del mismo modo, se puedan enviar peticiones a los mismos para modificar su
comportamiento.
Realización de test por parte de los alumnos para comprobar el correcto
funcionamiento del sistema.
Objetivos concretos de la aplicación de escritorio son:




Crear una aplicación que permita simular dispositivos reales y simular su
comportamiento. Estos dispositivos serán aquellos más comunes entre las soluciones
M2M que genera Digi. De esta forma, se abarcará un mayor rango de clientes a los que
les sea útil probar el sistema para evaluar las mejoras de una solución M2M.
El sistema ha de ser lo más realista posible y el usuario podrá interactuar con ella para
modificar parámetros de la simulación.
La aplicación deberá poder ejecutarse en diferentes sistemas operativos de
ordenadores.
Desarrollo de un manual para el correcto uso del sistema por parte de los clientes. El
manual estará accesible desde la página web y desde la aplicación de escritorio.
1.3. Planificación
Este proyecto se comenzó a desarrollar al inicio del segundo cuatrimestre es decir, el 3 de
febrero de 2014. A pesar de esto, como se ha comentado, no se partió de cero ya que se
comenzó con la especificación, diseño y algo de implementación durante el periodo de
prácticas del primer cuatrimestre.
Para llevar a cabo la planificación, se dividió el proyecto en las tareas necesarias para su
realización. Al hacer esto, se intentó no dividir en tareas muy grandes para poder realizar un
mejor seguimiento y control de las mismas y localizar y corregir más fácilmente posibles
desviaciones. Por ello, las tareas definidas tienen una duración media de 8 horas.
Se va a utilizar Scrum como marco de trabajo para la gestión y desarrollo del software. A pesar
de esto, no se seguirá Scrum de un modo exhaustivo, sino que se hará un uso más libre del
5
mismo para adaptarlo a las necesidades del proyecto. De esta forma, no se llevarán a cabo
reuniones diarias sino que se realizarán 3 reuniones semanales, además de las reuniones de
evaluación y control de cada sprint.
Los roles durante el desarrollo del proyecto serán los siguientes:



Product Owner (dueño del producto): Pedro Pérez, Manager Engineering en Digi
International Spain.
Scrum Master (director del proyecto): Rubén Moral, desarrollador en Digi International
Spain.
Development Team (equipo de desarrollo): Alejandro Vaquero y Jesús Nieto.
Se ha realizado el Product Backlog (Pila del Producto) con los requisitos y tareas a integrar en
el producto. Estas tareas, ordenadas según prioridad y especificando el número de horas
estimadas de trabajo para cada una, se muestran en la Figura 2.
ID Tarea
1
Análisis
Diseño
2
Sesión
3
Simulación del
tanque
4
Simulación del
camión
5
Copiar
6 dispositivos
Conectar7 desconectar
Programación
8 de eventos
Modo offline
9
Conexión
10
Peticiones
11
Logger
12
Gestión de
13 errores
Descripción
Llevar a cabo un análisis del proyecto a desarrollar
Diseño de la aplicación, incluyendo un diagrama con las
clases principales de la aplicación.
Crear, guardar y cargar una sesión con dispositivos
simulados.
Realización de las tareas necesarias para llevar a cabo la
simulación de un tanque conectado a la nube (simulación
automática y manual)
Realización de las tareas necesarias para llevar a cabo la
simulación de un camión conectado a la nube (simulación
automática y manual)
Tareas básicas de copiar, pegar, eliminar y cortar
dispositivos.
Permitir al usuario conectar y desconectar los dispositivos
ya creados.
Formulario que permita al usuario la programación de
determinados eventos para tanques y camiones.
Implementar el funcionamiento de un dispositivo cuando
está desconectado. El dispositivo deberá continuar la
simulación y almacenar los datos en un fichero para
enviarlos posteriormente cuando se restablezca la
conexión.
Gestionar aspectos de la conexión como timeouts o
cuentas del cloud llenas (la cuenta básica sólo permite 5
dispositivos)
Manejar peticiones procedentes de la WA como
desconexión de dispositivos, firmware updates,
abrir/cerrar válvulas, etc.
Creación de un log que almacene información sobre los
cambios producidos en la aplicación.
Manejar adecuadamente las excepciones que se puedan
generar durante el uso de la aplicación, mostrando
Tiempo
estimado
7
7
5
3
5
5
3
8
8
8
8
7
6
6
Vista detalle
14 tanque
Vista detalle
15 camión
Vista mosaico
16
Vista tabla
17
18
19
20
21
22
23
24
Configuración
de tanque
Configuración
de camión
Memory leak
Google Maps
Mejoras de
Google Maps
Mejoras en la
interfaz gráfica
Test
Documentar
código
Guía de usuario
25
mensajes al usuario cuando sea oportuno.
Creación de la interfaz gráfica para ver la vista de detalles
de un tanque.
Creación de la interfaz gráfica para ver la vista de detalles
de un camión.
Creación de los aspectos gráficos para ver la sesión actual
en vista de mosaico.
Creación de los aspectos gráficos para ver la sesión actual
en vista de tabla.
Formulario para la configuración de las características de
un tanque.
Formulario para la configuración de las características de
un tanque.
Solucionar el problema del uso excesivo que hace google
maps de la memoria.
Realización de mejoras como permitir al usuario cambiar
el punto de inicio o de final y definir paradas en la ruta.
Añadir mejoras a la interfaz como drag&drop, barra de
loading, redimensionar la ventana, etc.
Realizar las pruebas necesarias en la aplicación.
Documentación de los métodos y clases del código.
Crear una pequeña página de welcome con ayuda para un
usuario que entra por primera vez en la aplicación.
Total
10
10
10
6
3
3
10
15
8
25
15
20
215
Figura 2. Tareas a desarrollar y su estimación
Cabe destacar que hay aspectos que no se han introducido en la lista de tareas debido a que ya
se realizaron durante el periodo de prácticas del primer cuatrimestre. Estos son los siguientes:




Especificación: se realizó una descripción del alcance del proyecto, tanto de la
aplicación de escritorio como de la aplicación web.
Dispositivos simulados: creación de dispositivos simulados (tanques y camiones) que
se conectan a la nube y son vistos como dispositivos reales.
Eventos: diseño e implementación de las clases necesarias para la realización de
eventos en los dispositivos simulados (por ejemplo, abrir una válvula de un tanque).
Login: ventana para iniciar una sesión en la aplicación de escritorio. Se conecta con el
Cloud y comprueba las credenciales del usuario.
Como vemos en la tabla, se estiman un total de 215 horas, a las que hay que sumarle el tiempo
dedicado a la planificación (con una duración de 15 horas), redacción de la memoria (estimado
en 50 horas, que se llevarán a cabo a lo largo de todo el proyecto) y el tiempo dedicado a la
gestión del proyecto, entre lo que destacamos las reuniones tanto con miembros del equipo
como con el tutor (estimadas en 20 horas), lo que hacen un total de 300 horas de trabajo
planificadas.
Siguiendo la metodología Scrum, se realizarán Sprints de dos semanas de duración. Al principio
de cada Sprint, se llevará a cabo una reunión de planificación del mismo en el que se decidirán
7
qué tareas se realizarán y qué funcionalidad se incluirá al producto. Estas tareas, se escogerán
de la pila por orden de prioridad. Del mismo modo, al finalizar el Sprint se concertará otra
reunión para validar el incremento añadido al producto y para observar y corregir posibles
desviaciones con respecto a la planificación inicial del sprint.
Durante las dos primeras semanas del proyecto, se llevó a cabo la planificación del proyecto y
la redacción de los primeros apartados de esta memoria. De este modo, el primer sprint
comenzó el día 17 de febrero de 2014.
1.4. Seguimiento del proyecto
Para llevar a cabo el seguimiento y control del proyecto se va a utilizar la herramienta software
JIRA. Se trata de una aplicación basada en web para el seguimiento de errores, de incidentes y
para la gestión operativa de proyectos.
Como se ha comentado, hemos utilizado Scrum para el desarrollo del proyecto. A continuación
se especifican los sprints realizados, así como las tareas que se han incluido en cada uno de
ellos, el tiempo estimado, el tiempo real y la desviación con respecto a la planificación.
Sprint 1: 17/02/2014 – 24/02/2014)
ID Tarea Nombre Horas estimadas
1
Análisis
7
2
Diseño
7
Total 14
Horas reales
7
6
13
Sprint 2: 24/02/2014 – 10/03/2014)
ID Tarea Nombre tarea Horas estimadas
3
Sesión
5
4
Simulación
3
tanque
11
Peticiones
8
Total 16
Sprint 3: 10/03/2014 – 24/03/2014)
ID Tarea Nombre tarea Horas estimadas
6
Copiar
5
dispositivos
5
Simulación
5
camión
7
Connectar
3
desconectar
13
Gestión
6
errores
8
Programación 8
eventos
12
Logger
7
17
Vista tabla
6
Total 40
Desviación
0
-1
-1
Fecha inicio
17/02/2014
19/02/2014
Fecha fin
19/02/2014
20/02/2014
Horas reales
11
3
Desviación
+6
0
Fecha inicio
24/02/2014
27/02/2014
Fecha fin
27/02/2014
27/02/2014
6
20
-2
+4
03/03/2014
06/03/2014
Horas reales
7
Desviación
+2
Fecha inicio
10/03/2014
Fecha fin
12/03/2014
8
+3
13/03/2014
14/03/2014
1.5
-1.5
14/03/2014
14/03/2014
3
-3
17/03/2014
17/03/2014
6.5
-1.5
17/03/2014
19/03/2014
3.5
9
38.5
-3.5
+3
-1.5
19/03/2014
20/03/2014
20/03/2014
21/03/2014
8
Tras la revisión de este sprint, se decidieron incluir las siguientes tareas en la pila del producto:
ID
Tarea
Descripción
26
Eliminar dataStreams
27
Termostato
28
Archivo notificaciones
29
Otro servidor URL
30
Estado por defecto
31
Actualización de
firmware
Tras la eliminación de un dispositivo simulado de
la sesión, es necesario eliminar todos sus
dataStreams almacenados en la nube para evitar
la sobrecarga de información innecesaria.
Crear un elemento gráfico que permita mostrar y
modificar la temperatura de un dispositivo
simulado
Crear un archivo en el que se registren las
notificaciones de una sesión y actualizarlo en la
nube.
Permitir elegir el servidor al que se quiere
conectar una sesión (puede ser UK, USA u otro)
Cambiar el estado por defecto de un dispositivo
a “No conectado”. De esta forma, será necesario
conectarlo manualmente y establecer
determinados parámetros de configuración.
Implementar las actualizaciones de firmware
utilizando la funcionalidad específica del API de
Etherios Cloud.
Tiempo
estimado
2
Prioridad
3
Alta
4
Alta
1
Media
8
Media
5
Media
Alta
Hay que tener en cuenta que el hecho de que se añadan estas tareas a la pila del producto no
implica necesariamente que se vayan a realizar. Se trata de mejoras o nueva funcionalidad que
podría ser interesante y que su inclusión en el proyecto dependerá del tiempo del que se
disponga y de la prioridad de cada nueva tarea.
Sprint 4: 24/03/2014 – 07/04/2014)
ID Tarea Nombre tarea Horas estimadas
26
Eliminar
2
dataStreams
9
Modo Offline 8
27
Termostato
3
28
Archivo
4
notificaciones
16
Vista de
10
mosaico
10
Conexión
8
Total 35
Sprint 5: 07/04/2014 – 21/04/2014)
ID Tarea Nombre tarea Horas estimadas
14
Vista detalle
10
tanque
15
Vista detalle
10
Horas reales
4
Desviación
+2
Fecha inicio
24/03/2014
Fecha fin
24/03/2014
6
4,5
3,5
-2
+1,5
-0,5
26/03/2014
27/03/2014
31/03/2014
27/03/2014
27/03/2014
31/03/2014
8
-2
2/04/2014
3/04/2014
7
33
-1
-2
4/04/2014
4/04/2014
Horas reales
14
Desviación
+4
Fecha inicio
07/04/2014
Fecha fin
09/04/2014
8
-2
09/04/2014
10/04/2014
9
camión
Configuración
tanque
Configuración
camión
Actualización
de firmware
Estado por
defecto
Otro servidor
URL
Total
18
19
31
30
29
3
6
+3
10/04/2014
12/04/2014
3
0*
-3
-
-
5
5
+0
14/04/2014
15/04/2014
8
7
-1
15/04/2014
16/04/2014
1
1
+0
17/04/2014
17/04/2014
40
41
+1
*La tarea con ID 19, Configuración del camión, ha tenido una duración de 0 horas debido a que
se tomó la decisión de que la configuración del tanque y la del camión serían la misma. Por
ello, no ha sido necesaria la realización de esta tarea ya que se aprovechó lo realizado en la
tarea 18.
Tras este sprint, se añadieron las siguientes tareas a la pila:
ID
Tarea
Descripción
32
Barra de Progreso
33
Puntos de parada
Implementar una barra de progreso para
observar los diferentes procesos que pueden
ocurrir en paralelo en la aplicación.
Permitir al usuario añadir puntos de parada a la
ruta del camión
Sprint 5: 24/04/2014 – 08/05/2014)
ID Tarea Nombre tarea Horas estimadas
20
Memory leak 8
Google Maps
21
Mejoras de
15
Google Maps
32
Barra de
3
Progreso
33
Puntos de
4
parada*
NO
Corrección de
bugs
Total 30
Tiempo
estimado
3
Prioridad
4
Baja
Alta
Horas reales
10
Desviación
+2
Fecha inicio
24/04/2014
Fecha fin
25/04/2014
10
-5
28/04/2014
30/04/2014
7
+4
01/05/2014
05/05/2014
1
-3
06/05/2014
06/05/2014
10
38
+8
*Esta tarea no llegó a completarse debido a su complejidad. Se hizo un análisis sobre la misma
y se llegó a la conclusión de que su realización supondría un elevado número de horas, por lo
que se desechó.
10
Sprint 5: 12/05/2014 – 23/05/2014)
ID Tarea Nombre tarea Horas estimadas
22
Mejoras en la 8
interfaz
gráfica
24
Documentar
15
código
25
Guía de
20
usuario
23
Test
25
Total 68
Horas reales
10
Desviación
+2
Fecha inicio
12/05/2014
Fecha fin
13/05/2014
9
-6
13/05/2014
15/05/2014
10
-10
16/05/2014
20/05/2014
40
69
+15
+1
21/05/2014
04/06/2014
En la figura 3 se muestra un gráfico de Jira que representa el número de tareas planificadas
frente a las realizadas. Los puntos rojos son las tareas que se han ido creando y los verdes las
que se han resuelto. También están marcados como tareas los bugs que se han ido
encontrando durante el proyecto, por eso la línea roja también va creciendo a lo largo del
tiempo. Como vemos, al final la línea verde alcanza a la línea roja, lo que implica el final del
proyecto.
Figura 3. Seguimiento de las tareas durante el proyecto
11
Capítulo 2. Desarrollo
2.1. Análisis
En este apartado se muestran los aspectos más importantes del análisis realizado para el
desarrollo del proyecto. A partir de este punto de la memoria, todos lo que se comenta se
refiere a la aplicación de escritorio, que es la que se desarrolla como Trabajo de Fin de Grado.
2.1.1. Identificación de los usuarios participantes
Para esta aplicación se hará una distinción muy básica de usuarios, teniendo usuarios
logueados y usuarios no logueados.


Usuario no logueado: es todo usuario cuando accede a la aplicación. La funcionalidad
que puede ejecutar es muy limitada, ya que sólo puede consultar la documentación.
También tiene acceso a la funcionalidad de crear un dispositivo, pero cuando vaya a
realizar esto, será necesaria la creación de una sesión de trabajo nueva, lo que hará
que se le solicite que introduzca sus credenciales, pasando de esta forma a ser un
usuario logueado.
Usuario logueado: es el usuario que puede utilizar la aplicación en su totalidad. Ya ha
realizado el LogIn y, por lo tanto, puede modificar sesiones añadiendo y eliminando
dispositivos, modificándolos, etc.
Un usuario no logueado pasará a ser un usuario logueado en el momento en el que introduzca
correctamente sus credenciales de Etherios Cloud.
2.2.2. Catálogo de requisitos del sistema
i.
Definiciones:
Loguearse
Entendemos que un usuario se ha logueado desde la aplicación de escritorio cuando ha
introducido sus credenciales de usuario, contraseña y servidor al que desea conectarse. Estas
credenciales son las de Etherios Cloud de Digi. No será posible registrarse desde la aplicación,
sino que se proporciona un enlace a la web del Cloud de Digi para poder realizar el registro en
el servidor que se desee (UK o USA). La aplicación a desarrollar no accederá directamente a las
bases de datos de Digi, sino que intentará realizar una petición al Cloud con las credenciales
introducidas y, a partir de la respuesta, se comprobará si los datos del usuario son correctos.
Dispositivo simulado
Consistirá en una simulación en la aplicación de escritorio de uno de los dispositivos típicos a
los que Digi les aplica una solución M2M para la aumentar la eficiencia de la gestión y
funcionamiento de los mismos. Un dispositivo real se conectaría con la nube a través de un
dispositivo embebido y enviaría datos sobre su comportamiento. De esta forma, un dispositivo
simulado realizará las mismas operaciones pero desde un equipo de escritorio en el que se
12
ejecuta la aplicación. Desde el punto de vista de la nube, no habrá ninguna diferencia entre un
dispositivo real y uno simulado.
Simulación
Entendemos por simulación la imitación del comportamiento normal de un dispositivo real.
Por ejemplo, un tanque tendrá un nivel que cambiará según el estado de su válvula de entrada
y de salida. Esta simulación se ejecutará en la aplicación de escritorio y enviará los datos de la
misma a la nube.
Se distinguirán dos tipos de simulación en la aplicación de escritorio:
1. Simulación automática: será la simulación inicial, el comportamiento por defecto de un
dispositivo. Esta simulación será de la siguiente forma:
 Tanque: su temperatura oscilará aleatoriamente entre dos valores
predefinidos.
 Camión:
i. Ruta: el sistema generará una ruta aleatoria y el camión viajará por
ella.
ii. Puerta: la puerta permanecerá cerrada.
iii. Temperatura: oscilará aleatoriamente entre dos valores predefinidos.
iv. Velocidad: oscilará aleatoriamente entre dos valores predefinidos.
En este tipo de simulación también se podrán programar eventos como se menciona
en el siguiente punto.
2. Manual: el usuario podrá interactuar con los dispositivos simulados para cambiar su
comportamiento.
Evento
Un evento será la programación de la ejecución de un cambio en el estado de un dispositivo
simulado. Habrá diferentes tipos de eventos dependiendo de la característica del dispositivo
que se quiera modificar. Un ejemplo de evento será la apertura de una válvula de un tanque
en un determinado momento.
Sesión
Una sesión consiste en un marco de trabajo de un usuario logueado. Así, una sesión
corresponderá a un único usuario y tendrá una serie de dispositivos simulados. Un usuario
podrá tener varias sesiones de trabajo, aunque en la aplicación sólo se permitirá una sesión
cargada en cada momento.
Notificación
Se entiende por notificación la información mostrada a un usuario a raíz de un determinado
suceso ocurrido en la simulación. Por ejemplo, una notificación correspondería con el informe
de que se ha añadido o eliminado un dispositivo a la sesión de trabajo.
13
ii.
Requisitos funcionales:
En la aplicación de escritorio se especifican los siguientes requisitos funcionales
A. Dispositivos.
 Se crearán dispositivos simulados que podrán conectarse a la nube para enviar datos
sobre su estado.
 Los dispositivos tendrán un comportamiento determinado mediante una simulación.
Existirá una simulación por defecto para cada dispositivo.
 Un dispositivo simulado podrá encontrarse como conectado o como desconectado a la
nube. Siempre que un dispositivo esté conectado enviará información a la nube sobre
su estado. Cuando un dispositivo no esté conectado, su simulación continuará de
forma normal pero estos datos no se enviarán a la nube, sino que se almacenarán y
serán enviados una vez se reestablezca la conexión. Es necesario que la nube sepa la
fecha y hora en la que se han generado esos datos, independientemente del momento
en el que se envíen a la nube.
 Cada dispositivo podrá ser configurado para modificar parámetros de la conexión. Los
parámetros que se permitirá modificar son los siguientes:
o Permitir conexión segura
o Permitir compresión de los datos
o Permitir reconexión cuando se desconecta un dispositivo remotamente
 Los dispositivos simulados serán vistos como dispositivos reales desde el Cloud.
 Se permitirá crear dos tipos de dispositivos: tanques y camiones.
 Un tanque constará de nivel, radio, altura, estado de las válvulas, temperatura,
localización, versión de firmware, sistema de ficheros (log y fichero de configuración)
 Un camión constará de velocidad, estado de la puerta, ruta, temperatura, versión de
firmware y un sistema de ficheros equivalente al del tanque.
 La versión de firmware se representará con una cadena de texto formada por 4
números enteros entre 0 y 127 separados por puntos.
 La ruta de un camión tendrá un inicio y un final, que podrán ser modificadas por el
usuario. Además, se mostrará un mapa en la aplicación que permita ver la posición del
camión en todo momento.
B. Eventos y simulación
 Podrán programarse eventos que permitan modificar el estado de los dispositivos en
un determinado momento. También se podrán especificar los valores de las
características que se desean alcanzar. Dos ejemplos de eventos serían vaciar o llenar
el tanque hasta un nivel determinado y alcanzar una temperatura concreta en un
momento predefinido.
 El usuario también podrá modificar la simulación de un dispositivo manualmente. De
esta forma, cada dispositivo simulado tendrá una representación gráfica que permita
al usuario interactuar con ella y modificar determinadas características de dichos
dispositivos. Por ejemplo, el usuario podrá pulsar en una válvula de un tanque para
cambiar su estado.
14
C. Peticiones
 La aplicación de escritorio permitirá la recepción de peticiones desde la aplicación
web. Estas peticiones serán las siguientes:
o Desconexión: petición que permite desconectar un determinado dispositivo
simulado. Los dispositivos podrán ser configurados para que se reconecten
automáticamente en un tiempo determinado o si no, una vez desconectado,
sólo se puede volver a conectar desde la aplicación de escritorio.
o Firmware: esta petición permitirá la actualización del firmware de uno o varios
dispositivos. El firmware será representado por un número de versión en el
dispositivo y esta petición actualizará dicho número.
o Sistema de ficheros: la aplicación web podrá enviar una petición para ver el
sistema de ficheros de un dispositivo. Este sistema de ficheros consistirá
únicamente en un fichero de log y otro de configuración.
o Operaciones de tanque: se podrán enviar peticiones para abrir/cerrar las
válvulas o cambiar la temperatura de un tanque.
o Operaciones de camión: se podrán enviar peticiones para cambiar la
temperatura de un camión.
D. Sesiones
 Se permitirán guardar las sesiones de tal forma que se pueda seguir trabajando con
ellas en un futuro.
 La aplicación permitirá añadir tantos dispositivos simulados a una sesión como se
desee. Esto se verá limitado por el tipo de cuenta de Etherios Cloud, ya que las cuentas
gratuitas permiten hasta un máximo de 5 dispositivos, mientras que una cuenta
Premium te ofrece un número ilimitado de ellos.
 Dentro de una sesión se permitirá copiar, cortar y pegar dispositivos.
E. Documentación
 La aplicación dispondrá de una documentación que servirá de ayuda al usuario para
conocer el funcionamiento básico de la misma. Esta documentación estará accesible al
usuario desde la aplicación web y también tendrá un breve manual de bienvenida en la
aplicación de escritorio.
iii.
Requisitos no funcionales
A. Requisitos de usuarios:
Para poder acceder a la totalidad de la funcionalidad de la aplicación, será necesario el registro
en Etherios Device Cloud, la nube de Digi.
B. Requisitos tecnológicos:
 La aplicación está dirigida a equipos de sobremesa o portátiles.
 La aplicación debe funcionar en los sistemas operativos más extendidos de equipos
(Windows, Mac, Linux).
15



Es necesario disponer de conexión a internet para el correcto funcionamiento de la
aplicación.
La aplicación ha de adaptarse a diferentes tamaños y configuraciones de pantallas.
El rendimiento de la aplicación dependerá de la capacidad computacional del equipo
en el que se ejecute y de la velocidad de la conexión a internet del mismo.
C. Requisitos de interfaces externas:
 La interfaz de usuario ha de mantener la estética corporativa de la empresa Digi
International.
 La interfaz y todos sus elementos han de ser equivalentes a los utilizados en la
aplicación web. De esta forma, dará más sensación de unidad del sistema.
D. Requisitos de desarrollo:
 El marco de trabajo para el desarrollo del proyecto ha de ser Scrum, cuya principal
característica es que se realiza de forma iterativa e incremental.
 Se utilizará el software JIRA para la gestión del proyecto.
16
2.2.3. Casos de uso
En esta sección se incluyen los casos de uso más relevantes del sistema así como algunos
diagramas de actividad. El resto de los casos de uso se encuentran en el Anexo 1: Casos de uso.
El diagrama de casos de uso de la aplicación es el siguiente:
Figura 4. Diagrama de casos de uso.
17
Caso de uso
Guardar sesión
Descripción
El sistema guardará la sesión activa del usuario.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
Secuencia
Paso
Acción
Normal
1
El usuario pulsa el botón de guardar sesión
2
El sistema comprueba que la sesión ha sido
modificada desde la última vez que se guardó.
3
El sistema guarda los datos de la sesión.
Postcondición
La sesión del usuario ha sido guardada.
Flujos alternativos y
excepciones
Si la sesión del usuario no ha sido modificada desde la última
vez que se guardó, el sistema no hace nada.
Caso de uso
Cerrar sesión
Descripción
El sistema cerrará la sesión activa del usuario.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
Secuencia
Paso
Acción
Normal
1
El usuario pulsa el botón de cerrar sesión en el menú
o cierra la pestaña de la sesión.
2
El sistema comprueba si la sesión no ha sido
modificada desde la última vez que se guardó.
3
El sistema cierra la sesión.
Postcondición
La sesión del usuario ha sido cerrada.
Flujos alternativos y
excepciones
Si la sesión del usuario ha sido modificada desde la última vez
que se guardó, el sistema pregunta al usuario si desea guardar.
En caso afirmativo se procede al caso de uso Guardar sesión.
18
Figura 5. Diagrama de actividad del caso de uso Cerrar sesión.
19
Caso de uso
Crear dispositivo
Descripción
El sistema creará un nuevo dispositivo, comenzará su
simulación y lo añadirá a la sesión activa.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
Secuencia
Paso
Acción
Normal
1
El usuario arrastra un dispositivo desde la barra de
herramientas hasta un hueco libre en la vista de
mosaico de la sesión.
2
El sistema comprueba si el usuario tiene una sesión
activa.
3
El sistema mostrará al usuario un formulario en el
que deberá introducir los valores de cada uno de los
parámetros del dispositivo.
4
El usuario elige el tipo de dispositivo
5
El sistema crea el dispositivo, lo conecta a la nube y
comienza su simulación.
6
El sistema añade el dispositivo a la sesión del usuario.
7
El sistema marca la sesión como modificada.
Postcondición
La sesión del usuario ha sido cerrada.
Flujos alternativos y
excepciones
En el punto 1, el usuario puede hacer clic sobre uno de los
dispositivos en la barra de herramientas y arrastrar hasta la
vista principal para añadir el dispositivo.
Si el usuario no tiene una sesión activa, se mostrará un
mensaje preguntando si desea crear una nueva sesión. En caso
afirmativo, se pasa al caso de uso Crear Sesión.
20
Figura 6. Diagrama de actividad del caso de uso Crear Dispositivo.
21
Caso de uso
Cargar sesión
Descripción
El sistema cargará la sesión del usuario previamente guardada
para trabajar con ella.
Actor
Usuario
Precondición
El usuario ha guardado previamente una sesión.
Secuencia
Paso
Acción
Normal
1
El usuario pulsa el botón de cargar sesión.
2
El sistema muestra al usuario las sesiones guardadas.
3
El usuario elige la sesión que desea cargar.
4
El sistema comprueba si el usuario está logueado.
5
Si el usuario logueado es el mismo que el usuario de
la sesión que desea cargar, ésta se carga.
6
El sistema conecta todos los dispositivos de esa
sesión a la nube y continúa con su simulación.
Postcondición
La sesión del usuario ha sido cargada para poder trabajar con
ella.
Flujos alternativos y
excepciones
Si el usuario no está logueado, se pasa al caso de uso LogIn.
Si el usuario logueado es distinto al de la sesión que se desea
cargar, se muestra un mensaje advirtiéndolo y se pregunta al
usuario si desea loguearse con la otra cuenta. En caso
afirmativo, se pasa el caso de uso LogIn.
22
Figura 7. Diagrama de actividad del caso de uso Cargar Sesión.
23
Caso de uso
Programar evento
Descripción
El sistema programa un evento determinado para uno o varios
dispositivos.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario ha seleccionado uno o varios dispositivos.
Secuencia
Paso
Acción
Normal
1
El usuario selecciona uno o varios dispositivos y pulsa
el botón programar evento.
2
El sistema muestra un formulario con los datos del
evento.
3
El usuario introduce el tipo de evento y la fecha.
4
El evento queda programado.
Postcondición
El evento queda programado y se ejecutará en la fecha
determinada.
Flujos alternativos y
excepciones
Si llegado el momento de ejecución del evento, la aplicación
no está funcionando, el evento no se llevará a cabo.
Comentarios
Hay eventos que son específicos de un determinado tipo de
dispositivo. Por ejemplo, un camión no puede tener un evento
de apertura/cierre de válvulas. Por ello, si se seleccionan
dispositivos de diferente tipo sólo estarán disponibles los
eventos comunes a ellos.
24
2.2. Diseño
En este bloque se desarrollan los aspectos más importantes relacionados con el diseño de la
aplicación de escritorio, tanto la interfaz gráfica como la arquitectura del sistema y el
almacenamiento de datos.
2.2.1. Diseño de la interfaz de usuario
En este apartado se muestran los prototipos más importantes y su funcionamiento. Para llevar
a cabo el diseño de la interfaz de usuario, se optó por realizar prototipos de baja fidelidad en
las pizarras de la empresa. Esta es una de las técnicas más usadas en Digi y se decidió que esta
era la mejor manera de llevarlos a cabo ya que es un método sencillo, rápido y económico.
La pantalla inicial de la aplicación será la siguiente:
Figura 8. Prototipo de pantalla principal
Como vemos, la ventana principal consta de un menú, una barra de herramientas y un panel
con diferentes pestañas. Cuando se abre la aplicación por primera vez, se observan dos
pestañas abiertas. En la primera pestaña se podrá consultar una documentación HTML sobre la
aplicación, mientras que en la segunda se mostrará una primera sesión vacía (y todavía sin
usuario asignado).
Si cambiamos a la pestaña en la que se encuentra la primera sesión creada, podremos
comenzar a trabajar añadiendo dispositivos. Podemos añadir un dispositivo arrastrándolo
25
desde la barra de herramientas hasta la vista de sesión. En ese momento, el sistema mostrará
al usuario un formulario para que introduzca los valores deseados para cada uno de los
parámetros de la simulación. Por ejemplo, para la creación de un camión introducirá nombre,
versión de firmware
Cuando intentemos añadir un dispositivo por primera vez, el sistema intentará asignar la
sesión de trabajo a un usuario, por lo que será necesario que nos logueemos. Para ello,
aparecerá una ventana en la que el usuario podrá introducir su nombre, contraseña y servidor,
así como el nombre de la sesión que desea crear. Una vez hecho esto, el dispositivo será
añadido a la sesión y podremos seguir trabajando.
De esta forma, la interfaz principal de la vista de sesión quedará de la siguiente forma:
Figura 9. Prototipo de vista de sesión en forma de mosaico
Como vemos, se muestran los dispositivos en forma de mosaico, pudiendo visualizar los
aspectos fundamentales de los mismos como el nombre o el tipo de dispositivo. También
dispondremos de espacios para añadir dispositivos nuevos. Cuando haya más dispositivos
creados de los que se puedan mostrar por pantalla, aparecerá una barra de scroll para poder
visualizarlos todos.
El usuario también tendrá la opción de cambiar la vista. Para ello, debe acceder a View desde
el menú superior. Se puede visualizar el contenido de la sesión en forma de mosaico, como se
ha visto en la figura 9, o en forma de tabla como se muestra a continuación.
26
Figura 10. Prototipo de vista de sesión en forma de tabla
Desde ambas vistas, el usuario podrá seleccionar uno o varios dispositivos haciendo clic sobre
ellos. De esta forma, podrá realizar las siguientes operaciones sobre ellos:






Copiar, cortar y pegar dispositivos.
Eliminar dispositivos.
Ver los detalles de los dispositivos.
Programar eventos.
Configurar dispositivos.
Conectar/desconectar dispositivos.
En lo referente a la barra de menú, el usuario dispondrá de las siguientes opciones:


File: para realizar tareas relacionadas con la sesión.
o New Session: crea una nueva sesión de trabajo.
o Load Session: carga una sesión de trabajo previamente guardada.
o Save Session: guarda la sesión de trabajo actual para poder cargarla de nuevo
más tarde.
o Remove Session: cierra la sesión de trabajo actual y la elimina, eliminando así
todos sus dispositivos asociados.
o Close Session: cierra la sesión.
Devices: para llevar a cabo la funcionalidad relacionada con los dispositivos.
27
o


Remove: elimina un dispositivo de la simulación. Después de pulsar este
botón, la aplicación mostrará un mensaje de alerta para preguntar al usuario si
realmente desea eliminar el dispositivo. Si el usuario no ha seleccionado
ningún dispositivo, este botón no tendrá efecto.
o Configure: permitirá mostrar y modificar los parámetros de configuración del
dispositivo.
o Add Event: al pulsar este botón, se abrirá una ventana con un formulario que
permitirá la programación de eventos para los dispositivos que se hayan
seleccionado.
o Copy/Cut/Paste: permite copiar, cortar o pegar dispositivos. Esta funcionalidad
también se podrá realizar pulsando el botón derecho sobre un dispositivo en la
vista de sesión.
o View details: muestra los detalles de un dispositivo en una nueva pestaña. En
esta vista, el usuario podrá ver una representación gráfica del dispositivo, con
la que podrá interactuar. Del mismo modo, también verá sus detalles como
nombre, Device ID (ID que le asigna la Cloud), si está conectado y otros
aspectos específicos de cada tipo de dispositivo (nivel, válvulas, temperatura,
velocidad, etc). También se podrá acceder a la vista de detalles haciendo doble
clic sobre un dispositivo.
o Connect/Disconnect: conecta o desconecta el dispositivo a la nube.
View: desde aquí el usuario podrá elegir entre la vista de mosaico (vista por defecto) y
la vista de tabla.
Help: este menú tiene dos funciones:
o Welcome page: muestra la página de bienvenida en caso de que no se
estuviera mostrando ya.
o About: da información básica sobre la aplicación como la versión.
La vista de detalles de un tanque y de un camión se muestra en las figuras 11 y 12
respectivamente.
28
Figura 11. Vista de detalle de un tanque
Figura 12. Vista de detalle de un camión.
29
2.2.2. Diagrama de navegación
Tal y como se ha planteado la aplicación, se mostrará una ventana principal al usuario en la
que habrá un panel de pestañas. En este panel se creará una pestaña para la documentación,
otra para la vista de sesión y otra para cada dispositivo que se quiera inspeccionar.
A parte de estas pestañas, se mostrarán ventanas para el LogIn, la programación de eventos y
la configuración de dispositivos.
De este modo, el diagrama de navegación queda del siguiente modo:
Figura 13. Diagrama de navegación
2.2.3. Arquitectura del sistema
Como se ha comentado en la introducción de esta memoria, el sistema completo tendrá una
arquitectura formada por un equipo con la aplicación de escritorio, la nube, un servidor con la
aplicación web y otro equipo en el que se visualiza dicha aplicación.
Por otro lado, en lo que se refiere a la aplicación de escritorio, disponemos de una arquitectura
típica de tres capas:


Capa de presentación: encargada de mostrar los datos al usuario.
Capa de lógica de negocio: llevará a cabo los procesos de la aplicación. En esta capa se
encontrará fundamentalmente la simulación del comportamiento de los dispositivos
simulados.
30

Capa de persistencia: se encarga del almacenamiento y acceso de los datos.
Principalmente se ocupará de la comunicación con la nube y del almacenamiento de
datos en el equipo.
2.2.4. Almacenamiento de datos
Como hemos comentado en el punto anterior, nos encontraremos con dos ubicaciones
distintas para el almacenamiento de los datos:
Equipo
En el equipo en el que esté funcionando la aplicación de escritorio será necesario almacenar
cierta información de la sesión. Se guardará el estado de la sesión, es decir, los dispositivos que
hay simulados, así como su configuración, programación de eventos y su estado en un
determinado momento. También será necesario almacenar el usuario al que pertenece la
sesión (por razones de seguridad no se almacenará la contraseña).
Esta información es necesaria almacenarla en el equipo para poder permitir al usuario la
simulación y el trabajo en modo offline, es decir, sin conexión a internet.
Debido a la poca cantidad de datos que hay que almacenar y a su estructura sencilla, se ha
optado por no utilizar una base de datos sino guardar esta información en el equipo utilizando
una estructura de directorios. Esta decisión está justificada por la sencillez del método y
porque permitirá al usuario navegar por dicha estructura de carpetas y visualizar los
dispositivos con sus correspondientes archivos de configuración, que serán los mismos que los
utilizados en aplicaciones reales.
Etherios Cloud
El otro punto de almacenamiento de datos es la nube de Digi, a la que se conectarán los
dispositivos simulados y enviarán datos sobre su simulación. Para ello, Etherios Cloud ofrece
varias formas de almacenamiento, de las cuales usaremos dos fundamentalmente. La primera
consiste en un sistema de ficheros, donde se almacenará información sobre las notificaciones
de una sesión y sobre los dispositivos que hay en cada sesión, teniendo de esta forma dos
archivos llamados NombreSesionNotifications.txt y NombreSession.txt. La segunda forma que
utilizaremos para subir datos a la nube será mediante DataStreams. Los DataStream son flujos
de datos asociados a cada dispositivo que permiten almacenar datos a lo largo del tiempo. Los
DataStream suponen una forma de almacenamiento más sólida, ya que se puede definir su
tipo (entero, String, booleano, etc), añadir una descripción, determinar tiempo de validez,
visualizar gráficos sobre sus valores a lo largo del tiempo, etc. Esta será la forma de almacenar
los datos sobre la simulación de cada dispositivo (nivel, temperatura, velocidad, etc).
31
2.2.6. Diseño de clases
Como hemos dicho, la aplicación estará dividida en tres capas. Debido a la naturaleza del
problema a resolver, no se ha hecho distinción entre modelo de la aplicación y lógica de
negocio. Esto es debido a que las clases del modelo y las de la lógica de negocio están
estrechamente unidas y la línea que las separa se difumina en muchas ocasiones. Así, las clases
correspondientes con los dispositivos simulados y las correspondientes a su simulación o
comportamiento están unidas en la lógica de negocio.
Figura 14. Diagrama de paquetes
En la capa de presentación se incluirán las clases que se encargan de mostrar la información al
usuario. Por simplicidad, en los diagramas de clases siguientes no se han incluido los accesores
(tanto getters como setters) ni todos los constructores de las clases.
Figura 15. Clases de la capa de presentación
32
En la capa de presentación, cabe destacar lo siguiente:




Las clases TankDetail y TruckDetail formarán las ventanas de detalle del tanque y
camión respectivamente.
MainWindow será la ventana principal de la aplicación.
TankControl consistirá en un elemento gráfico encargado de mostrar el estado de un
tanque en todo momento y permitir al usuario interactuar con él (tal y como se ve en
la Figura 11. Vista de detalle de un tanque).
TruckMap será el encargado de mostrar la ruta y el punto en el que se encuentra un
camión en todo momento, actualizándose según se mueva el camión.
Por otro lado se encuentran las clases de la lógica de negocio. En este paquete se engloban
todas las clases relacionadas con los dispositivos simulados, su comportamiento, eventos,
sesión y funcionalidades como el LogIn.
Figura 15. Clases de la capa de lógica de negocio
Por último, en la capa de persistencia encontramos tres clases: CloudConnector, SessionSaver,
DeviceFileConfiguration y RoutePoints. La clase CloudConnector se encarga de llevar a cabo la
comunicación con el Cloud. Esta clase ya estaba desarrollada por Digi y se ha incluido en el
proyecto para utilizar su funcionalidad. Por otro lado, tenemos la clase SessionSaver que se
encarga de almacenar en el equipo todos los datos relacionados con la sesión (usuario,
dispositivos y su estado, etc) para su posterior uso. La clase DeviceFileConfiguration se encarga
33
de guardar información de configuración sobre los dispositivos simulados (nombre y tipo, ya
que el resto de información se almacena en el archivo connector_config.txt que ha de usarse
con la clase CloudConnector). Por último, la clase RoutePoints se encarga de seleccionar
puntos para crear la ruta de un camión, escogiendo un punto de inicio y otro de final de un
fichero con diferentes ciudades.
Figura 16. Clases de la capa de persistencia
2.2.7. Diseño del plan de pruebas
En este apartado se especifica el método a seguir para llevar a cabo las pruebas necesarias en
la fase de test, la última del proyecto. Es importante destacar que durante la implementación
también se irán haciendo pruebas aunque la gran parte de las mismas se realizarán al final,
decidiendo así la aceptación de la parte del producto que se esté probando o, en caso de error,
revisando el código y corrigiendo los posibles fallos.
Se van a realizar tres tipos de pruebas:



Pruebas unitarias: estas pruebas se llevarán a cabo para probar el correcto
funcionamiento de un determinado módulo de código.
Pruebas de integración: son las pruebas que se realizan una vez se han aprobado las
pruebas unitarias. Se refieren a la prueba de todos los elementos unitarios que
componen un proceso, hecha en conjunto.
Pruebas de aceptación: son las pruebas finales que se utilizan para determinar que el
producto desarrollado cumple con las especificaciones iniciales y logra su cometido.
34
Todas las pruebas que se lleven a cabo han de ser documentadas en una tabla de la siguiente
forma:
Test ID
Grupo
Nombre del test
Descripción
Resultado
Comentarios
Figura 17. Tabla utilizada para los casos de test
2.3. Implementación
En este apartado se recogen los aspectos más destacables de la implementación del
proyecto, incluyendo las tecnologías y librerías externas utilizadas, así como
información sobre el desarrollo de la aplicación, los problemas encontrados y su
manera de resolverlos.
2.3.1. Tecnologías usadas
Uno de los aspectos fundamentales del proyecto era que debía poder ejecutarse en diferentes
sistemas operativos. Por ello, se estudiaron diferentes posibilidades sobre tecnologías a utilizar
y se evaluó el uso de plataformas que permitían el desarrollo de aplicaciones de escritorio con
tecnologías web como HTML5, CSS3 y Javascript, lo cual permitía la elaboración de unas
interfaces de usuario más profesionales y personalizables. Finalmente se optó por utilizar Java,
ya que los frameworks analizados no permitían la incorporación de Java en los mismos,
lenguaje en el que están escritas las principales librerías a utilizar.
Dentro de Java, se decidió utilizar JavaFX, que es una familia de productos y tecnologías de
Oracle que permiten la creación de interfaces de usuario más ricas, interactivas y
personalizables que otras tecnologías de Java como Swing o SWT. La forma de trabajar con
JavaFX consiste la implementación del patrón Modelo-Vista-Controlador. De este modo,
tenemos principalmente dos documentos: un FXML que contiene la información de la interfaz
gráfica de usuario y una clase Java que hace de controlador y permite modificar
dinámicamente dicha interfaz. Para editar estos documentos FXML se ha utilizado el programa
SceneBuilder, que es un diseñador que nos permite modificar las interfaces de una forma más
gráfica e intuitiva. Otra tecnología utilizada ha sido CSS, ya que JavaFX también permite la
personalización de sus interfaces de usuario utilizando este lenguaje.
Por último también se utilizó, aunque en menor medida, Javascript. Su utilización se justifica
por el uso de un mapa de Google Maps para poder mostrar la ruta del camión y ver cómo la va
recorriendo, conociendo así su posición exacta en cada momento.
35
2.3.2. Librerías empleadas
A la hora de la implementación se han utilizado diferentes librerías para facilitar el proceso. Las
principales han sido las siguientes:
1. Cloud Connector for Java: se trata de la librería más importante utilizada en el
proyecto. Esta librería ha sido desarrollada por Digi y nos proporciona funcionalidad
para conectar dispositivos a Etherios Device Cloud, así como para enviar datos (tanto
ficheros como DataStreams) y para recibir peticiones desde la misma.
2. JavaFX-DatePicker: librería de JavaFX que permite mostrar un calendario y elegir una
fecha del mismo. Se utilizó esta librería para que el usuario pueda seleccionar la fecha
en la que se programa un evento.
3. JavaFX-MessageBox: librería de JavaFX para mostrar mensajes al usuario de una forma
sencilla.
2.3.4. Desarrollo de la aplicación
En este apartado se profundiza en la implementación de la aplicación, centrándonos en los
aspectos más destacables de la misma y los problemas surgidos más interesantes así como la
forma en la que se resolvieron.
Tareas en segundo plano e hilos
La aplicación desarrollada es una simulación de dispositivos y su comportamiento, lo que
implica que la aplicación debe realizar diferentes tareas en segundo plano sin que el usuario
deba interactuar con la misma. Por ejemplo, a la hora de crear un camión, éste debe comenzar
la simulación de la ruta que debe recorrer, así como de la temperatura del mismo.
Para cada elemento de la simulación, hay un hilo corriendo en segundo plano que se encarga
de generar los nuevos valores de cada parámetro y enviar estos valores a la nube en caso de
que sea necesario. A continuación, se van a dar más detalles sobre cada uno de los hilos que
están funcionando cuando hay una sesión con varios dispositivos abiertos.
Hilos de un camión
La simulación de un camión está compuesta por diferentes elementos pero el más importante
es la posición en la que se encuentra y cómo se va moviendo durante la ruta. Esta simulación
se lleva a cabo mediante una vista web en la que se carga un mapa de Google Maps con una
determinada ruta y se ejecuta un código Javascript que hace que el camión se vaya moviendo
a lo largo de la misma. El principal problema en este apartado de la simulación vino debido a la
forma de comunicar el código Java de nuestra aplicación con el Javascript que se está
ejecutando en el Web View. Esto era necesario para saber en un momento determinado la
posición en la que se encuentra el camión, para modificar la ruta dinámicamente o para
modificar la velocidad con la que se mueve dicho camión. Para realizar esto, se ha utilizado
una clase denominada JSObject que nos permite cargar código Javascript y acceder a variables
guardadas en el document. De esta forma, toda la simulación del movimiento del camión se
36
lleva a cabo desde código Javascript mientras que Java se encarga de tener un timer que cada
20 segundos obtiene el valor de la localización del camión y lo envía a la nube así como de
capturar los eventos de cambio de velocidad y llamar a un método Javascript que modifica
dicho parámetro en la simulación.
Esta simulación con Google Maps ha supuesto el problema más importante encontrado en la
aplicación. Este problema consiste en un Memory Leak relacionado con el API Javascript que
ofrece Google para sus mapas. Esto hace que la memoria consumida por la aplicación crezca
de una forma irregular e inexorable. Esto es debido a que Google Maps no ofrece ningún
método para liberar memoria (incluso hay un bug abierto en Google relacionado con este
tema), por lo que cuando un camión se mueve a lo largo de una ruta necesita cargar nuevo
mapa y esto hace que la memoria crezca sin parar. Como vemos en el apartado de
seguimiento y control, se ha invertido un total de 10 horas en intentar resolver el problema y
no se ha conseguido. La consecuencia de este problema es que la aplicación no se podrá tener
abierta durante muchas horas (se estiman unas 12 como máximo) con la simulación de un
camión ya que el uso de memoria es excesivo y Java cierra la aplicación.
Otro aspecto importante en la simulación del camión es la temperatura. Para ello, hay un
timer que obtiene un valor aleatorio entre en el rango de (temperatura -3, temperatura +3) y
lo envía a la nube. Esta simulación puede ser interrumpida cuando se recibe una petición de
cambio de temperatura desde la aplicación web. En este caso, se cancelará este hilo y se
arrancará otro que aumentará o disminuirá la temperatura poco a poco hasta llegar al valor
deseado. Una vez alcanzado dicho valor, el hilo que realiza la simulación inicial volverá a ser
arrancado y continuará calculando valores aleatorios.
Hilos de un tanque
La simulación de un tanque es más sencilla ya que se trata de un elemento más estático. Un
tanque sólo dispone de un hilo funcionando en segundo plano que se encarga de llevar a cabo
la simulación de la temperatura, del mismo modo que ocurre con un camión.
Por otro lado, cuando se va a cambiar el nivel del tanque debido a que el usuario ha pulsado
en una de las válvulas, a que se ha programado un evento de cambio de nivel o a que se ha
recibido una petición desde la aplicación web, la aplicación inicia otro hilo que se encarga de ir
aumentando o disminuyendo el nivel a una determinada velocidad (se vaciará más rápido de lo
que se llena). Este hilo modificará el elemento gráfico que simula el tanque y enviará el nuevo
nivel a la nube (o lo guardará si estamos trabajando offline).
Peticiones al Cloud
Para llevar a cabo la comunicación con la nube y el envío de datos, se han llevado a cabo dos
tipos de peticiones:

Peticiones mediante el CloudConnector: son las peticiones que se llevan a cabo de una
forma transparente para el programador ya que son implementadas mediante la
librería CloudConnector. Como se comentó anteriormente, esta librería permite
principalmente conectar y desconectar dispositivos y enviar archivos y DataStreams a
37
la nube. Con esta librería se envían los principales datos de la simulación de cada
dispositivo, como la temperatura, velocidad, nivel, etc.

Peticiones Web. Hay otro tipo de funcionalidad requerida para la implementación de
la aplicación que no se podía realizar mediante la librería CloudConnector, por lo que
era necesario implementar peticiones web utilizando la API REST que nos ofrece la
nube de Digi. Para implementar esto, se ha realizado en el paquete de persistencia una
clase llamada CloudCommunicator. Con esta clase realizamos peticiones para subir
ficheros en la raíz de la nube (ya que si lo hacemos con el CloudConnector estos
ficheros quedan asociados a un determinado dispositivo) que aportan información
sobre qué dispositivos hay en cada sesión o sobre notificaciones de la sesión. También
se realizan peticiones para eliminar dispositivos de la nube así como sus DataStreams
asociados.
Modo offline
Cuando un dispositivo no está conectado a la nube, la simulación debe continuar de forma
normal y estos datos deben guardarse para poder enviarse más adelante a la nube. Para ello,
en el paquete de persistencia se ha realizado una clase llamada DataStreamSender que es
utilizada por los dispositivos simulados para enviar sus datos. Esta clase comprueba si un
dispositivo está conectado a la nube y, si es así, envía los datos de forma normal utilizando la
clase CloudConnector. De no ser así, esta clase se encarga de guardar dichos datos en un
directorio denominado DataStreams que contiene un fichero para cada DataStream del
dispositivo. Estos DataStreams son almacenados en formato CSV y se guarda una fila para cada
DataPoint del DataStreams. A cada DataPoint se le asocia un TimeStamp para saber en qué
momento se ha generado ese dato.
Una vez que capturamos el evento indicándonos que el dispositivo ha sido conectado de
nuevo, llamamos a un método de esta clase que se encarga de leer los ficheros con
DataStreams almacenados, enviarlos a la nube con la clase CloudConnector y borrar los
ficheros.
Desarrollo de las interfaces
Como hemos comentado en el apartado 2.3.1, se ha utilizado JavaFX como tecnología, lo cual
nos permite utilizar un MVC para desarrollar las aplicaciones. De esta forma, las interfaces de
usuario se han creado con documentos FXML, lo cual ha facilitado mucho su implementación.
En la figura 18 se muestra un ejemplo de un fragmento de código FXML para el diseño del
menú:
38
Figura 18. Fragmento de documento FXML para el menú
A la hora de desarrollar las interfaces de usuario se han llevado varios cambios con las
interfaces que se habían diseñado en un principio. Estos cambios han sido hechos
principalmente para hacer que los datos de la simulación de cada dispositivo se muestren de
una forma más gráfica. De esta forma, se ha introducido un termostato para mostrar la
temperatura y permitir al usuario modificarla tanto en la simulación del camión como en la del
tanque. En la vista de detalle del tanque también se ha añadido un mapa para poder observar
la localización del mismo aunque, a diferencia de como ocurre con un tanque, esta localización
será fija y sólo podrá modificarse en la configuración del tanque. En las figuras 19 y 20 se
puede observar el resultado final de las interfaces.
39
Figura 19. Interfaz final de la simulación de un tanque
Figura 20. Interfaz final de la simulación de un camión
Cambios en la librería CloudConnector
Como hemos introducido en el apartado 2.3.2, la principal librería utilizada ha sido la librería
desarrollada por Digi que nos permite crear dispositivos conectados a la nube y enviar datos a
la misma.
40
La clase más importante de esta librería es la llamada CloudConnector. Esta clase utiliza un
archivo de configuración denominado “connector_config.txt” en el que se almacenan los
parámetros necesarios para realizar la conexión del dispositivo con la nube.
El principal problema relacionado con esta librería es que había sido diseñada para que sólo se
permita utilizar una instancia de la clase CloudConnector. Esto fue desarrollado así porque ha
sido pensada para que se ejecute en un dispositivo, por lo que sólo habrá que utilizar una
conexión con la nube. Pero nuestro proyecto iba más allá, ya que es imprescindible que se
puedan crear varias instancias de la clase CloudConnector en un solo dispositivo (en este caso,
un ordenador). Para ello, fue necesario obtener el código de la librería, estudiarlo y realizar los
cambios pertinentes en el mismo.
Para adaptar la librería a nuestras necesidades han sido necesarios dos cambios:
1. Añadir un parámetro a la clase que nos permitiera indicar la localización en la que se
guardaba el fichero de configuración del dispositivo, ya que antes la localización debía
ser necesariamente la raíz del sistema de ficheros. Esto hacía que no se pudiera tener
un fichero de configuración para cada dispositivo ya que todos deben tener el mismo
nombre.
2. Modificar la forma en la que se lee y se escribe en dicho fichero de configuración ya
que, al haber varias instancias de la clase CloudConnector corriendo en varios hilos,
había problemas de sincronización.
Además de los cambios aquí mencionados, ha sido necesario extender varias clases de dicha
librería. Esto ha sido necesario ya que se requería hacer cambios en el modo en que se lleva a
cabo el log del dispositivo y la actualización de firmware. Para ello, se ha extendido de las
clases encargadas de realizar dichas funciones y se han sobrescrito los métodos necesarios.
La clase que se encarga de la actualización de firmware debe aumentar en un valor el número
de versión, mientras que la clase del log debe guardar dicha información en un fichero que en
encontrará en la raíz del sistema de ficheros del dispositivo.
En la figura 21 se muestra la clase realizada para la realización del log del dispositivo. Esta clase
extiende la clase GeneralConnectorLogger y sobrescribe el método log(String text).
41
Figura 21. Extensión de la clase GeneralConnectorLogger para la implementación de log de un dispositivo
Limitaciones del Cloud
Un aspecto muy a tener en cuenta en la implementación de la aplicación han sido las
limitaciones que nos impone el Cloud. Una cuenta de Etherios Device Cloud puede ser de dos
tipos: gratuita o de pago. Las cuentas gratuitas permiten un máximo de 5 dispositivos
conectados, por lo que ha sido necesario implementar funcionalidad para comprobar la
respuesta del servidor y, en caso de que este nos indique que se ha alcanzado el máximo de
dispositivos, informar al usuario de que su cuenta no admite más dispositivos.
Otra limitación que nos impone el Cloud es el número de peticiones. Se admiten un máximo de
10 peticiones en 10 segundos. En el caso de que se supere este número de peticiones, el Cloud
mandará como respuesta un error denominado Throttle. Esto quiere decir que los datos que
enviemos a la nube pueden no llegar correctamente al Cloud. Lamentablemente, la librería
CloudConnector no nos ofrece la funcionalidad necesaria para saber cuándo ha fallado un dato
en concreto. Así, se ha optado por enviar todos los datos periódicamente a la nube aunque no
hayan sido modificados. De este modo, todos los datos de un dispositivo se envían cada
minuto.
Un momento importante en el que pueden fallar los datos que se envían a la nube es cuando
se produce la reconexión y han de enviarse los datos obtenidos durante el tiempo que ha
estado el dispositivo desconectado. Para ello, hay que hacer una petición a la nube por cada
DataStream. Esto hace que si coincide que en ese momento se están realizando varias
peticiones a la nube, pueda saltar el Throttle y no enviarse dichos datos. Tal y como está
desarrollada la librería CloudConnector actualmente, no es posible solventar este problema de
una forma eficiente. En futuras actualizaciones, la librería CloudConnector incorporará
42
funcionalidad para enviar todos estos datos en una sola petición, lo que hará mucho menos
probable que estos datos se pierdan debido a un Throttle.
Localización de dispositivos
Tanto los tanques como los camiones disponen de al menos un campo que indica la
localización de dicho dispositivo. Para ello, se ha creado una clase denominada GeoPoint que
contiene la longitud, latitud y dirección del punto que se quiere representar. Además de esta
clase, se utiliza otra para clase denominada GeoCoder con métodos estáticos para conectar
con el servicio de Google Maps y traducir direcciones a coordenadas. De esta forma, es posible
indicar una dirección para especificar la localización de un dispositivo, lo cual es mucho más
sencillo para el usuario que introducir unas coordenadas.
Cortar dispositivos
Una de la funcionalidad a desarrollar era la de cortar dispositivos, que servía de complemento
a las de copiar y pegar. La forma en la que se implementó esta funcionalidad fue la siguiente:
se mandaba al Cloud una petición para eliminar un determinado dispositivo y se creaba otro
con todos los datos de la simulación iguales (a excepción del DeviceID, que debe ser único para
cada dispositivo). Tras realizar varias pruebas, se observó que siempre se obtenía la misma
respuesta del servidor. Esta respuesta era la misma que se recibía cuando se deseaban añadir
más dispositivos de los que una cuenta permitía, es decir, “Device ID not provided from
provisioning”. Tras analizar el problema individualmente y con ayuda de varios ingenieros de
Digi, no se consiguió encontrar la causa del problema.
Además, se volvió a hacer un análisis de dicha funcionalidad y se llegó a la conclusión de que
no nos ofrecía nada nuevo. Lo realmente útil es copiar un dispositivo y pegarlo varias veces
para así obtener una simulación de muchos dispositivos sin tener que introducir cada uno de
ellos. Por ello, se decidió eliminar la funcionalidad de cortar dispositivos.
Limitaciones
Tras llevar a cabo la implementación del proyecto, se ha descubierto que la aplicación tiene
diferentes limitaciones debidas a aspectos técnicos del mismo. Entre ellas destacamos:



Pérdida de datos: cuando salta el thorttle, no hay forma de saber qué dataPoint ha
sido el que ha fallado. Por lo tanto, no se puede volver a enviar y es posible que
algunos datos se pierdan y no se actualicen en la nube hasta dentro de un minuto
(intervalo en el que se envían todos los datos de nuevo).
Firmware update: cuando se hace una actualización de firmware o se cambian
parámetros como la descripción de un dispositivo, el Cloud no recibe ninguna
notificación de ello. Esto es debido a que se trata de una simulación y, por lo tanto, el
dispositivo no puede reiniciarse después de actualizar su firmware (se desconecta
durante 10 segundos y se vuelve a conectar, simulando el reinicio). Al no reiniciarse, el
CloudConnector no vuelve a cargar todos los datos del fichero de configuración ni se
notifica a la nube. Por ello, la única forma en la que se puede actualizar correctamente
el firmware en la nube es cerrando y abriendo de nuevo la sesión, lo que hace que se
vuelva a crear la clase CloudConnector y vuelva a cargar todos los datos.
Para realizar una actualización de firmware desde la nube es necesario pasar como
parámetro un fichero binario. Este fichero puede tener cualquier contenido o incluso
estar vacío y debe tener un tamaño menor de 2MB.
43
2.4. Pruebas
Tal y como se especificó en el plan de pruebas, se van a llevar a cabo pruebas unitarias, de
integración y de adaptación. A continuación se muestran algunos ejemplos de las pruebas
llevadas a cabo en la fase de test. Para ver todos los casos de test, acudir a Anexo1.Pruebas.
Pruebas unitarias:
Test ID: 04
Grupo
Nombre del test
Descripción
Resultado
Comentarios
Test ID: 05
Grupo
Nombre del test
Descripción
Resultado
Comentarios
Test ID: 22
Grupo
Nombre del test
Descripción
Resultado
Comentarios
Sesión
Cerrar y guardar sesión
Crear una sesión y añadir un nuevo dispositivo
Guardar la sesión
Añadir un nuevo dispositivo
Cerrar la sesión sin guardarla
Cargar la sesión de nuevo y verificar que el primer dispositivo ha sido
guardado y el último eliminado
Parcialmente correcto
Encontramos un error cuando, al crear un camión, introducimos dos
puntos de ruta que no pueden ser conectados (por ejemplo, uno en
América y otro en Europa). Este es un fallo a solucionar en un futuro, pero
no se solucionará para el proyecto por falta de tiempo.
Sesión
Guardar el estado de los dispositivos
Crear una sesión y añadir un tanque y un camión
Guardar la sesión
Modificar el estado del camión y del tanque (válvulas, temperatura,
velocidad, etc)
Cerrar la aplicación
Abrir la aplicación y cargar la sesión
Verificar que el estado de los dispositivos es el esperado
Correcto
Configuración
Configurar un dispositivo
Crear una sesión con un dispositivo
Seleccionar el dispositivo y pulsar en el botón configurar del menú
Cambiar los parámetros de configuración
Comprobar que el comportamiento del dispositivo es el esperado
Cambiar la descripción y la información de contacto
Verificar que los datos han sido actualizados correctamente
Parcialmente correcto
Cuando cambiamos la descripción y el email, estos datos se actualizan
correctamente en la aplicación pero no en la nube. Esto es debido a que
estos datos se actualizan en el fichero de configuración en local pero no
44
en la instancia de la clase CloudConnector. Esto es debido a la forma en la
que está diseñada y programa dicha clase, por lo que no hay nada que se
pueda hacer para solucionar este error.
Pruebas de integración
Test ID: 14
Grupo
Nombre del test
Descripción
Resultado
Comentarios
Test ID: 19
Grupo
Nombre del test
Descripción
Resultado
Comentarios
Test ID: 27
Grupo
Nombre del test
Descripción
Datos & Conexión
Modificar los datos del camión
Crear una sesión con un camión
Modificar la velocidad del camión, el estado de la puerta, la temperatura y
la ruta.
Verificar que estos datos se actualizan en la nube y que se muestran
correctamente desde la aplicación web
Repetir los pasos anteriores varias veces
Correcto
Peticiones
Peticiones de un tanque
Crear una sesión con un tanque
Enviar varias peticiones desde la aplicación web para abrir y cerrar las
válvulas y para cambiar la temperatura
Verificar que el comportamiento del tanque es el esperado
Enviar varias peticiones para actualizar el firmware
Comprobar que el firmware ha sido actualizado
Enviar una petición para desconectar el tanque
Verificar que el tanque se desconecta y se vuelve a conectar pasado el
tiempo determinado (si así está especificado en la configuración)
Enviar peticiones para ver el Log del dispositivo.
Parcialmente correcto
De nuevo tenemos el mismo error que en el test 22, pero esta vez con la
versión de firmware. Este error ha sido reportado a los desarrolladores de
Digi, que trabajarán para solucionarlo.
Archivos de sesión
Archivo de notificaciones
Crear una sesión
Comprobar que el archivo de notificaciones de la nube ha sido creado y
que se muestra la nueva sesión desde la aplicación web
Añadir varios dispositivos a la sesión
Comprobar que el archivo de notificaciones ha sido actualizado y las
notificaciones se muestran en la aplicación web
Eliminar un dispositivo
Comprobar las notificaciones
45
Resultado
Comentarios
Guardar y cerrar la sesión
Comprobar que el archivo ha sido eliminado de la nube
Correcto
Pruebas de aceptación
Las pruebas de aceptación se fueron realizando cada dos semanas en las reuniones de revisión
de cada Sprint. En estas reuniones, se mostraba al Product Owner el estado del proyecto y su
avance desde la última reunión. Tras esto, él era el encargado de determinar si el incremento
obtenido en ese Sprint cumplía con los requisitos iniciales, así como de añadir nueva
funcionalidad o de eliminar alguna que se consideraba innecesaria.
También se realizaron pruebas en diferentes ordenadores y sistemas operativos. En este
aspecto encontramos dos limitaciones bastante importantes. Debido a problemas con la
librería CloudConnector, ajenos al proyecto, se obtiene un fallo al ejecutar la aplicación en
Linux. Los desarrolladores de Digi están trabajando en ello y se espera que se solucione
próximamente.
La limitación más importante está relacionada con JavaFX. El proyecto utiliza una versión de
JavaFX que no es la última desarrollada. En las últimas versiones de JavaFX, Oracle ha realizado
cambios importantes y no han asegurado la compatibilidad hacia atrás, lo que hace que el
proyecto no funcione en determinadas máquinas virtuales de Java. Se estudió la migración del
proyecto a la última versión de JavaFX, pero esto suponía realizar grandes cambios en todos
los aspectos gráficos del proyecto, por lo que se desechó la idea por falta de tiempo.
46
Capítulo 3. Conclusiones
En este apartado se resumen las conclusiones obtenidas del proyecto, así como las lecciones
aprendidas y dificultades encontradas, la evaluación de los objetivos y las futuras mejoras del
proyecto.
3.1. Evaluación de objetivos
Al comienzo del proyecto se especificaron los objetivos que debía cumplir el proyecto. Tras la
finalización del mismo, es necesaria comprobar que, efectivamente, se han cumplido todos
ellos.
En lo referente al objetivo principal, podemos comprobar que se ha cumplido correctamente,
ya que se ha creado un sistema que permite a los futuros clientes de Digi comprobar el
potencial de las soluciones M2M sin la necesidad de comprar dispositivos reales o de instalar
software en dichos dispositivos.
En cuanto a los objetivos generales, se han conseguido cumplir con éxito ya que el sistema
desarrollado está compuesto por una aplicación de escritorio (la correspondiente con este
proyecto) y una aplicación web. Así, este sistema permite monitorizar datos de los dispositivos
simulados y establecer una comunicación bidireccional entre las dos partes del mismo.
También se ha invertido una cantidad importante de horas en comprobar que el sistema
funciona correctamente, llevando a cabo varias casos de test.
Finalmente, en lo que se refiere a los objetivos concretos de la aplicación de escritorio, vemos
que hay una carencia que hace que uno de los objetivos se haya cumplido de forma parcial.
Este objetivo especificaba que la aplicación debería poder ejecutarse en diferentes sistemas
operativos. Debido a limitaciones externas al proyecto no se puede ejecutar en Linux, pero se
espera que esto sea solucionado por los desarrolladores de Digi en breve. Además, tal y como
se ha comentado previamente, la aplicación es dependiente de la versión de Java para que
funcione correctamente.
Los demás objetivos de la aplicación de escritorio se han cumplido correctamente. Esta
aplicación permite simular dispositivos reales y su comportamiento, siendo estos dispositivos
los más comunes entre las soluciones M2M que genera Digi (tanque y camión). El sistema
también permite realizar una simulación bastante realista en la que el usuario puede
interactuar con ella para modificar parámetros de la misma. Por último, se ha desarrollado un
manual para el correcto uso del sistema por parte de los clientes. El manual estará accesible
desde la página web y desde la aplicación de escritorio.
3.2. Dificultades encontradas y lecciones aprendidas
A pesar de que en el apartado de implementación ya se han mencionado las principales
dificultades encontradas, se ha decidido hacer un análisis de las mismas en las conclusiones,
así como realizar una reflexión sobre las lecciones aprendidas a lo largo del proyecto.
Muchas de las dificultades que se han encontrado en el proyecto han venido por la tecnología
escogida para desarrollarlo. En muchas ocasiones, como en el caso de este proyecto, la
47
tecnología viene impuesta, ya que hay determinados requisitos que debe cumplir el producto
final (por ejemplo, plataformas en las que ha de funcionar). En los casos en los que se pueda
elegir la tecnología, es necesario invertir tiempo en realizar un buen análisis de todas las
herramientas disponibles para poder elegir la más conveniente ya que será algo que utilicemos
durante un periodo de tiempo amplio y que condicionará el proyecto. Además, en muchos
casos, una vez elegida una tecnología es muy difícil cambiarla o migrar el proyecto a otra.
El hecho de que el proyecto haya sido un proyecto real de una empresa, con el añadido de que
es un internacional, ha sido una experiencia muy enriquecedora, ya que ha hecho que se
experimenten de primera mano los problemas encontrados en un proyecto real de una
empresa real. Una lección aprendida muy importante ha sido que los requisitos del proyecto
pueden cambiar. La persona encargada de establecer los requisitos puede cambiar de opinión
durante el tiempo de desarrollo del proyecto, lo que implica que será necesario hacer cambios.
Es muy importante estar preparado en todo momento para el cambio, ya que es algo
inevitable y puede hacer que el trabajo que hemos realizado durante un determinado periodo
de tiempo ya no sirva para nada.
También se han adquirido importantes habilidades transversales muy importantes a la hora de
trabajar en una empresa. Entre ellas destacamos la capacidad de trabajar en equipo, de
participar en reuniones y tomar decisiones de forma autónoma y teniendo en cuenta los
requisitos impuestos. Del mismo modo, también se han puesto en práctica muchos de los
conocimientos aprendidos durante la carrera, tanto técnicos como transversales, como por
ejemplo guiar un proyecto propio pasando por todas las fases del mismo, realizando una
planificación adecuada y un seguimiento y control que nos permitan garantizar que el proyecto
será realizado en un tiempo lo más parecido posible al estimado y con los objetivos
establecidos cumplidos.
Por último, una lección aprendida a destacar es la importancia del correcto uso del inglés en el
mundo empresarial. Como ya se ha comentado, el proyecto se ha desarrollado en el ámbito de
la empresa Digi International, que es una multinacional americana. Esto ha hecho que toda la
documentación realizada para la empresa tenga que ser en inglés, así como los correos
electrónicos escritos internamente o la documentación leída para adquirir los conocimientos
necesarios para implementar el proyecto.
3.3. Futuras mejoras del proyecto
A lo largo de la memoria ya se han comentado diferentes aspectos que no se han realizado
debido a la falta de tiempo. Además de estos, aquí comentamos algunos más:


Permitir simular más dispositivos de clientes típicos de Digi como por ejemplo metro,
autobús, contenedores, sistemas médicos, paneles solares, estaciones meteorológicas,
etc.
Permitir grabar secuencias de acciones para programarlas sobre determinados
dispositivos. Por ejemplo, para un tanque, una secuencia de abrir la válvula de
entrada, cambiar la temperatura y abrir la válvula de salida
48


Permitir al usuario organizar los diferentes dispositivos en grupos, permitiendo así una
visualización más cómoda en el caso de tener muchos dispositivos y permitiendo
también realizar acciones sobre un grupo entero.
Implementar la configuración con el descriptor. Digi dispone de un archivo que se
utiliza como descriptor de dispositivos. En este archivo se indican los elementos que se
desean guardar del mismo. Una mejora interesante para futuro sería incorporar dicho
descriptor a la aplicación para que se puedan configurar qué parámetros enviar a la
nube. Esto no se ha llevado a cabo en el proyecto debido a que fue una característica
que incorporó Digi cuando el proyecto estaba muy avanzado.
Capítulo 4. Bibliografía





Guías y manuales de Digi sobre Etherios Device Cloud:
o http://ftp1.digi.com/support/documentation/html/90001150/90001150_R/De
fault.htm
o http://ftp1.digi.com/support/documentation/html/90002008/90002008_P/De
fault.htm
Apuntes sobre Threads, Networking y REST por Francisco García Izquierdo de la
asignatura Sistemas Distribuidos
Apuntes sobre EVS y Requisitos, Análisis, Diseño y Pruebas por Juan José Olarte Larrea
de la asignatura Ingeniería del Software
Manuales de JavaFX:
o http://docs.oracle.com/javase/8/javase-clienttechnologies.htm
http://stackoverflow.com
49
Anexos
Anexo 1. Casos de uso
Caso de uso
Guardar sesión
Descripción
El sistema guardará la sesión activa del usuario.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
Secuencia
Paso
Normal
Acción
1
El usuario pulsa el botón de guardar sesión
2
El sistema comprueba que la sesión ha sido
modificada desde la última vez que se guardó.
3
El sistema guarda los datos de la sesión.
Postcondición
La sesión del usuario ha sido guardada.
Flujos alternativos y
excepciones
Si la sesión del usuario no ha sido modificada desde la última
vez que se guardó, el sistema no hace nada.
Comentarios
Caso de uso
Cerrar sesión
Descripción
El sistema cerrará la sesión activa del usuario.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
Secuencia
Paso
Acción
1
El usuario pulsa el botón de cerrar sesión
2
El sistema comprueba si la sesión no ha sido
modificada desde la última vez que se guardó.
3
El sistema cierra la sesión.
Normal
Postcondición
La sesión del usuario ha sido cerrada.
50
Flujos alternativos y
excepciones
Si la sesión del usuario ha sido modificada desde la última vez
que se guardó, el sistema pregunta al usuario si desea guardar.
En caso afirmativo se procede al caso de uso Guardar sesión.
Comentarios
Caso de uso
Eliminar dispositivo
Descripción
El sistema eliminará el dispositivo de la simulación
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario ha seleccionado uno o varios dispositivos.
Secuencia
Paso
Acción
1
El usuario pulsa el botón eliminar dispositivo
2
El sistema elimina todos los dispositivos que habían
sido seleccionados.
3
El sistema marca la sesión como modificada.
Normal
Postcondición
El/los dispositivos seleccionados quedan eliminados de la
simulación
Flujos alternativos y
excepciones
Comentarios
Caso de uso
Crear dispositivo
Descripción
El sistema creará un nuevo dispositivo, comenzará su
simulación y lo añadirá a la sesión activa.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
Secuencia
Paso
1
Acción
El usuario pulsa el botón de añadir dispositivo
51
2
El sistema comprueba si el usuario tiene una sesión
activa.
3
El sistema pregunta al usuario qué tipo de dispositivo
desea añadir (tanque o camión)
4
El usuario elige el tipo de dispositivo
5
El sistema crea el dispositivo, lo conecta a la nube y
comienza su simulación.
6
El sistema añade el dispositivo a la sesión del usuario.
7
El sistema marca la sesión como modificada.
Normal
Postcondición
La sesión del usuario ha sido cerrada.
Flujos alternativos y
excepciones
En el punto 1, el usuario puede hacer clic sobre uno de los
dispositivos en la barra de herramientas y arrastrar hasta la
vista principal para añadir el dispositivo.
Si el usuario no tiene una sesión activa, se mostrará un
mensaje preguntando si desea crear una nueva sesión. En caso
afirmativo, se pasa al caso de uso Crear Sesión.
Comentarios
Caso de uso
Crear sesión
Descripción
El sistema creará una nueva sesión con los datos del usuario.
Actor
Usuario
Precondición
Secuencia
Paso
Acción
1
El usuario pulsa el botón de crear sesión.
2
El usuario introduce el nombre de la sesión que va a
crear.
3
El sistema comprueba si el usuario está logueado.
4
El sistema crea la nueva sesión.
Normal
Postcondición
La sesión del usuario ha sido creada.
52
Flujos alternativos y
excepciones
Si el usuario no está logueado, se pasa al caso de uso LogIn.
Comentarios
Caso de uso
Cargar sesión
Descripción
El sistema cargará la sesión del usuario previamente guardada
para trabajar con ella.
Actor
Usuario
Precondición
El usuario ha guardado previamente una sesión.
Secuencia
Paso
Acción
1
El usuario pulsa el botón de cargar sesión.
2
El sistema muestra al usuario las sesiones guardadas.
3
El usuario elige la sesión que desea cargar.
4
El sistema comprueba si el usuario está logueado.
5
Si el usuario logueado es el mismo que el usuario de
la sesión que desea cargar, ésta se carga.
6
El sistema conecta todos los dispositivos de esa
sesión a la nube y continúa con su simulación.
Normal
Postcondición
La sesión del usuario ha sido cargada para poder trabajar con
ella.
Flujos alternativos y
excepciones
Si el usuario no está logueado, se pasa al caso de uso LogIn.
Si el usuario logueado es distinto al de la sesión que se desea
cargar, se muestra un mensaje advirtiéndolo y se pregunta al
usuario si desea loguearse con la otra cuenta. En caso
afirmativo, se pasa el caso de uso LogIn.
Comentarios
53
Caso de uso
LogIn
Descripción
El usuario se autentifica con sus credenciales del Cloud.
Actor
Usuario
Precondición
Secuencia
Paso
Acción
1
El usuario introduce su nombre, contraseña y servidor
al que se quiere conectar (USA o UK).
2
El sistema se conecta con el servidor y comprueba las
credenciales del usuario.
3
Si todo es correcto, el usuario se ha autentificado.
Normal
Postcondición
El usuario queda autentificado con sus credenciales.
Flujos alternativos y
excepciones
Si las credenciales del usuario no son correctas, el sistema
informará al usuario con un mensaje de error y volverá a pedir
que introduzca los datos.
Comentarios
Caso de uso
Programar evento
Descripción
El sistema programa un evento determinado para uno o varios
dispositivos.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario ha seleccionado uno o varios dispositivos.
Secuencia
Paso
Acción
1
El usuario pulsa el botón programar evento.
2
El sistema muestra un formulario con los datos del
evento.
3
El usuario introduce el tipo de evento y la fecha.
4
El evento queda programado.
Normal
54
Postcondición
El evento queda programado y se ejecutará en la fecha
determinada.
Flujos alternativos y
excepciones
Si llegado el momento de ejecución del evento, la aplicación
no está funcionando, el evento no se llevará a cabo.
Comentarios
Hay eventos que son específicos de un determinado tipo de
dispositivo. Por ejemplo, un camión no puede tener un evento
de apertura/cierre de válvulas. Por ello, si se seleccionan
dispositivos de diferente tipo sólo estarán disponibles los
eventos comunes a ellos.
Caso de uso
Ver detalles
Descripción
El sistema muestra los detalles de uno o varios dispositivos.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
Secuencia
Paso
Acción
1
El usuario selecciona uno o varios dispositivos.
2
El usuario pulsa en el botón Ver detalles.
3
El sistema abre una nueva pestaña para cada uno de
los dispositivos. En estas pestañas se muestran los
detalles y el estado de cada dispositivo.
Normal
Postcondición
El sistema ha mostrado los detalles de uno o varios
dispositivos.
Flujos alternativos y
excepciones
También se puede acceder a la vista de detalles de un
dispositivo haciendo doble clic sobre él. De esta forma, no es
necesario que el usuario realice los pasos 1 y 2.
Comentarios
55
Caso de uso
Configurar dispositivo
Descripción
El usuario modifica o visualiza aspectos de configuración del
dispositivo.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario ha seleccionado un dispositivo.
Secuencia
Paso
Acción
1
El usuario pulsa el botón de configuración de
dispositivo.
2
El sistema muestra un formulario con la información
de configuración.
3
El usuario modifica los parámetros que desee y pulsa
en el botón Aceptar.
4
El sistema actualiza los parámetros modificados del
dispositivo.
Normal
Postcondición
La configuración del dispositivo ha sido actualizada.
Flujos alternativos y
excepciones
Si el usuario pulsa en el botón Cancelar, los cambios realizados
no quedarán guardados.
Comentarios
La información mostrada en el formulario de configuración
depende del tipo de dispositivo que se esté configurando.
56
Caso de uso
Ver documentación
Descripción
El usuario visualiza la documentación del sistema.
Actor
Usuario
Precondición
Secuencia
Paso
Acción
1
El usuario pulsa el botón de Ver documentación.
2
El sistema muestra la documentación al usuario.
Normal
Postcondición
La documentación del sistema ha sido mostrada.
Flujos alternativos y
excepciones
Comentarios
La documentación del sistema será un documento HTML a
través del cual el usuario podrá navegar.
Caso de uso
Cambiar a vista mosaico
Descripción
La vista de la sesión pasa a visualizarse en forma de mosaico.
Actor
Usuario.
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
La sesión activa se está mostrando en vista de tabla.
Secuencia
Paso
Acción
1
El usuario pulsa el botón de Vista de mosaico.
2
El sistema muestra el estado de la sesión en forma de
mosaico.
Normal
Postcondición
La sesión se ha mostrado en forma de mosaico.
Flujos alternativos y
excepciones
Si la sesión ya se estaba mostrando en forma de mosaico, el
sistema no hace nada.
Comentarios
57
Caso de uso
Cambiar a vista tabla
Descripción
La vista de la sesión pasa a visualizarse en forma de tabla.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
La sesión activa se está mostrando en vista de mosaico.
Secuencia
Paso
Acción
1
El usuario pulsa el botón de Vista de tabla.
2
El sistema muestra el estado de la sesión en forma de
tabla.
Normal
Postcondición
La sesión se ha mostrado en forma de tabla.
Flujos alternativos y
excepciones
Si la sesión ya se estaba mostrando en forma de tabla, el
sistema no hace nada.
Comentarios
Caso de uso
Copiar dispositivo/s
Descripción
El/los dispositivos seleccionados se copian.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario ha seleccionado uno o varios dispositivos.
Secuencia
Paso
Acción
1
El usuario pulsa el botón de Copiar dispositivo.
2
El sistema copia esos dispositivos.
Normal
Postcondición
El/los dispositivos han sido copiados.
Flujos alternativos y
excepciones
Si el usuario no ha seleccionado ningún dispositivo, el sistema
no hace nada.
Comentarios
Entendemos por copiar dispositivo que el sistema guarda en
memoria volátil una copia de dicho dispositivo para su
posterior uso.
58
Caso de uso
Cortar dispositivo/s
Descripción
El/los dispositivos seleccionados se cortan.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario ha seleccionado uno o varios dispositivos.
Secuencia
Paso
Acción
1
El usuario pulsa el botón de Cortar dispositivo.
2
El sistema corta esos dispositivos.
Normal
Postcondición
El/los dispositivos han sido cortados.
Flujos alternativos y
excepciones
Si el usuario no ha seleccionado ningún dispositivo, el sistema
no hace nada.
Comentarios
Entendemos por cortar dispositivo que el sistema guarda en
memoria volátil una copia de dicho dispositivo para su
posterior uso y además elimina el dispositivo original.
Caso de uso
Pegar dispositivo/s
Descripción
El/los dispositivos seleccionados se pegan.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario ha copiado o cortado previamente uno o varios
dispositivos.
Secuencia
Paso
Acción
1
El usuario pulsa el botón de Pegar dispositivo.
2
El sistema pega esos dispositivos en la sesión de
activa del usuario.
3
El sistema añade el dispositivo a la sesión del usuario.
Normal
Postcondición
El/los dispositivos han sido pegados.
Flujos alternativos y
excepciones
Si no hay ningún dispositivo cortado o copiado previamente, el
sistema no hace nada.
59
Comentarios
Entendemos por pegar dispositivo que el sistema añade a la
sesión el/los dispositivos que se habían copiado o cortado
previamente.
Caso de uso
Conectar/Desconectar dispositivo/s
Descripción
El/los dispositivos seleccionados se conectan o desconectan
de la nube.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario ha seleccionado uno o varios dispositivos.
Secuencia
Paso
Acción
1
El usuario pulsa el botón de Conectar/desconectar
dispositivo.
2
El sistema comprueba si los dispositivos
seleccionados están conectados. Si es así, los
desconecta. En caso contrario, los conecta.
Normal
Postcondición
El/los dispositivos han sido conectados o desconectados.
Flujos alternativos y
excepciones
Si no hay ningún dispositivo seleccionado previamente, el
sistema no hace nada.
Comentarios
Cuando un dispositivo se desconecta, deja de enviar datos a la
nube pero su simulación sigue funcionando.
Caso de uso
Abrir/Cerrar válvula
Descripción
La válvula del tanque cambia su estado.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario está en la vista de detalles de un tanque.
Secuencia
Paso
1
Acción
El usuario pulsa sobre una de las válvulas del tanque.
60
2
Normal
Postcondición
El sistema cambia el estado de la válvula y modifica la
simulación en consecuencia.
La válvula del tanque ha cambiado de estado.
Flujos alternativos y
excepciones
Comentarios
Si la válvula de entrada del tanque está abierta, la simulación
irá llenando el tanque.
Si la válvula de salida está abierta, la simulación ira vaciando el
tanque.
Si ambas válvulas están abiertas, la simulación irá vaciando el
tanque de forma más lenta.
Caso de uso
Parar/Arrancar camión
Descripción
El camión pasa de estar parado a estar en movimiento o al
revés.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario está en la vista de detalles de un camión.
La puerta del camión está cerrada.
Secuencia
Normal
Paso
Acción
1
El usuario pulsa sobre el botón de parar/arrancar
camión.
2
El sistema comprueba si el camión está parado. Si es
así, la simulación hace que se ponga en movimiento.
En caso contrario, lo detiene.
Postcondición
El camión ha pasado de estar parado a estar en movimiento o
al revés.
Flujos alternativos y
excepciones
Si la puerta del camión está abierta, el sistema mostrará un
mensaje de alerta ya que no se puede arrancar el camión con
la puerta abierta.
Comentarios
61
Caso de uso
Abrir/Cerrar puerta camión
Descripción
La puerta del camión cambia su estado pasando de abierta a
cerrada o al revés.
Actor
Usuario
Precondición
El usuario tiene una sesión activa sobre la que está trabajando.
El usuario está en la vista de detalles de un camión.
El camión está detenido.
Secuencia
Paso
Acción
1
El usuario pulsa sobre el botón de parar/arrancar
camión.
2
El sistema comprueba si el camión está parado. Si es
así, la simulación hace que se ponga en movimiento.
En caso contrario, lo detiene.
Normal
Postcondición
El camión ha pasado de estar parado a estar en movimiento o
al revés.
Flujos alternativos y
excepciones
Si el camión está en movimiento, el sistema mostrará un
mensaje de aviso ya que la puerta no se puede abrir si el
camión no está parado.
Comentarios
62
Anexo 2. Casos de test
Test
Case
ID
Group
Test Name
Commands / Description
Result
Create session
Try to create a new empty session with
wrong credentials of the Etherios Device
Cloud Verify that the application does not
allow it Create the session with the correct
credentials
Passed
Session
Save/load session
Create a new session Add a device Save
the session Close the session and load it
again Verify that all data have been loaded
properly
Passed
Session
Load another
session
Load a session Try to load another session
Verify that the application does not allow it
Close the session and create the new
session
Passed
Session
Close and save
session
Create a session and add a new device
Save the session Add a new device Close
the session without saving it Load the
session again and verify that the last device
has been deleted
Passed
Session
Create a session with a tank and a truck
Save the session Modify the state of the
tank and the truck (valves, temperature,
Save devices state speed, gate state, etc) Close the application
Open the application and load the session
Verify that the state of those devices has
been updated
Passed
6
Session
Remove session
Load a session with several devices
Remove the session Verify that the session
has been deleted in the local computer and
in the Device Cloud
Passed
7
Devices
Add a tank
Add a tank in a session Check the device in
the Cloud and in the web application
Passed
8
Devices
Add a truck
Add a truck in a session Check the device in
the Cloud and in the web application
Passed
Devices
Remove multiple
devices
Add several devices in a session and verifiy
that they have been created Select all the
devices and remove them Verify that the
devices have been removed
Passed
Devices
Copy/paste
multiple devices
device
Create 3 devices Copy and paste the
devices Verify that the new devices have
been created with the exact same data than
the original ones (except for the name and
the Device ID)
Passed
1
2
3
4
5
9
10
Session
Jira ID
63
Comments
11
Devices
Cut/paste multiple
device
Create 3 devices Cut and paste the devices
Verify that the new devices have been
created with the exact same data than the
original ones (except for the name and the
Device ID) and those have been removed
12
Data &
Connecti
on
Data sending
Create a tank and a truck Verify that the all
the data have been sent to the Cloud Verify
that the data is shown in the web application
Passed
Modify tank data
Create a tank Modify the state of the valves
and verify that those data (valves state,
level, and volume) are updated in the Cloud
and in the web application Modify the
temperature and verify that those data are
updated in the Cloud and in the web
application
Passed
Create a truck Modify the gate state and
verify that data are updated in the Cloud and
in the web application Modify the
temperature and verify that those data are
updated in the Cloud and in the web
application Modify the speed and verify that
data are updated in the Cloud and in the
web application Modify the route start and
destination and verify that data are updated
in the Cloud and in the web application
Passed
13
Data &
Connecti
on
Failed
14
Data &
Connecti
on
Modify truck data
15
Data &
Connecti
on
Create a tank Disconnect it and verify that it
has been disconnected Modify data of the
Connect/disconnec
tank Connect the tank again and verify that
t a tank
the data generated while it was
disconnected have been sent succesfully
Passed
16
Data &
Connecti
on
Create a tank Disconnect it and verify that it
has been disconnected Modify data of the
Connect/disconnec
tank Connect the tank again and verify that
t a truck
the data generated while it was
disconnected have been sent succesfully
Passed
17
Data &
Connecti
on
Create a tank and a truck Disconnect both
devices Save the session Close the session
Load the session and verify that those
devices are still disconnected
Passed
18
Requests Tank requests
Create a tank Send several requests to
open/close the valves from the web app
Send several requests to change the
Passed
Save state
Device ID
not
received
from
provisionin
g. We have
decided to
remove the
cut
functionalit
y.
64
temperature Verify that the behavior is the
correct Send requests to update the
firmware version Verify that the firmware has
been updated Send a request to disconnect
the tank Verify that the tank has been
disconnected Connect the tank again Send
a request to view the device's log
19
Requests Truck requests
Create a truck Send several requests to
change the temperature Verify that the
behavior is the correct Send requests to
update the firmware version Verify that the
firmware has been updated Send a request
to disconnect the truck Verify that the truck
has been disconnected Connect the truck
again Send a request to view the device's
log
20
Simulatio
Truck simulation
n
Create a truck Let the truck simulation
during a week
21
Simulatio
Tank Simulation
n
Create a tank Let the tank simulation during
a few days
22
Device
Configur
ation
Configure device
Create a device Select it and open the
configuration window Change the
configuration parameters Verify that the
behaviour of the device is correct Change
the description and the contact information
Verify that those data have been updated
23
Events
Tank temperature
events
Create a tank Select it and choose the "Add
event" option in the main menu Add a
temperature event Save and close the
Passed
There is a
memory
leak with
the Google
Maps
View. This
is due to
the fact
that
Google
Maps does
not release
memory,
so the
memory
keeps
growing
until the
application
stops.
Failed
Passed
Partially
Passed
Passed
The
description
and the
email are
changed in
the
application
but the
cloud does
not update
them
65
session Open the session Wait until the hour
of the event Verify that the temperature
starts changing
24
25
26
27
Events
Events
Events
Session
files
Tank valves
events
Create a tank Select it and choose the "Add
event" option in the main menu Add a valves
event Save and close the session Open the
session Wait until the hour of the event
Verify that the level starts changing
Passed
Truck temperature
events
Create a truck Select it and choose the "Add
event" option in the main menu Add a
temperature event Save and close the
session Open the session Wait until the hour
of the event Verify that the temperature
starts changing
Passed
Truck speed
events
Create a truck Select it and choose the "Add
event" option in the main menu Add a speed
event Save and close the session Open the
session Wait until the hour of the event
Verify that the speed changes
Passed
Notifications file
Create a session Verify that a notifications
file has been created in the Cloud (sessions
folder) Add several devices to the session
Verify that the notifications file is updated
Remove a device Verify that the notifications
file is updated Save the session Close the
session Verify that the notifications file has
been removed from the Cloud
Passed
session file
Create a session Verify that an empty file
has been created in the Cloud with the same
name than the session. Add a device to the
session Verify that the file session contains
the device ID of the new device Save the
session and close the application Verify that
the file is still there Load the session again
Remove the device and verify that the file
session is empty now Remove the session
Verify that the file has been deleted
Passed
Passed
Passed
28
Session
files
29
More
Devices
More Devices
Create a session with a free account Add
five devices to that session Try to add
another one Verify that the app does not
allow it
30
Devices
Table View
Create a session Add several devices Verify
that the table view keeps updated Remove
66
several devices Verify that the table view
keeps updated
31
SO
SO Test
Run the application in Linux, Windows and
MacOS
The app
does not
work in
Linux. This
is due to a
bug in the
cloud
connector
library.
Partially
passed
67

Documentos relacionados