David Antelo Del Río - TFG - 2019
David Antelo Del Río - TFG - 2019
David Antelo Del Río - TFG - 2019
Facultad de Informática
A los investigadores Francisco Javier Bellas Bouza y Óscar Fontenla Romero, por su guía
y ayuda, tanto en la planificación del proyecto, como en su desarrollo.
A mi familia, y muy particularmente a mis padres, por su apoyo incondicional durante
no solo el desarrollo de este proyecto, sino también el largo camino que ha resultado ser la
carrera.
A todos mis amigos, y muy especialmente, a mis compañeros y ex-compañeros de piso,
por todas las risas compartidas, y las largas noches de videojuegos.
Resumen
El objetivo de este proyecto, enmarcado en el campo del desarrollo software, ha sido crear
una aplicación que permitiera, tanto a profesores como alumnos, visualizar y modificar ejer-
cicios de alguna materia (aunque el foco concreto del proyecto hayan sido ejercicios de pro-
gramación), así como los exámenes, prácticas, y prácticas evaluables en los que hayan sido
utilizados. Por un lado, esta aplicación tiene como fin facilitar el trabajo de los docentes im-
plicados, dándoles acceso a todo tipo de funcionalidades orientadas a la gestión y el control
de los ejercicios y pruebas introducidas en el sistema, tales como el filtrado y ordenado de ele-
mentos por distintos criterios, la creación de bocetos de ejercicios que serán posteriormente
refinados, o la descarga en de los enunciados de los ejercicios contenidos en alguna prueba,
en un formato adecuado. Por otro, el sistema también está pensado para el uso por parte de
alumnos, permitiendo que estos tengan acceso a aquellos recursos que los profesores hayan
considerado apropiados, que les servirán de referencia de cara a las pruebas evaluatorias a las
que se tendrán que enfrentar. Al igual que los profesores, dispondrán de numerosos criterios
de filtrado y ordenado que garantizarán su control sobre los recursos, así como de opciones
de descarga de los enunciados de estos ejercicios.
Teniendo en cuenta las características de esta aplicación, parece bastante evidente que lo
que buscamos es un sistema rápido, seguro, de fácil uso, y que sea accesible para el mayor
número de usuarios posible. Es por esto por lo que se ha decidido crear una aplicación
web responsive, que siga las normas del diseño Material, y que implemente los mecanismos de
seguridad pertinentes que garanticen que el software no tiene vulnerabilidades importantes,
utilizando para todo ello herramientas y algoritmos apropiados que aseguren que el tiempo
de respuesta de la aplicación es bajo.
Para realizar este proyecto, se ha seguido la metodología conocida como Proceso Unificado
de Desarrollo de Software. Esta metodología propone el desarrollo de un esquema iterativo e
incremental, en donde las iteraciones se centran en aspectos relevantes del software.
Para el desarrollo de la aplicación, nos hemos valido únicamente de herramientas de soft-
ware libre, lo cual nos proporcionará numerosas ventajas. Además, se han realizado las pruebas
que se han considerado necesarias para garantizar la calidad del producto software que ha sido
entregado al cliente al concluir su desarrollo.
La aplicación final cumple con todos los requisitos, funcionales y no funcionales, estable-
cidos al inicio del proyecto. Sin embargo, el software ha sido desarrollado con el objetivo de
que pudiera ser fácilmente ampliado o modificado en algún momento en el futuro. Lo que
aquí se presenta es una plataforma de aprendizaje muy simplificada, que solo cuenta con las
funcionalidades esenciales que se esperarían de una aplicación de estas características. Si así
se decidiera, esta podría actuar de base para construir una plataforma de aprendizaje completa,
equiparable a Moodle o a cualquiera de sus competidoras.
Palabras clave:
• Aplicación web
• Responsive
• Patrón MVC
• Seguridad
• Software libre
2
Abstract
The goal of this project, framed in the software development field, has been to creat an
application that allowed students and teachers to visualize and modify exercises of some sub-
ject (although the main focus of the project have been programming exercises), as well as
the exams, practices, and tests in which they have been used. On one hand, the main focus
of this application is to facilitate the work of the teacher, giving them access to all kinds of
features related to the management of these elements, like filtering and sorting exercises, cre-
ating sketches of exercises, or downloading these exercises in a readable format. On the other
hand, the software system can also be used by students, allowing them to access resources
that will be useful when getting ready for tests. They will also have available similar features
to those of the teachers.
Taking into consideration the characteristics of the application, it should be obvious that
we want the system to be fast, secure, easy to use, and accesible for as many people as
possible. These are the reasons that made us decide to create a responsive web application,
following the guidelines of the Material design philosophy, and that implements security fea-
tures so that no important vulnerabilities are found in our software, using for this purpose
adequate tools and algorithms that guarantee that the response time is low.
To develop this project, we have followed the Unified Software Development Process phi-
losophy, which makes use of an iterative and incremental strategy, in which iterations focus
on important aspects of the software.
To develop the application, we have exclusively used freeware, which will show many ad-
vantages later on. Besides, we have tested the application components in the ways we thought
were necessary to guarantee the quality of the final product.
The final application fulfills all of the requirements the client provided, both functional
and non-functional. However, the software was developed in such a way that it shouldn’t be
difficult to modify at some point in the future if necessary. What is presented in this docu-
ment is a simplified version of a learning platform, that only provides the basic functionalities
usually expected from this kind of applications.
Keywords:
• Web application
• Responsive
• Relational database
• MVC pattern
• Security
• Freeware
2
Hardware y Software:
• JDK 1.8.0
• Hibernate 5.4.0.CR2
• JUnit v4.12
• MaterializeCSS v1.0.0
3
Índice general
1 Introducción 1
1.1 Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Antecedentes 5
2.1 Plataformas de aprendizaje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.1 Moodle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.1.2 TalentLMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.1.3 Docebo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.2 Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3 Fundamentos tecnológicos 9
3.1 Principios teóricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1.1 Aplicación web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1.2 Modelo-Vista-Controlador . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.1.3 Seguridad de aplicaciones web . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.4 Bases de datos relacionales . . . . . . . . . . . . . . . . . . . . . . . . . 12
3.1.5 Pruebas de software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.1.6 Material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.1.7 Diseño responsive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.2 Tecnología utilizada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.1 Entorno de desarrollo: Eclipse . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.2 Lenguaje de programación: Java . . . . . . . . . . . . . . . . . . . . . . 19
3.2.3 Gestor de base de datos: MySQL . . . . . . . . . . . . . . . . . . . . . . 20
3.2.4 Mapeador Objeto-Relacional: Hibernate . . . . . . . . . . . . . . . . . 21
3.2.5 Pruebas de código: JUnit . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.6 Framework de estilo de la interfaz: MaterializeCSS . . . . . . . . . . . 22
3.2.7 Funciones varias: Spring . . . . . . . . . . . . . . . . . . . . . . . . . . 23
i
Índice general
4 Metodología 25
4.1 Proceso Unificado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1.1 Lenguaje Unificado de Modelado . . . . . . . . . . . . . . . . . . . . . 26
4.2 Metodología a utilizar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5 Desarrollo 29
5.1 Fase de Inicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2 Iteración 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.1 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.2.2 Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.3 Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2.4 Revisión de la iteración . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.3 Fase de Elaboración . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.4 Iteración 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.4.1 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.4.2 Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.4.3 Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.4.4 Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.4.5 Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.4.6 Revisión de la iteración . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.5 Fase de Construcción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.6 Iteración 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.6.1 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.6.2 Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.6.3 Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.6.4 Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.6.5 Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.6.6 Revisión de la iteración . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.7 Iteración 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.7.1 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.7.2 Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.7.3 Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.7.4 Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.7.5 Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.7.6 Revisión de la iteración . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.8 Iteración 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.8.1 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
ii
ÍNDICE GENERAL
5.8.2 Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.8.3 Diseño . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.8.4 Implementación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.8.5 Pruebas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.8.6 Revisión de la iteración . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.9 Fase de Transición . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.10 Iteración 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6 Planificación 61
6.1 Planificación inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.2 Planificación de la fase de inicio . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.2.1 Iteración 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.3 Planificación de la fase de elaboración . . . . . . . . . . . . . . . . . . . . . . . 62
6.3.1 Iteración 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.4 Planificación de la fase de construcción . . . . . . . . . . . . . . . . . . . . . . 64
6.4.1 Iteración 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.4.2 Iteración 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.4.3 Iteración 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
6.5 Planificación de la fase de transición . . . . . . . . . . . . . . . . . . . . . . . . 66
6.5.1 Iteración 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
6.6 Coste del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
6.7 Revisión de la planificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
7 Funcionalidades destacadas 71
8 Pruebas 73
8.1 Pruebas backend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.2 Pruebas ad-hoc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.3 Pruebas de interfaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.4 Pruebas de compatibilidad de navegador . . . . . . . . . . . . . . . . . . . . . 74
8.5 Pruebas de aceptación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8.6 Pruebas alpha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8.7 Pruebas beta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
9 Conclusiones 77
9.1 Lecciones aprendidas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
iii
Índice general
10 Trabajo futuro 79
10.1 Ampliar los datos de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
10.2 Crear un foro dentro de la web . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
10.3 Internacionalizar la aplicación . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
10.4 Integrar un editor de texto enriquecido . . . . . . . . . . . . . . . . . . . . . . 80
10.5 Validar y mejorar la seguridad de la página . . . . . . . . . . . . . . . . . . . . 80
A Glosario de acrónimos 83
B Terminología 85
C Manual de usuario 87
C.1 Descripción general del sistema . . . . . . . . . . . . . . . . . . . . . . . . . . 87
C.2 Usuarios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
C.3 Barra de navegación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
C.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
C.4.1 Listado de ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
C.4.2 Visualización de ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . 90
C.4.3 Edición de ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
C.5 Conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
C.5.1 Listado de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
C.5.2 Visualización de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . . 91
C.5.3 Modo edición de conjuntos . . . . . . . . . . . . . . . . . . . . . . . . 91
C.5.4 Edición de atributos de conjuntos . . . . . . . . . . . . . . . . . . . . . 92
C.5.5 Selección de ejercicios del usuario . . . . . . . . . . . . . . . . . . . . . 92
C.6 Funcionalidades específicas para Profesores . . . . . . . . . . . . . . . . . . . . 92
C.7 Funcionalidades específicas para Administradores . . . . . . . . . . . . . . . . 93
D Imágenes de la aplicación 95
Bibliografía 103
iv
Índice de figuras
v
Índice de figuras
vi
Índice de cuadros
vii
Índice de cuadros
viii
Capítulo 1
Introducción
1.1 Motivación
1.2 Objetivos
El objetivo de este proyecto ha sido crear una aplicación capaz de simplificar el alma-
cenamiento y la gestión de ejercicios de programación para su uso en la docencia de una
asignatura oficial. Para lograr este objetivo, que es bastante abstracto en sí mismo, se han
1
1.2. Objetivos
planteado una serie de metas más concretas a alcanzar, que garantizarían la consecución del
objetivo principal. Estas metas, a grandes rasgos, son:
• El sistema debe permitir el alta / baja de usuarios, que podrán ser alumnos, profesores,
o administradores.
• El sistema debe permitir la descarga de los enunciados de los ejercicios en algún formato
adecuado.
• El sistema debe permitir hacer búsquedas de ejercicios o pruebas, utilizando para ello
numerosos criterios de filtrado, que serán distintos según los privilegios del usuario.
Además, existen una serie de requisitos que debíamos cumplir para que la aplicación es-
tuviera a la altura de las expectativas del cliente. A grandes rasgos, estos son:
• Que la aplicación sea de fácil uso: dado el carácter didáctico de la aplicación, nos
interesa que el manejo de la aplicación sea sencillo e intuitivo, y su visualización, cla-
ra, más que buscar un diseño excesivamente recargado y plagado de funcionalidades
innecesarias.
• Que la aplicación sea rápida: por el mismo motivo que el punto anterior, una de
las carácterísticas más importantes de la aplicación debe ser la velocidad. Es por ello
por lo que se debe elegir un diseño visual sencillo, que no ralentice el software con
componentes innecesarios, así como seleccionar cuidadosamente los algoritmos que se
utilizarán para obtener los datos que serán mostrados al usuario.
2
CAPÍTULO 1. INTRODUCCIÓN
3
1.2. Objetivos
4
Capítulo 2
Antecedentes
E ste capítulo está dedicado al estado del arte. Aquí, se expondrán aquellas aplicaciones y
trabajos relacionados con la temática del proyecto actual, con la intención de analizar
sus características y extraer información que podria ser útil con vistas a nuestro proyecto.
2.1.1 Moodle
Moodle 1 está construido por el proyecto Moodle, que está, a su vez, dirigido y coordinado
por el Cuartel General Moodle, soportado financieramente por una red mundial de cerca de 80
compañías de servicio, también llamadas Moodle Partners.
Moodle se utiliza actualmente en decenas de miles de entornos de aprendizaje a nivel
mundial, entre los cuales se encuentran algunos de los centros de enseñanza más prestigiosos
del planeta, como pueden ser la London School of Economics o la Universidad Estatal de Nueva
York. Además, es la plataforma de aprendizaje con mayor número de usuarios en todo el globo.
Esto se debe, en parte, a que está disponible en numerosos idiomas.
La plataforma tiene a sus espaldas más de 10 años de desarrollo guiados por la pedagogía
de constructivismo social, y tiene como principal objetivo el aprendizaje colaborativo entre el
estudiante y el profesor.
1
https://moodle.org/
5
2.1. Plataformas de aprendizaje
Posee una interfaz de usuario simple, con características drag-and-drop, y todas sus fun-
cionalidades están cubiertas por la documentación. Esto hace de Moodle una plataforma fácil
de aprender y de usar. La plataforma es gratuita y de código abierto. Esto tiene por conse-
cuencia la existencia de numerosos plugins que cubren distintos apartados de los que carece
la plataforma en su versión original.
La UDC tiene una página web 2 basada en la plataforma Moodle, utilizada tanto por
alumnos como profesores para compartir recursos relacionados con las asignaturas de las
distintas carreras que se imparten en la universidad. Ha sido usada durante años y se ha man-
tenido como una herramienta importante en el desarrollo de la enseñanza en las diferentes
facultades de la UDC.
2.1.2 TalentLMS
• Posee herramientas para fomentar la interactividad de los usuarios, que permiten, por
ejemplo, crear pequeños ”juegos” con fines didácticos.
• Utiliza una interfaz minimalista y sencilla que permite a los usuarios centrarse en el
”qué” en lugar de el ”cómo”.
2.1.3 Docebo
6
CAPÍTULO 2. ANTECEDENTES
publicaciones y comentar o puntuar las de otros, lo cual hace que el proceso de aprendizaje
sea mucho más interactivo.
2.2 Conclusiones
Adaptar una plataforma de aprendizaje a nuestro caso particular plantea ciertos problemas.
En primer lugar, se descartaron todas aquellas plataformas más orientadas a la utilización
empresarial que docente, tales como TalentLMS, por el simple motivo de que existen mejores
alternativas para el proyecto que se pretende desarrollar. De las restantes, se consideró que
Moodle era la mejor opción, puesto que es la plataforma más utilizada en el mundo, y el hecho
de que sea utilizada por nuestra universidad para una función similar a la que pretendemos
darle a nuestra aplicación hace que además tengamos la garantía de que, muy probablemente,
sirva como base. Sin embargo, esto no resuelve todos los problemas resultantes de reconvertir
una plataforma existente para nuesto propósito.
Por un lado, la plataforma es demasiado compleja para nuestros intereses. Buscamos
crear una aplicación sencilla y rápida. Moodle incluye demasiadas funcionalidades innecesa-
rias, que lo único que harán será ralentizar el software y entorpecer al usuario. Además,
Moodle no está pensado para almacenar las relaciones que nos interesa establecer entre las
entidades de nuestro programa, tales como la existente entre un examen y sus ejercicios. Por
tanto, tendríamos que modificar el software para incorporar estas funcionalidades, así como
eliminar gran parte de código existente, que sería innecesario en nuestro proyecto. Eviden-
temente, esto, aunque es una opción a tener en cuenta, está lejos de ser ideal, puesto que
estamos construyendo una aplicación a partir de otra con la que no comparte más que los
fundamentos.
Podemos, por tanto, concluir que, aunque Moodle es una plataforma interesante para nues-
tro proyecto, dado que tiene ciertas características en común con él, no tiene suficiente en
común como para justificar el ahorro en esfuerzo y coste que supondría construir una nueva
aplicación desde cero. Sin embargo, sí nos será útil tener en cuenta las funcionalidades de esta
plataforma, ya que podríamos valernos de algunas de ellas.
7
2.2. Conclusiones
8
Capítulo 3
Fundamentos tecnológicos
E l objetivo de este capítulo es describir las tecnologías utilizadas y exponer los motivos de
su elección para este proyecto concreto, así como describir brevemente las bases teóricas
en las que se apoya el desarrollo de la aplicación.
3.1.2 Modelo-Vista-Controlador
Modelo-Vista-Controlador, también conocido como MVC, es un patrón de arquitectu-
ra de software que separa los datos y la lógica de negocio de una aplicación de su represen-
tación y el módulo encargado de gestionar los eventos y las comunicaciones. Este patrón se
basa en las ideas de reutilización de código y la separación de conceptos, características que
9
3.1. Principios teóricos
• Modelo: capa representación de la información con la que trabaja el sistema. Es, con-
secuentemente, la encargada de gestionar todos los accesos a esa información, tanto
consultas como actualizaciones.
En la Figura 3.1 podemos ver una representación gráfica de la relación existente entre las
capas.
Aunque originalmente MVC fue desarrollado para aplicaciones de escritorio, ha sido am-
pliamente adaptado como arquitectura para diseñar e implementar aplicaciones web en los
principales lenguajes de programación. Se han desarrollado multitud de frameworks, comer-
ciales y no comerciales, que ayudan a implementarlo. Este patrón tiene una serie de ventajas
e inconvenientes 1 , que se describen a continuación.
1
https://www.interserver.net/tips/kb/mvc-advantages-disadvantages-mvc/
10
CAPÍTULO 3. FUNDAMENTOS TECNOLÓGICOS
Ventajas:
• MVC devuelve los datos sin formato: el Controlador envía los datos sin formatear a
la Vista, lo cual permite que sea la Vista la que decida qué mostrar y cómo mostrarlo.
Desventajas:
• Mayor complejidad
• Dificultad a la hora de integrar el patrón MVC con las interfaces de usuario modernas
11
3.1. Principios teóricos
OWASP
OWASP (Open Web Application Security Project) es un proyecto de código abierto dedicado
a determinar y combatir las causas que hacen que el software sea inseguro.
Los documentos con más éxito de OWASP incluyen la Guía OWASP y el ampliamente
adoptado documento de autoevaluación OWASP Top 10 2 . Las herramientas OWASP más
usadas incluyen el entorno de formación WebGoat, la herramienta de pruebas de penetración
WebScarab y las utilidades de seguridad para entornos .NET OWASP DotNet. OWASP cuenta
con unos 50 capítulos locales por todo el mundo y miles de participantes en las listas de
correo del proyecto. Son los creadores de la serie de conferencias AppSec 3 para mejorar la
construcción de la comunidad de seguridad de aplicaciones web.
12
CAPÍTULO 3. FUNDAMENTOS TECNOLÓGICOS
Las bases de datos relacionales cumplen ciertas reglas de integridad, que aseguran que los
datos contenidos en la tabla estén actualizados y sean siempre accesibles.
Reglas de integridad
Aseguran que la información que aparece en la base de datos sea la correcta, no aparezca
por duplicado, y permanezca en todo momento actualizada y accesible. Podemos dividir los
tipos de integridad de una base de datos relacional en [3]:
13
3.1. Principios teóricos
Por último, tenemos la integridad a nivel de relación, que implica que la relación exis-
tente entre dos tablas es sólida y los registros que las relacionan están sincronizados, y res-
ponden consecuentemente a operaciones que afectan a uno de ellos.
Modelo relacional
Ventajas:
• Garantiza la integridad referencial. Así, al eliminar un registro, elimina todos los regis-
tros relacionados dependientes.
Desventajas:
• Los bloques de texto como tipo de dato no son manipulados de forma eficiente.
Pruebas funcionales
14
CAPÍTULO 3. FUNDAMENTOS TECNOLÓGICOS
• De integración: aquellas que se realizan una vez las pruebas unitarias han sido apro-
badas y que tienen por objetivo comprobar que los componentes individuales que fun-
cionan bien por separado también lo hacen cuando interactúan entre ellos.
• De aceptación: las realiza el cliente, que evalúa si el software se adecúa a sus expecta-
tivas, y cubre los requisitos preestablecidos.
Pruebas no funcionales
• De usabilidad: pruebas que realizan usuarios finales del producto para verificar que el
software cumple con sus expectativas.
• De rendimiento: determinan la velocidad con la que el software realiza una tarea bajo
unas condiciones de trabajo concretas.
Algo que hay que tener en cuenta a la hora de decidir las pruebas de un proyecto, es
cuándo comenzar las pruebas y cuándo dejar de hacer pruebas 4 .
Dado que las pruebas no pueden determinar con un 100% de certeza que el software sea
correcto, determinar el momento de dejar de realizarlas es más complejo que el caso anterior.
Sin embargo, hay una serie de parámetros que debemos considerar a la hora de tomar esta
decisión.
4
http://moodle.nccu.edu.tw/pluginfile.php/77731/mod_resource/content/
1/software_testing%281%29.pdf pag. 2
15
3.1. Principios teóricos
• Deadlines de pruebas
• El porcentaje de bugs está por debajo de un cierto nivel y no se identifican bugs de alta
prioridad
• Decisiones de la directiva
3.1.6 Material
Material 5 es una normativa de diseño, creada en inicio para los sistemas Android, aun-
que que ya ha sido adaptada a todos los dispositivos dado que ha sido implementada por
numerosas webs.
El diseño Material es más limpio que sus antecesores (Hera, Quantum Paper), y en él pre-
dominan animaciones y transiciones de respuesta, el relleno, y los efectos de profundidad tales
como la iluminación y las sombras. Material tiene por objetivos:
• Crear un lenguaje visual que sintetice los principios básicos del buen diseño y los integre
con las innovaciones que aparezcan.
• Desarrollar un único sistema que unifique la experiencia de usuario en todas las plata-
formas, y para los diferentes periféricos de entrada existentes.
• Proporcionar la flexibilidad suficiente como para que el diseño se ajuste a las necesida-
des del programador y del problema concreto.
Hoy en día existen varias librerías gráficas que ayudan a implementar el diseño Material, y
ahorran al programador las tareas más tediosas en cuanto a la programación de la capa vista.
Estas han ayudado a popularizar dicha filosofía de diseño. En la Figura 3.3, podemos ver el
aspecto de una web que implementa la filosofía Material.
16
CAPÍTULO 3. FUNDAMENTOS TECNOLÓGICOS
17
3.2. Tecnología utilizada
A pesar de que cada componente de software ha sido escogido por unos motivos concretos,
hay algunas características fundamentales que se han intentado buscar en todos ellos, y que,
por tanto, aparecerán recurrentemente a lo largo de este apartado. Estas son: que el software
fuera libre, que fuera lo más sencillo posible mientras siguiera permitiendo el desarrollo
completo de la aplicación y no comprometiera sus funcionalidades, y que fuera popular,
dado que esto habitualmente resulta en que que muchos sistemas permitan la integración de
este componente, y da lugar a la existencia de numerosos recursos de apoyo que serán de gran
utilidad.
La elección del entorno de desarrollo es una decisión compleja que no debe tomarse a
la ligera, ya que, en cierta medida, condicionará la velocidad a la que el programador puede
trabajar, y los recursos a los que este tendrá acceso. Los principales motivos que han llevado
a elegir Eclipse por encima de otros IDEs tales como IntelliJ (que fue el candidato que más se
tuvo en cuenta después de este) o NetBeans, han sido: el hecho de ser un producto gratuíto y
de código abierto, la simplicidad de la interfaz, la abundancia de plugins disponibles para este
entorno, la numerosa cantidad de recursos de ayuda existentes, tales como foros, dedicados a
él, y las opciones de ayuda de código que incorpora.
6
https://www.w3schools.com/css/css_rwd_mediaqueries.asp
7
https://www.eclipse.org/eclipseide/
8
https://pypl.github.io/IDE.html
18
CAPÍTULO 3. FUNDAMENTOS TECNOLÓGICOS
Los plugins ayudarán a mejorar las capacidades del entorno, dotándolo de todas las funcio-
nalidades que un desarrollador pueda necesitar. Otros entornos, como IntelliJ, también tienen
disponible una cantidad de plugins razonable, pero mucho menor que la de Eclipse, y con
menor soporte. Además, la extensa comunidad de programadores que posee este IDE propor-
cionará el soporte que se requiera en caso de que fuera necesario. Esto, de nuevo, es mucho
más difícil en el caso de otros IDEs, debido al reducido tamaño de sus respectivas comunida-
des. Por último, Eclipse cuenta con la opción de autocompletar aquello que esté escribiendo el
programador, característica con la que cuentan muchos entornos, pero que Eclipse realiza de
forma inteligente. Lo que quiere decir esto es que el entorno ofrece las opciones de autocom-
pletación priorizando aquellas más probables en el entorno en el que se está trabajando.
Java es un lenguaje que se ajusta perfectamente a nuestro proyecto, por una serie de
razones.
Por una parte, es un lenguaje orientado a objetos, paradigma que permite crear aplica-
ciones modulares y desacopladas muy fácilmente, justo lo que necesitamos para implementar
de forma apropiada el patrón MVC. Implementarlo en lenguajes imperativos de Von-Neumann
o funcionales es innecesariamente complicado, y la mayoría de los lenguajes que utilizan di-
chos paradigmas no están pensados, en principio, para desarrollar aplicaciones web.
Por otra, es un lenguaje robusto. Esto nos permite programar minimizando el número
de errores en tiempo de ejecución, cuyas causas son normalmente más difíciles de averiguar
que las de los errores en tiempo de compilación. Por este motivo se descartaron lenguajes
como Python. Este argumento es, hasta cierto punto, subjetivo, ya que hay programadores
que valoran la flexibilidad por encima de la robustez.
Otro aspecto importante es que Java es multithread. En otros lenguajes, es necesario
llamar a funciones específicas del sistema operativo para utilizar dicha característica; sin em-
bargo, en Java, la programación multithread está integrada en el propio lenguaje, y el progra-
mador puede despreocuparse de ella.
9
https://www.java.com/es/
19
3.2. Tecnología utilizada
Java, además, está preparado para crear aplicaciones que funcionen en un entorno dis-
tribuído, y provee numerosas librerías de ayuda que aportan las funcionalidades necesarias
para crear cualquier tipo de aplicación de este tipo. Este es también el motivo por el que im-
plementa numerosos mecanismos de seguridad para proteger las aplicaciones.
Por último, Java es uno de los lenguajes más usados del mundo 10 , y además es libre, lo
cual se traduce en que existen numerosos recursos a nuestra disposición que podemos utilizar
para mejorar tanto el proceso de desarrollo como el producto final.
MySQL fue uno de los primeros sistemas de gestión de bases de datos relacionales
en aparecer.
20
CAPÍTULO 3. FUNDAMENTOS TECNOLÓGICOS
Dado que nuestro proyecto es muy sencillo, nuestras pruebas también deben de ser senci-
llas. JUnit es la herramienta básica de creación de tests por excelencia: sencilla y libre. Dadas
las características de nuestro proyecto, no necesitamos más potencia que la que este frame-
work nos proporciona. Además, JUnit es una herramienta altamente eficiente, permitiendo
escribir potentes tests en pocas líneas de código.
Existen otras suites para realizar tests, como Arquillian, JTest, o JWalk, pero, dado el caso,
son completamente innecesarias, dado que las funcionalidades que aportan a mayores no
11
https://en.wikipedia.org/wiki/Java_Persistence_API
12
https://junit.org/junit5/docs/current/user-guide/
21
3.2. Tecnología utilizada
van a ser utilizadas, y un correcto uso de JUnit nos permitirá cubrir las partes importantes
del código y obtener unos resultados fiables sin necesidad de otras librerías.
Antes de responder a por qué se ha usado este framework CSS en concreto, debemos res-
ponder a la pregunta de ”¿Por qué usar un framework para el desarrollo front-end?” a secas.
La respuesta es sencilla.
Si no utilizamos un framework, tendremos que crear nosotros mismos nuestros propios
estilos CSS. A pesar de que crear estilos no es demasiado complicado, es un proceso extrema-
damente laborioso, ya que deben abarcar todos los elementos utilizados en la página. Además,
los elementos seguirían sin tener vida si únicamente proporcionamos los estilos pero no códi-
go para mostrar animaciones que hagan que la página sea visualmente atractiva. Por último,
y quizás el problema más complejo de resolver, es que necesitaríamos dar soporte a distintos
tipos de pantalla sin una librería que nos facilitara la tarea. Estos son solo unos pocos de los
problemas que supone programar la vista sin utilizar herramientas apropiadas para ello. En
caso de querer crear un diseño con un toque personal, es más sencillo modificar los estilos de
una librería existente, y aprovechar el resto del código.
En cuanto a la elección del framework en particular, existen varias razones que han lle-
vado a la conclusión de que MaterializeCSS era el más adecuado para este proyecto. La más
importante es que, dado que queremos seguir las pautas del diseño Material, la librería de-
be proporcionarnos herramientas que nos faciliten ese aspecto. Este punto descarta muchas
librerías, pensadas con otro tipo de finalidades, ajenas a la que se intenta lograr en este pro-
yecto: claridad y legibilidad. Entre las restantes se ha escogido MaterializeCSS por ser una
librería bastante ligera y sencilla de utilizar, además de por el claro diseño visual de las vistas
que se pueden crear con ella (esto es puramente subjetivo, y puede haber desarrolladores que
discrepen en este punto), factor que llevó a descartar el framework MUI CSS.
Por último, está orientada al diseño de páginas responsive, algo crucial en nuestra aplica-
ción, como ya ha sido mencionado más veces a lo largo de esta memoria. Bootstrap, la librería
CSS por excelencia, fue descartada porque, aunque es posible implementar un diseño que siga
la guía de Material con ella, y es bastante similar a MaterializeCSS, es innecesariamente com-
pleja. Se podría decir que MaterializeCSS es una versión de Bootstrap específicamente creada
para trabajar con el diseño Material.
22
CAPÍTULO 3. FUNDAMENTOS TECNOLÓGICOS
Spring, en su conjunto, ha sido escogido por considerarse una librería casi imprescindi-
ble para el desarrollo de aplicaciones web en Java. En 2018, un 74.5% de los programadores
Java utilizaron Spring 14 . Por su popularidad, posee una gran comunidad de desarrollado-
res, lo cual hace que existan cuantiosos recursos online, así como libros, que permiten extraer
el máximo potencial al framework. Además, cubre numerosos aspectos de la implementación
del software, lo que evita los problemas de integración que surgen al trabajar con librerías
de distintos desarrolladores que se encargan de tareas relacionadas en un mismo proyecto.
En este proyecto, se utilizarán varios módulos de Spring para facilitar la implementación
de diferentes aspectos del software. A continuación, se describirán brevemente los más im-
portantes, y se explicará por qué se han escogido para el desarrollo de esta aplicación.
Spring Core
Spring ORM
Permite la integración de Spring con varias librerías de mapeo objeto-relacional, entre las
que se encuentra Hibernate. Se ha escogido utilizar este módulo porque la integración de am-
bos frameworks nos proporciona la ventaja de poder aprovechar las características de Spring,
tales como la inyección de dependencias, sobre las entidades manejadas por el framework ORM.
13
https://spring.io/
14
https://www.baeldung.com/java-in-2017
23
3.2. Tecnología utilizada
Spring MVC
Aunque el nombre real de este módulo es Spring Web MVC, se le conoce coloquialmente
como Spring MVC. Se ha decidido utilizar este módulo porque proporciona la arquitectura
básica de un proyecto web, y se encarga de numerosas tareas, tales como la resolución del
mapeo de URLs a los controladores correspondientes, o dar soporte a la subida de archivos,
así como de proporcionar ayuda a la hora de implementar el patrón MVC. Es un módulo
imprescindible para el desarrollo de una aplicación web con Spring.
Spring Security
Spring Test
24
Capítulo 4
Metodología
• Dirigido por casos de uso: Un caso de uso es un fragmento de funcionalidad del sis-
tema que proporciona al usuario (entendiendo usuario no necesariamente como una
persona, sino también como otro sistema fuera del sistema actual) un resultado. Los
casos de uso representan los requisitos funcionales. Sin embargo, los casos de uso no
son solo útiles para especificar los requisitos de un sistema. También guían su diseño,
implementación, y prueba. Es decir: guían el proceso de desarrollo.
25
4.1. Proceso Unificado
una arquitectura adecuada para el proyecto, los arquitectos deben centrarse en los casos
de uso claves. La arquitectura y los casos de uso deben evolucionar en paralelo.
El Proceso Unificado se repite a lo largo de una serie de ciclos que constituyen la vida de
un sistema. Cada ciclo concluye con una versión del producto para los clientes. Cada ciclo se
compone de cuatro fases:
• Elaboración: en esta fase, se obtiene la visión refinada del proyecto a realizar, la im-
plementación iterativa del núcleo de la aplicación, la resolución de riesgos altos, unos
nuevos requisitos, y se ajustan las estimaciones.
• Construcción: esta fase abarca la evolución del software hasta que se convierte en un
producto listo, incluyendo requisitos mínimos. También se afinan los detalles menores,
como los diferentes tipos de casos, o los riesgos no críticos.
• Transición: al llegar a esta fase, el producto debe estar preparado para ser probado,
instalado, y utilizado por el cliente. Una vez finalizada esta fase, solo queda pensar en
futuras actualizaciones para la aplicación.
Cada una de estas fases se divide en una serie de iteraciones, ya que estas ayudan a redu-
cir la dificultad del proyecto, dividiéndolo en esfuerzos más pequeños. Una iteración genérica,
a su vez, se divide en una serie de etapas predefinidas, que son: requisitos, análisis, diseño,
implementación, y pruebas.
26
CAPÍTULO 4. METODOLOGÍA
4.3 Roles
En el desarrollo de este sistema de software, mis tutores, Óscar Fontenla Romero, y Fran-
cisco Javier Bellas Bouza, han desempeñado el rol del cliente, así como de los usuarios finales
de la aplicación mientras dure su desarrollo.
Yo, por otra parte, he desempeñado el rol del equipo de desarrollo de la aplicación. A
pesar de que en un proyecto que siga las pautas del Proceso Unificado el equipo de desarrollo
está compuesto por trabajadores que desempeñan, a su vez, distintas funciones, como la de
arquitecto, la de programador, o la de analista, en este caso yo representaré todos estos
papeles.
27
4.3. Roles
28
Capítulo 5
Desarrollo
5.2 Iteración 1
Nuestro objetivo en esta iteración consiste en garantizar la viabilidad del proyecto, lo
cual evitará invertir esfuerzos en una tarea sin futuro, y en esbozar su arquitectura, para
tener una referencia en las siguientes fases de como estructurar el conjunto.
5.2.1 Requisitos
Lo primero que debemos hacer es crear una lista de requisitos en base a lo presentado
por el cliente. Para esto, nos basaremos en la información expuesta por el enunciado del TFG,
así como en una charla informal mantenida con el cliente días antes de comenzar propiamente
29
5.2. Iteración 1
el desarrollo del proyecto. Esta es la etapa más importante de esta iteración en particular. Dada
la temprana etapa del desarrollo en la que se encuentra el producto, los requisitos son bastante
abstractos, y simplemente los utilizaremos para hacernos una idea de qué es lo que quiere
el cliente. A continuación, procedemos a presentar aquellos requisitos que consideramos
clave.
Requisitos funcionales:
Requisitos no funcionales:
En la Figura 5.1 se presenta una primera versión del modelo de casos de uso del proyecto,
en base a los requisitos funcionales recogidos en esta primera iteración, que son únicamente
aquellos que se han considerado esenciales a la hora de esbozar la arquitectura del mismo.
Riesgos
Es importante tener en cuenta cuáles son los riesgos que podrían retrasar o incluso poner
en peligro el desarrollo del proyecto. En la Tabla 5.1 se muestran los riesgos que se han de-
tectado inicialmente, aunque esta tabla es susceptible de ser actualizada y cambiar conforme
avance el proyecto y se obtenga nueva información.
30
CAPÍTULO 5. DESARROLLO
Prevención de riesgos
Los riesgos con un grado elevado de exposición pueden retrasar notablemente el proyecto,
motivo por el que deben ser analizados con el fin de prevenirlos.
31
5.2. Iteración 1
cución de los hitos establecidos. Para evitar esto, y dado que disponemos de una ventana
de tiempo relativamente amplia para realizar el proyecto, todas las iteraciones se han
planificado con un margen de tiempo razonable que permita completarlas en caso
de que así fuera necesario.
Seguimiento de riesgos
A aquellos riesgos que no se consideran críticos por el momento, se les realizará un segui-
miento para controlarlos y así asegurarse de que no se vuelven problemáticos más adelante.
5.2.2 Análisis
A partir de los requisitos obtenidos en la etapa anterior, se ha tratado de modelar, todavía
desde un punto de vista bastante abstracto, pero con un lenguaje más técnico, y pensando ya
en orientar la salida de este paso a que sea utilizable por la etapa de diseño, la arquitectura
de la aplicación. Para mostrar, de forma resumida, el trabajo realizado en esta etapa, se han
adjuntado a la memoria un par de diagramas de secuencia, concretamente aquellos que se han
considerado más ilustrativos de cara a un observador externo del proyecto. Podemos verlos
en la Figura 5.2 y en la Figura 5.3.
Figura 5.2: Diagrama de secuencia del caso de uso Crear Ejercicio (iteración 1)
32
CAPÍTULO 5. DESARROLLO
Figura 5.3: Diagrama de secuencia del caso de uso Actualizar Ejercicio (iteración 1)
5.2.3 Diseño
Dados los requisitos de usuario, y ahora que hemos analizado a un nivel muy superficial
cómo tendría que funcionar el paso de mensajes para proporcionar las funcionalidades que
se nos piden, podemos afirmar que la arquitectura MVC es adecuada para construir la apli-
cación. Por tanto, este patrón será usado como base, y todo el posterior proceso de diseño e
implementación que se realizará a lo largo del desarrollo se apoyará en él.
Dado que no vamos a hacer una implementación de un prototipo en esta fase, y que es-
tamos en una etapa tan temprana del desarrollo que seguramente los requisitos obtenidos
todavía sean muy rudimentarios y poco específicos, no merece la pena esbozar la arquitectu-
ra más allá del pequeño párrafo anterior, por lo que no se ha realizado ningún diagrama de
paquetes o clases para esta iteración.
En esta primera iteración, se han establecido los requisitos esenciales, se han modelado
desde distintos puntos de vista, y se ha conseguido hallar una arquitectura que, en principio,
podrá sostener el proyecto cuando se amplíe. Además, se han identificado los riesgos más
significativos, y se han creado planes de prevención para ellos. Por estas razones, que se le han
presentado al cliente, hemos concluido que el proyecto es viable, y, sumado a la planificación,
33
5.3. Fase de Elaboración
5.4 Iteración 2
5.4.1 Requisitos
En esta iteración, deberíamos ser capaces de identificar sobre el 80% de los casos de uso,
así como de los requisitos no funcionales, de la aplicación final. A continuación, se explican,
de forma breve y conceptual, cuáles son y en que consisten estos requisitos.
Requisitos funcionales:
• Un ejercicio deberá poder ser visible o no para los alumnos en un momento dado,
según decida el profesor.
• Aparte de la dificultad estipulada por el profesor, los alumnos deberán poder votar su
opinión en cuánto a la dificultad de un ejercicio.
• El sistema debe permitir listar los ejercicios, y filtrarlos en base a ciertos criterios.
• Los profesores podrán crear ideas de ejercicio, en las que dispondrán de las opciones
de manipulación habituales.
34
CAPÍTULO 5. DESARROLLO
• Los conjuntos deben poder ser listados y filtrados, dentro de su respectivo tipo.
• Los conjuntos deberán poder ser visibles o no para los alumnos en un momento dado,
y podrán también estar abiertos o no, estado que indica si un conjunto es modificable.
• Las categorías, dificultades, titulaciones, y usuarios, solo podrán ser creadas, edi-
tadas, y eliminadas, por un administrador.
• Las distintas listas que se muestran en la aplicación estarán paginadas, con vistas a
mejorar el rendimiento del producto software, al no tener que cargar todos los elementos
de una sola vez.
Requisitos no funcionales:
Además, también se han realizado los diagramas de casos de uso pertinentes. En la me-
moria se adjuntan los más significativos: el de la Figura 5.4, que representa los casos de uso
relativos a Ejercicio, y el de la Figura 5.5, que representa los casos de uso de los conjuntos.
Riesgos
En cuanto a los riesgos, mantenemos los reflejados en la Tabla 5.1, dado que todavía esta-
mos expuestos a todos ellos. De momento, ninguno se ha manifestado en un grado que haga
peligrar la planificación preestablecida, por lo que continuaremos el desarrollo del proyecto
siguiendo el plan previsto.
35
5.4. Iteración 2
36
CAPÍTULO 5. DESARROLLO
5.4.2 Análisis
En la etapa de análisis, se han refinado los requisitos obtenidos en el paso anterior pa-
ra obtener una especificación más completa. Igual que en la fase anterior, se han realizado
los diagramas de secuencia correspondientes, con el fin de ilustrar el comportamiento de los
distintos componentes de cara al diseño. En la Figura 5.6 podemos ver cómo la aplicación se
encargará de generar el documento especificado a partir de la petición del usuario. Asimis-
mo, en la Figura 5.7, podemos observar la secuencia de acciones que realiza el subsistema de
listado de ejercicios para obtener el conjunto final. Como podemos comprobar, a pesar del
alto nivel de abstracción de los diagramas, la lógica de funcionamiento de la aplicación es más
compleja que antes, y se tienen en cuanta más factores a la hora de estudiar cada caso de uso.
5.4.3 Diseño
Durante esta etapa, el arquitecto de software debe centrarse en los casos de uso más re-
presentativos del sistema a construir, para poder obtener una arquitectura sobre la que poder
construir.
Lo primero que se ha diseñado ha sido la base de datos, dado que es necesaria para
cualquier implementación que se desee hacer de la aplicación. En la Figura 5.8 se puede ver
este primer diseño, que aún podrá sufrir cambios en lo que queda del proceso de desarrollo si
se diesen las circunstancias.
Se ha decidido añadir una nueva capa que actúe como intermediara entre la capa mo-
delo y la capa controlador. El motivo de la inclusión de esta nueva capa es que, por los nuevos
requisitos establecidos, ha aparecido nueva lógica de negocio que era necesario imple-
mentar, pero que no encaja ni en las entidades del modelo, por no ser lógica que esté relacio-
nada con la comunicación entre la base de datos y la aplicación, ni en el controlador, por ser
lógica propia de cada una de las entidades individuales de la aplicación, y no de cómo interac-
túan entre sí. El mejor ejemplo de esto son los filtros. Por como se han diseñado, cada entidad
que deba poder ser filtrada por algún criterio, debe implementar una interfaz concreta para
ese criterio. Los ejercicios, por ejemplo, podrán ser filtrados por varios criterios, por lo que
implementarán numerosas interfaces. Como se puede intuir, esta nueva lógica no se corres-
ponde con la que implementan ninguna de las dos capas mencionadas anteriormente. Con
esta capa, lograremos un mayor desacoplamiento dentro de los módulos de la aplicación.
Se ha denominado a esta capa rich entity, dado que sus objetos encapsulan entidades de la
capa modelo, y añaden nuevas funcionalidades.
37
5.4. Iteración 2
38
CAPÍTULO 5. DESARROLLO
observar, a vista de pájaro, la arquitectura del sistema, de forma simplificada. En él, no se entra
en detalles sobre cómo está compuesto cada subsistema, simplemente se muestra cuáles son
las asociaciones que presentan entre sí. El diagrama aparece en la Figura 5.9.
Además, también se han adjuntado diagramas que describen la estructura interna de al-
gunos de los paquetes, aquellos que se han considerado importantes para entender la arqui-
tectura de la aplicación en su conjunto. En la Figura 5.10, podemos ver el paquete de la im-
plementación del modelo en forma de diagrama de clases. En la Figura 5.11, se puede observar
la estructura del paquete implementación dentro del módulo rich-entity. Este paquete se pue-
de comparar con el de la figura anteriormente mencionada para entender las diferencias, y
las nuevas funcionalidades que añade esta capa. La más importante es que, a diferencia de la
implementación de la capa modelo, las entidades de esta capa no tienen que tener una corres-
pondencia directa con las tablas de la base de datos, lo que nos permite estructurar el paquete
de forma más conveniente, utilizando clases abstractas para evitar repetir información. Ha de
recordarse que en este diagrama no se han reflejado las relaciones de dependencia entre los
objetos, por ser muy evidentes dados los nombres de las funciones, y hacer más innecesaria-
mente complejo y difícil de estudiar el diagrama. En la Figura 5.12, podemos ver la estructura
interna del módulo filtros, de la capa rich-entity. Por último, en la Figura 5.13, podemos ver
como se ha estructurado la implementación de las clases controladoras.
39
5.4. Iteración 2
40
CAPÍTULO 5. DESARROLLO
41
5.4. Iteración 2
Figura 5.10: Diagrama de clases del módulo implementación, dentro de la capa modelo (itera-
ción 2)
42
CAPÍTULO 5. DESARROLLO
Figura 5.11: Diagrama de clases del módulo implementación, dentro de la capa rich-entity (ite-
ración 2)
Figura 5.12: Diagrama de clases del módulo filtros, dentro de la capa rich-entity (iteración 2)
43
5.4. Iteración 2
Figura 5.13: Diagrama de clases del módulo implementación, dentro de la capa controlador
(iteración 2)
Mockups
Se han desarrollado algunos mockups muy primitivos de las interfaces más relevantes,
que serán implementadas más adelante, para poder utilizar como referencia de cara al cliente,
y así orientarlo en cuánto a la elección de los elementos que se les mostrarán a los usuarios
en pantalla. Se han creado versiones de los mockups tanto para equipos sobremesa como pa-
ra móviles, con vistas a la implementación que se le dará a la interfaz en la aplicación, que
respetará las pautas del diseño responsive. Esto se puede ver en las figuras: Figura 5.14, y Fi-
gura 5.15. Ambas representan la vista de un ejercicio, pero en una de ellas, al ser diseñada
específicamente para móviles, los elementos ocupan un porcentaje mayor de la pantalla, y la
barra de navegación está oculta hasta que se pulsa el botón correspondiente.
44
CAPÍTULO 5. DESARROLLO
45
5.5. Fase de Construcción
5.4.4 Implementación
5.4.5 Pruebas
Debido a que el prototipo diseñado suele ser muy simple, las pruebas todavía no son una
parte esencial de esta fase normalmente. Sin embargo, sí es importante asegurarse de que las
interacciones entre estos objetos elementales construidos funcionan como se espera, porque
actuarán como base para la posterior implementación completa que se le dará al sistema.
Por este motivo, se han realizado tests de base de datos, para comprobar que la estructu-
ra de la DB es correcta, y suficiente para abarcar las entidades que pretendemos implementar
en esta primera versión. También, como es de esperar, y como primer método de prueba, se
han hecho testeos ad-hoc. Por último, se ha automatizado un pequeño conjunto de prue-
bas de integración, que no solo valdrán para comprobar que los componentes interactúan
correctamente, sino que también sentarán la base de los tests automatizados, con vistas a ser
ampliadas en la siguiente fase, y dar cobertura a todo el proyecto.
En esta iteración, se ha llevado a cabo el 80% del trabajo analítico y de diseño que implica el
proceso de desarrollo. El prototipo resultante ha sido presentado al cliente, quien ha expresado
la necesidar de implementar nuevas funcionalidades en el proyecto, que serán tomadas en
consideración en la siguiente fase.
46
CAPÍTULO 5. DESARROLLO
Dado que, como veremos a continuación, han aparecido un número relativamente alto de
nuevos requisitos para la fase en la que nos encontramos, nos hemos visto obligados a repla-
nificar esta fase. Realizaremos, por tanto, tres iteraciones, en vez de las dos preestablecidas.
Las dos primeras estarán dedicadas a implementar todo aquello que no sean interfaces de
usuario, y utilizarán una interfaz provisional para aquellas pruebas que requieran de ella. La
tercera estará dedicada a implementar la vista final.
5.6 Iteración 3
El objetivo de esta iteración ha sido, centrándonos en los requisitos ya establecidos, y
a partir del análisis y diseño ya realizado, implementar una aplicación funcional. Aunque
para realizar este paso no partiremos del prototipo construido en la iteración anterior, sí lo
usaremos como guía para facilitar el proceso.
5.6.1 Requisitos
Se mantienen los de la iteración anterior.
5.6.2 Análisis
Como parte de la revisión del análisis de la etapa anterior, se han reevaluado los riesgos
existentes.
Riesgos
5.6.3 Diseño
Al igual que el paso anterior, tampoco reharemos el diseño en esta iteración.
5.6.4 Implementación
Se ha implementado una versión funcional de la arquitectura propuesta en la iteración
anterior. Además, se ha implementado paralelamente una interfaz de usuario provisional,
que servirá para que el programador pueda realizar pruebas a mano, además de como base
para desarrollar la vista final en la iteración 5. Aparte de esto, no hay mucho más resaltable que
47
5.7. Iteración 4
comentar de esta etapa, a pesar de su larga duración, puesto que la mayor parte del tiempo se
ha estado ocupado con detalles de implementación que no son relevantes para esta memoria.
5.6.5 Pruebas
Se han automatizado las pruebas de integración que han sido consideradas pertinentes.
Además, se han creado también pruebas unitarias. Ahora que el número de módulos es me-
dianamente considerable, es importante garantizar no solo que funcionan bien en conjunto,
sino que cada uno de ellos funciona bien por separado. El principal motivo de la importancia
de estas pruebas en esta iteración es que, sabiendo que necesitaremos modificar numerosos
componentes de la aplicación en la próxima iteración, también podemos imaginar que apare-
cerán nuevos errores en módulos que considerábamos estables. Si solo realizáramos pruebas
de integración, encontrar el módulo origen del fallo en un determinado caso de uso sería
una tarea ardua y compleja. De esta manera, sabremos qué módulo individual está causando
problemas. Por último, se han realizado pruebas ad-hoc a partir de la interfaz provisional
implementada.
Hemos llevado a cabo con éxito la implementación de los requisitos obtenidos en la fase de
elaboración. Sin embargo, esta implementación deberá ser ampliada en la iteración siguien-
te, debido a los cambios en los requisitos. Con todo, gracias al sólido diseño obtenido en la
iteración anterior, no debería ser demasiado complicado adaptar la aplicación a las nuevas
necesidades de los clientes.
5.7 Iteración 4
En esta iteración, se ha llevado a cabo la implementación de los nuevos requisitos que ha
pedido el usuario, tras la última charla con él, al acabar la iteración 2.
5.7.1 Requisitos
48
CAPÍTULO 5. DESARROLLO
esta iteración, dado que, además, no contamos con el tiempo suficiente como para desarrollar
otro ciclo de vida. Los requisitos son:
• Los ejercicios, a partir de ahora, contarán con un título, que usaremos para identificar-
los cuando sean listados.
• Un sistema de correo que se utilice para notificar al usuario cuando este sea creado,
editado, o eliminado.
• Los usuarios podrán ser creados a partir de una lista en algún formato, para así aho-
rrar el trabajo a los administradores.
• Pedir confirmación para todas aquellas acciones que puedan realizar los usuarios que
sean delicadas, tal como borrar un ejercicio.
• Los ejercicios deben poder cambiarse de posición dentro de un conjunto, por todos
aquellos con privilegios para editar dicho conjunto.
Dado que estos casos de uso no cambian radicalmente la estructura de los casos de uso de
la aplicación, no se incluirán los diagramas de casos de uso actualizados en esta sección.
5.7.2 Análisis
Para llevar a cabo el análisis de los requisitos detallados en el paso anterior, nos hemos
valido de las herramientas habituales en este proceso de desarrollo. Se han realizado diagramas
de secuencia de aquellos elementos que se han considerado relevantes, como el presentado en
la figura Figura 5.16, que representa la secuencia de acciones que realiza el software a la hora
de crear un nuevo usuario, y que posiblemente es el más interesante de estos diagramas en lo
referente a la memoria.
Además, se ha decidido utilizar el formato JSON como lenguaje para los ficheros que
recibirá la aplicación para crear las listas de usuarios. El motivo principal de esta elección
49
5.7. Iteración 4
50
CAPÍTULO 5. DESARROLLO
Riesgos
Antes de proceder con la etapa de implementación de esta fase, se han revisado de nuevo
los riesgos mostrados en el Tabla 5.1. Al igual que en la iteración anterior, el más preocupante
de estos riesgos es R1 - Skills insuficientes. La iteración anterior ya se retrasó por culpa de
esto, y es posible que a esta iteración le ocurra lo mismo. Sin embargo, el impacto debería ser
menor, puesto que, aunque todavía no se ha aprendido a manejar toda la tecnología con la
que se construye el proyecto a un nivel adecuado, sí tenemos ya ciertos conocimientos sobre
ella, lo cual debería minimizar el tiempo que se pierde por este motivo.
5.7.3 Diseño
51
5.7. Iteración 4
52
CAPÍTULO 5. DESARROLLO
5.7.4 Implementación
En esta etapa, hemos llevado a cabo los cambios y mejoras propuestos para la apli-
cación, así como las nuevas funcionalidades pedidas, y, a la vez, se ha seguido desarro-
llando la interfaz provisional. A pesar de que, a nivel de análisis y diseño, esta iteración
53
5.7. Iteración 4
Servicio de correo
La aplicación ahora posee un servicio de correo que permite enviar mensajes a los usua-
rios, informando así, entre otras cosas, de cambios en su perfil, o permitiendo recuperar la
contraseña en caso de haberla olvidado.
Seguridad
El software web ahora utiliza el protocolo TLS para garantizar la seguridad de los datos
enviados. En este momento, cuenta con un certificado autogenerado, por lo que el usuario po-
dría, aún así, desconfiar de la aplicación. Sin embargo, esto es fácil de solucionar si se consigue
un certificado proveniente de una entidad emisora.
Logger
5.7.5 Pruebas
54
CAPÍTULO 5. DESARROLLO
5.8 Iteración 5
Ahora que contamos con un sistema de software que cumple todos los requisitos funciona-
les preestablecidos, y cuyas funcionalidades han sido testeadas de diversas formas, se plantea
esta quinta iteración, la tercera en la fase de construcción, con el fin de darle al producto una
interfaz de usuario adecuada.
5.8.1 Requisitos
Dado que ya se dispone de todos los requisitos que determinarán el funcionamiento de
la aplicación final, solo recordaremos aquellos que sean importantes para el desarrollo de las
vistas. Estos son requisitos no funcionales, dado que no cambian las funcionalidades de la
aplicación. Por tanto, necesitamos:
Dado que en una gran parte el primer requisito viene determinado por los módulos de
software construidos en las dos iteraciones anteriores, llevaremos a cabo esta iteración cen-
trándonos en conseguir cumplir el segundo, y el primero solo será tomado en considera-
ción si en algún punto del desarrollo percibimos un deterioro notable en el rendimiento de la
aplicación.
5.8.2 Análisis
Dado que la mayor parte de la lógica de funcionamiento que aporta la vista es notablemen-
te simple, debido a que su función principal consiste en recibir información del controlador,
parsearla de una determinada manera, mostrarla al usuario, y recibir las peticiones que este
haga sobre dicha información, no se ha realizado una etapa de análisis en esta iteración.
55
5.8. Iteración 5
5.8.3 Diseño
5.8.4 Implementación
56
CAPÍTULO 5. DESARROLLO
Figura 5.20: Mockup de la vista del listado de ejercicios en una tablet (iteración 5)
57
5.9. Fase de Transición
cionados por la tecnología JSP. A pesar de que ha habido un pequeño tiempo de adaptación
al framework, esta iteración se ha realizado con relativa rapidez, y no se han encontrado de-
masiados obstáculos que interrumpieran su desarrollo.
5.8.5 Pruebas
5.10 Iteración 6
Esta iteración ha resultado ser muy sencilla, como cabía esperar, dada la fase en la que
nos encontramos, y las características de nuestro proyecto. Dada la simpleza de la misma, se
58
CAPÍTULO 5. DESARROLLO
1
https://github.com/DaveDarkLion/TFG
59
5.10. Iteración 6
60
Capítulo 6
Planificación
E ste capítulo estará dedicado a explicar cuál fue la planificación que siguió el proyecto, y
por qué se eligió dicha planificación, así como todos los cambios que ha sufrido durante
el desarrollo.
Como herramienta de ayuda para esta tarea, se ha utilizado Microsoft Project. Se ha
considerado que era adecuada para realizar este trabajo porque el equipo de desarrollo estaba
ya familiarizado con ella de antemano, de modo que no se ha tenido que invertir un tiempo
innecesario en conocer el entorno.
Una vez obtenida la descripción inicial del sistema, se puede proceder a realizar una pri-
mera planificación, que servirá para orientar las planificaciones que se harán más adelante.
Dado que aún carecemos de suficiente información como para hacer una valoración precisa,
de momento simplemente esbozaremos, a grandes rasgos, la estructura de la planificación del
proyecto, intentando dejar un margen suficiente como para que cuando sea desglosada en
partes más pequeñas y concretas, estas tengan asignadas un tiempo razonable para que sean
desarrolladas. En la Figura 6.1 se puede observar esta planificación inicial.
Como podemos ver, el proyecto se desarrollará en un único ciclo de vida, compuesto por
las fases habituales de un proyecto que sigue la metodología anteriormente estipulada. La
estimación del tiempo que durará cada iteración, a falta de más información, ha sido realizada
a partir del estudio bibliográfico que se ha hecho del Proceso Unificado [12], así como de
la escasa experiencia del desarrollador. Se ha intentado dar un margen razonable a todas las
iteraciones, con vistas a la aparición de imprevistos, dado que, en teoría, disponemos de
suficiente tiempo con respecto a los deadlines. Además, se ha incluido y tenido en cuenta
el tiempo que durará el desarrollo de la memoria, dado que forma parte del proyecto pues
representa la documentación formal del mismo.
61
6.2. Planificación de la fase de inicio
6.2.1 Iteración 1
En esta iteración, se ha decidido realizar únicamente los tres primeros pasos de una ite-
ración genérica, dado que no se considera necesaria la construcción de un prototipo para
demostrar la viabilidad al cliente. En la figura Figura 6.2, podemos ver el diagrama de gantt
correspondiente a esta primera iteración.
Dado que esta iteración ha sido completada en el tiempo estimado, no se mostrará el
diagrama de Gantt en el que se compara con la línea base.
62
CAPÍTULO 6. PLANIFICACIÓN
6.3.1 Iteración 2
63
6.4. Planificación de la fase de construcción
6.4.1 Iteración 3
Esta iteración estará destinada a implementar todos los requisitos obtenidos y analizados
en la iteración anterior, a excepción de la vista, a la que se le dedicará una iteración entera.
Para poder hacer pruebas, y tener algo que mostrar en caso de que así fuera necesario, se
implementará una vista provisional. Los nuevos requisitos serán abordados en la iteración
siguiente.
Como se puede apreciar en el diagrama de la Figura 6.5, esta iteración será algo más larga
de lo que se había previsto en inicio. Esto se debe a que ahora disponemos de más información
acerca del proyecto a desarrollar que cuando empezamos, por lo que las estimaciones deberían
aproximarse más a la realidad que las primeras.
En la Figura 6.6, podemos observar la diferencia entre la planificación y el transcurso real
del proyecto.
64
CAPÍTULO 6. PLANIFICACIÓN
De nuevo, podemos comprobar que el desarrollo no se ajusta al plan que habíamos esta-
blecido. A pesar de que esto no es óptimo, ahora que el deadline ha cambiado, no debería de
ser un problema excesivamente importante.
6.4.2 Iteración 4
Esta iteración estará dedicada a implementar los nuevos requisitos especificados por el
usuario al comienzo de la fase. Dado que estos requisitos son completamente nuevos, se ha
tenido que realizar el correspondiente análisis y diseño asociado, lo que ha ralentizado la
iteración. A pesar de que esto no es idóneo, se ha considerado la única solución aceptable, a
falta de tiempo para desarrollar otro ciclo de vida, que quizás hubiera sido lo mejor.
En la Figura 6.7, podemos ver la planificación que se ha realizado para esta iteración.
En la Figura 6.8, podemos observar la diferencia entre la planificación y el transcurso real
del proyecto.
En esta iteración han aparecido nuevos retrasos, algo que, aunque es de esperar en un
proyecto, nunca es deseable.
6.4.3 Iteración 5
El objetivo de esta iteración será el de desarrollar la vista final de la aplicación. En la
Figura 6.9, podemos ver como se ha planificado esta etapa, que es algo más simple que las dos
65
6.5. Planificación de la fase de transición
iteraciones anteriores.
En la Figura 6.10, podemos observar la diferencia entre la planificación y el transcurso
real del proyecto.
A pesar de que, al igual que en las iteraciones anteriores, no se ha cumplido el plan es-
tablecido, el retraso existente es lo suficientemente pequeño como para considerar exitoso el
desarrollo de esta iteración en particular.
66
CAPÍTULO 6. PLANIFICACIÓN
6.5.1 Iteración 6
En la Figura 6.11, podemos ver la planificación que se ha preparado para esta última ite-
ración.
67
6.6. Coste del proyecto
Previsto Actual
847 h 1096 h
1
https://www.boe.es/boe/dias/2018/03/06/pdfs/BOE-A-2018-3156.pdf
68
CAPÍTULO 6. PLANIFICACIÓN
69
6.7. Revisión de la planificación
70
Capítulo 7
Funcionalidades destacadas
E ste capítulo está dedicado a exponer y explicar las funcionalidades más importantes del
proyecto realizado.
71
alguna forma. Los conjuntos ofrecen una opción de descarga, ya sea en formato PDF o LaTex,
que genera un fichero y lista los ejercicios contenidos en el mismo para crear un boletín, que
luego puede ser imprimido en caso necesario.
Tanto los ejercicios como los conjuntos pueden ser filtrados y ordenados por un elevado
número de criterios. Gracias a esto, se pueden hacer búsquedas tipo ”ejercicios que hayan
aparecido en exámenes en los últimos cinco años ordenados inversamente por dificultad”. El
poder realizar este tipo de búsquedas es una característica que se considera esencial, dado el
objetivo de nuestro proyecto.
Los datos que utiliza la aplicación, tales como dificultades, categorías, titulaciones, o usua-
rios, pueden ser creados, modificados, y eliminados, por un administrador.
Además, los usuarios podrán actualizar su contraseña, o restablecerla en caso de ha-
berla olvidado.
72
Capítulo 8
Pruebas
E l objetivo de este capítulo es exponer cuáles han sido las pruebas que nos han permitido
verificar la validez del software desarrollado, así como la finalidad por la que se han
realizado.
Debemos empezar este capítulo recalcando una noción que ha estado presente durante
toda la memoria: la búsqueda de la simplicidad siempre que fuera posible. Para los tests au-
tomatizados utilizaremos JUnit, uno de los frameworks de pruebas más conocidos para Java,
cuya principal característica es ser user-friendly. Además, también se contará con la ayuda
de Mockito, un framework de creación de objetos falsos cuyo fin es aislar el funcionamiento
de los distintos componentes de la aplicación, que permite escribir un código limpio y legible,
cuando se requiera de ella. También hemos utilizado Cobertura, un framework que permite
comprobar el porcentaje de código que cubren los tests. A pesar de que esto no es en ningún
caso una prueba definitiva de una realización adecuada de las pruebas, si nos puede ayudar a
hacernos una idea de cuánto de la aplicación se prueba realmente. En nuestro caso, tenemos
cerca de un 90% de coverage por parte de los tests automatizados, como podemos ver en
la Figura 8.1, lo cual consideramos un porcentaje aceptable, dado que el otro 10% correspon-
de principalmente a módulos auxiliares difíciles de testear de forma automatizada, como el
módulo de loggeo o el servicio de correo electrónico.
Hay que añadir que, para los tests automatizados, se ha creado una base de datos de
prueba, en la que se hace un roll-back de la información al final de cada test individual,
de modo que los tests se pueden ejecutar incluso con la aplicación en marcha, dado que no
modificará la base de datos principal, así como tantas veces como se desee, porque al final de
73
8.1. Pruebas backend
la ejecución la base de datos de prueba habrá vuelto a su estado original. Podemos encontrar
el código de los tests automatizados en el repositorio Github 1 público del proyecto.
Las pruebas realizadas han sido las siguientes:
74
CAPÍTULO 8. PRUEBAS
programación del código, para garantizar que el número de usuarios potenciales de la aplica-
ción sea el mayor posible.
75
8.7. Pruebas beta
76
Capítulo 9
Conclusiones
E n este capítulo, se compararán los objetivos iniciales planteados, con los resultados obte-
nidos tras la realización del proyecto. Cabe aclarar que, dado que varios de los aspectos
mencionados a continuación son, hasta cierto punto, subjetivos, se ha utilizado la opinión del
cliente como baremo para comprobar su validez.
El principal objetivo de este proyecto, a grandes rasgos, era crear una aplicación que per-
mitiera la gestión de una base de datos de ejercicios de programación, que sirviera de ayuda
a los profesores a la hora de preparar ejercicios para las clases, crear exámenes, boletines de
ejercicios… Esto se ha cumplido en su totalidad. La aplicación no solo permite almacenar y
modificar estos elementos, junto con sus recursos e información asociada, sino que además
cuenta con numerosos filtros y criterios de ordenación, destinados a ofrecer a los usuarios
una forma sencilla de gestionar y visualizar esta información.
Otro objetivo importante planteado en este proyecto era que la aplicación estuviera dispo-
nible para el mayor número posible de usuarios. Esto, de nuevo, se ha logrado en su totalidad,
gracias a dos características clave de la aplicación desarrollada. En primer lugar, se trata de
una aplicación web, algo que garantiza que cualquier usuario con acceso a internet podrá
usarla. Sin embargo, el hecho de que sea accesible desde cualquier dispositivo, no asegura que
la experiencia de navegación vaya a ser igual de buena independientemente de la pantalla uti-
lizada. Esto también ha sido solventado, gracias a la adopción de la aproximación responsive,
como aspecto fundamental del diseño de la interfaz de usuario.
Otro aspecto que debíamos tener en cuenta era que la interfaz de usuario debía ser clara,
intuitiva, y de fácil manejo. Esto ha sido posible gracias al seguimiento que se ha hecho de
las pautas marcadas por la filosofía de diseño Material. Además, el cliente ha verificado que
la interfaz es adecuada y se adapta a sus expectativas, durante la realización de las pruebas de
aceptación.
Algo que no debemos olvidar es que la aplicación debía ser rápida. Esta es una meta que
también se ha alcanzado. El cliente ha quedado satisfecho con los tiempos de respuesta que
77
9.1. Lecciones aprendidas
78
Capítulo 10
Trabajo futuro
Con el tiempo necesario y herramientas adecuadas, se podría llegar a construir una pla-
taforma de aprendizaje a partir de la pequeña aplicación que ha dado como resultado este
proyecto. Esta, en principio, sería una versión muy simplificada de otras plataformas de apren-
dizaje profesionales, dado que estas llevan bastantes años en constante evolución y cuentan
con comunidades muy grandes de desarrolladores, algo de lo que nosotros no disponemos.
Sin embargo, a pesar de que sería complicado que nuestro software se convirtiese en un com-
petidor serio para los gigantes de este sector, tal vez podría llegar a ser lo suficientemente
complejo como para poder adoptarlo en nuestra universidad como alternativa a Moodle. Aquí
se muestran algunos de los primeros pasos a dar en caso de querer encaminar el proyecto en
esta dirección:
79
10.3. Internacionalizar la aplicación
práctica. Si se decidiera abordar este aspecto, también sería interesante implementar un sis-
tema de notificaciones, que informara a los usuarios de cualquier actualización en los temas
que sigan.
80
Apéndices
Apéndice A
Glosario de acrónimos
API Application Programming Interface: Conjunto de métodos claros y bien definidos que
ofrece una aplicación para permitir la comunicación entre componentes o con otros
sistemas.
CSS Cascading Style Sheet: Lenguaje utilizado para dar formato a la visualización de un ar-
chivo HTML o XML.
DAO Data Access Object: Objeto que proporciona una interfaz abstracta entre la aplicación y
una base de datos o cualquier otro mecanismo de persistencia de información que esta
utilice.
HTML Hypertext Markup Language: Lenguaje estándar de los documentos que se quiere que
sean visualizables en un navegador web.
OWASP Open Web Application Security Project: Comunidad cuyo principal objetivo es fo-
mentar la seguridad de aplicaciones web.
RDBMS Relational Database Management System: Sistema de gestión de bases de datos rela-
cionales.
83
SQL Structured Query Language: Lenguaje utilizado para la gestión de información almace-
nada en bases de datos relacionales.
UML Unified Modeling Language: Lenguaje de modelado de propósito general que se enmarca
dentro del campo del desarrollo software y cuya finalidad es proporcionar una forma
estándar de visualizar el diseño de un sistema.
URL Uniform Resource Locator: Referencia a un recurso web que especifica su localización
dentro de una red de equipos, y que se utiliza como mecanismo para recuperar dicho
recurso.
USDP Unified Software Development Process: Marco de desarrollo iterativo e incremental cen-
trado en los casos de uso.
WORA Write Once, Run Anywhere: Slogan creado por Sun Microsystems para ilustrar las ven-
tajas multiplataforma que tiene el lenguaje de desarrollo Java.
XML eXtensible Markup Language: Lenguaje que define una serie de reglas para codificar
documentos en un formato que sea tanto legible por humanos como por máquinas.
84
Apéndice B
Terminología
C omo se habrá podido comprobar a estas alturas, esta memoria incluye numerosos térmi-
nos en inglés. Los motivos que nos han llevado a utilizar estos vocablos son varios.
Por una parte, muchas de las palabras usadas en la memoria son tan utilizadas en cas-
tellano que han pasado a formar parte de la lengua común, llegando algunas de ellas a
estar recogidas por la RAE. Este es el caso de la palabra software, por ejemplo. Sin embargo,
algunas de las palabras utilizadas no están recogidas por la Real Academia ni forman parte de
la jerga común. El motivo de la utilización de estas palabras es que sí son de uso muy común
en el ámbito de la informática. El mejor ejemplo de esto es la palabra framework. Por últi-
mo, también se han utilizado términos que poseen una traducción en castellano, pero que no
tiene las implicaciones y connotaciones de la palabra original. Un buen ejemplo de esto
sería el término parse, cuya traducción según Google Translator es analizar gramaticalmente.
Como podemos ver, la traducción consta de varias palabras, por lo que es innecesariamente
larga, y ni siquiera se ajusta demasiado al significado del término original, careciendo de sus
connotaciones en el ámbito de la informática.
85
86
Apéndice C
Manual de usuario
E ste anexo constituye el manual de usuario de la aplicación, que intentará abarcar todos
aquellos aspectos necesarios para que alguien ajeno al proyecto pueda usar el software
sin tener problemas.
C.2 Usuarios
Lo primero que debemos hacer al abrir la web es entrar con un usuario, puesto que, de
otra manera, no tendremos acceso a ninguna sección de la aplicación, más que al índice. Por
tanto, seleccionaremos la opción Entrar, en la barra de navegación, o accederemos al enlace
proporcionado en el índice.
Una vez en la vista de login, podemos introducir las credenciales para acceder o, en
caso de que hayamos olvidado la contraseña, también podemos restablecer el password, en
cuyo caso nos será pedida una dirección de correo, a donde se enviará una nueva contraseña
generada aleatoriamente, si existe una cuenta asociada a esta dirección. Para evitar el abuso
de esta funcionalidad, se ha puesto un límite: no se podrá restablecer la contraseña más de
una vez cada cinco minutos para una cuenta concreta.
Los usuarios podrán cambiar su contraseña cuando lo deseen. Las contraseñas, sin em-
bargo, deben respetar unas ciertas normas: deben tener entre 6 y 10 caracteres, y solo pueden
estar formadas por letras, números, y el caracter ”_”.
87
C.3. Barra de navegación
C.4 Ejercicios
Los ejercicios son el centro de la aplicación, y todo está construído en torno a ellos.
88
APÉNDICE C. MANUAL DE USUARIO
Ordenación
Podemos pulsar sobre los nombres de las distintas cabeceras de la tabla para ordenar los
ejercicios. Si se pulsa una única vez sobre una cabecera, los ejercicios serán ordenados por
el criterio correspondiente en orden natural. Si se vuelve a pulsar sobre dicha cabecera, los
ejercicios serán ordenados por el mismo criterio, pero en orden inverso. La ordenación por
defecto del listado es la que utiliza el título del ejercicio como criterio, y los ordena de forma
natural.
Filtros
• Categorías: Filtra los ejercicios por sus categorías asociadas. Un ejercicio solo será
aceptado si este posee todas las categorías seleccionadas en el filtro (es decir, las cate-
gorías actúan como un AND).
Los Profesores y Administradores tendrán acceso a un filtro más que los Alumnos. Este
filtro permite seleccionar los ejercicios por aparición en un determinado conjunto en un ran-
go concreto de tiempo. El filtro está compuesto por varios fragmentos, que se describen a
continuación.
• Filtrar por: casilla utilizada para activar el filtro. Si esta casilla no está marcada, el filtro
no entrará en acción.
• No: casilla utilizada para negar el resultado del filtro. En vez de, por ejemplo, recuperar
los ejercicios que aparecieron en exámenes entre 2010 y 2015, obtendríamos aquellos
que NO hubieran aparecido en ningún examen en esas fechas.
• Tipo de conjunto: Tipo de conjunto por el que filtrar, que puede ser Examen, Prác-
tica, o Práctica Evaluable.
89
C.5. Conjuntos
• Titulación: titulación a la que tienen que pertenecer los conjuntos que se van a com-
parar.
• Año inicial: Año mínimo al que tiene que pertenecer el conjunto para ser tenido en
cuenta en el filtrado.
• Año final: Año máximo al que tiene que pertenecer el conjunto para ser tenido en
cuenta en el filtrado.
Para filtrar los ejercicios una vez elegidos los valores de los filtros, simplemente hay que
pulsar el icono con forma de lupa en la esquina superior derecha del contenedor.
Los filtros interactúan entre sí como un AND, lo cual quiere decir que un ejercicio
solo será aceptado en un filtrado si cumple todos los filtros que estén activados.
En esta pantalla podremos ver el ejercicio con toda su información relevante, incluídos
los archivos que tiene asociados, que pueden ser de entrada, de validación, o archivos solución.
Desde esta vista podemos añadir o borrar el ejercicio de la selección personal, y, si se es
Profesor o Administrador, acceder a la pantalla de edición de ejercicio. Además, los Alumnos
podrán votar su opinión con respecto a la dificultad del mismo. La media de todos los votos
realizados también será visible en esta pantalla.
Desde esta pantalla se podrá editar toda la información que posee el ejercicio, así como
añadir o eliminar sus archivos asociados, que tendrán un tamaño máximo de 50 MB. También
se podrá eliminar el ejercicio si así se desea.
C.5 Conjuntos
Los exámenes, prácticas, y prácticas evaluables, son, a nivel de funcionamiento, iguales.
Para no repetirnos, se explicarán una única vez, usando el concepto de conjunto, que repre-
senta a cualquiera de las entidades anteriormente mencionadas.
90
APÉNDICE C. MANUAL DE USUARIO
Cuando se accede a la pantalla de visualización de un conjunto, se verá una tabla que con-
tiene los ejercicios contenidos en dicho conjunto, con las propiedades habituales del listado
de ejercicios, salvo que esta lista no se podrá filtrar ni ordenar, dado que los conjuntos alma-
cenan los ejercicios en un orden concreto, que no tiene por que cumplir ningún criterio de
ordenación.
En la parte inferior izquierda de la pantalla, además, tenemos el botón que nos permitirá
descargar el conjunto en formato LaTex o PDF, según se prefiera.
91
C.6. Funcionalidades específicas para Profesores
Los Profesores podrán listar, crear, modificar, y eliminar, ideas de ejercicio. Estas actuarán
como bocetos de ejercicios que se desean añadir a la aplicación pero que todavía no se han
terminado de definir completamente. Para acceder al listado o añadir una idea, simplemente
pulsaremos sobre el botón correspondiente en la barra de navegación, dentro del desplegable
de usuario.
En el listado, en principio, solo se mostrarán las ideas creadas por el usuario actual, pero
esto se puede cambiar activando el filtro Mostrar todas.
En la pantalla de edición, además de las opciones habituales, también podremos convertir
la idea en un ejercicio, lo cual nos llevará a la pantalla de adición de ejercicios, asignando
el texto de la idea al campo enunciado.
92
APÉNDICE C. MANUAL DE USUARIO
{"apellido2":"Alcantara","apellido1":"Marquez",
"nombre":"Jorge", "email":"[email protected]",
"roles_id":["ROLE_ADMINISTRADOR",
"ROLE_PROFESOR", "ROLE_ALUMNO"]}
El archivo final contendrá un conjunto de usuarios separados por comas, estando el con-
junto encerrado entre los caracteres ”[]”.
93
C.7. Funcionalidades específicas para Administradores
94
Apéndice D
Imágenes de la aplicación
En la Figura D.1, la Figura D.2, la Figura D.5, la Figura D.6, y la Figura D.7, podemos ver las
que posiblemente sean las vistas más significativas de nuestra aplicación. Además, también
se ha decidido incluir en este apéndice la Figura D.3, que muestra la vista de visualización de
ejercicio en un móvil, para ilustrar el concepto de responsive, tan mencionado en la memoria, y
como lo implementa nuestra aplicación. Por último, y a modo de curiosidad, en la Figura D.4,
podemos ver la barra de navegación desplegable que el usuario tiene disponible en móvil y
tablet, cuya existencia se debe a la falta de espacio en la parte superior de la pantalla.
95
Figura D.1: Listado de ejercicios
96
APÉNDICE D. IMÁGENES DE LA APLICACIÓN
97
Figura D.3: Vista de un ejercicio en un móvil
98
APÉNDICE D. IMÁGENES DE LA APLICACIÓN
99
Figura D.5: Listado de exámenes
100
APÉNDICE D. IMÁGENES DE LA APLICACIÓN
Figura D.6: Edición de los elementos que contiene un examen y sus posiciones
101
Figura D.7: Selección de ejercicios del usuario
102
Bibliografía
[1] Leon Shklar, Richard Rosen, Web Application Architecture: Principles, Protocols and Prac-
tices. Wiley, 2003.
[2] Bryan Sullivan, Vincent Liu, Web Application Security, a Beginner’s Guide. McGraw Hill,
2011.
[3] M. J. Hernandez, Database Design for Mere Mortals. Addison-Wesley Professional, 2003.
[5] E. F. Codd, The Relational Model for Database Management, Version 2. Addison-Wesley
Professional, 1990.
[6] P. C. Jorgensen, Software Testing: A Craftsman’s Approach, 4th ed. CRC Press, 1995.
[8] B. Frain, Responsive Web Design with HTML5 and CSS3. Packt Publishing, 2012.
[9] Christian Bauer, Gavin King, Gary Gregory, Java Persistance with Hibernate, 2nd ed.
Manning, 2006.
[12] Ivar Jacobson, The Unified Software Development Process, 1st ed. Addison-Wesley, 1999.
[13] Russ Miles, Kim Hamilton, Learning UML 2.0, 1st ed. O’Reilly Media, 2006.
103
Bibliografía
104