Documentación del proyecto

Transcripción

Documentación del proyecto
GADA - Documentación del proyecto
Elx, 2 de abril de 2011
Francesc Martínez Maestre
<[email protected]>
Resumen
Este documento detalla toda la fase de desarrollo seguida en el proyecto de software
que se inició con motivo del IV Concurso Universitario de Software Libre. El nombre
escogido ha sido GADA, y la tarea que se implementa es la creación de un sistema de
gestión integral de dietas y alimentación.
En este documento se describe la planificación y ejecución del proyecto. El documento
detallará la planificación, requisitos, diseño e implementación del sistema, así como el
porqué del desarrollo escogido. Además también se incluirá documentación para
futuros desarrollos y esquemas de descripción del sistema para aquellos que quieran
colaborar en su desarrollo. Además, se incluirá el manual de usuario para los usuarios
que quieran una explicación menos técnica.
I
II
Índice general
1. Planificación
1
1.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.1.1. CUSL - Concurso Universitario de Software Libre . . . . . . . . . .
1
1.1.2. GADA - Gestor Avanzado de Dietas y Alimentación . . . . . . . .
2
1.2. Estructura y organización . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2.2. Estructura y organización . . . . . . . . . . . . . . . . . . . . . . .
3
1.2.3. Modelo de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.2.4. Planificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.3. Entorno del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.3.2. Documentación . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
1.3.3. Control de versiones . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.3.4. Entorno de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.3.5. Blog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
1.3.6. Relaciones externas . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2. Estudio preliminar
9
III
2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.2. Situación actual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.2.1. Estado actual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.2.2. Necesidades del cliente . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2.3. Evaluación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.4. Criterios de evaluación . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3. Análisis de lenguajes de programación . . . . . . . . . . . . . . . . . . . . 13
2.3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.2. Lenguajes propuestos . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.3.3. Análisis y comparativa . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.4. Análisis de interfaces de usuario . . . . . . . . . . . . . . . . . . . . . . . 17
2.4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4.2. Tecnologías propuestas . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4.3. Análisis y comparativa . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5. Decisión final . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3. Especificación de requisitos
25
3.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2. Descripción general del sistema . . . . . . . . . . . . . . . . . . . . . . . 25
3.2.1. Perspectiva del producto . . . . . . . . . . . . . . . . . . . . . . . 26
3.3. Definición, acrónimos y abreviaturas . . . . . . . . . . . . . . . . . . . . . 29
3.4. Características de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5. Requisitos específicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5.1. Documentos a entregar . . . . . . . . . . . . . . . . . . . . . . . . 30
IV
3.5.2. Requisitos funcionales . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5.3. Requisitos no funcionales . . . . . . . . . . . . . . . . . . . . . . . 34
3.6. Casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4. Diseño
39
4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2. Desarrollo y herramientas de modelado . . . . . . . . . . . . . . . . . . . 39
4.2.1. Lenguaje de programación elegido . . . . . . . . . . . . . . . . . . 39
4.2.2. IDE elegido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.2.3. Diagramas de modelado elegido . . . . . . . . . . . . . . . . . . . 41
4.3. Descripción del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.4. Base de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.4.1. Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.4.2. Diseño detallado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.4.3. Solución a problemas del diseño . . . . . . . . . . . . . . . . . . . 50
4.4.4. Requisitos cumplidos . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.5. Descripción de la GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.5.1. Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
4.5.2. Diseño detallado . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
4.5.3. Requisitos cumplidos . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.6. Descripción del núcleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.6.1. Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
4.6.2. Descripción detallada . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.6.3. Diseño lógico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
V
4.6.4. Ejemplo de comportamiento . . . . . . . . . . . . . . . . . . . . . 74
4.6.5. Requisitos cumplidos . . . . . . . . . . . . . . . . . . . . . . . . . 74
5. Implementación
77
5.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.2. Estándares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.2.1. Código . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.2.2. Comentarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.3. Base de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.3.1. Conexión a la base de datos . . . . . . . . . . . . . . . . . . . . . 84
5.3.2. Sentencias SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.4. Núcleo de la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
5.4.1. Generación de informes . . . . . . . . . . . . . . . . . . . . . . . . 86
5.4.2. Configuración de la aplicación . . . . . . . . . . . . . . . . . . . . 86
5.4.3. EN - Entidad de Negocio . . . . . . . . . . . . . . . . . . . . . . . 87
5.4.4. CAD - Componente de Acceso a Datos . . . . . . . . . . . . . . . 89
5.5. Interfaz gráfica del usuario (GUI) . . . . . . . . . . . . . . . . . . . . . . . 90
5.5.1. Creación de las interfaces . . . . . . . . . . . . . . . . . . . . . . . 90
5.5.2. Signals and Slots - Ejemplos . . . . . . . . . . . . . . . . . . . . . 92
5.5.3. Estilos personalizados - QStyle . . . . . . . . . . . . . . . . . . . . 93
6. Fase de pruebas
95
6.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.2. Plan de pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
6.2.1. Actividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
VI
6.2.2. Criterio de evaluación . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.2.3. Entorno de ejecución de las pruebas . . . . . . . . . . . . . . . . . 96
6.3. Diseño de las pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
6.3.1. Visión general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
6.4. Especificación de las pruebas . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.4.1. Sistema e integración . . . . . . . . . . . . . . . . . . . . . . . . . 98
6.4.2. GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
6.4.3. Usabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.5. Resultados de las pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.5.1. Sistema e integración . . . . . . . . . . . . . . . . . . . . . . . . . 102
6.5.2. GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.5.3. Usabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.5.4. Evaluación de resultados . . . . . . . . . . . . . . . . . . . . . . . 109
6.6. Relación con los requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.7. Conclusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
7. Documentación
111
7.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.2. Manual de instalación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
7.2.1. Pre-requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.2.2. Pasos previos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.2.3. Instalación de GADA . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.3. Manual de Usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
7.3.1. Barra superior de menú . . . . . . . . . . . . . . . . . . . . . . . . 113
VII
7.3.2. Pacientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
7.3.3. Dietas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
8. Futuro desarrollo
119
8.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.2. Vías futuras de desarrollo . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
8.2.1. Nuevas funcionalidades . . . . . . . . . . . . . . . . . . . . . . . . 119
8.2.2. Extensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
A. Especificación de requisitos
121
A.1. Casos de Uso Textuales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
B. Fase de pruebas
133
B.1. Pruebas unitarias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
B.2. Pruebas modulares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
B.3. Especificación de los casos de prueba . . . . . . . . . . . . . . . . . . . . 136
B.3.1. Sistema e integración . . . . . . . . . . . . . . . . . . . . . . . . . 137
B.3.2. GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
B.3.3. Usabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Glosario
151
VIII
Capítulo 1
Planificación
1.1.
Introducción
En esta sección se hará una descripción y resumen de la organización de las diferentes partes que intervendrán en el proyecto. Por un lado se establecerá un sistema
de apoyo por parte del servidor con FTP, SVN, etc. y por el otro se organizará la parte
interna del proyecto. Este capítulo pretende ser una mirada general a GADA y a los
motivos de su desarrollo.
1.1.1.
CUSL - Concurso Universitario de Software Libre
Como bien se describe en la web del CUSL (http://www.concursosoftwarelibre.org/),
el concurso universitario de software libre,
“Es un concurso de desarrollo de software, hardware y documentación técnica libre, en el que pueden participar estudiantes universitarios de primer
y segundo ciclo en el ámbito estatal español. Para liberar los proyecto se
usará la forja de RedIRIS y un blog donde cada participante contará su experiencia en el desarrollo durante el curso escolar 2009/2010.
El objetivo principal del Concurso Universitario de Software Libre es fomentar la creación y contribuir a la consolidación de la comunidad del Software
Libre en la Universidad.”
Con estas palabras poco queda por decir sobre el CUSL, salvo que la fase de inscripción es durante el mes de octubre y que puede apuntarse a la modalidad normal
1
CAPÍTULO 1. PLANIFICACIÓN
todos aquellos estudiantes universitarios (como se ha comentado anteriormente) y de
ciclos formativos de grado superior, pero además, aquellos que están cursando un ciclo formativo de grado medio lo podrán hacer en la modalidad junior, novedad en esta
edición.
1.1.2.
GADA - Gestor Avanzado de Dietas y Alimentación
GADA es el acrónimo de Gestor Avanzado de Dietas y Alimentación, con el que se
pretende crear una herramienta genérica para la creación, administración y gestión de
las dietas y la alimentación de los pacientes de las clínicas y hospitales. Además, tendrá
una rama orientada a la educación, por lo que intentará servir a los intereses de los docentes de las carreras de “Diplomatura en nutrición humana y dietética“y ”Licenciatura
en Tecnología de los Alimentos“.
GADA integrará la gestión de dietas y de alimentación tanto a nivel sanitario como
a nivel educativo. Para ello, permitirá la gestión de los usuarios del así como de los
pacientes o estudiantes. Se podrá crear dietas tanto de forma general, como personalizada para los pacientes que así lo requieran, gestionar los alimentos (tanto individualmente como de forma elaborada: primer plato, segundo plato...), ver historiales de uso
y consumo de cada paciente e imprimir informes.
Para que GADA se convierta en un referente, es fundamental que reúna las siguientes características:
Compaginar el uso sanitario y educativo.
Ser robusto y seguro, pero rápido y versátil al mismo tiempo.
Gran sencillez de aprendizaje y uso.
Que sea atractivo a la vista.
Que disponga de un buen manual de usuario.
De forma básica contendrá los siguientes apartados:
Administración - Aquí se administrarán los usuarios sólo en modo administrador
editando o añadiendo nuevos datos.
Pacientes - Es donde se podrán añadir, modificar y eliminar los pacientes de los
que nos ocupemos en nuestro sistema. También se puede consultar estadísticas,
tener un historial o imprimir informes.
2
1.2. ESTRUCTURA Y ORGANIZACIÓN
Dietas - Este es el apartado "grande"del programa. Aquí podremos crear nuestras
dietas de forma personalizada o general. Además, podremos hacerlo de forma
automática rellenando unas opciones disponibles en un asistente. La gestión se
puede hacer por día o semana. Se podrán editar platos y alimentos y consultar
sus características alimentarias.
1.2.
1.2.1.
Estructura y organización
Introducción
Todo proyecto ha de tener una estructura y una organización interna, que será más
compleja cuanto más grande sea el proyecto. En el caso de GADA, y a pesar de que el
equipo inicial de desarrollo es de una persona, también habrá una estructura interna y
una organización.
Estos dos factores son básicos para llevar a cabo el perfecto desarrollo de cualquier programa. La estructura especificará la disposición y orden de los componentes
del proyecto, mientras que la organización describirá cómo se relacionan los diversos
componentes que lo forman.
En la ingeniería del software es importante aunar los dos conceptos en lo que se
conoce como modelo de desarrollo. Este modelo, está inspirado en una filosofía diferente dependiendo de las necesidades del usuario final o del cliente en el supuesto de
haberlo. En este caso, no existe un cliente que deba supervisar las diferentes etapas
y evaluar el producto de forma continua, por lo que se buscará un modelo que dé el
suficiente tiempo de desarrollo pero que al mismo tiempo nos permita finalizar correctamente cada fase del proyecto.
1.2.2.
Estructura y organización
En el desarrollo del software intervienen varias partes a la hora de llevar a cabo
un proyecto. Éste no sólo se compone del código fuente y los ejecutables, también está formado por las librerías que necesita, y la documentación del código, ya sea con
Doxygen o con otros programas. Además de los elementos relacionados con la parte
técnica, existen otros elementos que componen un proyecto. En el caso de GADA, y tratándose de un proyecto perteneciente al CUSL, estos elementos son la documentación
del proyecto, realizada con LATEX, los archivos de planificación, imágenes del sistema
lógico y del diseño de la base de datos, entre otros.
3
CAPÍTULO 1. PLANIFICACIÓN
A continuación se muestra una representación de los diferentes directorios que lo
forman:
/doc - Directorio con los archivos de documentación.
/paquetes - Directorio donde se almacenarán los paquetes de GADA para las
diferentes arquitecturas.
/src - Código fuente del programa para compilar.
• /images - Directorio con las imágenes que se utilizan en GADA.
• /libraries - Directorio para aquellas librerías necesarias para la correcta compilación del programa.
• /QtSingleApplication - Librería necesaria para la compilación del programa.
1.2.3.
Modelo de desarrollo
En el caso de GADA, se va a seguir el modelo de desarrollo en cascada. Éste es
el enfoque que ordena de forma rigurosa las diferentes etapas del ciclo de desarrollo
del software, de forma que el inicio de cada etapa está condicionado a la finalización
de la anterior. En este caso se ha decidido seguir el siguiente orden de etapas:
Estudio preliminar
Especificación de requisitos
Diseño del software y sus componentes
Implementación del software
Pruebas
Implantación
Estudio preliminar En esta fase se realizará un estudio de mercado (entendiendo por
mercado el entorno donde se debe integrar) previo a la especificación de los requisitos.
Será aquí donde se analice la situación actual, se decida las necesidades del entorno
al que va dirigido, con qué lenguaje/s de programación y para qué entornos podrá estar
disponible.
4
1.2. ESTRUCTURA Y ORGANIZACIÓN
Especificación de requisitos Aquí será donde se definan los requisitos necesarios
a cumplir por GADA en sus diferentes niveles. Es por ello que habrá unos requisitos
diferentes para el funcionamiento interno del sistema, otros para el comportamiento de
la interfaz de usuario y unos últimos que serán definidos por y para el usuario que debe
emplear el programa.
Diseño Durante esta etapa, se realizará el diseño de GADA para su posterior implementación. Será aquí donde se realice el diseño de la base de datos con sus tablas y
relaciones, se especifique la estructura y organización de la capa lógica del programa
y por último, se diseñarán tanto conceptualmente como de forma gráfica las diferentes
pantallas y comportamiento que debe tener la GUI, eso sí, sin prototipo.
Implementación Una vez acabada la fase de diseño, la implementación empezará
desde los niveles más bajos (como son la base de datos y la comunicación con archivos de configuración) hasta los niveles altos, como son la programación, de la interfaz
gráfica y el comportamiento diseñados anteriormente. Será aquí donde se obtenga un
producto final totalmente utilizable.
Pruebas Aquí se diseñará e implementará una batería de pruebas que deberá cumplir
el programa para llegar de forma satisfactoria a la última fase. En el caso de que el
programa no cumpla alguna de las series de pruebas creadas, se volverá a la fase de
implementación o a la etapa de diseño en caso de que fuera necesario.
Implantación Más que una fase del modelo de desarrollo, es la culminación de este,
pues en este momento es cuando GADA será implantada para su uso con un funcionamiento totalmente ajustado a lo descrito en las diferentes fases.
1.2.4.
Planificación
Cumpliendo con el modelo de desarrollo descrito en la sección anterior, la planificación deberá cumplir con unas fases claramente diferenciadas. En este caso es necesario que cada una esté cumplimentada totalmente antes de pasar a la siguiente. En el
esquema siguiente, podemos ver una representación de la planificación que se seguirá
en base a lo ya descrito. Por una parte tenemos una fase corta de planificación que
correspondería a este capítulo. Seguidamente un estudio preliminar de una duración
5
CAPÍTULO 1. PLANIFICACIÓN
algo mayor, seguido de una corta fase de especificación de requisitos, la fase de diseño y la de implementación (que durará el doble que la anterior) y por último otra etapa
corta de pruebas.
Como se puede comprobar no figura la implantación, debido a que no la he considerado una fase propia del desarrollo del modelo de cascada.
1.3.
1.3.1.
Entorno del proyecto
Introducción
En esta sección mostraré cómo y con qué elementos se va a trabajar. Esto comprende tanto a los programas que use para documentación y manejo de archivos, como el
resto de software que estará relacionado de alguna forma con GADA.
En el entorno del proyecto también se tendrá en cuenta las distintas formas de
promoción tanto virtuales como reales, como blogs, foros, periódicos, revistas especializadas, etc. Otro punto importante será la relación que se tenga con el exterior; ya
que GADA es un software para el ambiente sanitario y educativo, es necesario que los
diferentes profesionales de las dos ramas lo prueben, evalúen y sugieran cambios o
adaptaciones según sus necesidades.
1.3.2.
Documentación
Para la documentación del proyecto (que no del código del programa), había dos
grandes opciones del software libre: LATEXy OpenOffice.org. Por un lado tenía la versatilidad y profesionalismo del primero mientras que por la otra, tenía la facilidad de uso y
el entorno “eyecandy” como principales premisas.
Finalmente, la decisión ha sido usar LATEX, pues permite adaptar y poder usar diferentes programas de documentación de proyectos, como son los de modelado UML, e
integrarlos dentro de la documentación general. Además, me permite una mayor personalización de la estructura del contenido.
6
1.3. ENTORNO DEL PROYECTO
1.3.3.
Control de versiones
Para el control de versiones no hubo tanto problema para tomar la decisión. Los
conocimientos previos de SVN, además de que la Forja de RedIRIS utiliza dicho software, hizo que la discusión se terminara casi antes de empezar. Subversion es, además
software libre bajo una licencia de tipo Apache/BSD.
1.3.4.
Entorno de desarrollo
GADA está planteado que se publique para Linux y Windows (y de forma posterior
para entornos Macintosh). Linux está pensado por y para desarrolladores, por lo que el
entorno principal será sobre esta plataforma, aunque queda por decidir las herramientas de programación que se utilizarán.
Lo que sí que está claro es que el programa encargado de la documentación en
LATEXserá Kile, ya que resulta ser un entorno bastante amigable.
En el caso del control de versiones será con la herramienta en línea de comandos
svn y en el caso de usar alguna interfaz se hará con kdesvn. Todos los programas
están desarrollados bajo licencias GPL, por lo que se cumplen las bases del CUSL al
100 %.
1.3.5.
Blog
A día de hoy, una importante herramienta de comunicación y promoción virtual son
los “blogs”. En el caso de GADA, y aunque en las bases ya se especificaba que se evaluaría, se ha decidido dar un gran peso a esta herramienta, pues es el mejor escaparate
que hay para los que, acaban de empezar el desarrollo de una aplicación nueva.
El blog de GADA estará alojado en mi página personal: GADA Project. Ahí se publicarán todas las noticias, novedades o artículos interesantes que estén relacionados
con el desarrollo de GADA.
1.3.6.
Relaciones externas
En proyectos como GADA, es muy importante tener en cuenta para quién va dirigido
el programa. En caso va dirigido al personal de sanidad y de educación, por lo que
7
CAPÍTULO 1. PLANIFICACIÓN
se considera fundamental disponer de la opinión de ambos profesionales para poder
realizar los ajustes adecuados. Es por ello, que en la medida de lo posible intentaré
que personal de estas ramas colabore en forma de consejeros externos en las fases de
especificación de requisitos y pruebas.
Además de como consejeros, la difusión y promoción que pueden proporcionar es
importante, por lo que será otro de los aspectos a tener en cuenta durante el desarrollo
del proyecto.
8
Capítulo 2
Estudio preliminar
2.1.
Introducción
En esta sección se introducirán todas las variables que fueron barajadas al inicio del
proyecto, y la conclusión que se extrajo de dicho estudio.
El propósito de lo que aquí se analiza, es sentar las bases del la tarea a desarrollar
y las posibles soluciones que se van a tener para ello. Lo primero a realizar, será un
estudio de mercado con las aplicaciones existentes, en caso de haberlas, para ver qué
novedades se pueden aportar y las necesidades de los dietistas, que serán los usuarios
finales. Para ello se evaluarán varias opciones dentro del desarrollo de la aplicación.
Finalmente, se elegirá la base de datos, el lenguaje de programación, el tipo de GUI a
desarrollar y todos los demás componentes necesarios para el correcto funcionamiento
de la futura aplicación.
2.2.
2.2.1.
Situación actual
Estado actual
GADA es un proyecto nuevo. Hasta ahora sólo existen aplicaciones que por una parte son de un gran grado de profesionalidad, pero tienen un alto coste, y por otra tenemos
aplicaciones mucho más sencillas gratuitas, o incluso ofrecidas como “shareware” que
no cumplen los objetivos mínimos que debe tener un gestor de las características de
GADA.
9
CAPÍTULO 2. ESTUDIO PRELIMINAR
En cualquier caso, todos las aplicaciones hasta ahora vistas, forman parte del grupo
de código cerrado. Y lo que se quiere ofrecer con GADA, es una aplicación de alto nivel
y con gran versatilidad, esto es, aplicable tanto a la educación como al sector dietético.
Todo esto, debe estar unido junto al desarrollo de un sistema de código abierto, en el
que pueda confluir una comunidad a su alrededor.
2.2.2.
Necesidades del cliente
El “cliente” como tal lo identificamos en primer lugar como el dietista o usuario final. Aquí se definirá lo que el cliente espera de la aplicación de forma que le permita
incrementar y mejorar su rendimiento, para ello, se definirán dos tipos de exigencias:
Exigencias técnicas
ET1 - La aplicación debe conectar con una base de datos.
ET2 - La aplicación debe permitir emitir alarmas o mensajes.
ET3 - La aplicación debe proporcionar informes detallados de usuarios y pacientes.
ET4 - La aplicación debe guardar un historial de acceso para su posterior consulta.
Exigencias no técnicas
ENT1 - La documentación del proyecto debe estar traducida al menos al inglés.
ENT2 - La aplicación debe ser fácil de usar e intuitiva.
ENT3 - La aplicación debe tener un gran rendimiento.
ENT4 - La aplicación debe estar adaptada a la educación y al sector profesional.
ENT5 - La aplicación debe ser de código abierto.
10
2.2. SITUACIÓN ACTUAL
2.2.3.
Evaluación
Para encontrar el mejor sistema y tipo de desarrollo, se ha desarrollado un sistema
de evaluación. Cada propuesta tendrá que cumplir unos objetivos preestablecidos. Estos objetivos serán puntuados dependiendo de la prioridad y del nivel de desarrollo que
se consiga. Para ello se usará la siguiente tabla:
Nivel / Prioridad
Bajo
Medio
Alto
Baja
0
0
1
Media
1
2
3
Alta
1
3
5
Cuadro 2.2.1: Puntuación según el nivel de desarrollo disponible y la prioridad.
La solución (en su respectivo campo) que tenga una mayor puntuación, será la que
se adopte para el desarrollo del proyecto.
Clasificación La solución será clasificada según como responda a los criterios de
evaluación que se propondrán después. Los grados anteriormente designados como
bajo, medio y alto, se refieren descriptivamente a lo siguiente:
Alto: La solución tiene la gran mayoría de los criterios desarrollados.
Medio: La solución tiene algunos criterios desarrollados.
Bajo: La solución tiene pocos criterios desarrollados.
2.2.4.
Criterios de evaluación
En esta sección se proporcionarán todos los criterios de evaluación. Para cada criterio, se asignará una identificación única, un nombre, una descripción y un nivel de
prioridad respecto al resto.
CE1 - Código abierto - Es importante que todo aquel que quiera disponga del
código fuente para mejorar y adaptar GADA a sus necesidades. Además, la posibilidad de tener una comunidad de usuarios alrededor, refuerza la seguridad y
aumenta la ayuda disponible frente a imprevistos.
11
CAPÍTULO 2. ESTUDIO PRELIMINAR
CE2 - Multi-plataforma - Para una correcta integración y una mayor comodidad del usuario final, es indispensable que la aplicación esté disponible para los
diferentes sistemas operativos y plataformas actuales.
CE3 - Compatibilidad entre SO - Aunque ya se ha indicado que debe ser multiplataforma, también debe ser una aplicación que pueda ser compilada y ejecutada
en cualquier Sistema Operativo sin tener que realizar ninguna operación adicional. Esto es, que el mismo código fuente pueda ser compilado sin ningún tipo de
problema independientemente de dónde sea hecho.
CE4 - Bajo coste - La aplicación debe poder ser ejecutada por todos los usuarios sin tener en cuenta su poder adquisitivo. Esto quiere decir, que el uso de la
aplicación no debe ser negociable.
CE5 - Interfaz personalizable - Mediante ficheros externos o con un menú de
preferencias interno, debe ser posible cambiar el aspecto gráfico de la aplicación
sin disminuir por ello el rendimiento.
CE6 - Alto rendimiento y eficacia - La aplicación debe resultar robusta en su
uso pero al mismo tiempo ágil y eficaz en la resolución de tareas.
CE7 - Generar informes - Debe ser posible que el software permita la realización
de informes detallados de forma automática.
CE8 - Ayuda offline y online - La ayuda y manual del programa debe poder
estar disponible tanto de forma online como de forma interna en la aplicación. El
programa debe ser capaz de generar su documentación y presentarla de forma
clara.
CE9 - Multi-idioma - Tanto la aplicación como la documentación deben estar
como mínimo en inglés, español/castellano y catalán.
CE10 - Compatibilidad con diferentes SGBD - La aplicación debe poder en la
medida de lo posible, ser compatible con varios SGBD. Además, es recomendable
que sea el propio usuario el que elija con cual trabajar.
En la tabla 2.2.2 los diferentes criterios de evaluación son asignados junto con un
nivel de prioridad y se indica, además que exigencia lo/s ha producido.
12
2.3. ANÁLISIS DE LENGUAJES DE PROGRAMACIÓN
Ident.
CE1
CE2
CE3
CE4
CE5
CE6
CE7
CE8
CE9
CE10
Nombre
Código abierto
Multi-plataforma
Compatibilidad entre SO
Bajo coste
Interfaz personalizable
Alto rendimiento y eficacia
Generar informes
Ayuda offline y online
Multi-idioma
Compatibilidad con diferentes
SGBD
Nivel de prioridad Basado en
Alto
ENT5
Alto
ENT4
Alto
ENT4
Medio
ENT4
Bajo
ENT2
Alto
ENT3
Alto
ET3 y ET4
Alto
TD2 and TD3
Medio
ENT1
Alto
ET1
Cuadro 2.2.2: Criterios de evaluación junto con sus niveles de prioridad.
2.3.
2.3.1.
Análisis de lenguajes de programación
Introducción
En esta sección se analizarán los diferentes lenguajes de programación utilizados.
Para este proyecto es importante la combinación de dos factores, la interfaz gráfica y el
lenguaje de programación que la maneja. En este caso vamos a analizar el segundo, la
parte de “bajo nivel”. La mayoría de lenguajes tienen varias implementaciones de GUI,
por lo que la elección del mismo es casi-independiente de nuestra elección.
2.3.2.
Lenguajes propuestos
Java Es un LPOO desarrollado por Sun Microsystems. Tiene mucha de su sintaxis
parecida a la de C y C++, pero tiene un modelo de objetos más simple y elimina herramientas de bajo nivel, que suelen inducir a errores, como el manejo de punteros o
memoria.
Las aplicaciones Java están compiladas en un bytecode, aunque también es posible
compilarlas en código máquina. En tiempo de ejecución, el bytecode se interpreta o es
compilado a código nativo para poder ejecutarlo después; todo esto a pesar de que la
ejecución directa por hardware del bytecode por un procesador Java también es posible.
13
CAPÍTULO 2. ESTUDIO PRELIMINAR
C# Se trata de un LPOO desarrollado y estandarizado por Microsoft. La estandarización fue aprobada por la ECMA e ISO de forma posterior a su uso.
La sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma
.NET el cual es parecido al de Java aunque incluye mejoras.
C++ La intención de C++ fue la de extender C con mecanismos que permitiesen la
manipulación de objetos. Es por ello que se considera a C++ un lenguaje híbrido.
De forma tardía fueron añadidas facilidades de programación genérica, sumándose
a los otros dos paradigmas que ya estaban admitidos (programación estructurada y
orientada a objetos).
Python Es un lenguaje de programación interpretado. Es comparado habitualmente
con Tcl, Perl y Ruby. En la actualidad se desarrolla como un proyecto de código abierto.
Al ser interpretado ahorra mucho tiempo en el desarrollo del programa.
Python permite dividir el programa en módulos para ser posteriormente reutilizados
desde otros programas escritos en el mismo lenguaje. Viene con una gran colección de
módulos estándar que se pueden utilizar como base de los programas.
2.3.3.
Análisis y comparativa
El análisis y comparativa se realizará en dos partes diferenciadas. La primera es
mediante una tabla-resumen de evaluación de los diferentes lenguajes estudiados y la
puntuación en cada criterio de evaluación. A continuación, tendremos una explicación
detallada de cada criterio de evaluación según el lenguaje, de forma que queda mucho
más claro el porqué de la elección en el nivel de realización.
La abreviatura usada para las tablas es la siguiente:
A = Alto
M = Medio
B = Bajo
Los criterios de evaluación han sido descritos en la sección 2.2.4.
14
2.3. ANÁLISIS DE LENGUAJES DE PROGRAMACIÓN
Lenguaje
Java
C#
C++
Python
CE1
M
M
A
A
CE2
A
B
A
A
CE3
A
B
A
A
CE4
A
A
A
A
CE6
B
M
A
A
CE10
A
B
A
A
Puntos
22
14
28
28
Cuadro 2.3.1: Puntuación de evaluación
Java
Crit. Evaluación
CE1
Puntos
3
Resultado
M
CE2
CE3
CE4
CE6
5
5
3
1
A
A
A
B
CE10
Total
5
A
Descripción
A pesar de que gran parte del código de Java
es código abierto, todavía se sigue liberando
parte de él.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Java está muy penalizado por el uso de la
máquina virtual o del compilador según la
plataforma
Cumple a la perfección este criterio.
22
Cuadro 2.3.2: Análisis detallado de Java
15
CAPÍTULO 2. ESTUDIO PRELIMINAR
C#
Crit. Evaluación
CE1
Puntos
3
Resultado
M
CE2
1
B
CE3
1
B
CE4
CE6
3
3
A
M
CE10
3
B
Total
Descripción
Microsoft sigue teniendo el control de C# y
su implementación debe realizarse sin ningún tipo de ayuda por parte de los creadores.
La implementación para Linux se encuentra
en un estado inicial, mientras que no dispone
de implementación para Macintosh.
Por extensión de la anterior, la compatibilidad con Linux es reducida, mientras que nula para Macintosh.
Cumple a la perfección este criterio.
Es necesario tener instalado Crystal Reports
para generar informes desde Visual Studio.
La compatibilidad con SGDB diferentes de
SQL Server es bastante pobre y repleta de
errores.
14
Cuadro 2.3.3: Análisis detallado de C#
C++
Crit. Evaluación
CE1
CE2
CE3
CE4
CE6
CE10
Total
Puntos
5
5
5
3
5
5
28
Resultado
A
A
A
A
A
A
Descripción
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cuadro 2.3.4: Análisis detallado de C++
16
2.4. ANÁLISIS DE INTERFACES DE USUARIO
Python
Crit. Evaluación
CE1
CE2
CE3
CE4
CE6
CE10
Total
Puntos
5
5
5
3
5
5
28
Resultado
A
A
A
A
A
A
Descripción
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cuadro 2.3.5: Análisis detallado de Python
2.4.
2.4.1.
Análisis de interfaces de usuario
Introducción
En esta sección se analizarán los principales entornos gráficos disponibles. Algunos
van unidos al lenguaje de programación, como el caso de .NET, otros, pueden ser
multi-lenguaje, como el caso de Qt, que permite programar con código C++, Java o
Python indistintamente. La primera parte de esta sección se ocupará de introducirnos
brevemente a cada tecnología y será en la segunda parte donde se muestre el análisis
de cada una de estas propuestas. Por último, se detallará el porqué de cada puntuación
mostrada en la tabla-resumen.
2.4.2.
Tecnologías propuestas
Java El entorno de ejecución Java (JRE) se ha convertido en un componente habitual
en los PC de usuario de los sistemas operativos más usados en el mundo. Muchas
aplicaciones Java lo incluyen dentro del propio paquete de la aplicación de modo que
se ejecuten en cualquier PC. Desde la aparición de la biblioteca Swing las limitaciones
iniciales se han subsanado considerablemente. Además, librerías como la SWT hacen
que el desarrollo de aplicaciones de escritorio complejas sea relativamente sencillo.
Java dispone de diferentes APIs para el desarrollo de aplicaciones, clasificadas por
especialidad, como móviles o PDAs, entornos de gama media y estaciones de trabajo
17
CAPÍTULO 2. ESTUDIO PRELIMINAR
y para entornos distribuidos o de internet.
.NET .NET es un framework de Microsoft que hace un énfasis en la transparencia
de redes y que permite un rápido desarrollo de aplicaciones. La plataforma provee, al
desarrollador, de conjunto de aplicaciones predefinidas para necesidades generales, y
administra la ejecución de los programas escritos específicamente con la plataforma.
Debido a la publicación de la norma para la infraestructura común de lenguajes, el
desarrollo de lenguajes se facilita, por lo que el marco de trabajo .NET soporta ya más
de 20 lenguajes de programación y es posible desarrollar cualquiera de los tipos de
aplicaciones soportados en la plataforma con cualquiera de ellos, lo que elimina las
diferencias que existían entre lo que era posible hacer con uno u otro lenguaje.
Uno de los puntos en contra es el tipo de licencia de .NET, la cual es de tipo propietaria o comercial. Es por ello que se han desarrollado entornos de desarrollo de
aplicaciones alternativos para C#.
Qt Qt es un conjunto de librerias multiplataforma para desarrollar GUI y también para
el desarrollo de programas sin interfaz como herramientas y aplicaciones de consola y
servidores. Se usa principalmente en el escritorio linux KDE, pero también en multitud
de aplicaciones con carácter de escritorio y online, como Google Earth y Skype, Adobe
Photoshop Album y VirtualBox, etc.
De forma nativa, Qt utiliza C++ pero además, puede ser llamado desde otros lenguajes a través de bindings. Funciona en todas las principales plataformas, y tiene un
amplio apoyo. El API cuenta con librerias para el acceso a bases de datos, el uso de
XML, threads, soporte de red, y una API multiplataforma unificada para la manipulación
de archivos y manejo de ficheros.
GTK GTK+ o The GIMP Toolkit es un conjunto de bibliotecas multiplataforma, principalmente para los entornos gráficos GNOME y XFCE, aunque también se puede usar
en el escritorio de Windows, MacOS y otros. Inicialmente fue creado para el desarrollo del programa de edición de imagen GIMP, aunque actualmente se usa en muchas
aplicaciones del sistema GNU/Linux.
Al igual que Qt, GTK+ permite programar con lenguajes como C, C++, C#, Java,
Ruby, Perl, PHP o Python, por lo que su capacidad de adaptación es enorme.
18
2.4. ANÁLISIS DE INTERFACES DE USUARIO
2.4.3.
Análisis y comparativa
Al igual que en el análisis y comparativa de los lenguajes de programación, la evaluación se presentará en dos partes diferenciadas. La primera es mediante la tablaresumen de evaluación de las diferentes tecnologías para los entornos gráficos y la
puntuación en cada criterio de evaluación. A continuación, tendremos una explicación
detallada de cada criterio de evaluación según el entorno, de forma que queda mucho
más claro el porqué de la elección en el nivel de realización.
La abreviatura usada para las tablas es la siguiente:
A = Alto
M = Medio
B = Bajo
Los criterios de evaluación han sido descritos en la sección 2.2.4.
Lenguaje
Java
Visual C#
Qt
Gtk
CE1
M
M
A
A
CE2
A
B
A
A
CE3
A
B
A
A
CE5
M
M
A
A
CE7
M
B
A
B
CE8
B
B
A
M
CE9
B
M
M
M
Cuadro 2.4.1: Puntuación de evaluación
19
Puntos
18
9
27
22
CAPÍTULO 2. ESTUDIO PRELIMINAR
Java
Crit. Evaluación
CE1
Puntos
3
Resultado
M
CE2
CE3
CE5
CE7
5
5
0
3
A
A
M
M
CE8
1
B
CE9
1
B
Total
Descripción
A pesar de que gran parte del código de Java
es código abierto, todavía se sigue liberando
parte de él.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Ninguna de las posibles implementaciones
de Java permite generar informes automáticamente, es necesario librerías de terceros
para poder generar informes en Java.
No tiene ninguna librería integrada de forma
nativa. Se debería recurrir a librerías de terceros.
Es posible, aunque muy costosa, la traducción de la aplicación.
18
Cuadro 2.4.2: Análisis detallado de Java
20
2.4. ANÁLISIS DE INTERFACES DE USUARIO
.NET
Crit. Evaluación
CE1
Puntos
3
Resultado
M
CE2
1
B
CE3
1
B
CE5
CE7
0
1
M
B
CE8
1
B
CE9
Total
2
M
Descripción
Microsoft sigue teniendo el control de .NET
y su implementación debe realizarse sin ningún tipo de ayuda por parte de los creadores.
La implementación para Linux se encuentra
en un estado inicial, mientras que no dispone
de implementación para Macintosh.
Por extensión de la anterior, la compatibilidad con Linux es reducida, mientras que nula para Macintosh.
Cumple a la perfección este criterio.
La implementación de la ayuda en .NET es
muy pobre, carece de asistentes y o librerias
para tal efecto.
La traducción debe hacerse mediante archivos XML de código insertado. Forma arcaica
y ruda.
Cumple a la perfección este criterio.
9
Cuadro 2.4.3: Análisis detallado de .NET
21
CAPÍTULO 2. ESTUDIO PRELIMINAR
Qt
Crit. Evaluación
CE1
CE2
CE3
CE5
CE7
CE8
Puntos
5
5
5
1
5
3
Resultado
A
A
A
A
A
M
CE9
Total
3
A
Descripción
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Mediante etiquetas en el código fuente se
puede editar el idioma con una tercera aplicación.
Cumple a la perfección este criterio.
27
Cuadro 2.4.4: Análisis detallado de Qt
GTK
Crit. Evaluación
CE1
CE2
CE3
CE5
CE7
Puntos
5
5
5
1
1
Resultado
A
A
A
A
B
CE8
3
M
CE9
2
M
Total
Descripción
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Cumple a la perfección este criterio.
Mediante extensiones y módulos es posible
tener cierta capacidad de generación de informes.
Los módulos para la redacción de ayuda son
escasos y poco desarrollados.
Aunque poco cómodo y asistido, es posible
la traducción de programas de forma productiva.
22
Cuadro 2.4.5: Análisis detallado de GTK
22
2.5. DECISIÓN FINAL
2.5.
Decisión final
Después de especificar los criterios fundamentales que deben tener las tecnologías
que se van a utilizar para el diseño y la implementación de GADA, se ha analizado cada
tecnología dentro de su rama. Se han creado dos divisiones fundamentales, la primera
la que se refiere al lenguaje de programación a usar, y la segunda, a la biblioteca y
clases para el diseño de GUIs.
En lo que respecta a los lenguajes de programación, por puntuación teníamos Python y C++. Se trata de dos formas totalmente diferentes de entender la programación.
Por un lado tenemos la compilación y por otro la interpretación, además, en el caso de
C++ nació como un lenguaje estructurado (C), antes del paradigma orientado a objetos.
C fue modificado para soportar dicho paradigma y tener soporte de clases y objetos,
por lo que aunque no de forma nativa, lo soporta a la perfección. La decisión de escoger
uno u otro queda pues un poco relegada a qué GUI vamos a utilizar.
Por otra parte, en el segundo análisis, referente a las GUIs, tenemos un claro ganador: Qt, proyecto inicial de Trolltech, empresa Noruega comprada posteriormente por
Nokia. Qt incorpora muchas librerias y/o re-implementaciones de las clases bases para
generar nuevos Widgets (como se denomina a cada “ventana” gráfica). Una parte importante de esta tecnología es la completa integración en Windows, Linux y Macintosh,
permitiendo que el mismo código, sea ejecutado en diferentes sistemas operativos y
compilados para los mismos. Además, la posibilidad que incorpora de cambiar el estilo
de la GUI de forma externa e interna con una simple hoja de estilos (CSS) similar a la
que se implementa para HTML, permite dotar de gran dinamismo al programa.
La posibilidad de usar Python en Qt existe y es totalmente viable, pero frente a
esto, tenemos la potencia de C++ junto con una total integración y adaptación de éste
a Qt. Casi podemos hablar que se creó expresamente para este lenguaje, de lo bien
integrado que está. Además de lo descrito anteriormente, tanto la documentación online
como en libro es extensa y muy completa, por lo que las fuentes son consistentes. Es
por ello, que la decisión final de usar C++ y Qt es casi una obligación.
En los próximos capítulos se mostrará la parte de requisitos, diseño, implementación
y pruebas de GADA.
23
CAPÍTULO 2. ESTUDIO PRELIMINAR
24
Capítulo 3
Especificación de requisitos
3.1.
Introducción
La Ingeniería de Requisitos o también conocida como Especificación de Requisitos
es una parte fundamental en todo desarrollo de software que se piense implementar.
El propósito fundamental es establecer unas bases para un acuerdo entre el cliente
(en este caso posibles clientes: dietistas y nutricionistas) y los desarrolladores sobre
qué tiene que ser/hacer el sistema. Esto se hace estableciendo una visión compartida
del sistema en una serie de requisitos concretos. Los requisitos que se presentarán en
esta sección, serán escritos siguiendo las guías establecidas en el IEEE Recommended
Practice for Software Requirements Specifications (830).
3.2.
Descripción general del sistema
El sistema se compone de dos partes diferenciadas. La primera la que se refiere
a la administración, y la segunda la que se ocupa de la gestión de los pacientes que
realiza cada usuario, en este caso el dietista.
En la parte de administración se dispondrá de acceso a los datos de los dietistas,
dando de alta, modificando y eliminado según sea necesario. Los usuarios se identificarán por el NIF, por lo que la edición de la información ya almacenada se realizará
en base a este campo. Por otro lado, en el apartado referido a los pacientes, el administrador podrá gestionarlos y reordenarlos según el dietista que crea oportuno. En las
partes no interactivas, el administrador podrá crear una serie de dietas genéricas o en
su defecto una selección de platos y alimentos que los dietistas utilizarán posteriormen25
CAPÍTULO 3. ESPECIFICACIÓN DE REQUISITOS
te para crear las dietas. Además, se ocupará de la impresión y creación de los informes
de dietistas, así como de realizar un seguimiento estadístico de qué platos son los más
empleados, la composición de los alimentos, etc. Una tarea más del administrador será
la modificación, inserción y borrado de platos o alimentos, alergias, así como seguros
médicos. Además, podrá modificar la apariencia y cierto comportamiento del sistema.
En la parte del dietista (o usuario), se podrán controlar los datos de los pacientes
asignados, pero no modificar esta asignación, tarea de la que se ocupará el administrador. El usuario podrá realizar las dietas con total libertad, aunque dispondrá de
la selección de platos y alimentos recomendada por el administrador. Las dietas podrán realizarse semanalmente y diariamente, ya que los pacientes pueden presentar
anomalías alimentarias inesperadas. El dietista tendrá la posibilidad de consultar las
estadísticas e imprimirlas, así como los informes de pacientes con una relación gráfica
de cambios en el hábito alimenticio.
El sistema tendrá acceso identificativo, por lo que será necesario estar registrado en
la base de datos para poder acceder.
3.2.1.
Perspectiva del producto
Interfaz del usuario
En la interacción con el sistema, el usuario final (dietista) trabajará con una interfaz
gráfica única. La interfaz deberá por lo tanto proveer funcionalidad para registrar todos
aquellos cambios que se registren en la base de datos así como en la configuración
interna del propio usuario. Además, deberá proporcionar información de la disponibilidad de actualizaciones o mensajes de otros usuarios, así como la posibilidad de enviar
información.
El propósito principal del sistema es supervisar y crear un dietario para los pacientes
asignados a cada dietista de la forma más fácil y sencilla posible. La interfaz de usuario
debería ser, asimismo, fácil e intuitivo de usar para nuevos usuarios.
Interfaz del hardware
En esta sección se especificará los requisitos mínimos para la instalación de GADA
en una máquina. Se asumirá que se dispone de conexión a internet o a un servidor
externo al lugar de la instalación del sistema en caso de que la primera no exista.
Lo siguientes requisitos han sido tomados como una base orientativa, en las última
26
3.2. DESCRIPCIÓN GENERAL DEL SISTEMA
secciones de la documentación se especificará más concretamente el resultado final de
los requisitos mínimos aquí propuestos. A pesar de ello, se pueden seguir los descritos
aquí como guía para el desarrollo de la aplicación.
Los requisitos son descritos al margen de la necesidad de cada sistema operativo,
por lo que podría darse el caso, y seguramente así sea, de que el sistema operativo
tenga unos requisitos mínimos superiores.
Procesador El sistema está creado para no abusar de los recursos del ordenador,
es por ello que con un Pentium II a 450Mhz (o equivalente) el sistema correrá sin ningún tipo de problema. Obviamente, a más velocidad de procesador, mejor trabajará el
sistema.
Memoria La memoria RAM necesaria para la correcta ejecución del sistema no debe sobrepasar los 256MB, aunque debido al uso de terceros programas puede verse
incrementada hasta los 512MB.
Espacio en disco El espacio en disco que usará GADA no debería pasar de los
100MB, aunque como en el caso anterior, podría verse incrementado por el uso de
terceros programas o copias de seguridad de los datos.
Sistema Operativo Como ya se ha analizado en la fase de pre-estudio, podrá ser
utilizado tanto en los sistemas Microsoft Windows (XP, Vista y 7) y en las diferentes distribuciones linux del mercado (como por ejemplo Red Hat, Fedora, CentOS, Mandriva,
Debian, Ubuntu y sus diferentes derivados).
Interfaz del software
En esta sección se dará una lista de la relación de software externo necesario para
el funcionamiento del sistema tanto durante la instalación como en su posterior uso.
Los contenidos de la lista dependen del ámbito del proyecto, por ejemplo qué funcionalidades o plug-in serán incluidos en el proyecto. El software listado a continuación sólo
incluye el software que se necesitan que sea instalado para continuar con la instalación
del sistema. Para cada uno de los elementos siguientes, se establecerá un nivel de
prioridad.
27
CAPÍTULO 3. ESPECIFICACIÓN DE REQUISITOS
GADA
Nombre
GADA
Mnemotécnico Gestor Avanzado de Dietas y Alimentación
Versión
0.1
Código
Código Abierto con Licencia GNU/GPL
Propósito
Crear una interfaz y aplicación para el desarrollo de las tareas
dietéticas y alimenticias
Definición
GADA, la aplicación, es el primer software para el desarrollo,
gestión y administración de dietas, alimentos y alimentación de
código abierto y con licencia libre. La finalidad es conseguir un
sistema que permita una distribución de las tareas y pueda emitir informes y estadísticas para facilitar la tarea de los Dietistas y
Nutricionistas.
MySQL
Nombre
MySQL
Mnemotécnico MySQL
Versión
5.1.24
Código
Código Abierto con Licencia GNU/GPL
Propósito
MySQL es una base de datos relacional que GADA puede usar
para almacenar información sobre los usuarios, pacientes, dietas, alimentos y estadísticas, así como para la posterior modificación de los mismos.
SQLite
Nombre
SQLite
Mnemotécnico SQLite
Versión
3.6
Código
Dominio público
Propósito
SQLite es un SGBD relacional compatible con ACID, y que está
contenida en una relativamente pequeña biblioteca en C. GADA puede usar para almacenar información sobre los usuarios,
pacientes, dietas, alimentos y estadísticas, así como para la posterior modificación de los mismos.
28
3.3. DEFINICIÓN, ACRÓNIMOS Y ABREVIATURAS
3.3.
Definición, acrónimos y abreviaturas
Para simplificar la enumeración de los requisitos, se empleará la siguiente notación:
Requisitos No Funcionales
Requisitos Funcionales
NF
RF
A la anterior abreviatura le será añadida una nueva, indicando el tipo de requisito,
por ejemplo DU para la Documentación de usuario. Le seguirá entonces un número
identificativo del requisito dentro de este subtipo. Las abreviaturas por secciones se
muestran en la siguiente tabla:
Abreviatura
CR
BD
HW
IU
IN
DG
DU
DI
DP
Nombre de la sección
Conexión a la red
Base de datos
Hardware
Interfaz de usuario
Informes
Documentación general
Documentación de usuario
Documentación de instalación
Documentación de programación
No Sección
3.5.2
3.5.2
3.5.2
3.5.2
3.5.2
3.5.3
3.5.3
3.5.3
3.5.3
Cuadro 3.3.1: Abreviaturas por sección
Un ejemplo: RF-IU03 especifica que el requisito es el tercero en la sección de Interfaz de Usuario de los Requisitos Funcionales.
3.4.
Características de usuario
El sistema está pensado para ser usado y extendido por tres clases diferentes de
usuarios: Administradores, Usuarios y Desarrolladores. Todos deben tener cierta destreza en el uso de ordenadores así como en el uso de programas. En principio no será
necesario requisito lingüístico para los administradores y usuarios, pero es recomendable que los desarrolladores tengan un conocimiento medio del inglés.
Los diferentes agentes se diferencian en el uso que harán del sistema y de las
competencias que tengan en las diferentes áreas.
29
CAPÍTULO 3. ESPECIFICACIÓN DE REQUISITOS
Administrador: El administrador es el usuario responsable de la instalación, configuración y mantenimiento del sistema. Este usuario deberá tener experiencia o
conocimientos de bases de datos y redes a nivel usuario. También es recomendable que sepa XML para futuros plug-in que se puedan incorporar.
Usuario: El usuario por defecto del programa será el dietista, por lo que su experiencia en el campo informático no debe ser necesariamente extensa. Sí que
debe tener experiencia o conocimientos en la realización de informes y en el uso
normal de programas de escritorio.
Desarrollador: Del desarrollador se espera que tenga ciertos conocimientos básicos de redes, conexión a internet, y un conocimiento profundo de desarrollo de
aplicaciones en C++ y Qt.
3.5.
Requisitos específicos
3.5.1.
Documentos a entregar
Los documentos necesarios a entregar para el CUSL son:
Documentación del sistema como está descrita en los requisitos de documentación, así como el código fuente para la documentación.
Un prototipo en el peor de los casos, en la que estén implementadas la mayoría
de las funcionalidades necesarias para la correcta prueba y uso del sistema.
El código fuente GADA, junto con la documentación del mismo para desarrolladores.
3.5.2.
Requisitos funcionales
Conexión a la red
Antes de poder realizar cualquier operación, el sistema ha que tener la certeza que
se encuentra correctamente actualizado y con todas las funcionalidades disponibles.
Además, en el caso de que la BD se encuentre alojada en un servidor remoto, deberá
poderse acceder a este servidor.
30
3.5. REQUISITOS ESPECÍFICOS
RF-CR01 Chequeo de conexión El sistema deberá, en primero lugar, chequear
si se dispone de conexión a Internet y a los diferentes servidores.
Prioridad: Media
Motivación: Esta funcionalidad no es fundamental para el correcto funcionamiento
del programa, aunque se recomienda que se pueda cumplir para poder cumplir
otro tipo de requisitos.
RF-CR02 Estado de actualización El programa tendrá que estar actualizado.
Para ello habrá de comprobar mediante conexión al sistema de actualizaciones,
de que se encuentra en la última versión.
Prioridad: Alta
Motivación: Es una prioridad que el sistema se encuentre actualizado y con todas
las funcionalidades en correcto estado. La seguridad es algo primordial.
RF-CR03 Conexión a la Base de Datos Si el sistema tiene configurada la conexión de forma remota, GADA deberá poder conectarse al servidor remoto para
realizar las transacciones correspondientes durante la ejecución de la aplicación.
Prioridad: Alta
Motivación: En caso de que la conexión sea remota, es de necesidad extrema que
se pueda conectar al servidor de la base de datos para poder realizar modificaciones locales.
RF-CR04 Envío de contraseña Para la posterior identificación del usuario, el
sistema debe producir una contraseña durante el registro que será enviada por
correo o SMS al sujeto.
Prioridad: Alta
Motivación: Es fundamental que la contraseña llegue al usuario, de forma que
éste pueda conectarse para realizar las tareas con la aplicación.
Base de datos
En todo momento, desde que se ejecuta la aplicación, se produce una comunicación con la base de datos. Además, la base de datos almacenará toda la información de
usuarios, pacientes, alimentos y dietas. Es por ello que deberá cumplir con unos requisitos mínimos de funcionamiento, que son los que se pasan a describir a continuación.
RF-BD01 Histórico de datos La base de datos debe ser capaz de almacenar
datos de los últimos 5 años en las tablas correspondientes.
Prioridad: Media
Motivación: Esta funcionalidad nos permite recuperar datos en cualquier momento
que faciliten la reincorporación de un paciente a otro centro o realizar un nuevo
tratamiento.
31
CAPÍTULO 3. ESPECIFICACIÓN DE REQUISITOS
RF-BD02 Capacidad de almacenamiento La base de datos debe proporcionar la
suficiente capacidad de almacenamiento como para guardar datos incrementales
desde los últimos 5 años. Un tamaño mínimo aceptable sería que posibilitase el
almacenamiento de 3 GB.
Prioridad: Alta
Motivación: Es una prioridad que la base de datos no produzca errores y pueda
almacenar toda la información sin tener el cuenta el tamaño que ocuparán los
datos.
Hardware
Una propiedad de la aplicación es la posibilidad de realizar informes, pero además
de poder imprimirlos. Esto implica que la aplicación debe saber manejar los periféricos pertinentes para realizar las operaciones de E/S de datos en comunicación con el
hardware.
RF-HW01 Impresión de documentos La aplicación debe ser capaz de establecer comunicación con la impresora para el tratamiento de impresión de documentos, ya sean informes o resumen de dietas.
Prioridad: Alta
Motivación: Esta funcionalidad nos permite poder disponer de los informes impresos para satisfacer posibles requisitos externos departamentales.
Interfaz de usuario
Los siguientes requisitos describen varias vistas que deben estar disponibles en el
sistema y algunos detalles de cómo la información debe ser presentada al usuario. También especificará la forma en que se producirá la intercomunicación entre los diferentes
usuarios o entre la jerarquía administrador-usuario.
RF-IU01 Identificación de usuario Para acceder a la aplicación será necesaria
la correcta identificación del usuario, que se hará mediante un nombre de usuario
(NIF) y una contraseña, que habrá sido enviada por correo electrónico o SMS.
Prioridad: Alta
Motivación: Es conveniente por motivos de seguridad que el sistema sólo permita
el acceso a aquellos que estén registrados por un administrador, de forma que
quede asegurada que son usuarios legítimos para manejar la aplicación.
32
3.5. REQUISITOS ESPECÍFICOS
RF-IU02 Alarma El programa tendrá que tener implementada una sección en
la que se active una alarma en caso de recibir un mensaje de otro usuario o
administrador. También podrá ser una actualización del software.
Prioridad: Media
Motivación: El plan es que todo usuario sea informado de forma inmediata si se
produce algún cambio urgente en la aplicación o en las dietas de los pacientes.
RF-IU03 Gestión de usuarios El administrador del sistema debe poder crear,
modificar y borrar usuarios en cualquier momento.
Prioridad: Alta
Motivación: Una de las tareas del administrador es la gestión de usuarios.
RF-IU04 Gestión de pacientes Tanto administrador como el usuario deben poder
crear, modificar y borrar usuarios en cualquier momento. En caso del administrador, además se podrá modificar la asignación de los pacientes.
Prioridad: Alta
Motivación: La finalidad de GADA es la gestión de los pacientes y de sus dietas,
en este caso es imperioso que el primero de los dos se lleve a cabo de forma
correcta.
RF-IU05 Gestión de alimentos y dietas El administrador del sistema debe poder crear, modificar y borrar alimentos y dietas. Además, los usuarios deben poder
gestionar estas dietas a la hora de crear los plannings correspondientes. Las dietas pueden ser generales para todos los pacientes o personales para una paciente
en concreto.
Prioridad: Alta
Motivación: Las dietas es la parte fundamental del sistema, por lo que su correcto
funcionamiento debe ser casi una obligación.
RF-IU06 Gestión de alergias El administrador del sistema debe poder crear, modificar y borrar alergias. Además, los usuarios deben poder marcar estas alergias
en los pacientes que las tengan.
Prioridad: Alta
Motivación: Las alergias a los alimentos es un inconveniente importante a la hora
de elaborar dietas.
RF-IU07 Registro de acceso al sistema En todo momento el administrador podrá consultar un registro de los accesos a la aplicación que haya realizado cada
usuario, filtrando por usuario o fecha.
Prioridad: Media
Motivación: En la práctica muchas veces es necesario saber qué usuario realizó
qué operación sobre un paciente en concreto, tener un registro de los cambios es
la forma más fácil de conseguirlo.
33
CAPÍTULO 3. ESPECIFICACIÓN DE REQUISITOS
Informes
A continuación se presentan los requisitos para la parte de informes que deberá
poder realizar GADA. Estos informes son un complemento para el correcto análisis y
gestión a posteriori de los datos de los pacientes y usuarios del sistema.
RF-IN01 Informes de usuario El administrador debe poder imprimir informes de
actividad y evolución de los diferentes usuarios del sistema.
Prioridad: Media
Motivación: Los informes son una parte importante en la gestión de los usuarios,
pues permiten analizar y crear estadísticas de los datos almacenados.
RF-IN02 Informes de paciente Los usuarios deben poder imprimir informes de
actividad y evolución de sus respectivos pacientes.
Prioridad: Media
Motivación: Los informes son una parte importante en la gestión de las dietas,
pues permiten analizar y crear estadísticas de los datos almacenados.
RF-IN03 Estadísticas El sistema se ocupará de realizar y publicar estadísticas
de los usuarios y de los pacientes a petición del usuario que se encuentre usando
el programa.
Prioridad: Baja
Motivación: Los informes son una parte importante en la gestión de las dietas,
pues permiten analizar y crear estadísticas de los datos almacenados.
3.5.3.
Requisitos no funcionales
Documentación general
Los siguientes requisitos serán compartidos por todos los documentos:
NF-DG01 Idioma de la documentación Toda la documentación debe estar redactada en español y además en inglés.
Prioridad: Alta
Motivación: Es necesario que la documentación esté en español, además por
motivos de adaptación y colaboración, también se realizará una documentación
actualizada en inglés.
NF-DG02 Entrega de documentación Toda la documentación debe ser entregada a todas las partes, jurado del CUSL, usuarios y desarrolladores. El formato de
34
3.5. REQUISITOS ESPECÍFICOS
entrega será Adobe Portable Document (pdf).
Prioridad: Media
Motivación: La documentación es una de las partes importantes que debe ser
entregada al jurado del CUSL.
Documentación de usuario
NF-DU01 Documentación de administrador Toda la documentación debe contener las referencias o la información necesaria de forma que el administrador no
necesite información auxiliar para la instalación y uso del sistema.
Prioridad: Media
Motivación: El administrador no debería de realizar búsquedas mas allá del informe del proyecto y sus referencias, para usar el sistema.
NF-DU02 Casos de uso La documentación del usuario debe describir las principales funciones y la relación con el sistema que debe tener el mismo.
Prioridad: Media
Motivación: Es importante que dicha funcionalidad quede reflejada para mejor entendimiento de futuros desarrollos o de terceras personas que entren a colaborar
en el proyecto.
Documentación de instalación
NF-DI01 Documentación de instalación La documentación de instalación debe ser suficiente para que el administrador o el desarrollador pueda realizar una
compilación y aplicación del programa de forma correcta.
Prioridad: Media
Motivación: La instalación ha de poderse realizar de nuevo en un entorno productivo.
Documentación de programación
NF-DP01 Documentación para el desarrollador Todo el código fuente realizado
en el proyecto, debe de estar documentado de forma segura, con descripciones
de las funciones y los componentes relacionados.
Prioridad: Media
Motivación: Para futuros desarrollos y actualizaciones del sistema, es necesario
35
CAPÍTULO 3. ESPECIFICACIÓN DE REQUISITOS
disponer de una documentación del trabajo previo escrita sobre el proyecto o sus
mejoras.
NF-DP02 Documentación del código Todo el código C++ y Qt debe estar documentado usando Doxygen. Esta documentación también deberá estar incorporada y ser enviada al final de proyecto a todas las partes.
Prioridad: Media
Motivación: Para futuros desarrollos y actualizaciones del sistema, es necesario
disponer de una documentación del trabajo previo escrita sobre el proyecto o sus
mejoras.
3.6.
Casos de uso
Los Casos de Uso (CU) es una técnica para realizar una estimación del esfuerzo, en
horas realizadas o líneas de código, que se necesitan para el desarrollo del software. La
técnica, introducida por Gustav Karner de la Universidad de Linkøping, toma en cuenta
factores como la complejidad de los casos de uso, la complejidad técnica del software
para ser desarrollado y la experiencia y capacidad de los desarrolladores. Después,
calcula una puntuación para los casos de uso a través de una formula de peso, la cual,
a su vez, puede ser usada para establecer el número de horas.
En la siguiente imagen se puede ver el diagrama de casos de uso para la aplicación.
Se pone como ejemplo el caso de uso de la conexión a a la base de datos.
36
3.6. CASOS DE USO
Figura 3.6.1: Diagrama de los casos de uso
37
CAPÍTULO 3. ESPECIFICACIÓN DE REQUISITOS
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-08 Conexión a la BD
Administrador del sistema
El administrador tiene los privilegios necesarios para administrar los usuarios y datos de la BD.
El administrador del sistema tiene una visión general completa de todos los componentes del SGBD sobre el que opera la
GADA.
El administrador del sistema:
El administrador escribe sus credenciales y se autentica.
El administrador ejecuta una sentencia en la base de
datos.
El administrador elige una tabla para obtener la información detallada.
el administrador actúa sobre las tablas o usuarios de la
consulta.
Extensiones
1 El sistema falla al autenticar al administrador
.1 El intento erróneo de login queda grabado en el log
del sistema.
.2 El administrador debe volver a poner los datos y
las credenciales para la autenticación, o cancelar.
38
Capítulo 4
Diseño
4.1.
Introducción
Este capítulo describe el diseño del software del sistema que será implementado
en la siguiente fase. Se ha basado el diseño en el estándar IEEE Standard 1016-1998
sobre las prácticas recomendadas para la descripción del diseño de software. Algunas
partes han sido añadidas o eliminadas para ajustarse el estándar al proyecto de GADA.
Se ha incluido diagramas y modelos para una mejor comprensión del texto.
El diseño del software debe servir como un documento paso-a-paso para la implementación posterior. Después de la lectura de este documento, el lector deberá estar
capacitado para entender cómo está estructurado el sistema. El razón más importante
es establecer una guía para los futuros desarrolladores, de forma que permita entender
y desarrollar extensiones o actualizaciones, así como participar activamente en el proyecto. Hay que remarcar que no es una guía de instalación ni de configuración, sino de
cómo se ha desarrollado la aplicación.
4.2.
4.2.1.
Desarrollo y herramientas de modelado
Lenguaje de programación elegido
Existe un gran número de razones a tener en cuenta cuando se escoge un lenguaje
de programación, pero en este proyecto concretamente no ha sido así. Debido a que el
desarrollo del sistema iba a ser de forma individual, se ha decidido por aquel que cono39
CAPÍTULO 4. DISEÑO
cía en mayor profundidad. Las razones han sido varias, entre las que cabe destacar las
siguientes:
Era el lenguaje que conocía más detalladamente y con el que más he trabajado.
El tiempo para el desarrollo de GADA es limitado, por lo que no era muy viable el
aprendizaje de un nuevo lenguaje de programación.
La buena compatibilidad del complemento gráfico para interfaz, ya que existe una
integración prácticamente completa entre C++ y Qt.
La portabilidad (uso en diferentes sistemas operativos) que proporciona Qt.
Es por eso por lo que se ha decidido a utilizar C++ para la programación base de la
aplicación y Qt para el entorno gráfico e interfaz de GADA.
C++ y Qt
C++ Como se cita en el artículo de la wikipedia [?], C++ se diseñó a mediados de los
años 1980 por Bjarne Stroustrup. La intención fue extender C para que pudiera manipular objetos. Es por ello que desde el punto de vista de los LOO, C++ es un lenguaje
híbrido. Más tarde se han añadido facilidades de programación genérica, que se sumó
a los otros dos paradigmas que ya estaban admitidos (programación estructurada y la
programación orientada a objetos). Por esto se suele decir que el C++ es un lenguaje
de programación multiparadigma.
Actualmente existe un estándar, denominado ISO C++, al que se han adherido la
mayoría de los fabricantes de compiladores más modernos. Existen también algunos
intérpretes, tales como ROOT. Una particularidad del C++ es la posibilidad de redefinir los operadores (sobrecarga de operadores), y de poder crear nuevos tipos que se
comporten como tipos fundamentales.
Qt Qt es una biblioteca multiplataforma para el desarrollo de GUI y aunque también es
utilizada para la implementación de aplicaciones sin interfaz gráfica como herramientas
de la consola de comandos de *nix y servidores. Qt es utilizada principalmente en KDE.
Qt utiliza C++ de forma nativa.
Qt se está disponible principalmente para sistemas de tipo *nix (Linux, BSDs, Unix),
para Apple Mac OS X, y también para sistemas de Microsoft, como Windows (XP, Vista
y 7).
40
4.2. DESARROLLO Y HERRAMIENTAS DE MODELADO
4.2.2.
IDE elegido
Qt-Creator
La herramientas que más ayuda en el desarrollo de una aplicación es el IDE. Se
trata de un programa con multitud de facilidades para facilitar el desarrollo del software
y hacerlo más intuitivo. Las facilidades suelen incluir un editor de texto con sintaxis resaltada, compilación automática y también un depurador. Normalmente puede soportar
varios lenguajes de programación.
Para el desarrollo de GADA estaba bastante claro qué IDE se iba a utilizar, pues
tanto para Linux como para Windows se dispone de Qt-Creator, que es realmente poderoso en cuanto a la interfaz e integración de ayuda. En él disponemos de ayuda
rápida para saber las definiciones de los métodos, búsqueda de funciones, variables,
etc. Además dispone de un depurador de varias vistas, donde podemos ver las salidas
de errores de compilación, de ejecución, así como el valor de los parámetros durante
el desarrollo de la prueba.
4.2.3.
Diagramas de modelado elegido
Una buena forma de tener una vista general de la aplicación es usando diagramas y
modelos. UML es un estándar muy utilizado, que define una serie de diagramas usados
para describir aplicaciones y soluciones software de forma completa.
En el documento IEEE Recommended Practice for Software Design Descriptions
[?] se recomienda describir el sistema en cuatro vistas de diseño. Estas vistas quedan
descritas a continuación.
Vista de diseño
Diagrama de descomposición
Diagrama de dependencia
Diagrama de interfaz
Diagrama detallado
Descripción
Muestra el sistema en entidades.
Describe las relaciones entre entidades y los
recursos del sistema.
Se compone de una lista de todo lo que
el programador o tester necesita saber para
usar el diseño en entidades para implementar el sistema.
En el se describe el diseño detallado interno
de una entidad.
Cuadro 4.2.1: Vistas de diseño recomendadas por el IEEE
41
CAPÍTULO 4. DISEÑO
4.3.
Descripción del sistema
El propósito de esta sección es ofrecer una visión técnica del sistema. Se describirá
cómo las diferentes partes del programa se conectan entre ellas y al núcleo de GADA.
Una visualización de la aplicación y de la interacción de esta con los usuarios finales y
los componentes externos se muestra en la imagen siguiente:
Figura 4.3.1: Diseño de alto nivel
El sistema está dividido en una parte cliente y otra servidor. Se trata de una partición
lógica, por lo que es totalmente posible hacer funcionar ambas partes (la aplicación
entera) en el mismo sistema.
42
4.4. BASE DE DATOS
La figura 6.6.1 nos ofrece una descripción de alto nivel de la aplicación y qué módulos la componen. El primero en ser descrito será el que respecta a la base de datos; una
vez cubierto este módulo, veremos el que respecta al núcleo de GADA, concretamente
la parte que se encarga de la entrada/salida de datos de la base de datos. Por último,
se especificará el módulo encargado de la conexión respecto al exterior, el comportamiento con los usuarios y las tareas externas, tal como informes y la comunicación con
otros módulos.
Figura 4.3.2: Módulos en el sistema
4.4.
Base de Datos
En esta sección se describirá la parte de la base de datos relacionada con GADA.
La descripción irá de menos a más detalle, empezando por la descripción general, después con el diseño planeado en el que se mostrará con detalle la estructura y relaciones
que debería seguir, para acabar en última instancia con el esquema y la explicación del
mismo de forma completa.
43
CAPÍTULO 4. DISEÑO
4.4.1.
Visión general
Como ha quedado claro después de la descripción del sistema en el apartado anterior, GADA necesita de un almacenamiento lógico de toda la información que se maneja
durante su ejecución. En este caso, la base de datos no debe tener una expansión exponencial, por lo que, a pesar de que sea necesario almacenar los datos históricos de
los pacientes, el almacenamiento no debería verse comprometido en el espacio que
ocupa. Sí que se necesita una base de datos que almacene la información de los diferentes agentes implicados (administrador, usuarios y pacientes) y las relaciones que se
establecen entre estos y los productos del sistema (alimentos, dietas, alergias, alarmas
y citas).
Es muy importante que las relaciones que se establezcan estén perfectamente descritas y acotadas, ya que un fallo en la integridad referencial o en la especificación de
los datos podría crear problemas de repetición y existencia de datos desactualizados o
incluso erróneos. Es por ello que deberá darse una solución a todos los problemas que
vayan apareciendo durante la fase de diseño.
4.4.2.
Diseño detallado
En este apartado veremos qué tablas y relaciones entre ellas se ha necesitado para
definir una base de datos coherente y con el mínimo número de problemas por solventar. El diseño óptimo especifica que no debería existir ningún problema a solventar de
forma auxiliar, pero las necesidades reales lo contradicen.
En el caso de GADA, se ha optado por una relación de tablas generales, en las que
se encuentra toda la información de forma concentrada y en las que se utilizan tablas
auxiliares para las relaciones y datos que surgen de la combinación de las generales.
Se ha supuesto que en la aplicación pueden existir varios administradores, a pesar
de que estos no tienen responsabilidad concreta sobre los usuarios. Los administradores simplemente pueden acceder o editar ciertas características que los usuarios
deben acatar. Al contrario que esto, los usuarios sí que tienen asignado cierto número
de pacientes y estos están a su vez asignados a un numero múltiple de alergias.
Dada la extensión de la base de datos se mostrará en la documentación por módulos
temáticos. Los módulos temáticos no es mas que un resumen de tablas y relaciones de
cada parte de la aplicación. En ella podemos encontrar los siguientes apartados:
Administración
44
4.4. BASE DE DATOS
Pacientes
Alimentos
Dietas
Localización
En la tabla 4.4.1 podemos ver las relaciones establecidas entre las diferentes entidades pertenecientes, principalmente al apartado de administración. Aquí podemos
ver la tabla correspondiente a los datos de la empresa. Se ha elegido que estos datos
también estén disponibles en la base de datos por si en un futuro la aplicación funcionara de forma centralizada para varios centros. A pesar de ello, no se ha creado la
relación entre el administrador y la empresa, por lo que la inclusión de la tabla es más
una motivación para futuros desarrollos, que el proporcionar un uso real.
45
CAPÍTULO 4. DISEÑO
Figura 4.4.1: EER de la parte de Administración
Con la tabla Alarmas también se da un caso curioso. Se ha empleado para formalizar la relación reflexiva entre usuarios. El sentido de esto es que un usuario puede
crear múltiples alarmas para múltiples usuarios, incluido él mismo. Sí que ha tenido en
cuenta que la hora de envió no pueda ser la misma para dos alarmas creadas por el
mismo usuario. Esto se ha hecho para prevenir posibles repeticiones accidentales.
La segunda parte de las cuatro en que está dividida la base de datos, es la de Pacientes. Como vemos, el paciente tiene varias tablas para el sólo, ya que la información
a almacenar es bastante extensa. Ésta comprende la información de citas y notas, los
horarios de comidas, las intolerancias y alergias, así como las analíticas y los datos
antropométricos. Cada paciente puede tener varios registros de analíticas y datos an46
4.4. BASE DE DATOS
tropométricos, además para evitar sobrecarga de la base de datos, se ha optado por
almacenar en intolerancias sólo los alimentos que las producen, se supondrá que el
resto no producen problemas reconocidos.
Figura 4.4.2: EER de la parte de Pacientes
47
CAPÍTULO 4. DISEÑO
En la siguiente tabla, correspondiente al apartado de Alimentos, podemos ver la
complejidad se ha incrementado, y ha sido necesaria la creación de varias tablas auxiliares en pro de no tener una gran tabla general de alimentos. En la figura 4.4.3 podemos comprobar como no hay una tabla “Platos” ya que se utiliza la misma que para
Alimentos, pero a la que se añade un campo llamado “Plato” que tendrá valor TRUE o
FALSE, y que será el encargado de decidir qué tipo de alimento es.
Figura 4.4.3: EER de la parte de Alimentos
48
4.4. BASE DE DATOS
En la siguiente tabla, correspondiente al apartado de Dietas, podemos ver que a
pesar de la gran cantidad de relaciones que parece existir, es bastante simple. La relación entre “DIETA_DIA” y “ALIMENTO” es debido a las claves ajenas de la primera;
el resumen que se podría dar es que cada dieta en cada día está compuesta por un
número determinado de alimentos, cada uno perteneciente a un momento del día (esto
se comprueba en la ejecución de la transacción). Por lo demás es bastante sencillo de
comprender el esquema de la figura 4.4.4.
Figura 4.4.4: EER de la parte de Dietas
El último esquema de la base de datos es el de la localización. Es un esquema sin
representación en la GUI, ya que en él sólo se definen las relaciones entre las tablas
de localización, como son el código postal, la población, la provincia o el país.
49
CAPÍTULO 4. DISEÑO
Figura 4.4.5: EER de la localización geográfica
4.4.3.
Solución a problemas del diseño
A pesar de la complejidad de la base de datos, sobre todo en lo que se refiere a
congruencia y coherencia en los datos, no ha sido necesario tomar medidas auxiliares
al esquema entidad relación. El modelo EER cubría todas las restricciones que eran
necesarias, tanto de actualización como de borrado.
Disparadores (Triggers)
Hasta el momento no ha sido necesaria la implementación de disparadores en la
base de datos.
50
4.5. DESCRIPCIÓN DE LA GUI
Vistas
Podría usarse vistas para la presentación de los datos de los alimentos, al dividirlos
en alimentos y platos. Finalmente se ha optado por realizar esta tarea desde la implementación de la aplicación y ayudarla añadiendo un campo más a la tabla, pero de
tratamiento interno.
4.4.4.
Requisitos cumplidos
RF-BD01 - Cumplido con éxito. Desde la misma aplicación se controla que se
puedan añadir datos anteriores a la fecha actual.
RF-BD02 - Cumplido con éxito. El mismo SGBD nos ofrece esta funcionalidad.
4.5.
Descripción de la GUI
Este sección describirá con detalle el diseño del módulo de la GUI o interfaz de
usuario. Primero se ofrecerá una visión descriptiva general y a continuación una descripción y diseños detallados de cada parte que la componen.
4.5.1.
Visión general
El módulo de la GUI se compone de las siguientes clases y subclases:
QLogin
QMainWin
QCentralWindow
QAlarm
QAdmin
QAccessRecord
QPatient
51
CAPÍTULO 4. DISEÑO
QAnalysis
QAnthropometry
QIntolerance
QNote
QTimes
QDietPanel
QDietList
QDishPanel
QDishEdition
QFoodPanel
QFoodEdition
QDietWizard
4.5.2.
Diseño detallado
En la siguiente imagen 4.5.1 podemos ver la jerarquía de clases y sus dependencias
y/o usos. Se ha resuelto no representar la dependencia entre las diferentes clases, por
lo que el enlace no representa una asociación, sino que dichas clases están relacionadas. Sí que se ha intentado representar una jerarquía, como se puede observar por la
colocación de las clases en la imagen, esto responde a que en una aplicación de este
tipo, todo se desarrolla a partir de una clase base inicial, en este caso QMainWin.
El diagrama de clases se corresponde con la interfaz de usuario, aunque por motivos
obvios se han eliminados las clases propias de Qt. Se entiende que la relación de
uso se realiza de forma descendente, esto quiere decir, que la clase A (en el nivel
superior del diagrama ) es la que usa a la clase B (en un nivel inferior). En la parte baja
del diagrama vemos que todas las relaciones de uso confluyen hasta QQueryThread;
esto quiere decir que todas esas clases emplean un objeto de ese tipo para realizar la
conexión a la base de datos.
A pesar de que se representa la conexión a la base de datos, no es el diseño real,
sino una aproximación para que se entienda de cara a una vista de clases. El diseño lógico de la conexión a la base de datos se verá en el siguiente capítulo, ya que
52
4.5. DESCRIPCIÓN DE LA GUI
corresponde al núcleo de la aplicación; es ahí donde se explicará la relación jerárquica entre la clase EntidadNegocio y sus descendientes, representada como una clase
genérica EN<T>. Además de ello, se presenta también un diagrama de secuencias de
una caso particular, como ejemplo de diseño de funcionalidad, el resto de análisis funcionales correspondientes se pueden encontrar en los anexos del capítulo al final de la
documentación.
53
CAPÍTULO 4. DISEÑO
GADA
QLogin
+main() : int
QMainWidget
QAlarm
QMessage
QUserDataEdition
QCentralWidget
QPatient
QAdmin
QDietList
QDiet
QPrintReport
54
QNewPatient
QAssignDiet
QAnthropometry
QIntolerance
QTimes
QAnalysis
QFoodPanel
QDishPanel
QNote
QFoodEdition
StartPage
QDietWizard
CreationPage
CreationPageDialog
CAD<T>
EN<T>
EntidadNegocio
QQueryThread
QConnection
Figura 4.5.1: Diagrama de clases
ShowPage
QDishEdition
ConfirmationPage
4.5. DESCRIPCIÓN DE LA GUI
Respecto al diseño de los widgets correspondientes a las diferentes clases relatadas
en el punto anterior, tenemos las siguiente:
QLogin Este diálogo nos mostrará dos campos para poner el usuario y la contraseña
para identificarnos para entrar en el sistema.
Figura 4.5.2: Captura de la GUI de QLogin
QMainWidget Esta es la clase principal del programa, desde aquí se cargan todos los
controles y widgets secundarios. Esta compuesta por un menú y una sección central
que se desarrolla en la siguiente clase.
QCentralWidget Desde aquí se controla el widget central del programa. Esta compuesta por un control de tabulación que gestionará las diferentes partes del programa:
Administración, Pacientes y Dietas.
QAlarm Módulo que se ocupa de mostrar las alarmas recibidas, emitidas, así como
crear los controles necesarios para crear nuevas alarmas. Las alarmas serán avisos
rápidos y urgentes entre el administrador y los usuarios o entre los usuarios.
55
CAPÍTULO 4. DISEÑO
Figura 4.5.3: Captura de la GUI de QAlarm
Figura 4.5.4: Captura de la GUI de creación de QAlarm
56
4.5. DESCRIPCIÓN DE LA GUI
QAdmin Módulo principal del área de administración. Desde aquí se puede añadir
información de usuarios, editarlos, borrarlos y añadir alarmas. Además es desde aquí
dónde se crean los informes de usuarios.
Figura 4.5.5: Captura de la GUI de QAdmin
57
CAPÍTULO 4. DISEÑO
QPatient Módulo principal del área de pacientes. Desde aquí se maneja mediante
botones y otros widgets, toda la información referente a los pacientes, datos antropométricos, datos médicos, intolerancias, notas de información y los informes. También
se puede editar la información del paciente y en el caso de que sea un administrador el
que utilice esta interfaz, podrá asignar los pacientes a los dietistas.
Figura 4.5.6: Captura de la GUI de QPacient
58
4.5. DESCRIPCIÓN DE LA GUI
QAnalysis Widget que se ocupa de crear nuevas analíticas de un paciente dado.
Figura 4.5.7: Captura de la GUI de QAnthropometry
QAnthropometry Widget que permite rellenar toda la información antropométrica referente a un paciente seleccionado. Además aquí se realizan los diferentes cálculos.
59
CAPÍTULO 4. DISEÑO
Figura 4.5.8: Captura de la GUI de QAnthropometry
60
4.5. DESCRIPCIÓN DE LA GUI
QIntolerance Widget de intolerancias, donde podremos crear y gestionar las intolerancias alimentarias de cada paciente.
Figura 4.5.9: Captura de la GUI de QIntolerance
QNote Widget utilizado de forma similar a las alarmas de los usuarios, pero en este
caso orientada a apuntar notas de los pacientes.
Figura 4.5.10: Captura de la GUI de QNote
61
CAPÍTULO 4. DISEÑO
QTimes Clases para el control de los horarios de alimentación de los pacientes.
Figura 4.5.11: Captura de la GUI de QTimes
QDiet Módulo principal del área de dietas. Desde aquí se podrán crear y editar, dietas,
platos y alimentos. La interfaz está configurada para que dependiendo de qué botón se
pulsa, se active un widget u otro.
QDietList En ésta clase se implementará el listado de dietas y la posibilidad de editarlas.
62
4.5. DESCRIPCIÓN DE LA GUI
Figura 4.5.12: Captura de la GUI de QDietPanel
QDietWizard Módulo de creación de las dietas. Mediante varios controles podremos
seleccionar los platos y/o alimentos que queremos incluir en la dieta. También podremos decidir el número de semanas.
QDishPanel Módulo de gestión de platos, desde aquí podremos gestionar los platos existentes. En caso de querer editarlos, se invocará a la clase que se describe a
continuación.
63
CAPÍTULO 4. DISEÑO
Figura 4.5.13: Captura de la GUI de QDishPanel
QDishEdition Clase con los métodos necesarios para crear un widget de edición de
platos. Aquí se seleccionarán los diferentes alimentos en sus cantidades para redactar
los platos.
64
4.5. DESCRIPCIÓN DE LA GUI
Figura 4.5.14: Captura de la GUI de QDishEdition
QFoodPanel Widget compuesto de una tabla resumen de alimentos y un módulo
QFoodEdition descrito a continuación. Se emplea para la creación de los alimentos.
65
CAPÍTULO 4. DISEÑO
Figura 4.5.15: Captura de la GUI de QFoodPanel
QFoodEdition Módulo de creación estricta de alimentos. Desde aquí se podrá editar
y añadir alimentos con todas sus propiedades.
66
4.5. DESCRIPCIÓN DE LA GUI
Figura 4.5.16: Captura de la GUI de QFoodEdition
67
CAPÍTULO 4. DISEÑO
4.5.3.
Requisitos cumplidos
Los requisitos cumplidos relativos a la GUI son los siguientes:
RF-IU01 - Cumplido con éxito, como se puede ver en la imagen 4.5.2
RF-IU02 - Cumplido con éxito, como se puede ver en la imagen 4.5.3
RF-IU03 - Cumplido con éxito, como se puede ver en la imagen 4.5.5
RF-IU04 - Cumplido con éxito, como se puede ver en la imagen 4.5.6
RF-IU05 - Cumplido con éxito, como se puede ver en la imagen 4.5.12, 4.5.13 y
4.5.15
RF-IU06 - Cumplido con éxito, como se puede ver en la imagen 4.5.9
RF-IU07 - Cumplido con éxito. Se tramita de forma interna en la clase QLogin.
4.6.
Descripción del núcleo
En esta sección se describirá la forma y clases que forman el núcleo de la aplicación.
Se explicará como se relaciona con la parte interna del sistema y con la base de datos.
4.6.1.
Visión general
El núcleo está formado por tres capas diferenciadas. La primera es la que conforman
las entidades de negocio (EN en lo sucesivo). En los EN es donde se produce el primer
intercambio de información, ya que reciben los datos de los diferentes módulos de la
GUI y de los componentes de acceso a datos. Estos componentes de acceso a datos
(CAD en lo sucesivo) son los encargados de realizar las transacciones con la base de
datos. En la figura 4.6.1 se muestra un diseño descriptivo del núcleo.
68
4.6. DESCRIPCIÓN DEL NÚCLEO
Figura 4.6.1: Esquema conceptual de la arquitectura lógica del núcleo
Como podemos ver, existe una tercera capa, que es donde se produce toda la importación de librerías, clases de Qt y funciones especiales de expresiones regules y
constantes.
4.6.2.
Descripción detallada
En este apartado veremos qué clases componen los EN y los CAD y para qué se utilizan. A continuación se explicarán el resto de archivos de la aplicación, pertenecientes
a la tercera capa del núcleo.
69
CAPÍTULO 4. DISEÑO
EN y CAD
EntidadNegocio: Esta clase es la clase padre de la que heredan todas las demás. Es una clase virtual pura, por lo que no tiene implementación, el porqué su
uso se explicará más adelante.
ENAlarma y CADAlarma: Aquí se implementan las funciones propias de los mensajes y alarmas entre usuarios.
ENAlergia y CADAlergia: Mediante estas clases se comunica la aplicación con
la base de datos para la gestión de las alergias.
ENAlimento y CADAlimento: La inserción, modificación y borrado de los alimentos se realiza en estas clases. Además, desde aquí se gestionan los nutrientes,
aminoácidos y el resto de propiedades de los alimentos.
ENAnalisis y CADAnalisis: Aquí se implementan los métodos y funciones necesarias para elaborar y gestionar los análisis de los pacientes.
ENAntropometria y CADAntropometria: Los datos antropométricos son manejados desde este EN y CAD.
ENDieta y CADDieta: Mediante estos componentes, toda la información de dietas, sea el tipo, lista de existentes, etc. se gestiona.
ENHorario y CADHorario: Los horarios de comidas de los pacientes necesitan
de un método de comunicación entre la GUI y la base de datos, desde estas
clases encontraremos las funciones necesarias para ello.
ENIntolerancia y CADIntolerancia: Toda la implementación relacionada con las
intolerancias alimentarias de los pacientes se realiza desde aquí.
ENLocalizacion y CADLocalizacion: Se ocupa del manejo de la información de
localización. En concreto de las tablas de población, provincia y código postal.
ENLogin y CADLogin: Esta clase sólo se utiliza para el registro de entrada, por
lo que su utilidad se reduce a la identificación del apartado de la GUI QLogin.
ENNota y CADNota: Al igual que con las alarmas, desde aquí manejamos todas
las notas de los dietistas sobre sus pacientes.
ENPaciente y CADPaciente: La gestión de información de los pacientes se realiza desde esta clase.
ENRegistroAcceso y CADRegistroAcceso: Desde aquí se realiza la gestión de
los accesos de los usuarios.
ENUsuario y CADUsuario: Toda la información de los usuarios, sobre todo empleada en la parte administrativa de GADA, está implementada aquí.
70
4.6. DESCRIPCIÓN DEL NÚCLEO
Librerias, clases auxiliares y constantes
QInclude.h: Aquí se reúnen todas las clases y módulos desarrollados por QtNokia. Además también se colocará aquí las clases especiales que dependan del
sistema operativo y las propias de C/C++.
singleFunctions: Ficheros de cabecera que almacena las constantes del sistema, como nombre de archivos, rutas de directorio, etc. Los mensajes de error
también están almacenados aquí.
QConnection: Fichero con las funciones de configuración y conexión con la Base
de Datos.
QPrintReport: Se ocupa de toda la gestión de los informes. Aquí se implementan
los métodos necesarios para imprimir los diferentes informes de GADA.
4.6.3.
Diseño lógico
En el diseño lógico de la documentación podemos encontrar los diagramas que
explican el funcionamiento interno que realiza la aplicación partiendo de la acción que
realiza el usuario en la interfaz gráfica. Es a partir de ese momento cuando se analiza
que sucede, cómo y dónde. Como se puede ver en la imagen 4.6.2 se orienta a la
base de datos, ya que la finalidad del programa es realizar una consulta, inserción,
modificación o borrado en la base de datos para mostrar los datos actualizados. En
dicha imagen podemos ver como se nombra de nuevo a la clase EntidadNegocio.
Conexión mediante threads
La aplicación ha sido diseñada para realizar una conexión lo más eficiente posible.
Durante las primeras pruebas, la base de datos se encontraba en local, por lo que
la conexión, la recogida y el envío de datos se realizaban de forma instantánea. El
problema surgió cuando se almacenó la base de datos en un servidor remoto, ya que
los tiempos de conexión crecieron exponencialmente hasta situarse en 8 segundos para
mostrar datos de ciertas tablas o realizar acciones sobre ellas.
Por supuesto esta demora es impensable para el correcto uso de la aplicación, por
lo que se analizaron las peticiones y su orden y se vio que no había problema ninguno
en mantenerlas en un segundo plano mientras el usuario continuaba utilizando el programa. Un ejemplo es la inserción de un paciente. Antes se mantenía el programa a la
espera de que se realizara toda la operación; esto implica que cuando se pulsaba un
71
CAPÍTULO 4. DISEÑO
botón, este se quedaba en estado pulsado hasta que la acción se hubiera realizado.
En una acción simple de inserción no hay problema, ya que se realiza una transmisión
de datos y una respuesta booleana, el problema es que muchas veces estas acciones comportan dos o tres comprobaciones de datos en la BD, alguna inserción más
y tal vez alguna actualización. Es en estos casos cuando la demora alcanzaba cotas
insoportables.
La solución fue almacenar dichas peticiones en un thread, que se ejecutaría cuando
el usuario pulsara el botón y que avisaría con un mensajes cuando la acción estuviera
realizada. Después de una optimización de las consultas, y de la encapsulación de las
mismas en una nueva interfaz, el tiempo de respuesta había bajado a 3 segundos, que
junto con la respuesta normal de la aplicación, daba como resultado un comportamiento
normal de la misma.
Problema El problema surgió cuando consultando la documentación de Qt, se encontró que era imposible de realizar un thread para múltiples EN. La solución pasaba por
crear un thread por EN, lo cual daba lugar a multitud de archivos con el mismo código,
o crear un template para pasar el EN como dato genérico.
Al elegir esta forma, que en principio iba a solucionar el problema de los threads,
surgió otro problema y es que no existe implementación de SIGNAL y SLOT para las
clases template. La aplicación necesita emitir señales para poder indicar cuando se
debe actualizar una tabla, un ComboBox, etc.
Solución La solución final que se adoptó, fue crear una clase abstracta de la que heredaran todas las demás EN, esta no tiene ninguna implementación de ningún método,
sólo las declaraciones que se desarrollarán en las clases hija; de esta forma podemos
emitir señales y devolver datos del tipo que sean, aunque por defecto se realizan en
QVariant. Aunque de cara al programador de la interfaz, la petición a la base de datos
se realiza mediante QQueryThread (clase encargada del acceso mediante threads), a
esta se le pasa un EN que de forma interna esta asociado a un id. Mediante este id
se busca qué método se va a ejecutar y se devuelve la señal por defecto de petición
realizada con éxito. Para verlo mejor vamos a ver los siguientes diagramas donde se
explican todos los pasos desde que se pulsa el botón hasta que se recibe la señal. En
la figura 4.6.2 podemos ver los dos tipos de conexión, tanto de tabla como de acción
sobre la interfaz. En la parte de implementación veremos como se ha implementado
dicha solución en código.
72
4.6. DESCRIPCIÓN DEL NÚCLEO
Figura 4.6.2: Imagen correspondiente a la conectividad de la base de datos
73
CAPÍTULO 4. DISEÑO
4.6.4.
Ejemplo de comportamiento
En la figura 4.6.3 podemos ver el comportamiento a la hora de añadir un alimento o
plato a una dieta. Cada dieta se compone de n elementos, pero para añadir el primero,
antes debe añadirse la dieta. En el diagrama de secuencia se puede ver la evolución
desde que el usuario pulsa el botón, hasta que obtiene la respuesta.
Figura 4.6.3: Imagen correspondiente a la secuencia de estados en addFoodToDiet()
4.6.5.
Requisitos cumplidos
Los requisitos cumplidos relativos al núcleo son los siguientes:
74
4.6. DESCRIPCIÓN DEL NÚCLEO
RF-CR01 - Cumplido con éxito en QConnection
RF-CR02 - Pendiente de realizar impacto
RF-CR03 - Cumplido con éxito en QConnection
RF-CR04 - Pendiente de realizar impacto
RF-HW01 - Cumplido con éxito
RF-IN01 - Cumplido con éxito
RF-IN02 - Cumplido con éxito
RF-IN03 - Se pospone para futuras versiones
75
CAPÍTULO 4. DISEÑO
76
Capítulo 5
Implementación
5.1.
Introducción
El propósito de esta sección es describir cómo se ha realizado la implementación
de la aplicación de acuerdo con los requisitos y el diseño. Esto implica que la solución
final deberá cumplir los requisitos especificados. En caso de que esto no sucediera, se
daría la explicación pertinente.
De acuerdo con el estudio preliminar del presente documento, el resultado de este
proyecto es obtener una solución funcional para la gestión y administración de dietas y
alimentación, orientada a hospitales y centros docentes, como universidades y escuelas privadas. Esta sección es quizá, la más técnica, ya que se verán ejemplos de la
implementación, con trozos de código y explicaciones de bajo nivel.
La implementación esta dividida en cuatro módulos, la GUI, las clases intermedias,
el núcleo de la aplicación y los CAD.
5.2.
5.2.1.
Estándares
Código
En esta sección se especifican los estándares a seguir para el código fuente. Esto
incluye las clases, interfaces, métodos y variables. Siempre se debe procurar utilizar
nombres descriptivos cuando programamos antes que escoger nombres cortos. La filo77
CAPÍTULO 5. IMPLEMENTACIÓN
sofía del código abierto es que cualquiera pueda usar y expandir la aplicación o sistema,
y para ellos es recomendable que en todo momento sepa qué está usando y para qué
lo hace. El nombre que demos a los diferentes componentes ayudará en la compresión
de a qué esta destinado cada uno de ellos.
Clases e interfaces
Para las clases y las interfaces se deberán seguir las siguientes reglas:
Las diferentes partes del nombre de la clase deberán empezar por letra mayúscula.
El nombre debe ser descriptivo y fácil de entender.
En caso de abreviaturas, deberán darse en mayúscula y al inicio de la declaración.
Toda clase deberá empezar con una abreviatura según su uso.
Algunos ejemplos:
Para la interfaz gráfica:
QAdmin
la cual incluye todos los métodos y variables necesarias para la implementación
de la GUI de Administración.
Para la base de datos:
BDConnect
abre la conexión con la base de datos.
Para los EN y CAD:
ENUser - CADUser
implementan todos los métodos y variables necesarios para la comunicación entre
el núcleo y la base de datos.
Para las clases intermedias:
ReportDietist
creación de los informes de dietistas.
78
5.2. ESTÁNDARES
Métodos
El estándar de nombre para los métodos debe seguir las siguientes reglas:
El nombre debe empezar en letra minúscula.
El nombre debe empezar con un verbo.
Cada palabra siguiente a la primera empezará por mayúscula.
El nombre debe ser descriptivo y fácil de entender.
Algunos ejemplos:
Muestra las alarmas según el dietista.
showAlarmsByDietist
Imprime el historial del paciente.
printPacientReport
Crea las tablas de la base de datos.
createDatabaseTables
Variables
En este apartado veremos como debemos declarar las variables y qué estándares
básicos debemos seguir.
Declarar cada variable en una línea diferente.
Evitar nombres cortos siempre que sea posible.
Variables de un solo carácter se recomiendan sólo si se usan para contadores,
dónde el propósito de la variable es obvio.
No declarar una variable si no es necesaria.
79
CAPÍTULO 5. IMPLEMENTACIÓN
Las variables empiezan con letra minúscula. Cada palabra en el nombre de la
variable empieza en letra mayúscula.
Ejemplos:
Nombre de las variables
int height;
QString nameOfFile;
Espaciado
Aquí veremos como tratar los espacios en blanco, tabulaciones y orden de estos en
las variables y métodos.
Usa líneas en blanco para agrupar declaraciones. Usar sólo una línea en blanco
para cada división.
Siempre usar un espacio en blanco después de un carácter, y antes de un corchete.
if (foo) {
}
Para punteros y/o referencias, siempre usar un espacio en blanco entre el ”*” o el
”&”, pero no usarlos entre estos y el nombre de la variable.
char *x;
const QString &myString;
const char * const y = "hello";
Ningún espacio después de un cast.
Evitar los cast como en C, en la medida de lo posible.
• Mal:
char *blockOfMemory = (char *)malloc(data.size());
• Bien:
char *blockOfMemory = reinterpret_cast<char *>(malloc(data.size()
80
5.2. ESTÁNDARES
Corchetes y paréntesis
La última parte es la ordenación de los corchetes en caso de definiciones de métodos y clases y los paréntesis en el caso de las evaluaciones lógicas.
Como regla básica, el corchete izquierdo estará en la misma linea de inicio de la
declaración.
if (codec) {
}
Excepción: Las implementaciones de funciones y las declaraciones de clase siempre tendrán el corchete izquierdo en una nueva línea.
static void foo(int g)
{
qDebug("foo: %i", g);
}
class QMoo
{
};
No usar corchetes cuando la declaración de una condición tiene una línea.
if (address.isEmpty())
return false;
for (int i = 0; i < 10; ++i)
qDebug("%i", i);
Usar corchetes cuando la declaración es vacía.
while (a) {}
Utilizar paréntesis para agrupar expresiones.
if ((a && b) || c)
(a + b) & c
81
CAPÍTULO 5. IMPLEMENTACIÓN
Estructura de las clases
La estructura de las clases es cómo debe ser la organización interna de las variables, métodos e implementaciones de una clase dada. Tanto los métodos como variables pueden tener un tipo de visibilidad u otro, además, hay que añadir la posibilidad de
crear SLOTS y SIGNALS en C++ y Qt, y que estos también pueden tener visibilidad.
Por todo esto es necesario crear una estructura básica a seguir, y así conseguir una
mayor legibilidad del código.
La estructura básica de un fichero .h de definición de clase debe ser la siguiente:
#include <libreria_interna>
#include "libreria_propia"
using namespace espacio_definido;
class QEjemplo
{
Q_OBJECT
//Definición de variables estáticas
//Definición de métodos estáticos
signals:
//Declaración de signals a emitir
public:
//Definición de variables
//Definición de métodos
public slots:
//Definición del slot a actuar
protected:
//Definición de variables
//Definición de métodos
protected slots:
//Definición del slot a actuar
82
5.2. ESTÁNDARES
private:
//Definición de variables
//Definición de métodos
private slots:
//Definición del slot a actuar
};
5.2.2.
Comentarios
Para los comentarios se seguirá el patrón definido para la implementación de los
mismos en Doxygen. Se comentarán tanto las clases como los métodos definidos en
ellas. Puede causar un poco de confusión en la lectura rápida del código, pero por
contra, la creación de extensiones ser verá facilitada al tener una documentación de
fácil consulta. Además, esta documentación puede ser incluida como ayuda técnica en
GADA. A continuación veremos ejemplos de código Doxygen:
/**
* @file QAlarm.h
* @author Francesc Martínez Maestre <[email protected]>
* @version 0.1
*
* @section LICENSE
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details at
* http://www.gnu.org/copyleft/gpl.html
*
* @section DESCRIPTION
*
* The QAlarm class represents the alarms sent between users.
83
CAPÍTULO 5. IMPLEMENTACIÓN
*/
class QAlarm {
public:
/**
* Constructor that sets the alarms to a given user.
*
* @param nif NIF of the user that wants to show alarms.
*/
QAlarm (QString nif);
/**
* Get the current message.
*
* @return A string with the text of the alarm.
*/
static QString message () {
// the code
}
};
5.3.
Base de datos
En esta sección se mostrarán ejemplos del código empleado para realizar la conexión y la ejecución de las sentencias en la base de datos. No pretende ser un manual
de Qt-C++, sino simplemente mostrar cómo se ha realizado y en caso de que hubiese
alguna alternativa, porqué se escogió esta.
5.3.1.
Conexión a la base de datos
Antes de realizar cualquier operación, es necesario definir la conexión a la base de
datos (en nuestro caso MySQL). En Qt se realiza de la siguiente forma:
QSqlDatabase driverConnecion = QSqlDatabase::addDatabase("QMYSQL");
Para la realizar la conexión necesitamos decir la base de datos a usar y/o el usuario.
Antes de poder realizar cualquier operación, debemos dar permisos al usuario:
84
5.3. BASE DE DATOS
driverConnecion.setUserName("francesc");
if (!driverConnecion.open())
driverConnecion.exec(QString("GRANT ALL ON *.* TO ’%1’@’localhost’
IDENTIFIED BY ’%2’ WITH GRANT OPTION;").arg(user).arg(pass));
Una vez hecho esto, en el caso de que queramos crear una base de datos nueva podemos optar por abrir la base de datos “mysql”, que es la BD por defecto o directamente
ejecutar la sentencia, como en:
if (driverConnecion.open()) {
driverConnecion.exec("CREATE DATABASE gada");
driverConnecion.close();
}
5.3.2.
Sentencias SQL
Para las sentencias SQL debemos usar un objeto diferente. Qt define QSqlQuery,
y es éste el que emplearemos para realizar las consultas y acceder a los registros en
caso de que se nos proporcione alguno por SQL. En todo momento debemos tener
presente que debe estar la conexión con la BD abierta a la hora de realizar la consulta.
QString id="";
QSqlQuery query;
if (query.exec("select * from USUARIOS")) {
while (query.next())
id = query.value(0).toString();
}
else
return query.lastError();
En el caso anterior vemos como creamos la sentencia y ejecutamos una consulta
mediante el método exec() que devuelve true en el caso de que se ejecute. Posteriormente si la sentencia devuelve registros (una select), leemos cada fila devuelta por la
consulta con el método next(), que devuelve un booleano. Para acceder a cada registro
particular tenemos query.value(i), siendo i el número del registro.
En caso de que diese error la consulta, podríamos lanzar el error que la ha producido
accediendo al método query.lastError().
85
CAPÍTULO 5. IMPLEMENTACIÓN
5.4.
5.4.1.
Núcleo de la aplicación
Generación de informes
Los informes se generan a partir de varias clases internas de Qt. Intervienen el objeto QPrinter y el QTextDocument, el primero sirve para configurar la impresora, ya sea
física (papel) o virtual (PDF o PostScript) y el segundo es el que se ocupa de generar el
documento a imprimir. Posteriormente se llama a la función de imprimir pasando como
parámetro la impresora escogida.
void printInfo(QString htmlText)
{
QPrinter *printer = new QPrinter(QPrinter::HighResolution);
printer->setOutputFormat(QPrinter::PdfFormat);
printer->setOutputFileName("/home/francesc/GADA/"
+ "D-"+LENIFUser->text() + ".pdf");
QTextDocument textDocument;
textDocument.setHtml(htmlText);
textDocument.print(printer);
}
5.4.2.
Configuración de la aplicación
Qt proporciona unos mecanismos de guardado multisistema. Dependiendo de qué
sistema se esté usando, se almacenarán la configuración de los diferentes parámetros
de una forma u otra. La librería que se ocupa de esto es QSettings. Normalmente los
usuarios esperan que la aplicación recuerde sus opciones de configuración (tamaño de
ventana, opciones, etc.) entre sesiones. Esta información normalmente se almacena en
el registro del sistema de Windows, en un fichero de preferencias XML de Mac OS X y
en el resto de sistemas *nix, in ausencia de un estándar, muchas aplicaciones usan los
ficheros de texto INI.
En GADA se utilizan varias funciones para almacenar y posteriormente recuperar
estos parámetros. Para ello hay que definir el nombre de la aplicación, de la compañía
y posteriormente cada uno de los parámetros a almacenar:
QSettings gadaSettings("Company Name","GADA Software");
86
5.4. NÚCLEO DE LA APLICACIÓN
gadaSettings.setValue("dbName",dataBase);
gadaSettings.setValue("user",user);
gadaSettings.setValue("showWizard",false);
Para leer estos datos lo podemos hacer de la forma siguiente:
QSettings gadaSettings("Company Name","GADA Software");
QString dataBase = gadaSettings.value("dbName").value<QString>();
QString userName = gadaSettings.value("user").value<QString>();
5.4.3.
EN - Entidad de Negocio
En el caso de las EN, las definimos como clases, pero en ficheros especiales de
código. Para estos ficheros se ha optado por una extensión .cc, en pro de diferenciarlos
de los ficheros normales de código. Están definidas como clases, y la implementación
de los métodos se produce inline. El constructor por defecto inicializa los valores a
cero o vacío, dependiendo de la variable y donde se produce la información es en los
otros métodos, que a su vez contactan con el CAD, que es el encargado de realizar las
transacciones con la base de datos.
Un ejemplo de EN lo vemos a continuación:
class ENUsuario
{
private:
QString nif;
QString nombre;
QString apellidos;
int telefono;
QString email;
QString password;
QString tipo;
public:
void setNIF (const QString &dni) { nif = dni; }
QString getNIF () { return nif; }
void setNombre (const QString &nom) { nombre = nom; }
QString getNombre () { return nombre; }
87
CAPÍTULO 5. IMPLEMENTACIÓN
void setApellidos (const QString &ape) { apellidos = ape; }
QString getApellidos () { return apellidos; }
void setTelefono (const int &tel) {telefono = tel; }
QString getTelefono ()
{
QVariant aux;
aux.setValue(telefono);
return aux.toString();
}
void setEmail (const QString &mail) { email = mail; }
QString getEmail () { return email; }
void setPassword (const QString &pass) { password = pass; }
QString getPassword () { return password; }
void setTipo (const QString &type) { tipo = type; }
QString getTipo () {return tipo; }
ENUsuario ()
{
setNIF("");
setNombre("");
setApellidos("");
setTelefono(0);
setEmail("");
setPassword("")
setTipo("");
}
bool getUsuarioByNIF (const QString &nif)
{
CADUsuario *cad_usu = new CADUsuario;
return cad_usu->getUsuariByNIF(this);
}
};
88
5.4. NÚCLEO DE LA APLICACIÓN
5.4.4.
CAD - Componente de Acceso a Datos
La siguiente estructura antes de llegar a la base de datos son los CAD, estos también están definidos como clases en ficheros especiales de código. Al igual que en
sus respectivos EN y por el mismo motivo, se ha optado por una extensión .cc. Están
definidas como clases, y la implementación de los métodos se produce inline. En el
constructor por defecto se inicializa la conexión con la base de datos, que se abre y
cierra en cada método. Cada objeto CAD es creado dentro de un método de EN y su
valor es retornado. Es en el CAD donde se produce el acceso a la base de datos y se
devuelven los datos en el EN, que a su vez retorna el valor de la función.
Un ejemplo de EN lo vemos a continuación:
class CADUsuario
{
private:
QSqlDatabase db;
QSqlQuery query;
public:
CADUsuario()
{
db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("gada");
db.setUserName("francesc");
}
bool getUsuarioPorNIF (ENUsuario &usuario)
{
if (db.open()) {
bool done = false;
query.exec("select * from USUARIOS where nif=’"
+ usuario.getNIF() + "’");
if (query.next()) {
setNombre(query.value(1).toString());
setApellidos(query.value(2).toString());
setTelefono(query.value(3).toInt());
setEmail(query.value(4).toString());
setTipo(query.value(6).toString());
done = true;
89
CAPÍTULO 5. IMPLEMENTACIÓN
}
db.close();
return done;
}
else
return false;
}
};
5.5.
5.5.1.
Interfaz gráfica del usuario (GUI)
Creación de las interfaces
Al igual que en casi todos los lenguajes, tenemos dos formas de construir las interfaces. La primera es creando una clase de tipo UI (User Interface) que es la que se ocupa
de crear los diferentes controles que queramos (de forma automática) y la otra es crear
esa misma clase pero creando nosotros los controles. En la primera versión se utilizó
un desarollo sin separación MVC, pero en la actual versión se han convertido todos
los widgets que formaban GADA al dicho modelo. Actualmente existen formularios, que
son archivos acabados en la extensión .ui, para casi todos los widgets necesarios.
Qt tiene su propia forma de manejar las diferentes GUIs. Se ha creado para ello
una megaclase llamada QWidget de la que descienden la mayoría de las restantes
que componen una interfaz. Esta clase permite definir tanto una pantalla completa, con
su barra de tareas y menú, como un simple control como QLineEdit. Es por ello que
nuestras ventanas se llamarán Widgets y en ellas crearemos los diferentes controles
de usuario para llevar a cabo las tareas que se requieran.
Un pequeño ejemplo de como funciona lo tenemos aquí:
class QAlarm : public QGroupBox
{
. . .
private:
QAction *AClose;
QString usuario;
90
5.5. INTERFAZ GRÁFICA DEL USUARIO (GUI)
QPushButton *PBAddAlarm;
QGroupBox *GBAlarmsReceived;
QGroupBox *GBAlarmsSent;
QHBoxLayout *HLAlarmReceived;
QHBoxLayout *HLAlarmSent;
QVector<QCheckBox*> CBGUsuarios;
};
QAlarm::QAlarm (...)
{
//Definimos el botón de añadir alarma
PBAddAlarm = new QPushButton(QIcon("..."),tr("Add"));
PBAddAlarm->setCursor(Qt::PointingHandCursor);
PBAddAlarm->setFixedWidth(100);
PBAddAlarm->setToolTip(tr("Add new alarm"));
connect(PBAddAlarm,SIGNAL(clicked()),
this,SLOT(showWidgetAlarm()));
//Un Layout sirve para ordenar los diferentes controles
QHBoxLayout *HLAlarmButtons = new QHBoxLayout;
HLAlarmButtons->addWidget(PBAddAlarm);
HLAlarmButtons->addStretch(1);
HLAlarmReceived = new QHBoxLayout;
//Inicializamos el GroupBox y decimos
//cual va a ser su contenedor principal
GBAlarmsReceived = new QGroupBox(tr("Received"));
GBAlarmsReceived->setLayout(HLAlarmReceived);
GBAlarmsReceived->setFlat(true);
HLAlarmSent = new QHBoxLayout;
GBAlarmsSent = new QGroupBox(tr("Sent"));
GBAlarmsSent->setLayout(HLAlarmSent);
GBAlarmsSent->setFlat(true);
QVBoxLayout *VLFinal = new QVBoxLayout;
VLFinal->addWidget(GBAlarmsReceived);
VLFinal->addWidget(GBAlarmsSent);
//Creamos una Accion, que podrá actuar siempre
91
CAPÍTULO 5. IMPLEMENTACIÓN
//que se necesite
AClose = new QAction(this);
AClose->setShortcut(tr("Ctrl+W"));
connect(AClose,SIGNAL(triggered()),this,SLOT(close()));
//Añadimos los parámetros quer queramos al Widget principal
addAction(AClose);
setLayout(VLFinal);
setTitle(tr("Alarms"));
setWindowTitle(tr("Alarms - GADA Project"));
setWindowIcon(QIcon(":/images/logo.jpg"));
setAlignment(0);
setGeometry(0,0,100,100);
}
5.5.2.
Signals and Slots - Ejemplos
Una particularidad de Qt son las signal y los slots. Estas funcionan de forma que
una función definida como signal emite una señal que es recogida por un slot. Para
unir estas dos interacciones, se utiliza la instrucción connect, en la que se especifica
la clase a la que pertenece la signal, el nombre de esta, la clase a la que pertenece el
slot y el nombre de este:
connect(QPushButton,SIGNAL(clicked()),QEjemplo,SLOT(showAlarm());
Para ello clicked() debe estar definido dentro de la clase así:
signal:
void clicked(bool)
Para realizar la emisión de una señal específica dentro de una función podemos
hacerlo con la palabra reservada emit:
emit clicked(true);
Por otra parte, showAlarm() deberá estarlo de la siguiente forma:
public slot:
void showAlarm()
92
5.5. INTERFAZ GRÁFICA DEL USUARIO (GUI)
5.5.3.
Estilos personalizados - QStyle
Una de las ventajas respecto al resto de interfaces gráficas, es que Qt proporciona
clases que permiten adaptar los estilos con un lenguaje prácticamente igual que CSS.
Difiere en algunos aspectos como son la posibilidad de añadir degradados y que no
todos los tipos tienen todas las implementaciones. Además, Qt se adapta gráficamente
al entorno en el que está ejecutándose, pudiendo ser este Windows XP, Windows Vista,
Mac OS X, Gnome y KDE.
En caso de que queramos utilizar un entorno predeterminado como plastique, podemos hacerlo de la siguiente forma:
QtApplication app(argc, argv);
app.setStyle("plastique");
Si además queremos añadir nuestro propio estilo, lo podremos hacer cargándolo
desde un fichero:
QFile file("styleSheet.qss");
QString styleSheet;
if (file.open(QFile::ReadOnly))
styleSheet = QLatin1String(file.readAll());
app.setStyleSheet(styleSheet);
93
CAPÍTULO 5. IMPLEMENTACIÓN
94
Capítulo 6
Fase de pruebas
6.1.
Introducción
El propósito de esta fase es establecer un método formal para llevar a cabo las
diferentes pruebas sobre GADA. Para establecer las diferentes actividades se utilizarán
definiciones, acrónimos, abreviaturas y referencias, que se definirán más tarde. Esta
fase será escrita siguiendo las guías establecidas en el Estándar para Documentación
de Pruebas de Software del IEEE.
La estructura se ha adaptado para el proyecto, por lo que puede ser que algunas de
las directrices no se sigan de forma estricta. Otras, en cambio, pueden haber sufrido
algún tipo de modificación.
6.2.
Plan de pruebas
Esta sección se ocupa de la planificación, por ejemplo, decidiendo cómo y cuándo
serán llevados a cabo las pruebas para la aplicación. El plan es intentar mejorar en la
medida de lo posible la solución final, teniendo en cuenta que funcione correctamente
según los requisitos especificados en la fase designada para ello.
95
CAPÍTULO 6. FASE DE PRUEBAS
6.2.1.
Actividades
Se probará el sistema realizando un conjunto de actividades de pruebas compuestas por:
Planificación de las pruebas
Diseño de las pruebas
Pruebas
Documentación de los casos de prueba
6.2.2.
Criterio de evaluación
La lista de chequeo creada para las pruebas unitarias y modulares, consistirá en
una serie de declaraciones del caso de prueba. Para considerar aprobado el test, todas
estas declaraciones deberán ser ciertas cuando la prueba haya sido ejecutada. Para
la aprobación de dicho test debe ser especificado un criterio con un único identificador
para el caso de prueba. Además, para considerar que el test está aprobado, dicho
criterio debe cumplirse cuando el caso de prueba haya sido ejecutado, en otra situación
se considerará que ha fallado.
6.2.3.
Entorno de ejecución de las pruebas
Dado que se va a evaluar la aplicación al completo, es necesario un sistema que
tenga disponibilidad para instalar y tener instalado MySQL como SGBD, con conexión
a internet y entorno gráfico. Queda por ello descartado sistemas servidor, al tratarse de
una aplicación de escritorio.
6.3.
Diseño de las pruebas
El propósito de este apartado es especificar mejoras de las propuestas de las pruebas e identificar las características que deben ser probadas bajo este diseño y sus
pruebas asociadas.
96
6.3. DISEÑO DE LAS PRUEBAS
6.3.1.
Visión general
Las pruebas que aquí se describen tienen como objetivo cubrir la mayoría de los requisitos funcionales y los casos de uso. Más adelante, los casos de uso serán probados
más a fondo en las pruebas de usabilidad.
Las pruebas se clasifican en dos clases, los Internos y los de Producto.
Pruebas internas
Los primeros son clasificados dependiendo de qué nivel de diseño cumplen:
Pruebas unitarias: Se prueba la base del software, como son las funciones y
clases.
Pruebas modulares: Se prueban los módulos y la interacción entre sus propias
unidades (módulo de GUI, base de datos, conexión a la red).
Pruebas de sistema e integración: Se prueban las características del sistema
completo, como la comunicación con elementos externos (impresoras, PDF).
Las pruebas unitarias se realizan como parte de la fase de implementación. Las
pruebas modulares serán efectuadas cuando todas las unidades (funciones, clases,
métodos...) de cada módulo estén terminadas. Estas pruebas no serán documentadas.
Por último, las pruebas de sistema e integración se realizarán cuando estén acabadas las dos fases anteriores. Una lista de chequeo para todas estas pruebas ha sido
desarrollada y puede verse en el Apéndice B.
Pruebas de producto
Estas pruebas son aquellas que se realizan con el producto terminado. En este
caso el producto es una programa informático, por lo que las pruebas están orientados
a probar el diseño de la GUI y la usabilidad de la misma.
Las pruebas se centran en las diferentes funcionalidades que la aplicación debe
proveer como respuesta a los requisitos funcionales, evaluando que un conjunto de
propiedades están correctamente implementadas y funcionan.
97
CAPÍTULO 6. FASE DE PRUEBAS
Identificación de las pruebas
Las pruebas están identificadas con un código donde se especifica el tipo de test,
el número y la clase. Los identificadores correspondientes a las secciones nombradas
se describen a continuación. En el caso de los caracteres ’XX’ estos indican el número
de test que es dentro del tipo de test mientras que los AA representan la clase a la que
se refieren dentro del tipo de test, que pueden consultarse en la sección 6.4.
TC-SIAA-XX: Pruebas de sistema e integración.
TC-IUAA-XX: Pruebas de interfaz de usuario.
TC-USAA-XX: Pruebas de usabilidad de la aplicación.
Criterio de aceptación/denegación
Las listas de chequeo desarrolladas para las pruebas unitarias y modulares consisten en una serie de procesos que deben cumplirse para cada una de ellas. Para
considerar aceptado un test, todos los procesos de estas pruebas deben haber sido
satisfactorios, en caso de fallo de alguno de ellos, se deberá volver a revisar el diseño
e implementación, para posteriormente volver a pasar el test.
6.4.
Especificación de las pruebas
El propósito de esta sección es describir de forma general las pruebas e identificar
las propiedades que deben ser probadas.
6.4.1.
Sistema e integración
Base de datos
TC-SIBD-01 - Conexión a la red: Prueba que se establezca conexión entre GADA y el servidor.
TC-SIBD-02 - Autenticación de usuario: Prueba que el usuario pueda autenticarse en el servidor de bases de datos.
98
6.4. ESPECIFICACIÓN DE LAS PRUEBAS
TC-SIBD-03 - Conexión con la base de datos: Prueba que se pueda establecer
la conexión entre GADA y MySQL.
Informes
TC-SIIN-01 - Impresión de documentos: Prueba que se pueden imprimir documentos por impresoras físicas previamente instaladas.
TC-SIIN-02 - Generar documentos PDF: Prueba que se pueden generar documentos en formado PDF y se guardan correctamente.
6.4.2.
GUI
Alarmas
TC-IUAL-01 - Envío de alarmas: Prueba que se pueden generar alarmas.
TC-IUAL-02 - Aviso de nuevas alarmas: Prueba que aparece el aviso de nuevas
alarmas.
TC-IUAL-03 - Notificar alarma no leída: Prueba que se notifica cuando hay alarmas no leídas.
TC-IUAL-04 - Borrar alarma: Prueba que se pueden borrar las alarmas.
Administración
TC-IUAD-01 - Insertar dietista: Se comprueban los datos y prueba que se puede
insertar un dietista.
TC-IUAD-02 - Editar dietista: Se comprueban los datos y prueba que se puede
editar un dietista.
TC-IUAD-03 - Borrar dietista: Se prueba que se puede borrar un dietista.
TC-IUAD-04 - Editar datos del usuario: Se comprueban los datos y prueba que
se pueden editar los datos del usuario actual.
99
CAPÍTULO 6. FASE DE PRUEBAS
Pacientes
TC-IUPA-01 - Insertar paciente: Se comprueban los datos y prueba que se puede insertar un paciente.
TC-IUPA-02 - Editar paciente: Se comprueban los datos y prueba que se puede
editar un paciente.
TC-IUPA-03 - Borrar paciente: Se prueba que se puede borrar un paciente.
TC-IUPA-04 - Insertar datos antropométricos: Prueba que se pueden añadir
datos antropométricos para una fecha fijada.
TC-IUPA-05 - Ver datos antropométricos: Prueba que se pueden ver los datos
antropométricos de una fecha seleccionada.
TC-IUPA-06 - Insertar analítica: Prueba que se pueden añadir datos de una
analítica para una fecha fijada.
TC-IUPA-07 - Ver analíticas: Prueba que se pueden ver analíticas de una fecha
seleccionada.
TC-IUPA-08 - Insertar notas: Prueba que se pueden insertar notas en pacientes.
TC-IUPA-09 - Ver notas: Prueba que se pueden visualizar las notas previamente
insertadas.
TC-IUPA-10 - Borrar notas: Prueba que se pueden borrar las notas previamente
insertadas.
TC-IUPA-11 - Asignar dieta: Prueba que se puede asignar una dieta a un paciente.
TC-IUPA-12 - Editar asignación de dieta: Prueba que se puede editar la asignación antes realizada.
Dietas
TC-IUDI-01 - Crear alimento: Prueba que se permite la creación de un alimento
y sus propiedades.
TC-IUDI-02 - Editar alimento: Prueba que se puede editar un alimento ya existente.
TC-IUDI-03 - Borrar alimento: Prueba que se puede borrar un alimento ya existente.
100
6.4. ESPECIFICACIÓN DE LAS PRUEBAS
TC-IUDI-04 - Crear plato: Prueba que se permite la creación de un plato y la de
sus propiedades.
TC-IUDI-05 - Editar plato: Prueba que se puede editar un plato ya existente.
TC-IUDI-06 - Borrar plato: Prueba que se puede borrar un plato ya existente.
TC-IUDI-07 - Crear dieta: Prueba que se puede crear una dieta e insertar todas
sus propiedades.
TC-IUDI-08 - Borrar dieta: Prueba que se puede borrar una dieta previamente
insertada
Preferencias
TC-IUPR-01 - Editar preferencias: Prueba que se aplican las preferencias seleccionadas por el usuario actual en las opciones de GADA.
6.4.3.
Usabilidad
Estilos
TC-USES-01 - Estilos correctos: Se comprueba que los estilos están correctamente aplicados y se ven correctamente independientemente del sistema operativo desde el que se ejecuta.
TC-USES-02 - Tipos de letra: Se comprueba que la aplicación de los tipos de
letra se produce de forma uniforme en todos los sistemas.
Maquetación
TC-USMA-01 - Maquetación correcta: Se comprueba que la maquetación de
los diferentes elementos de la GUI se ve de forma correcta independientemente
del sistema operativo desde el que se ejecuta GADA.
101
CAPÍTULO 6. FASE DE PRUEBAS
6.5.
Resultados de las pruebas
Esta sección describirá los resultados de las pruebas de la aplicación. Todas las
tablas en que se hace referencia en este capítulo pueden ser encontradas en el apéndice B.3. Por otro lado, los resultados de las pruebas se pueden ver en la tabla 6.5.3
que hay al final de esta sección
6.5.1.
Sistema e integración
Base de datos
TC-SIBD-01 - Conexión a la red La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.2. El propósito principal es asegurarnos de que la conexión
a la red se establece de forma satisfactoria.
TC-SIBD-02 - Autenticación de usuario: La prueba fue ejecutada de acuerdo con
las especificaciones de la tabla B.3.3. El propósito principal es asegurarnos de que la
autenticación del administrador en el servidor remoto se realiza de forma correcta.
TC-SIBD-03 - Conexión con la base de datos: La prueba fue ejecutada de acuerdo
con las especificaciones de la tabla B.3.4. El propósito principal es asegurarnos de
que tanto la conexión como la autenticación se establecen y son correctas entre la
aplicación y la base de datos.
Informes
TC-SIIN-01 - Impresión de documentos: La prueba fue ejecutada de acuerdo con
las especificaciones de la tabla B.3.5. El propósito principal es asegurarnos de que se
tiene acceso a las impresoras del sistema y que realiza impresión de los documentos
requeridos.
TC-SIIN-02 - Generar documentos PDF: La prueba fue ejecutada de acuerdo con
las especificaciones de la tabla B.3.6. El propósito principal es asegurarnos de que la
102
6.5. RESULTADOS DE LAS PRUEBAS
aplicación es capaz de generar documentos en formato PDF de los informes requeridos.
6.5.2.
GUI
Alarmas
TC-IUAL-01 - Envío de alarmas: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.7. El propósito principal es asegurarnos de que se pueden
enviar alarmas a otros usuarios.
TC-IUAL-02 - Aviso de nuevas alarmas: La prueba fue ejecutada de acuerdo con
las especificaciones de la tabla B.3.8. El propósito principal es asegurarnos de que el
sistema muestra un aviso cuando se tienen alarmas nuevas.
TC-IUAL-03 - Notificar alarma no leida: La prueba fue ejecutada de acuerdo con
las especificaciones de la tabla B.3.9. El propósito principal es asegurarnos de que el
sistema muestra un aviso cuando se tienen alarmas no leídas.
TC-IUAL-04 - Borrar alarma: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.10. El propósito principal es asegurarnos de que el usuario
que hay creado una alarma puede borrarla si lo desea.
Administración
TC-IUAD-01 - Insertar dietista: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.11. El propósito principal es asegurarnos de que se puede
insertar un dietista en el sistema.
TC-IUAD-02 - Editar dietista: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.12. El propósito principal es asegurarnos de que se pueden
editar los datos de un dietista insertado previamente.
103
CAPÍTULO 6. FASE DE PRUEBAS
TC-IUAD-03 - Borrar dietista: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.13. El propósito principal es asegurarnos de que se puede
borrar un dietista insertado previamente.
TC-IUAD-04 - Editar datos del usuario: La prueba fue ejecutada de acuerdo con
las especificaciones de la tabla B.3.14. El propósito principal es asegurarnos de que el
usuario puede editar sus datos personales.
Pacientes
TC-IUPA-01 - Insertar paciente: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.15. El propósito principal es asegurarnos de que se pueden
insertar los datos de un nuevo paciente.
TC-IUPA-02 - Editar paciente: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.16. El propósito principal es asegurarnos de que se puede
editar un paciente previamente insertado.
TC-IUPA-03 - Borrar paciente: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.17. El propósito principal es asegurarnos de que se puede
borrar un paciente previamente insertado.
TC-IUPA-04 - Insertar datos antropométricos: La prueba fue ejecutada de acuerdo
con las especificaciones de la tabla B.3.18. El propósito principal es asegurarnos de que
se pueden añadir los datos antropométricos de un paciente previa selección de éste.
TC-IUPA-05 - Ver datos antropométricos: La prueba fue ejecutada de acuerdo con
las especificaciones de la tabla B.3.19. El propósito principal es asegurarnos de que se
pueden visualizar los datos antropométricos insertados en el pasado.
TC-IUPA-06 - Insertar analítica: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.20. El propósito principal es asegurarnos de que se pueden
insertar nuevas analíticas para un paciente dado.
104
6.5. RESULTADOS DE LAS PRUEBAS
TC-IUPA-07 - Ver analíticas: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.21. El propósito principal es asegurarnos de que se pueden
visualizar analíticas de un paciente previamente seleccionado.
TC-IUPA-08 - Insertar notas: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.22. El propósito principal es asegurarnos de que se pueden
insertar notas al expediente un paciente.
TC-IUPA-09 - Ver notas: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.23. El propósito principal es asegurarnos de que podemos ver las
notas de un expediente de un paciente.
TC-IUPA-10 - Borrar notas: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.24. El propósito principal es asegurarnos de que se pueden
borrar las notas del expediente de un paciente.
TC-IUPA-11 - Asignar dieta: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.25. El propósito principal es asegurarnos de que se le puede
asignar una dieta a un paciente.
TC-IUPA-12 - Editar asignación de dieta: La prueba fue ejecutada de acuerdo con
las especificaciones de la tabla B.3.26. El propósito principal es asegurarnos de que se
puede reasignar una dieta a un paciente que previamente tenga una otorgada.
Dietas
TC-IUDI-01 - Crear alimento: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.27. El propósito principal es asegurarnos de que se puede
crear un alimento.
TC-IUDI-02 - Editar alimento: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.28. El propósito principal es asegurarnos de que se puede
editar un alimento previamente insertado.
105
CAPÍTULO 6. FASE DE PRUEBAS
TC-IUDI-03 - Borrar alimento: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.29. El propósito principal es asegurarnos de que se puede
borrar un alimento previamente insertado.
TC-IUDI-04 - Crear plato: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.30. El propósito principal es asegurarnos de que se puede insertar
un plato previamente insertado.
TC-IUDI-05 - Editar plato: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.31. El propósito principal es asegurarnos de que se puede editar
un plato previamente insertado.
TC-IUDI-06 - Borrar plato: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.32. El propósito principal es asegurarnos de que se puede borrar
un plato previamente insertado.
TC-IUDI-07 - Crear dieta: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.33. El propósito principal es asegurarnos de que se puede borrar
una dieta previamente insertada.
TC-IUDI-08 - Borrar dieta: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.34. El propósito principal es asegurarnos de que se puede borrar
una dieta previamente insertada.
Preferencias
TC-IUPR-01 - Editar preferencias: La prueba fue ejecutada de acuerdo con las
especificaciones de la tabla B.3.35. El propósito principal es asegurarnos de que se
pueden editar las preferencias de la aplicación.
106
6.5. RESULTADOS DE LAS PRUEBAS
6.5.3.
Usabilidad
Estilos
TC-USES-01 - Estilos correctos: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.36. El propósito principal es asegurarnos de que se ven
los estilos de la aplicación de forma correcta independientemente desde el sistema
operativo desde el que se ejecute.
TC-USES-02 - Tipos de letra: La prueba fue ejecutada de acuerdo con las especificaciones de la tabla B.3.37. El propósito principal es asegurarnos de que se ven los
tipos de letra de la aplicación de forma correcta independientemente desde el sistema
operativo desde el que se ejecute.
Maquetación
TC-USMA-01 - Maquetación correcta:
La prueba fue ejecutada de acuerdo con
las especificaciones de la tabla B.3.38. El propósito principal es asegurarnos de que
se ve la maquetación de la aplicación de forma correcta independientemente desde el
sistema operativo desde el que se ejecute.
107
CAPÍTULO 6. FASE DE PRUEBAS
Abreviatura
TC-SIBD-01
TC-SIBD-02
TC-SIBD-03
TC-SIIN-01
TC-SIIN-02
TC-IUAL-01
TC-IUAL-02
TC-IUAL-03
TC-IUAL-04
TC-IUPA-01
TC-IUPA-02
TC-IUPA-03
TC-IUPA-04
TC-IUPA-05
TC-IUPA-06
TC-IUPA-07
TC-IUPA-08
TC-IUPA-09
TC-IUPA-10
TC-IUPA-11
TC-IUPA-12
TC-IUDI-01
TC-IUDI-02
TC-IUDI-03
TC-IUDI-04
TC-IUDI-05
TC-IUDI-06
TC-IUDI-07
TC-IUDI-08
TC-IUPR-01
TC-USES-01
TC-USES-02
TC-USMA-01
Estado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Aprobado
Errores iniciales
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
Errores finales
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Cuadro 6.5.1: Resultados de las pruebas
108
6.6. RELACIÓN CON LOS REQUISITOS
6.5.4.
Evaluación de resultados
La tabla 6.5.3 indica que la gran mayoría de las pruebas han sido resueltas satisfactoriamente. A pesar de ello, algunos requisitos pueden haber fallado en ejecución una o
varias veces. En esta sección se pretende analizar el porqué de estos fallos, así como
su resolución o causas por las que se desestima su corrección. Las siguientes pruebas
son las que han dado error:
TC-USES-02 Al implementar en diferentes sistemas operativos, cada uno de ellos
tenia fuentes diferentes. Se ha optado por almacenar el fichero de fuentes dentro del
proyecto y cargarlo de forma interna.
6.6.
Relación con los requisitos
En esta sección veremos la relación que existen entre las pruebas propuestas y
los requisitos funcionales. Los requisitos no funcionales se manejan mediante la lista
de chequeo existente en el Apéndice B. En la siguiente tabla se ha representado los
requisitos en la parte superior y los identificadores de las diferentes pruebas en la parte
izquierda. Como podremos observar una prueba puede que cubra más de un requisito
y viceversa.
Como se puede apreciar existen algunos requisitos que no tienen un caso de prueba. Esto es principalmente porque eran requisitos específicos de implementación, como
el almacenamiento de historial o el espacio de la base de datos.
6.7.
Conclusión
Este capítulo se ha ocupado de documentar las pruebas realizadas a la aplicación
mediante el diseño de un plan de pruebas y la posterior obtención de resultados.
Todos las pruebas han sido realizadas tanto en entornos Linux, como en Windows.
Las pruebas de diseño y estilos se han realizado siguiendo las pautas del personal de
dietética y nutrición consultado durante la fase de diseño.
109
CP.
Req.
RF-CR01
RF-CR02
RF-CR03
RF-CR04
RF-BD01
RF-BD02
RF-HW01
RF-UI01
RF-UI02
RF-UI03
RF-UI04
RF-UI05
RF-UI06
RF-UI07
RF-IN01
RF-IN02
RF-IN03
CAPÍTULO 6. FASE DE PRUEBAS
TC-SIBD-01
TC-SIBD-02
TC-SIBD-03
RC-SIIN-01
RC-SIIN-02
TC-IUAL-01
TC-IUAL-02
TC-IUAL-03
TC-IUAL-04
TC-IUAD-01
TC-IUAD-02
TC-IUAD-03
TC-IUAD-04
TC-IUPA-01
TC-IUPA-02
TC-IUPA-03
TC-IUPA-04
TC-IUPA-05
TC-IUPA-06
TC-IUPA-07
TC-IUPA-08
TC-IUPA-09
TC-IUPA-10
TC-IUPA-11
TC-IUPA-12
TC-IUDI-01
TC-IUDI-02
TC-IUDI-03
TC-IUDI-04
TC-IUDI-05
TC-IUDI-06
TC-IUDI-07
TC-IUDI-08
TC-IUPR-01
TC-USES-01
TC-USES-02
TC-USMA-01
110
Capítulo 7
Documentación
7.1.
Introducción
En este capítulo se van a poder encontrar los diferentes manuales de la aplicación.
En primer lugar y dada su importancia, se encuentra el manual de instalación, necesario para la correcta instalación y configuración del sistema; en él se describirán los
pre-requisitos que ha de cumplir el sistema, los pasos previos a la instalación y a continuación la configuración del SGBD y por último de GADA.
En la segunda parte de este capítulo, podemos encontrar el manual de usuario.
Orientado exclusivamente a los usuarios finales del sistema, su lectura es casi obligatoria a pesar del perfecto diseño del sistema que lo dota de una interfaz más intuitiva.
Es por ello que el manual a pesar de estar integrado en la documentación del proyecto,
se publicará de forma separada junto al instalador del proyecto y en la web del Proyecto
GADA.
Por las características de Qt, ambos manuales son independientes del sistema operativo que se esté usando, siendo compatible con todos ellos.
7.2.
Manual de instalación
En esta sección se explicarán todos los pasos necesario desde que se ha obtenido
el software hasta que se accede por primera vez al sistema. Esto implica un análisis
de los pre-requisitos del sistema, los pasos previos a su configuración, la instalación y
configuración del SGBD y la instalación en última instancia de GADA.
111
CAPÍTULO 7. DOCUMENTACIÓN
7.2.1.
Pre-requisitos
El sistema debe cumplir las siguientes características (siempre al margen de las que
necesite el sistema para funcionar):
Procesador Intel Pentium o AMD de 1Ghz.
64 MBytes de memoria RAM
100 MBytes de espacio en disco
Tarjeta gráfica de 128 MBytes compatible con el sistema
Tarjeta de red Ethernet o compatible
Sistemas operativos soportados: Windows (XP, Vista y 7), Linux (todas las distribuciones).
7.2.2.
Pasos previos
Antes de iniciar la instalación del sistema debemos asegurarnos de que tenemos
conexión a la red. Dado que el acceso a la base de datos se realiza mediante conexión
a un servidor en remoto, es primordial tener la seguridad de que está perfectamente
configurado el sistema.
7.2.3.
Instalación de GADA
GADA no necesita instalación como tal. Al ejecutar por primera vez el programa
aparecerá una ventana para registrar nuestra cuenta como administrador GADA en el
servidor. No es necesario pago de ningún tipo, ya que estos datos son simplemente
para uso interno del programa.
7.3.
Manual de Usuario
La primera pantalla que nos aparece al ejecutar GADA es la de identificación. En
ella tenemos que introducir nuestro NIF, que será el usuario, y nuestra contraseña. La
112
7.3. MANUAL DE USUARIO
contraseña se genera automáticamente, por lo que es recomendable que la cambiemos
al entrar por primera vez en el sistema; más tarde veremos como.
En la pantalla principal podemos ver dos secciones principales: Pacientes y Dietas, pero antes de empezar con las diferentes secciones dentro de GADA, en la barra
superior de menú hay tres opciones que deben ser explicadas de antemano.
7.3.1.
Barra superior de menú
Gestión
En este submenú encontramos dos opciones. La primera nos permite crear alarmas
y enviarlas a otros usuarios (no a los pacientes, de momento) y al administrador. Estas
alarmas pueden ser para notificaciones, avisos o todo aquello que queramos.
Para visualizar las alarmas que hemos enviado o recibido, deberemos pulsar sobre
la segunda opción. En ella podemos marcar aquellas alarmas recibidas como leídas o
no.
Además de esto, en la pantalla principal nos aparecerá un signo de exclamación en
el caso de que tengamos alguna alarma sin leer. Si pulsamos sobre éste, accederemos
a la alarma.
Preferencias
Desde aquí podemos modificar los datos de nuestro usuario. Como hemos comentado antes, es desde aquí desde donde debemos cambiar la contraseña.
Ayuda
Sección importante desde donde accederemos al manual del usuario. Además también dispone de información sobre GADA y sobre Qt, la tecnología sobre la que se ha
desarrollado.
113
CAPÍTULO 7. DOCUMENTACIÓN
7.3.2.
Pacientes
Una vez hemos pulsado el botón de Aceptar nos aparecerá la pantalla principal de
GADA. En ella podemos ver en la parte central superior las opciones de que disponemos (muchas de ellas se activarán al seleccionar un paciente) y más abajo todos
nuestros pacientes. En caso de ser la primera vez que abrimos el programa, tendremos
la lista vacía, por lo que procederemos a almacenar el primer paciente.
Editar y crear pacientes
Para añadir un nuevo paciente pulsamos la opción de Nuevo paciente. Nos aparecerá una nueva ventana en la que podremos introducir los datos personales del paciente, los datos están compuestos tanto por NIF, nombre, apellidos... como por algunos
datos físicos descriptivos. Una vez introducidos todos los datos y si pulsamos aceptar,
veremos como se cierra la ventana y el usuario se habrá añadido a la lista. En caso de
querer editar los diferentes datos del paciente, tendremos que seleccionarlo en la lista
y pulsar la opción que queramos.
Datos antropométricos
Al pulsar sobre el botón, aparece otra pantalla, donde podemos introducir todos los
datos antropométricos del paciente. Los botones de calcular nos calculan las diferentes
masas. Como se puede ver, hay algunos cálculos que se realizan automáticamente,
esto es porque al fijar un peso corporal, se puede saber algunos índices por medio
de fórmulas matemáticas. La pantalla nos da la opción de introducir comentarios para
cada remesa de datos, pudiendo así aportar alguna información que no este recogida
en esta pantalla y sea de interés. En la parte superior de la pantalla se dispone de
un campo de fecha; supondremos que el paciente lleva un seguimiento, y los datos
antropométricos cambian con el tiempo, por lo que puede ser necesario actualizarlos.
Información médica
En el botón vemos que a la derecha tiene una flecha apuntando hacia abajo; esto
indica que sobre este tema en concreto hay más de una opción disponible. Si pulsamos
el botón irá a la opción predeterminada, pero pulsando sobre la flecha se desplegarán
las opciones: Gestionar intolerancias, Nuevo análisis y Análisis pasados.
114
7.3. MANUAL DE USUARIO
Gestionar intolerancias En este caso la ventana que aparece tiene todos los alimentos que existen en la base de datos. Aquí podemos seleccionar uno o varios alimentos
a la vez para indicar el tipo de intolerancia del paciente. Existen tres grados: Bajo, Medio y Alto y un último estado que indica que no existe intolerancia ninguna. Una vez
seleccionados los alimentos solo tenemos que pulsar el botón de actualizar y quedarán
grabados en la BD.
Nuevo análisis Una parte importante a la hora de elaborar dietas son los análisis.
Para almacenar un análisis deberemos acceder a la ventana pulsando la opción correspondiente. Aquí podremos almacenar todos los datos que queramos de la analítica y la
fecha de realización.
Análisis pasados Al pulsar esta opción podremos acceder a los análisis pasados de
que disponemos. No podemos editar datos, por lo que simplemente se realizará una
visualización de la información.
Información dietética
En el botón vemos que a la derecha tiene una flecha apuntando hacia abajo; esto
indica que sobre este tema en concreto hay más de una opción disponible. Si pulsamos
el botón irá a la opción predeterminada, pero pulsando sobre la flecha se desplegarán
las opciones: Asignar dieta y Modificar dieta.
Asignar dieta Al pulsar sobre esta opción aparece un diálogo donde elegiremos primero el tipo de dieta que queremos para el paciente y más tarde el la dieta específica.
Para guardar simplemente tenemos que pulsar sobre el botón Aceptar y se almacenará
la información en la BD.
Modificar dieta El funcionamiento es exactamente el mismo que el de la opción anterior, salvo por el detalle de que la oferta se modifica en la BD, en vez de insertarse.
Notas
En el botón vemos que a la derecha tiene una flecha apuntando hacia abajo; esto
indica que sobre este tema en concreto hay más de una opción disponible. Si pulsamos
115
CAPÍTULO 7. DOCUMENTACIÓN
el botón irá a la opción predeterminada, pero pulsando sobre la flecha se desplegarán
las opciones: Ver notas y Crear notas.
Ver notas Con esta opción podremos ver las notas creadas para cada paciente.
Crear notas Al pulsar sobre el botón, nos aparecerá un pequeño formulario en el
que podemos insertar un texto libre. Este texto se guardará en la base de datos como
comentario/nota sobre el paciente. Puede servir para guardar comentarios sobre gustos, problemas, cambios de fechas, etc.
Informes
En el botón vemos que a la derecha tiene una flecha apuntando hacia abajo; esto
indica que sobre este tema en concreto hay más de una opción disponible. Si pulsamos
el botón irá a la opción predeterminada, pero pulsando sobre la flecha se desplegarán
las opciones: Informe de paciente y Informe de dieta.
Informe de paciente Al pulsar sobre esta opción se nos generará un informe del
paciente en formato PDF. Si todo ha ido correctamente, se mostrará un mensaje de
éxito en el que se informará de la ruta donde se encuentra el informe. Este informe
incluye análisis del paciente, datos antropométricos, analítica y dieta actual.
Informe de dieta Con esta opción se generará un informe de la dieta que actualmente tiene el paciente, en formato PDF. Si todo ha ido correctamente, se mostrará un
mensaje de éxito en el que se informará de la ruta donde se encuentra el informe. Este
informe sólo incluye la dieta actual.
7.3.3.
Dietas
En la segunda pestaña de la pantalla principal tenemos la sección de dietas. Aquí es
donde podemos manejar todo lo relacionado con los alimentos, los platos y las dietas.
116
7.3. MANUAL DE USUARIO
Lista de dietas
Lo primero que aparece en la pantalla es la lista de dietas, donde podemos buscar
o borrar a nuestra elección. A esta opción podemos volver siempre que pulsemos la
opción Lista de dietas.
Crear dieta
Al pulsar esta opción aparece un asistente de creación de dietas.
paragraphPrimera pantalla tendremos que dar el nombre, el tipo de dieta y las semanas que va a ocupar por defecto. Una vez acabado pasaremos a la segunda.
paragraphSegunda pantalla tenemos por un lado los alimentos y platos. y por otro
la tabla de la dieta. Los alimentos y platos que podemos utilizar se encuentran a la
izquierda. A la derecha podemos seleccionar la semana y el día para añadir los platos.
También tenemos una tabla con cinco pestañas en la que se añaden los alimentos
según el horario. Aquí podemos editar el peso de un alimento, borrarlo o eliminar todos
los alimentos de la dieta.
En la parte inferior tenemos una tabla-resumen con los datos más característicos
de la dieta. estos datos se actualizan a medida que añadimos alimentos y nos sirven
de indicador para saber si estamos poniendo bien las cantidades o si los alimentos y/o
platos son los adecuados.
Una vez completado todo, vamos a la página siguiente, donde nos confirmará que
la dieta se ha creado.
Gestionar platos
Al pulsar esta opción nos aparecerá una tabla-resumen con los platos que tenemos
disponibles y a la derecha de esta tres botones. El primero nos abrirá una ventana
para la creación de un nuevo plato, el segundo para la edición y el tercero nos permite
borrarlo.
Crear plato A la hora de crear un plato, el sistema será parecido al de la dieta. Tenemos una tabla-resumen con los alimentos a la izquierda, a la derecha el espacio donde
podemos añadir alimentos con su peso y un comentario para crear el plato, y más abajo
117
CAPÍTULO 7. DOCUMENTACIÓN
una nueva tabla con las propiedades totales del plato, que se calculan según se añaden
alimentos.
Editar plato La pantalla es idéntica a la anterior salvo porque ya tenemos los platos
completos con sus alimentos. En este caso tenemos que editar aquellos alimentos que
queramos de los platos, para posteriormente guardarlo.
Gestionar alimentos
En esta parte de la sección de dietas tenemos una lista con los alimentos, por si
quisiéramos editarlos. En este caso sólo tendríamos que pulsar sobre él en la lista,
cambiar aquello que queramos y volver a guardarlo. En el caso de que queramos crear
uno nuevo, es tan sencillo como rellenar los datos y pulsar el botón de guardar. Al
instante se actualizará la tabla de alimentos en caso de que todo haya ido bien.
Opciones
Esta sección será completada a medida que la aplicación avance. De momento sólo
permite imprimir una dieta en el caso de que se encuentre en la pantalla de Lista de
dietas.
118
Capítulo 8
Futuro desarrollo
8.1.
Introducción
En esta sección veremos qué vías futuras de desarrollo existen y qué funcionalidades nuevas se pueden desarrollar. El plan es dejar unas directrices básicas para todo
aquel que quiera desarrollar para y con GADA. Al ser un proyecto de software libre, la
posibilidad de crear extensiones y funcionalidades adaptadas a GADA es muy grande.
Es fundamental para cualquier aplicación tener una comunidad detrás que la soporte y
cuide.
En los siguientes apartados veremos qué opciones hay para extender GADA, tanto
de programación como de traducción, etc.
8.2.
Vías futuras de desarrollo
8.2.1.
Nuevas funcionalidades
Las nuevas funcionalidades se trata de nuevas características sobre temas nuevos.
Esto implica una nueva creación de interfaz o de opciones en el menú. En caso de
que sobre el tema elegido se quisieran crear nuevas opciones, serían calificadas como
extensiones. Entre las propuestas futuras podríamos considerar:
Creación de una Internal Instant Messenger Application (AIMI: aplicación interna de mensajería instantánea) para permitir una comunicación mas fluida entre
119
CAPÍTULO 8. FUTURO DESARROLLO
dietistas y entre dietista y pacientes.
Realizar un portal web para la comunicación en modo cliente servidor de GADA.
Actualización del programa de forma online.
Nokia y la comunidad que tiene detrás del proyecto Qt, proporciona un software
totalmente adaptado para realizar traducciones. Se trata de Qt Linguist. La forma de
realizar traducciones es fácil pero envuelve a dos agentes. En primer lugar se encuentran los desarrolladores, que se tienen que preocupar de que el código esté preparado
para las traducciones, ya sea para habilitar la traducción de los textos y para generar y
cargar los diferentes archivos de traducción. Una de las previsiones futuras es realizar
la traducción de GADA a los idiomas alemán, catalán, danés, finés, francés, italiano,
noruego, portugués y sueco.
8.2.2.
Extensiones
Al contrario que las nuevas funcionalidades, las extensiones son nuevas opciones
sobre las ya existentes. En este campo podrían entrar:
Extender la información hacia el área médica, con informes médicos, tratamiento,
etc.
Personalización de la interfaz por parte del usuario final (dietista).
Habilitar la posibilidad de elegir el SGBD, entre PostgreSQL y MySQL.
Añadir soporte para bases de datos en archivo (SQLite).
120
Apéndice A
Especificación de requisitos
A.1.
Casos de Uso Textuales
En esta sección se presentan todos los casos de uso vistos en la imagen 3.6.1. Mediante los casos de uso textuales se pretende dotar a la representación esquemática
de una descripción donde se recojan tanto las precondiciones y postcondiciones, como
la descripción del escenario principal que se prevé.
121
APÉNDICE A. ESPECIFICACIÓN DE REQUISITOS
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-01 Gestión de dietistas
Administrador de GADA
La aplicación funciona en modo normal.
La aplicación funciona en modo normal.
El administrador de GADA:
El administrador escribe los datos en la pantalla y pulsa
el botón Guardar.
El programa ejecuta la sentencia en la base de datos.
Se recibe un mensaje de confirmación.
Se actualiza la tabla de datos del programa.
Extensiones
1 El sistema falla al insertar los datos
.1 Se emite un mensaje informando del error.
.2 No se actualiza la tabla de datos del programa.
122
A.1. CASOS DE USO TEXTUALES
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-02 Gestión de alarmas
Administrador de GADA y Dietista
La aplicación funciona en modo normal.
La aplicación funciona en modo normal.
El administrador de GADA y Dietista:
El administrador/dietista escribe el texto de la alarma,
selecciona a quien lo envía y pulsa el botón Enviar.
El programa ejecuta la sentencia en la base de datos.
Se recibe un mensaje de confirmación.
Aparece un icono de alarma pendiente de leer en el
usuario contrario al envió.
Extensiones
1 El sistema falla al insertar la alarma
.1 Se emite un mensaje informando del error.
.2 No aparece ningún icono de alarma pendiente de
leer.
123
APÉNDICE A. ESPECIFICACIÓN DE REQUISITOS
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-03 Gestión de pacientes
Dietista
La aplicación funciona en modo normal.
La aplicación funciona en modo normal.
El dietista:
El dietista escribe los datos en la pantalla y pulsa el
botón Guardar.
El programa ejecuta la sentencia en la base de datos.
Se recibe un mensaje de confirmación.
Se actualiza la tabla de datos del programa.
Extensiones
1 El sistema falla al insertar los datos
.1 Se emite un mensaje informando del error.
.2 No se actualiza la tabla de datos del programa.
124
A.1. CASOS DE USO TEXTUALES
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-04 Creación de informes
Dietista
La aplicación funciona en modo normal.
La aplicación funciona en modo normal.
El dietista:
El dietista selecciona el paciente y pulsa el botón de
Informes.
Aparece una barra de progreso mientras se crea el informe
Aparece un mensaje indicando el lugar donde se encuentra el archivo.
Extensiones
1 El sistema falla al generar el informe
.1 Se emite un mensaje informando del error
125
APÉNDICE A. ESPECIFICACIÓN DE REQUISITOS
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-05 Gestión de dietas
Dietista
La aplicación funciona en modo normal.
La aplicación funciona en modo normal.
El dietista:
El dietista ejecuta el asistente, escribe los datos en la
pantalla y pulsa el botón Finalizar.
El programa ejecuta la sentencia en la base de datos.
Se recibe un mensaje de confirmación.
Se actualiza la tabla de datos del programa.
Extensiones
1 El sistema falla al insertar los datos
.1 Se emite un mensaje informando del error.
.2 No se actualiza la tabla de datos del programa.
126
A.1. CASOS DE USO TEXTUALES
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-06 Gestión de platos
Dietista
La aplicación funciona en modo normal.
La aplicación funciona en modo normal.
El dietista:
El dietista escribe los datos en la pantalla y pulsa el
botón Guardar.
El programa ejecuta la sentencia en la base de datos.
Se recibe un mensaje de confirmación.
Se actualiza la tabla de datos del programa.
Extensiones
1 El sistema falla al insertar los datos
.1 Se emite un mensaje informando del error.
.2 No se actualiza la tabla de datos del programa.
127
APÉNDICE A. ESPECIFICACIÓN DE REQUISITOS
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-07 Gestión de alimentos
Dietista
La aplicación funciona en modo normal.
La aplicación funciona en modo normal.
El dietista:
El administrador escribe los datos en la pantalla y pulsa
el botón Guardar.
El programa ejecuta la sentencia en la base de datos.
Se recibe un mensaje de confirmación.
Se actualiza la tabla de datos del programa.
Extensiones
1 El sistema falla al insertar los datos
.1 Se emite un mensaje informando del error.
.2 No se actualiza la tabla de datos del programa.
128
A.1. CASOS DE USO TEXTUALES
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-08 Conexión a la BD
Administrador del sistema
El administrador tiene los privilegios necesarios para administrar los usuarios y datos de la BD.
El administrador del sistema tiene una visión general completa de todos los componentes del SGBD sobre el que opera la
GADA.
El administrador del sistema:
El administrador escribe sus credenciales y se autentica.
El administrador ejecuta una sentencia en la base de
datos.
El administrador elige una tabla para obtener la información detallada.
el administrador actúa sobre las tablas o usuarios de la
consulta.
Extensiones
1 El sistema falla al autenticar al administrador
.1 El intento erróneo de login queda grabado en el log
del sistema.
.2 El administrador debe volver a poner los datos y
las credenciales para la autenticación, o cancelar.
129
APÉNDICE A. ESPECIFICACIÓN DE REQUISITOS
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-09 Editar preferencias
Administrador de GADA
La aplicación funciona en modo normal.
La aplicación funciona en modo normal.
El administrador de GADA:
El administrador selecciona las opciones deseadas y
pulsa Guardar.
El programa aplica dichos cambios sin reiniciarse.
Se emite un mensaje informando de que se ha realizado correctamente.
Extensiones
1 El sistema falla al aplicar los cambios
.1 Se emite un mensaje de error indicando los fallos.
130
A.1. CASOS DE USO TEXTUALES
Caso de uso
Actor
Pre-condición
Post-condición
Escenario principal:
CU-10 Gestión de cuentas de usuario
Administrador del sistema
El administrador tiene los privilegios necesarios para administrar los usuarios y datos de la BD.
El administrador del sistema tiene una visión general completa de todos los componentes del SGBD sobre el que opera la
GADA.
El administrador del sistema:
El administrador escribe sus credenciales y se autentica.
El administrador crea las sentencias de gestión de
usuarios en la base de datos.
El administrador obtiene un respuesta de confirmación.
El administrador del sistema comunica los cambios al
administrador de GADA correspondiente.
Extensiones
1 El sistema falla al autenticar al administrador
.1 El intento erróneo de login queda grabado en el log
del sistema.
.2 El administrador debe volver a poner los datos y
las credenciales para la autenticación, o cancelar.
131
APÉNDICE A. ESPECIFICACIÓN DE REQUISITOS
132
Apéndice B
Fase de pruebas
B.1.
Pruebas unitarias
Esta sección contiene la lista de chequeo para las pruebas unitarias. Dichas pruebas incluyen pruebas de las más básicas unidades del software, como por ejemplo
funciones y clases. Las pruebas unitarias son ejecutadas a través de un análisis del
código fuente.
Puntos generales
¿Sigue todo el código fuente los estándares de código y de comentarios?
¿Sigue la implementación el diseño descrito en la fase de Diseño e Implementación?
¿Hay una línea de código por cada línea de fichero?
Variables y métodos
¿Tienen todas las variables y constantes nombres descriptivos y comprensibles?
¿Alguna de las variables podría ser constante?
¿Alguna de las variables no locales podría ser local?
133
APÉNDICE B. FASE DE PRUEBAS
Métodos
¿Todos los métodos tienen nombres descriptivos y comprensibles?
¿Los métodos devuelven el valor correcto?
¿Tienen todos los métodos los parámetros correctos?
¿Tienen todos los métodos el modo correcto de acceso?
Clases
¿Tienen todos las clases el modo correcto de acceso?
¿Tienen todas las subclases variables que pueden ser movidas a la superclase?
¿Puede simplificarse la jerarquía?
Comparaciones
¿Se usan correctamente todos los operadores en todas las comparaciones?
¿Son correctas todas las expresiones booleanas?
Flujo
¿Tienen todos los bucles las iteraciones correctas?
¿Tienen final todos los bucles?
¿Tienen todas las lineas bien anidadas los bucles?
Entrada/Salida
¿Se abren todos los ficheros correctamente antes de su uso?
¿Se cierran todos los ficheros después de su uso?
¿El texto presentado es correcto?
¿Los mensajes de error ayudan y son comprensibles?
134
B.2. PRUEBAS MODULARES
Comentarios del código
¿Están todos los métodos y clases comentadas de forma comprensibles y descriptiva?
¿Las declaraciones de variables y métodos están comentadas?
¿Los comentarios describen los que realmente sucede?
¿Incrementan los comentarios la comprensión de lo que hay escrito?
¿Los comentarios son prescindibles?
Mejoras
¿Quedan comentarios por mover fuera de los bucles?
¿Es posible unir los bucles que operan sobre los mismos datos?
¿Existe código duplicado? ¿Puede ser reemplazado?
B.2.
Pruebas modulares
Esta sección contiene la lista de chequeo para las pruebas modulares. La implementación del sistema se divide en varios módulos como veremos a continuación. Las
pruebas modulares significa probar los diferentes módulos por separado antes de integrarlos entre ellos.
Base de datos
¿La base de datos soporta paralelismo?
¿La base de datos puede almacenar toda la información deseada?
GUI
¿Sigue la GUI los principios de KDE y Gnome para su diseño?
¿Se consigue una adaptación gráfica al sistema operativo desde donde se ejecuta?
135
APÉNDICE B. FASE DE PRUEBAS
Interfaz de comunicación
¿La interfaz de usuario puede enviar la información a la base de datos? ¿Y al
contrario?
¿La GUI puede comunicarse con las impresoras?
¿Pueden generarse documentos en formato PDF?
B.3.
Especificación de los casos de prueba
En esta sección se describen las especificaciones de las pruebas, con sus correspondientes campos y tablas. Los campos que componen dichas pruebas son los siguientes, y la tabla modelo es la B.3.1:
Nombre Es el nombre descriptivo de la prueba.
Identificación Es el identificador único para cada prueba.
Requisitos relacionados Requisitos que están relacionados con la prueba.
Pre-condición Condición previa que debe cumplirse para ejecutar la prueba.
Ejecución Proceso de ejecución de la prueba.
Salida esperada Salida esperada de la prueba.
Nombre
ID
Requisitos relacionados
Pre-condición
Ejecución
Salida esperada
<nombre_prueba>
<pruebaID>
<req_rel>
<preCondicion>
<ejecucion>
<salida_esperada>
Cuadro B.3.1: Plantilla para las pruebas
136
B.3. ESPECIFICACIÓN DE LOS CASOS DE PRUEBA
B.3.1.
Sistema e integración
Base de datos
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Conexión a la red
TC-SIBD-01
RF-CR01
Se debe disponer de conexión a la red.
- Se comprobará que se dispone de acceso en
el sistema operativo.
- Se comprobará que no hay oposición de proxy
o cortafuegos para el acceso.
Notificación del estado de forma local del sistema.
Cuadro B.3.2: Prueba SIBD-01
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Autenticación de usuario
SIBD-02
RF-CR02
Se debe disponer de conexión a la red.
- Se introducen las credenciales.
- Se manda la información de autenticación.
Mensaje de aceptación si el usuario es correcto.
Cuadro B.3.3: Prueba SIBD-02
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Conexión con la base de datos
SIBD-03
RF-CR02
Se debe disponer de conexión a la red.
- Se introducen las credenciales.
- Se envía la información de autenticación.
- Se almacena la información del intento de acceso en el sistema.
Mensaje de confirmación en caso de que la autenticación sea correcta.
Cuadro B.3.4: Prueba SIBD-03
137
APÉNDICE B. FASE DE PRUEBAS
Informes
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Impresión de documentos
SIIN-01
RF-HW01
El sistema debe funcionar con normalidad.
- Se muestra el diálogo de impresión.
- Se selecciona la impresora y se envía la información.
Aparece el documento en la cola de impresión.
Cuadro B.3.5: Prueba SIIN-01
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Generar documentos PDF
SIIN-02
RF-UI06, RF-IN01, RF-IN02
El sistema debe funcionar con normalidad.
- Se pulsa la opción de generar el documento en
PDF.
Mensaje de confirmación en caso de que se haya generado correctamente.
Cuadro B.3.6: Prueba SIIN-02
B.3.2.
GUI
Alarmas
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Envío de alarmas
TC-IUAL-01
RF-UI02
El sistema debe funcionar con normalidad.
- Se introduce el texto y se eligen los usuarios.
- Se envía la información.
Mensaje de confirmación.
Cuadro B.3.7: Prueba IUAL-01
138
B.3. ESPECIFICACIÓN DE LOS CASOS DE PRUEBA
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Aviso de nuevas alarmas
TC-IUAL-02
RF-UI02
El sistema debe funcionar con normalidad.
- El sistema se conecta a la BD.
- Consulta si hay nuevas alarmas.
Icono de alerta si hay alarmas nuevas.
Cuadro B.3.8: Prueba IUAL-02
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Notifica alarmas no leídas
TC-IUAL-03
RF-UI02
El sistema debe funcionar con normalidad.
- El sistema se conecta a la BD.
- Consulta si hay alarmas sin leer.
Icono de alerta si hay alarmas sin leer.
Cuadro B.3.9: Prueba IUAL-03
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Borrar alarma
TC-IUAL-04
RF-UI02
El sistema debe funcionar con normalidad.
- Se selecciona la pantalla de visionado de alarmas.
- Se elige la alarma a borrar.
- Se envía la información.
Mensaje de confirmación.
Cuadro B.3.10: Prueba IUAL-04
139
APÉNDICE B. FASE DE PRUEBAS
Administración
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Insertar dietista
TC-IUAD-01
RF-UI03
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.11: Prueba IUAD-01
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Editar dietista
TC-IUAD-02
RF-UI03
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.12: Prueba IUAD-02
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Borrar dietista
TC-IUAD-03
RF-UI03
El sistema debe funcionar con normalidad.
- Se elige el dietista a eliminar y se pulsa el botón
Eliminar.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.13: Prueba IUAD-03
140
B.3. ESPECIFICACIÓN DE LOS CASOS DE PRUEBA
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Editar datos del usuario
TC-IUAD-04
RF-UI03
El sistema debe funcionar con normalidad.
- Se introducen los nuevos datos y se pulsa el
botón Aceptar.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.14: Prueba IUAD-04
Pacientes
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Insertar paciente
TC-IUPA-01
RF-UI04
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.15: Prueba IUPA-01
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Editar paciente
TC-IUPA-02
RF-UI04
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.16: Prueba IUPA-02
141
APÉNDICE B. FASE DE PRUEBAS
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Borrar paciente
TC-IUPA-03
RF-UI04
El sistema debe funcionar con normalidad.
- Se selecciona el paciente y se pulsa el botón
Eliminar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.17: Prueba IUPA-03
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Insertar datos antropométricos
TC-IUPA-04
RF-UI04
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.18: Prueba IUPA-04
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Ver datos antropométricos
TC-IUPA-05
RF-UI04
El sistema debe funcionar con normalidad.
- Se selecciona el paciente y se pulsa el botón
de Ver datos antropométricos
- Se consulta la información a la BD.
Pantalla con los datos de anteriores sesiones.
Cuadro B.3.19: Prueba IUPA-05
142
B.3. ESPECIFICACIÓN DE LOS CASOS DE PRUEBA
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Insertar analítica
TC-IUPA-06
RF-UI04
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.20: Prueba IUPA-06
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Ver analíticas
TC-IUPA-07
RF-UI04
El sistema debe funcionar con normalidad.
- Se selecciona el paciente y se pulsa el botón
de Ver datos antropométricos
- Se consulta la información a la BD.
Pantalla con los datos de anteriores sesiones.
Cuadro B.3.21: Prueba IUPA-07
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Insertar notas
TC-IUPA-08
RF-UI04
El sistema debe funcionar con normalidad.
- Se selecciona el paciente y se pulsa el botón
de “Nueva nota“.
- Se introduce la información y se pulsa Enviar.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.22: Prueba IUPA-08
143
APÉNDICE B. FASE DE PRUEBAS
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Ver notas
TC-IUPA-09
RF-UI04
El sistema debe funcionar con normalidad.
- Se selecciona el paciente y se pulsa ”Ver
notas“.
- Se consulta la información en BD.
Pantalla con las notas.
Cuadro B.3.23: Prueba IUPA-09
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Borrar notas
TC-IUPA-10
RF-UI04
El sistema debe funcionar con normalidad.
Se selecciona el paciente y se pulsa el botón
”Ver notas”.
- Se envía la información a BD.
- Se muestran las notas.
- Se selecciona la nota a eliminar y se pulsa Eliminar.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.24: Prueba IUPA-10
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Asignar dieta
TC-IUPA-11
RF-UI04
El sistema debe funcionar con normalidad.
Se elige el paciente y se pulsa “Asignar dita”.
- Se elige la dieta y se pulsa el botón Guardar.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.25: Prueba IUPA-11
144
B.3. ESPECIFICACIÓN DE LOS CASOS DE PRUEBA
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Editar asignación de dietas
TC-IUPA-12
RF-UI04
El sistema debe funcionar con normalidad.
Se elige el paciente y se pulsa “Asignar dita”.
- Se elige la dieta y se pulsa el botón Guardar.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.26: Prueba IUPA-12
Dietas
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Crear alimento
TC-IUDI-01
RF-UI05
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.27: Prueba IUDI-01
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Editar alimento
TC-IUDI-02
RF-UI05
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.28: Prueba IUDI-02
145
APÉNDICE B. FASE DE PRUEBAS
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Borrar alimento
TC-IUDI-03
RF-UI05
El sistema debe funcionar con normalidad.
- Se elige el alimento y se pulsa el botón Eliminar.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.29: Prueba IUDI-03
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Crear plato
TC-IUDI-04
RF-UI05
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.30: Prueba IUDI-04
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Editar plato
TC-IUDI-05
RF-UI05
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.31: Prueba IUDI-05
146
B.3. ESPECIFICACIÓN DE LOS CASOS DE PRUEBA
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Borrar plato
TC-IUDI-06
RF-UI05
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón
Guardar.
- Se comprueban los datos.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.32: Prueba IUDI-06
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Crear dieta
TC-IUDI-07
RF-UI05
El sistema debe funcionar con normalidad.
- Se introducen los datos y se pulsa el botón Siguiente.
- Se introducen los platos uno por uno y se envía
la información a BD.
- Se comprueban los datos.
- Se envía la información a actualizar a BD.
Mensaje de confirmación.
Cuadro B.3.33: Prueba IUDI-07
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Borrar dieta
TC-IUDI-08
RF-UI05
El sistema debe funcionar con normalidad.
- Se selecciona la dieta y se pulsa el botón Eliminar.
- Se envía la información a BD.
Mensaje de confirmación.
Cuadro B.3.34: Prueba IUDI-08
147
APÉNDICE B. FASE DE PRUEBAS
Preferencias
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Editar preferencias
TC-IUPR-01
El sistema debe funcionar con normalidad.
Se elige la opción Preferencias en la barra
herramientas.
- Se eligen las preferencias y se pulsa Acepta
- Se almacenan en la configuración del programa.
Salida esperada
Mensaje de confirmación
Cuadro B.3.35: Prueba IUPR-01
B.3.3.
Usabilidad
Estilos
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Estilos correctos
TC-USES-01
El sistema debe funcionar con normalidad.
- Se ejecutan de forma automática al iniciar la
aplicación.
Nada.
- Mensaje de error si no se ha realizado correctamente.
Cuadro B.3.36: Prueba USES-01
148
B.3. ESPECIFICACIÓN DE LOS CASOS DE PRUEBA
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Tipos de letra
TC-USES-02
El sistema debe funcionar con normalidad.<preCondicion>
- Se ejecutan de forma automática al iniciar la
aplicación.
Nada.
- Mensaje de error si no se ha realizado correctamente.
Cuadro B.3.37: Prueba USES-02
Maquetación
Nombre
ID
Requsitos relacionados
Pre-condición
Ejecución
Salida esperada
Maquetación correcta
TC-USMA-01
El sistema debe funcionar con normalidad.
- Se ejecutan de forma automática al iniciar la
aplicación.
Nada.
- Mensaje de error si no se ha realizado correctamente.
Cuadro B.3.38: Prueba USMA-01
149
APÉNDICE B. FASE DE PRUEBAS
150
Glosario
A
API (Application Programming Interface) Es el conjunto de funciones y procedimientos (o métodos, en la programación orientada a objetos) que ofrece
cierta biblioteca para ser utilizado por otro software como una capa de abstracción., pág. 18.
C
CSS (Cascading Style Sheets) Es un lenguaje usado para definir la presentación
de un documento estructurado escrito en HTML o XML (y por extensión en
XHTML). El W3C (World Wide Web Consortium) es el encargado de formular la especificación de las hojas de estilo que servirán de estándar para los
agentes de usuario o navegadores., pág. 93.
CUSL (Concurso Universitario de Software Libre) Concurso de software libre que
se celebra anualmente en el que pueden colaborar estudiantes del territorio
español., pág. 1.
F
FTP (File Transfer Protocol) Protocolo de red para la transferencia de archivos entre
sistemas conectados a una red TCP (Transmission Control Protocol), basado
en la arquitectura cliente-servidor., pág. 1.
151
GLOSARIO
G
GPL (GNU General Public License) Licencia muy usada en el software de libre y
de código abierto orientada principalmente a proteger la libre distribución,
modificación y uso del mismo., pág. 7.
GUI (Graphic User Interface) Es un programa informático que actúa de interfaz de
usuario, utilizando un conjunto de imágenes y objetos gráficos para representar la información y acciones disponibles en la interfaz., pág. 5.
I
IDE (Integrated Development Environment) Es un entorno de programación que ha
sido empaquetado como un programa de aplicación, es decir, consiste en un
editor de código, un compilador, un depurador y un constructor de interfaz
gráfica., pág. 41.
M
MVC (Model View-Controller) Es un patrón de arquitectura de software que separa
los datos de una aplicación, la interfaz de usuario, y la lógica de control en
tres componentes distintos. El modelo es el Sistema de Gestión de Base de
Datos y la Lógica de negocio, y el controlador es el responsable de recibir
los eventos de entrada desde la vista., pág. 90.
P
PDF (Portable Document Format) Formato de almacenamiento de documentos, desarrollado por la empresa Adobe Systems., pág. 86.
S
SGBD (Sistema de Gestión de Bases de Datos) Software que define bases de datos, almacena información y soporta SQL. También produce informes y crea
pantallas de entrada de datos., pág. 12.
152
GLOSARIO
SMS (Short Message Service) Es un servicio disponible en los teléfonos móviles
que permite el envío de mensajes cortos (también conocidos como mensajes de texto, o más coloquialmente, textos) entre teléfonos móviles, teléfonos
fijos y otros dispositivos de mano, pág. 31.
SQL (Structured Query Language) Es un lenguaje declarativo de acceso a bases
de datos relacionales que permite especificar diversos tipos de operaciones
en éstas., pág. 85.
SVN (Subversion) Sistema de control de versiones que permite a varios editores editar el mismo archivo en distintos lugares., pág. 1.
U
UML (Unified Modeling Language) Se trata de una colección de diagramas usados
para describir sistemas software., pág. 41.
X
XML (Extensible Markup Language) Es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium., pág. 18.
153

Documentos relacionados