proyecto final de carrera ingenierÍa de...
TRANSCRIPT
KEEPMYCAR: HERRAMIENTA SOFTWARE DE GESTIÓN DE CARTERA DE CLIENTES EN TALLERES DE MECÁNICA
MEMORIA
Autor: Gabriel Cebriá Oliveira
Director: Federico José Barrero García
JUNIO 2015 ESCUELA SUPERIOR DE INGENIEROS DE SEVILLA
UNIVERSIDAD DE SEVILLA
Proyecto final de Carrera
Ingeniería de telecomunicaciones
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
1
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
2
Resumen del Proyecto
El objetivo de este proyecto fin de carrera es el de desarrollar una primera versión de una aplicación
para escritorio y otra aplicación móvil, que van a formar un sistema conjunto, y evaluar sus
opciones de negocio.
El sistema, bautizado con el nombre de KeepMyCar, tiene como objetivos la mejora en la
comunicación de talleres mecánicos con sus clientes gracias a una aplicación móvil para los
clientes desde la cual van a poder acceder a novedades en el taller, así como la gestión de cartera
de clientes y publicación de novedades desde una herramienta java para escritorio.
Se van a analizar las opciones de mercado disponibles, para seguidamente mostrar las tecnologías
con las que se ha realizado el proyecto. Más adelante se explica el proyecto, con muestras visuales
del resultado y comentando algunas de las clases más importantes en él.
Los últimos apartados introducen un modelo de negocio y exponen el posible futuro de
KeepMyCar.
El trabajo de los últimos meses ha permitido obtener un prototipo funcional del sistema para
Android y Windows. Ambas herramientas requieren aún del desarrollo de funcionalidades
adicionales y de llevar a cabo una fase de prueba de errores para ser viable el lanzarlas al mercado,
pero el objetivo principal, que era la implementación de funcionalidades principales y la estructura
del sistema, se ha completado.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
3
Contenido
Resumen del proyecto………………………………………………………………………..2
Contenido……………………………………………………………………………………..3
1. Introducción…………………………………………………………………....................6
1.1 Motivación……………………………………………………………………….…....6
1.2 Objetivos y alcance del proyecto………………………………………………........6
2. Oferta actual……………………………………………………………………………....8
2.1 Aplicaciones Smartphone………………………………………………………..…...8
2.2 Aplicaciones funcionales………………………………………………………..….....9
2.3 Posible competencia: identificación y características……………………….….....10
3. Tecnología para el desarrollo de la
herramienta…………………………………………………………………....................13
3.1 Introducción…………………………………………………………………….........13
3.2 Entorno de desarrollo y técnicas empleadas…………………………………….....13
3.2.1 Entorno de desarrollo………………………………………………………….....13
3.2.2 Técnicas empleadas………………………………………………………….......14
4. Desarrollo de KeepMyCar……………………………………………………................21
4.1 Introducción……………………………………………………………………….....21
4.2 Esquema básico de funcionamiento del sistema…………………………...............22
4.3 Diagrama de casos de uso…………………………………………………...............22
4.3.1 Actores…………………………………………………………………..............23
4.3.2 Diagrama de casos de uso del mecánico………………………………………...23
4.3.3 Diagrama de casos de uso del usuario registrado del taller……..........................24
4.4 Diagramas de clases……………………………………………………….………...24
4.4.1 Diagramas de clases en App Android……………………………….…..............24
4.4.2 Diagramas de clases en la aplicación de escritorio……………….……..............29
4.5 Diseño de las bases de datos……………………………………….……....………..33
4.5.1 Base de datos central…………………………………………………................33
4.5.2 Bases de datos locales…………………………………………………..............34
4.6 Evaluación y pruebas con KeepMyCar…………………………………..………...34
4.6.1 Prueba 1…………………………………………………………………………35
4.6.2 Prueba2..………………………………………………………………………..36
4.6.3 Prueba3……………………………………………………………………...…..38
4.6.4 Prueba4………………………………………………………………..……...…39
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
4
5. Plan de implantación
KeepMyCar……….…………………………………………..……………………….41
5.1 Concepto de negocio………………………………………………………………41
5.2 Presentación de la empresa……………………………………………………….42
5.3 Visión, misión y objetivos…………………………………………………………42
5.3.1 Vision…………………………………………………………………………42
5.3.2 Mision…………………………………………………………………………43
5.3.3 Objetivos………………………………………………………………………43
6. Trabajo futuro……………………………………………………...…………………..44
6.1 Fase de prueba del sistema………………………………………………………...44
6.2 Desarrollo de funcionalidades adicionales………………………………………..44
7. Coste del proyecto…………………………………………………………....................45
7.1 Coste de recursos humanos………………………………………………………...45
7.2 Costes adicionales…………………………………………………………………...46
7.3 Costes totales del proyecto………………………………………………………….46
8. Conclusiones………………………………………………………………………….....48
9. Agradecimientos……………………………………………………………………...…49
10. Bibliografía complementaria………………………………………………………...…50
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
5
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
6
1 Introducción
1.1 Motivación
Los teléfonos móviles inteligentes han ido tomando el control del mercado, con millones de
descargas de aplicaciones cada día. Los teléfonos han pasado de ser herramienta de llamadas
y SMS a “ordenadores de abordo”, con los que se trabaja o se accede a redes sociales.
Según el instituto nacional de estadística, el 77.1% de los usuarios de internet acceden a través
de su teléfono móvil, dejando atrás los ordenadores de escritorio. Por ello, el mercado de
aplicaciones móviles es aún un sector con mucho potencial por alcanzar.
En este contexto, se quiere desarrollar una herramienta software de gestión de cartera de
clientes en talleres de mecánica adaptada a los nuevos tiempos, aprovechando el potencial
de las aplicaciones móviles.
Por un lado, el administrador del taller de mecánica tiene una aplicación en su ordenador de
escritorio en la que administrar sus clientes y citas, así como próximas revisiones. Esta
aplicación está en contacto con un servidor central al que también accede una aplicación móvil,
que se encarga de avisar al cliente de sus próximas revisiones, citas o incluso de las ofertas
que publica el taller. De este modo, el principal objetivo es un sistema que mejore la relación
taller/clientes, de manera que, por un lado, el cliente se sienta más cómodo con su taller, y por
otro, el taller consiga mayores tasas de fidelidad en sus clientes.
Con KeepMyCar conseguimos estas funcionalidades entre la herramienta de ordenador de
escritorio y la aplicación móvil, así como otras que iremos exponiendo a lo largo de esta
memoria.
1.2 Objetivos y alcance del proyecto
Los principales objetivos del proyecto son:
Estudiar la viabilidad de éste como negocio con futuro
Desarrollo del producto KeepMyCar.
En el estudio de la viabilidad del proyecto como negocio, se han tenido en cuenta las opciones
disponibles en el mercado actual, el plan de implantación de KeepMyCar como negocio, los
costes asociacios a la realización del proyecto y el futuro de éste, con algunas de las
funcionalidades que se pueden añadir si se continúa el desarrollo de KeepMyCar.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
7
También se muestran las tecnologías utilizadas en el desarrollo del proyecto, los pasos
seguidos en su desarrollo, se comentan las partes fundamentales del código con muestras reales
del aspecto del sistema y se muestran las pruebas que se han realizado en la fase básica de
pruebas.
Por otro lado, los objetivos del sistema formado por la herramienta de gestión de clientes y
citas de escritorio y la aplicación móvil se enfocan hacia la experiencia del administrador del
taller y del cliente de éste. Son:
Facilitar la comunicación del cliente con su taller mediante el desarrollo de una interfaz
amigable y un sistema basado en la aparición de notificaciones en el teléfono
Permitir al taller gestionar su clientela con la herramienta de escritorio
Permitir al taller publicar ofertas que lleguen al teléfono de sus clientes. Al ser más
cercana la relación taller/cliente, el objetivo final con esto es conseguir una mayor tasa
de fidelidad en los clientes
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
8
2. Oferta actual
2.1 Aplicaciones Smartphone
KeepMyCar se desarrolla en el marco de las aplicaciones para Smartphone. A día de hoy un
teléfono móvil no es solo un dispositivo para realizar llamadas sino que se ha convertido también
en una herramienta indispensable en el día a día de los ciudadanos, manteniéndonos en contacto
con el exterior y haciendo más llevaderas las tareas del día a día. En esta gran transformación de
los teléfonos móviles, las aplicaciones han sido claves.
A día de hoy hay ya 22 millones de usuarios activos de Apps en España (primer país en penetración
de Smartphones en Europa). Además, cada dispositivo dtiene de media 24 apps (smartphones) ó
31 (tablets), y el usuario medio gasta más de tres horas al día con su Smartphone.
En las apps del mercado se puede hacer una sencilla distinción entre aquellas que se ofrecen de
forma gratuita y las que son de pago en las tiendas online conocidas.
Figura 2.1 Estadísticas de apps en España
Hablando de tipos de aplicaciones, se ve que hay diferencias en la “venta tipo” en el mercado App
Store (iOS) y Google Play (Android). Mientras que el usuario medio de Android busca por lo
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
9
general lo gratuito y muy raramente paga por una aplicación, el de iOS no pone tantas pegas a la
hora de pagar por un producto de buena calidad y con reputación y funcionamiento probado.
Sin embargo, al haber cada
vez mayor número de
usuario Android, las
ganancias totales por venta
de Apps están cada vez
más a la par en los dos
sistemas operativos
mayoritarios.
Además, cabe destacar
que aunque el usuario
medio de iPhone sigue
gastando más dinero en
Apps, hay un cambio de
tendencia y cada vez los
usuarios de Android son
menos reticentes a la compra de Apps.
2.2 Aplicaciones Funcionales
KeepMyCar se encuentra en el marco de las aplicaciones funcionales para móviles. Las
aplicaciones funcionales son aquellas que tienen una función práctica y nos facilitan el día a día
ahorrándonos tiempo ya que nos facilitan distintas tareas como mirar la previsión meteorológica,
programación de la televisión, mirar el tráfico en un determinado momento, hacer la lista de la
compra, apuntar citas próximas…
Vamos a ver algunos ejemplos de aplicaciones funcionales en el mundo de las apps móviles:
Endomondo
Utilidad: Utilizando la función GPS del teléfono,
Endomondo calcula la distancia recorrida a pie,
corriendo, nadando, en bicicleta…
Número de usuarios: más de 20 millones.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
10
Evernote/Colornote
Utilidad: Permite tomar notas, guardar imágenes con
anotaciones, actúa como agenda…
Número de usuarios: más de 100 millones.
Llama
Utilidad: aplicación que permite al usuario programar
distintos “perfiles” de funcionamiento en el teléfono
según su localización: por ejemplo, cuando salga de
casa activar el GPS y modo silencio.
Número de usuarios: alrededor de 5 millones
2.3 Posible competencia: identificación y características
Aunque en el mercado no se han encontrado aplicaciones ni sistemas con grandes parecidos a
KeepMyCar, sí hay aplicaciones existentes que tienen bastantes similitudes y procuran satisfacer
el mismo conjunto de necesidades que KeepMyCar.
El modelo de app que más se acerca a lo que pretende ofrecer KeepMyCar es el CRM (Customer
Relationship Management). Un sistema CRM informático es aquel que da apoyo a la gestión de
relaciones con clientes, venta y al marketing. Es parte de una estrategia de negocio centrada en el
cliente, la cual gana cada día un mayor peso. El principal objetivo es que el cliente tenga lo que
necesita y en el momento en que lo necesita.
Los sistemas CRM se han ido popularizando desde los años 90, debido en gran medida al avance
de la tecnología en el campo de las bases de datos, que han hecho posible almacenar el volumen
de información que puede requerir un CRM. CRM se refiere a un modelo de organización, basado
en la satisfacción del cliente, y los sistemas CRM proporcionan un conjunto de herramientas
utilizadas en el márketing relacional. El marketing relacional es el marketing que como fin tiene
la generación de relaciones rentables entre vendedor y cliente. Se idea una serie de estrategias y
acciones con el fin de facilitar la interacción con los clientes y brindarles una experiencia positiva.
Gerente de Citas
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
11
Es una aplicación para el manejo de clientes y citas Empresariales,
contactos de clientes y facturación. El calendario de citas da un
resumen gráfico del intervalo de tiempo libre / ocupado de modo
que uno se pueda programar sus compromisos en consecuencia.
Ofrece recordatorios SMS personalizados, así como alertas SMS.
También se puede utilizar como un mini CRM, ya que ayuda a
comunicarse con los clientes a través de correo electrónico y SMS.
BASE CRM
Base CRM permite controlar los contactos del negocio, llevar cuenta
de las ventas o crear tareas desde el teléfono o Tablet, manteniéndose
sincronizados los cambios con la página web. La app de Android es
gratuita, pero utilizar la web tiene un coste de 25 euros mensuales.
Más de 100 000 clientes.
SMARTY CRM
Se trata de una completa e intuitiva herramienta para mantener la
fidelidad de colaboradores, y con ella puede mantener una base de
datos, establecer recordatorios, y registrar sus hitos de colaboración.
Funciona localmente y también a través de un servidor.
5000-10000 instalaciones
Por otro lado, existen herramientas de escritorio para la gestión de talleres mecánicos media
disponibles para descargar, entre las que se destacan:
TallerGP
Herramienta informática que permite gestionar tu taller y tener los
datos sincronizados con la nube, evitando de este modo la pérdida de
datos en caso de avería del ordenador. También permite enviar SMS y
correos electrónicos a clientes y proveedores, mejorando la relación
con estos. Asimismo, genera informes de documentos relativos al taller
(presupuestos, facturas, entradas a taller, etc) en PDF y dispone de la
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
12
certificación de seguridad internacional 27001:2005 para el Sistema de Gestión de Seguridad de
la Información que avala la gestión de la información de todos los procesos en su Data Center.
Gestión de citas vía internet
Otra opción a la hora de gestionar el taller es permitir la gestión de citas vía internet, para lo cual
hay servicios de pago como Appointy, Veribook, o Zenkiu. Si bien esta es una función que puede
ser útil en la gestión de citas y en la comunicación con el cliente, estos sitios web ofrecen solo una
funcionalidad, sin dar opción a, por ejemplo, la publicación de ofertas y boletines para mejorar la
relación con el cliente. Sin embargo, esta función es muy interesante, y vale la pena considerar
incorporarla al sistema KeepMyCar en un futuro.
Conclusiones
A pesar de haber competidores en el mercado, KeepMyCar ofrece un enfoque que pensamos tiene
posibilidades, ya que permite al dueño de un taller estar en contacto con el cliente de forma sencilla
y sin necesidad de recordatorios SMS, así como la gestión de citas desde la aplicación de escritorio.
Además, la posibilidad de publicar ofertas que llegan instantáneamente al teléfono del cliente
mediante sencillas notificaciones es una característica añadida a explotar. Es necesario mencionar
que para ser competitivo en el mercado hay que cumplir condiciones como la certificación de
seguridad internacional 27001:2005 para el Sistema de Gestión de Seguridad de la Información,
que actualmente KeepMyCar no soporta.
Siendo KeepMyCar un sistema que ofrece un enfoque relativamente distinto a la oferta actual del
mercado, en el desarrollo de éste es necesario tener en cuenta lo que hay a día de hoy disponible,
y adoptar algunas de las características ya ofertadas en el mercado. Para ello, es necesario un
estudio completo de todas las opciones principales, ver cuáles tienen más cuota de mercado y por
qué, buscar las necesidades de los clientes e intentar encontrar un modelo que se asemeje lo máximo
posible a lo que se demanda a día de hoy, consiguiendo así el objetivo de facilitar tanto para el
dueño del negocio como para los clientes el proceso de ventas, gestión de citas e interacción entre
ellos.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
13
3. Tecnología para el desarrollo de la herramienta
3.1 Introducción
En el desarrollo de la KeepMyCar se han utilizado una serie de tecnologías que han sido necesarias
para el correcto fucnionamiento del sistema completo.
3.2 Entorno de desarrollo y tecnologías empleadas
3.2.1 Entorno de desarrollo
Hardware
o Ordenador portátil hp I7
o Teléfono móvil BQ AQUARIS E5
Software
o Sistemas operativos
Android 4.4
Windows 7
o Emuladores de sistemas operativos
Genymotion para Android
o Servidor
XAMPP (Apache, PhpMyAdmin, PHP)
o Bases de datos
MySQL (servidor)
SQLite (bases de datos locales, en el dispositivo móvil y en la herramienta
para ordenador)
o IDEs
Eclipse (desarrollo de la herramienta para ordenador)
Android Studio (desarrollo de la aplicación Android)
o Otros
SQLite Manager (visualización de bases de datos SQLite y pruebas)
Notepad (edición de texto PHP)
Word (redacción de la memoria)
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
14
3.2.2 Tecnologías empleadas
3.2.2.1 Android
Para el desarrollo de KeepMyCar se hace necesaria una aplicación móvil. Hoy en día existen dos
plataformas móviles ampliamente extendidas en el mercado: Android e IOS. Se ha elegido
Android por varios motivos. Para empezar, ya estaba acostumbrado al desarrollo Android, y
cambiar de Java a Java-Android es relativamente sencillo: solo hay que familiarizarse con una
serie de conceptos propios de Android como las Activities (cada Activity es básicamente una
pantalla en la interfaz de usuario).
A diferencia de las aplicaciones de programación orientada a objetos tradicionales, las Activities
son unas clases especiales que forman la estructura básica de toda aplicación Android. Asimismo,
al desarrollar en Android o cualquier otra plataforma móvil hay que tener en cuenta que no
disponemos de potencia ilimitada (ahorro de batería), o que el sistema Android puede decidir en
cualquier momento “matar” nuestra aplicación. El reto está en asumir el compromiso o trade-off
entre rendimiento y ahorro de batería: la parte móvil de KeepMyCar se despierta periódicamente
y comprueba si hay novedades en el servidor central, y, si para el usuario en términos de
rendimiento instantáneo sería que la aplicación accediese al servidor central cada minuto, esto no
sería lo más eficiente en términos de ahorro de energía.
Para el desarrollo Android se tiene presente el diseño de las Activities, y para ello, se utilizan
ficheros XML. El código responde a interacciones con los elementos XML cuando los linkamos
con el código correctamente.
A la hora de desarrollar en Android, nos encontramos ante la elección del entorno de desarrollo.
Los dos IDE más extendidos en el desarrollo de Android son Eclipse (con el plugin de Android
Development Tools) y Android Studio. Tras empezar el desarrollo de KeepMyCar en Eclipse, en
Marzo de 2015 se migró a Android Studio. Las razones son la falta de estabilidad del IDE de
Eclipse para Android, así como el hecho de que Google dejó de soportar las nuevas actualizaciones
de Android Development Tools en Eclipse.
Como KeepMyCar requiere el almacenamiento local de datos que provienen del servidor, se hizo
necesaria la elección de una base de datos local. Tras investigar, se vió que SQLite es la base de
datos más extendida para Android, y la interacción Android-SQLite resulta sencilla si se utilizan
una serie de clases y métodos ya escritos y disponibles para el público. Para el análisis de las bases
de datos SQLite, la herramienta utilizada ha sido el plugin de Mozilla “Mozilla SQLite Manager”.
Éste plugin es útil para ver qué estamos desarrollando, ya que de otra forma no es posible acceder
a las bases de datos locales de los móviles Android.
3.2.2.2 Java. Herramienta Software para ordenador de escritorio
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
15
A la hora de planificar y desarrollar la primera versión de KeepMyCar, se ha tenido en cuenta que
a día de hoy la gestión de citas en talleres y consultas de todo tipo aún se realiza mayoritariamente
en ordenadores de escritorio y no en dispositivos móviles ni tablets. Por ello, se ha considerado
básico que la gestión de citas se pueda realizar desde ordenadores de escritorio, dejándose el
soporte a gestión de citas desde dispositivos móviles para posteriores versiones.
El lenguaje de programación elegido para la realización de esta herramienta es Java, y el IDE
Eclipse. Se ha utilizado el plugin AWT de Eclipse para el desarrollo de aplicaciones con ventanas
(con el paquete SWING). La elección de Java como lenguaje de programación para desarrollar la
aplicación se debe a las facilidades que la programación orientada a objetos da a la hora del
desarrollo de programas con características de alto nivel (manejo de interfaces de usuario), además
de ser Java un lenguaje con el que se tenía experiencia.
3.2.2.3 Servidor central y base de datos del servidor
Se ha elegido Apache como servidor web que responda a las peticiones de los clientes. En el
desarrollo del servidor, se hizo necesario el uso de dos tecnologías. El lenguaje de programación
elegido para ejecutarse en el lado del servidor ha sido PHP, mientras que la base de datos se ha
desarrollado en el lenguaje MYSQL.
3.2.2.4 Apache
Desarrollado en el marco del proyecto de HTTP Server de Apache Software Foundation, Apache
es el servidor HTTP más utilizado en la actualidad, y tiene una serie de ventajas con respecto a sus
competidores principales como pueden ser el hecho de que Apache Server es altamente
configurable o que proporciona bases de datos de autenticación y con negociación de contenido.
Sin embargo, la mayor arma de Apache, y que ha permitido su total extensión en el ámbito de
servidores HTTP, es su carácter abierto, multi-plataforma y extensible. Además, al estar tan
extendido su uso, es también muy fácil encontrar ayuda y tutoriales sobre best practices en
Internet.
Es muy usado hoy en día en conjunción a MYSQL y PHP en el desarrollo de páginas dinámicas
en Internet. Una de las grandes ventajas que proporciona el uso de Apache es además su
integración en paquetes junto a MYSQL, para el desarrollo de webs o bases de datos dinámicas
desde un servidor local. En el desarrollo de KeepMyCar, se ha utilizado el paquete XAMPP. Esto
ha permitido realizar pruebas sin la necesidad de subir los scripts PHP ni la base de datos a la red,
lo cual ha resultado en evidente ahorro de tiempo (esto ha permitido previsualizar el resultado
final, y llevar a cabo eficientes test locales).
3.2.4.2 PHP
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
16
PHP es un lenguaje que permite programar scripts que se integran en el código HTML de modo
que se integra la funcionalidad Server Side a éste, cosa imprescindible en el desarrollo de
aplicaciones que utilizan bases de datos no locales.
El uso de PHP en KeepMyCar se debe principalmente a que para interactuar con la base de datos
MYSQL, es necesario un “intermediario” que favorezca la comunicación cliente-base de datos del
servidor. Al acceder a la base de datos a través de PHP, obtenemos automáticamente las ventajas
que PHP nos proporciona, como el establecimiento de sesiones con la base de datos. Así mismo,
PHP traduce a SQL las queries de manera que se hace más fácil la interacción con MYSQL desde
la aplicación Java o móvil.
La elección de PHP a la hora del desarrollo de KeepMyCar se ha facilitado al ser la sintaxis de
PHP muy parecida a lenguajes de programación a los ya familiares JAVA o C. Además, los scripts
PHP funcionan sin ningún problema de compatibilidad en el módulo Apache /MYSQL que
proporciona el programa XAMPP para desarrollo local de aplicaciones.
3.2.3.3 MYSQL
Para la gestión de bases de datos en el desarrollo de KeepMyCar, MYSQL ha sido el sistema
preferido. MYSQL es un sistema de gestión de base de datos relacional, multiusuario y con más
de seis millones de instalaciones. Además, está desarrollado como software libre, aunque
siguiendo un esquema de licencia dual. Está ofrecido bajo licencia GNU GPL para usos
compatibles con ésta. Por otro lado, empresas que quieran incorporar MYSQL en productos
privativos deben una licencia que permite dicho uso.
La distribución libre de MYSQL está mantenida por la amplísima comunidad de programadores
que da soporte a código Open Source.
Como ventajas de MYSQL, vemos que es una tecnología que está adaptada para funcionar en
equipos de múltiples procesadores, proporcionando una muy alta fidelidad y velocidad de
respuesta.
Las características que se han ido añadiendo a MYSQL han tenido siempre en cuenta que el
principal objetivo de MYSQL es garantizar que éstas no comprometen la estabilidad o el
rendimiento del sistema.
En KeepMyCar se ha utilizado PhpMyAdmin en la gestión de la base de datos MYSQL, tanto en
local como una vez el sistema fue subido al servidor. PhpMyAdmin es una herramienta muy
intuitiva incluida en XAMPP, y nos permite gestionar bases de datos y crear distintas tablas, así
como visualizar las filas de la base de datos creada, ejecutar queries de prueba y ver el tiempo de
ejecución de las mismas.
Sin conocimiento previo de bases de datos, la curva de aprendizaje SQL ha resultado muy corta
gracias en parte a las facilidades que ha dado PhpMyAdmin.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
17
3.2.3 Alternativas existentes a las tecnologías empleadas
En algunos casos la elección de una determinada tecnología se ha debido a que ya se disponía de
experiencia en dicho campo, mientras que en otros ha sido el resultado de investigación sobre
alternativas y del análisis de ventajas e inconvenientes de cada una. A la hora de elegir cada
tecnología en el desarrollo de KeepMyCar se han tenido en cuenta los siguientes factores:
Conocimiento previo
Curva de aprendizaje
Extensión y popularidad (existencia de tutoriales, foros de apoyo)
Perspectiva de desarrollo futuro
Precio
A continuación se exponen algunas de las muchas alternativas que hay en cada a cada una de las
tecnologías escogidas. Se han intentado recoger las principales, y se explicarán los motivos por los
cuales se descartó su uso.
3.2.3.1 Alternativas a Android
Figura 3.1
En la figura, podemos
observar la evolución de
ventas en los distintos
sistemas operativos
desde el primer
trimestre de 2012 hasta
el primer trimestre de
2015.
3.2.3.1.1 Windows Phone
El ambicioso proyecto Windows Phone ha resultado en un potente sistema operativo, que solo en
el primer trimestre de 2015 vendió 9.2 millones de unidades y casi un 3% del mercado. Sin
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
18
embargo, esto se antoja insuficiente a la hora de elegir la plataforma de desarrollo en un proyecto
que busca llegar al mayor número de personas posible.
3.2.3.1.1 Apple iOS
Apple vende alrededor del 20% de móviles del mercado, lo cual es casi un 50% por debajo de su
rival en el mercado de móviles, Android. Sin embargo, iOS tiene una comunidad enorme de
desarrolladores, y el mercado App Store mueve incluso más dinero que Google Play (a finales de
2013, el mercado Apple hacía más dinero que toda la competencia junta). Esto es debido a los
distintos perfiles de los usuarios de Apple y Android. Los usuarios de Apple están por lo general
más dispuestos a gastar dinero en aplicaciones.
Sin embargo, la App móvil de KeepMyCar está pensada para ser gratuita, porque será usada por
los clientes del taller mecánico. Por ello, el hecho de que Android ocupa actualmente casi el 80%
de las ventas de dispositivos móviles ha sido definitivo a la hora de elegir dicha plataforma.
Otro inconveniente de iOS es que su desarrollo es en C Objective, lenguaje orientado objetos con
el que si bien el alumno tiene experiencia, ésta es inferior a la de Android, con el que había llevado
a cabo varios proyectos anteriormente.
Además, el desarrollo de iOS es costoso, ya que precisa de ordenador Apple y de pago de cuota
anual de 99 dólares, y a la hora del desarrollo de KeepMyCar uno de los objetivos fijados ha sido
el que éste sea lo más económico posible.
Sin embargo, no es recomendable despreciar un 20% de mercado potencial a la hora de desarrollar
un producto, así que en futuras versiones de KeepMyCar sí se tendría en cuenta el desarrollo de
versiones iOS.
3.2.4.1 Alternativas a Java y al desarrollo de la herramienta software de
escritorio
Se eligió Java como lenguaje en el desarrollo de la aplicación de escritorio por la simplicidad de
éste y por ser un lenguaje de programación orientada al objetos bien conocido por el alumno. Sin
embargo, se consideraron las siguientes alternativas:
3.2.4.2 Desarrollo de una aplicación web
Quizás la alternativa más sólida al desarrollo de una aplicación de escritorio ha sido la posibilidad
de sustituir ésta por una aplicación web, desarrollada con C#, Visual Basic o JavaScript. Existen
varias ventajas derivadas de las aplicaciones web que podrían haber sido muy beneficiosas en el
desarrollo de la aplicación de gestión de cartera de clientes que el mecánico usará. Vamos a
enumerar las principales:
Evitan problemas de compatibilidad entre plataformas
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
19
No ocupan espacio de disco duro
No requieren mantener una base de datos local con los datos de los clientes del mecánico
Son totalmente portables
Los virus que pueda tener el ordenador del mecánico no dañan los datos. Al no tener datos
en local y estar todos en el servidor, utilizando una aplicación web no tenemos que
preocuparnos de problemas de sincronización entre datos de cliente y servidor
Se consumen muy pocos recursos al estar la mayor parte de los datos procesados en el
servidor
Sin embargo, una de las premisas buscadas en el desarrollo de la parte del mecánico de
KeepMyCar ha sido la posibilidad de que si hubiera un problema de conexión con internet se
puedan guardar datos en una base de datos local para luego sincronizar con el servidor. De esta
manera, el mecánico no acusará el problema y podrá seguir gestionando sus citas. Cuando haya
conexión disponible de nuevo, KeepMyCar se sincronizará con el servidor de forma transparente
al usuario.
3.2.4.3 Desarrollo de la herramienta software de escritorio en C
Una vez tomada la decisión de desarrollar la herramienta de escritorio, se consideró C como
alternativa a Java. C presentaría un cambio de filosofía en el desarrollo de la herramienta
(programación estructurada vs POO), y tiene una serie de ventajas sobre Java:
Velocidad y potencia
Compilado: no hay que utilizar intérpretes
Mayor control sobre el programa (de más bajo nivel)
Por otra parte, y como ya se ha expuesto anteriormente, Java tiene las ventajas de que el desarrollo
de interfaces gráficas es sencillo al tratarse de un lenguaje de alto nivel, y que exime al
programador de tener que preocuparse excesivamente por la gestión de recursos del sistema.
3.2.5.1 Alternativas en la elección de Apache como servidor Http
Existen muchas alternativas al servidor Apache Http. Sin embargo, se ha elegido Apache por las
ventajas ya comentadas anteriormente. Vamos a mencionar algunas de las alternativas que se han
considerado:
Thttpd: distribuido en software libre y disponible para plataformas UNIX, tiene como
mejores prestaciones su simplicidad, poco tamaño, portabilidad, rapidez y seguridad,
empleando los requerimientos mínimos de un servidor HTTP. Sin embargo, tiene una serie
de inconvenientes, como por ejemplo que no soporta https, esto hizo que se descartara como
alternativa.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
20
Nginx: Servidor web que ha crecido mucho en los últimos años, es recomendado para sitios
web estáticos que necesiten alta velocidad, con poco uso de la memoria y sitios web que
funcionan con un servidor dedicado. Al estar basado en eventos y no en procesos (como
Apache, en el que cada conexión requiere un hilo, lo que aumenta la carga
considerablemente), nginx consume mucho menos memoria. Además, cuando hay muchas
conexiones simultáneas, nginx ofrece muy altas velocidades de transferencia.
No se eligió Nginx por el hecho de tener Apache una mayor comunidad de desarrolladores.
Sin embargo, podría haber sido la alternativa más eficiente a la hora de procesar las
conexiones de clientes en KeepMyCar.
3.2.5.2 Alternativas en la elección de MYSQL
MariaDb: es considerada la evolución de MySQL, y son compatibles. De hecho, en la
migración MySQL-MariaDb no es necesario cambiar modificar el código. MariaDb es
un sistema de gestión de bases de datos derivado de MySQL con licencia totalmente
gratuita GPL. Es desarrollado por Michael Widenius (fundador de MySQL) y la comunidad
de desarrolladores de software libre. Se considera que existen una serie de ventajas de
MariaDb con respecto a MySQL:
o Motores de almacenamiento nuevos, como Aria, que reemplaza MyISAM.
o Mejoras de velocidad, sobre todo cuando se utiliza el motor de almacenamiento
Aria. El motivo es que Aria cachea datos en tablas temporales de memoria,
mejorando así el rendimiento de MyISAM, que utilizaba el disco duro.
o Nuevas tablas de sistema que almacenan estadísticas que pueden ser útiles para
realizar la optimización de la base de datos.
Vemos como MariaDb no supone un salto abrupto desde MySQL, por lo que incluso se
podría hacer el trasvase de las bases de datos de KeepMyCar a MariaDb sin problemas.
MySQL fue la base de datos elegida por encontrarse en el paquete de desarrollo XAMPP,
aunque en versiones futuras se tendrá en cuenta MariaDb como evolución natural de
MySQL.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
21
4. Desarrollo de KeepMyCar
4.1 Introducción
KeepMyCar es un sistema de gestión de cartera de clientes de mecánica. Por un lado, está la
herramienta software instalada en el equipo del mecánico. El mecánico gestiona en ella sus clientes
y citas. En adición, puede crear “ofertas” del taller y “recordatorios” de próximas revisiones
asociados a uno o varios clientes. De forma transparente al mecánico, las ofertas, citas y
recordatorios son guardados doblemente. Por un lado, en la base de datos local del mecánico, y
por otro, son enviados a una base de datos central. Al estar guardados los datos en un servidor
central, por un lado conseguimos un sistema seguro y portable para el mecánico, y por otro, los
datos de las próximas citas de cada cliente pueden ser enviados a éstos.
El cliente del taller descarga la aplicación Android KeepMyCar, y obtiene su usuario. Con la
aplicación KeepMyCar, tendrá acceso a las citas, ofertas y recordatorios de su taller. La aplicación
hace acceso a las nuevas publicaciones del taller diariamente, y en caso de haber novedades
(próxima cita concertada, nuevo recordatorio…), se abrirá una notificación en el dispositivo móvil
del cliente mostrando el número de novedades que hay publicadas en su taller.
De esta manera, el cliente del taller va a estar al tanto de novedades en su taller incluso
manteniendo cerrada su aplicación de Android, ya que ésta abrirá notificaciones periódicamente
indicándole las novedades que ha publicado el mecánico.
KeepMyCar ofrece, como se ha expuesto, una serie de servicios, con el objetivo de obtener una
mayor fidelidad por parte del cliente y mejorar la interacción entre éste y el mecánico. Por ejemplo,
cada vehículo tiene ciclos de mantenimiento que es conveniente mantener. Al poder el mecánico
publicar los recordatorios de estos ciclos, se está ofreciendo un servicio valioso al cliente, ya que
se está facilitando el mantenimiento de su automóvil.
Además, con la publicación periódica de recomendaciones u ofertas, el taller consigue mantenerse
presente en el cliente, de modo que se evita la necesidad de buscar otro taller.
Por otro lado, el cliente obtiene fácil acceso a la dirección y número de teléfono del taller mediante
la aplicación Android.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
22
4.2 Esquema básico de funcionamiento del sistema
Figura 4.1
Esquema básico
de funcionamiento
del sistema. El
teléfono del
cliente recoge las
ofertas, citas y
recordatorios de
un servidor central
con el que
interactúa el
mecánico, que
también mantiene
una base de datos
local
4.3 Diagramas de casos de uso
Los diagramas de casos de uso permiten diferenciar los actores que interactúan con el sistema, las
relaciones entre ellos y las acciones que puede realizar cada uno dentro del sistema.
Este tipo de diagramas es comprensible tanto por clientes como por usuarios, y representa los
requisitos funcionales del sistema, utilizándose como base para un desarrollo iterativo e
incremental. Los diagramas de casos de uso tienen tres elementos:
Actores: Son los usuarios del sistema. Un actor puede ser una persona, un conjunto de
personas, un sistema hardware o un sistema software. Los actores representan un rol, que
puede desempeñar alguien que necesita intercambiar información con el sistema.
Casos de uso: Un caso de uso describe una forma concreta de utilizar parte de la
funcionalidad de un sistema. La colección de todos los casos de uso describe toda la
funcionalidad del sistema.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
23
Comunicación entre actores y casos de uso: Cada actor ejecuta un número específico de
casos de uso en la aplicación. Por eso decimos que hay comunicación entre actores y casos
de uso.
4.3.1 Actores
Figura 4.2
Actores del sistema
4.3.2 Diagramas de casos de uso del mecánico
Figura 4.3
Diagrama de casos de uso del
mecánico
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
24
4.3.3 Diagramas de casos de uso del usuario registrado del taller
Figura 4.4
Diagrama de casos
de uso del Usuario
4.4 Diagramas de clases
A la hora de evaluar las clases del proyecto, se van a evaluar las clases más importantes de la
aplicación Android y Java por separado.
4.4.1 Diagramas de clases en App Android
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
25
Figura 4.4 Archivos conteniendo el código fuente de
la aplicación Android
Para comenzar, mencionar que en una aplicación
Android hay código Java (en el caso de KeepMyCar
en la carpeta com.example.gabrilator.keepmycar), y
también hay código XML que se referencia desde el
código Java. Estos archivos XML se encuentran en
la carpeta res (resources), y son imprescindibles para
el correcto desarrollo de la aplicación. En la carpeta
Layout hay varios archivos XML, uno por User
Interface, mientras que en la carpeta drawable
colocamos las imágenes que luego referenciamos en
el resto del código.
Vemos las principales clases de la aplicación:
Login. Clase que extiende Activity. Carga una UI donde el cliente del taller puede hacer
login con el usuario y contraseña que le han sido
asignados. Cuando el cliente hace “tap” en login, se
ejecuta el proceso background de login mediante la
clase AttemptLogin, que extiende a AsyncTask. El
proceso de login consiste en el envío al servidor de las
credenciales de usuario, y la interpretación de la
respuesta de este. Para interpretar la respuesta del
servidor se hace uso de la clase JSONParser. Si la
respuesta es positiva, se abre la Activity MenuActivity.
Figura 4.5 Aspecto de la Activity Login en teléfono Android
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
26
Figura
4.5
Login
MenuActivity. Clase de tipo Activity (interacciona con usuario en Android) que muestra
al cliente las opciones “ver citas”, “ver recordatorios”,
“ver ofertas” y “contacto”. Es llamada una vez obtenemos
éxito en el intento de Login.
Figura 4.6 Aspecto de MenuActivity
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
27
Figura 4.7 Diagrama de la clase MenuActivity
o OfertasActivity. Muestra, en orden de fecha, las ofertas que hemos recogido del servidor
central. Estas ofertas son guardadas en la base
de datos local SQLite del móvil, de manera que
la próxima vez que se abra la vista, se cargarán
primero los datos locales, y luego se accederá al
servidor para comprobar si hay novedades.
Como en cada Activity de Android que necesita
acceder a la red, OfertasActivity utiliza una
AsycTask (LoadComments) que ejecute el
acceso a la red en un hilo. Observamos que un
método de LoadCommets es
doInBackground. Es aquí donde se realiza la
petición http al servidor. Esto es debido a que si
accediésemos a la red en el hilo principal (por
ejemplo, en el método onCreate de
OfertasActivity), la interacción UI-usuario se
vería afectada, ya que el hilo principal estaría
accediendo a la red.
Figura 4.8 Aspecto de la Activity OfertasActivity
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
28
Figura 4.8 OfertasActivity
o CheckService. Android tiene un tipo especial de clase llamado Service. La clase
CheckService extiende a IntentService. Un IntentService es un tipo de Service que
responde a peticiones asíncronas. Los clientes mandan peticiones a través de
startService(Intent). En el caso de KeepMyCar, CheckService va a ejecutarse
periódicamente a petición de AlarmReceiver: se programa el AlarmManager de Android
para periódicamente “despertar” al IntentService, de manera que incluso estando la
aplicación apagada, si el usuario ha hecho login anteriormente, la aplicación comprueba la
existencia de novedades en el taller del cliente en internet. Si hay novedades, CheckService
crea una notificación indicando el número de novedades, y ésta se muestra en el teléfono.
CheckService también hace uso de JSONParser para interpretar las respuestas del servidor
central.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
29
Figura 4.9 CheckService
4.4.2 Diagramas de clases en la aplicación de escritorio
Figura 4.10 Archivos conteniendo el código fuente de
la aplicación de escritorio
Para la aplicación KeepMyCar Java de escritorio se ha
utilizado la librería Swing para representar los
componentes UI. En primera instancia, se escribió el
programa sin tener en cuenta que al acceder a la red
desde el hilo “even dispatch thread” (el hilo que
permite la interacción con los elementos Swing), la
aplicación se bloquea y no responde a ninguna acción
del usuario hasta que se terminase la acción. Viendo
este comportamiento indeseado, se investigó y se
aplicó el enfoque correcto, teniendo en cuenta:
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
30
o Los hilos iniciales, que son los hilos que ejecutan el código inicial de la aplicación.
o El ya mencionado “event dispatch thread”, que donde debemos incluir todo código que
interactúe con la Framework de Swing.
o Hilos trabajadores o “background threads”. Aquí debemos añadir las tareas que consumen
tiempo considerable, y éstas se ejecutarán en segundo plano, dejando el event dispatch
thread libre para interactuar con él.
Pues bien, para hacer uso de estos hilos trabajadores se ha extendido la clase SwingWorker, y el
código ejecutado en “background” se ha añadido en el método “doInBackground”. A continuación
se exponen los diagramas de algunas de las clases más importantes de la aplicación. Al ser clases
“visuales”, se va a mostrar también el aspecto de éstas al ser ejecutadas.
Clientes. Clase que extiende JFrame (incluye elementos Swing). Carga de la base de datos
local los clientes registrados con un determinado mecánico (que ha hecho login), pregunta
al servidor si hay nuevos clientes y en caso de haberlos los descarga. También nos ofrece
la opción de crear nuevo cliente, cargar los datos de un determinado cliente, modificar un
determinado cliente y eliminar un cliente. Como se ha explicado, las operaciones de
networking se realizan por separado del hilo dispatcher de JFrame, para lo cual se han
creado las clases ClientesBackground, EliminarBackground y ModificarBackground.
Figura 4.11 Clase clientes, aspecto en la aplicación
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
31
Figura 4.12 Diagrama de la clase Clientes
Clase Comments. De nuevo, extiende JFrame (es Swing element). Carga los Recordatorios
y Citas de un determinado cliente, y los expone en orden de fecha. También hace uso de
una serie de clases clases SwingWorkers para realizar tareas de networking en el
background: AnswerWorker, EliminarCommentBackground y
ModificarCommentBackground.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
32
Figura 4.12 Clase Comments, aspecto en la aplicación
Figura 4.13 Diagrama de la clase Comments
AnadirComment. Clase que representa una ventana, creada con JFrame. Es llamada para
añadir una cita con un determinado cliente, y el trabajo de networking lo realiza llamando
al método doinBackground de AnadirCommentBackground (que extiende a
SwingWorker).
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
33
Figura 4.13 Clase AnadirComment, aspecto en la aplicación
Figura 4.12 Diagrama de la clase AnadirComment
4.5 Diseño de bases de datos
Se ha utilizado MySQL para la base de datos central, mientras que para las bases de datos locales
(la de la aplicación de escritorio y la de la aplicación Android) se ha optado por SQLite.
4.5.1 Base de datos central
La base de datos central debe almacenar toda la información del sistema. Se ha optado por
distribuir la información en tres tablas:
Tabla superusers. Almacenamos en ella información necesaria para el login del mecánico
en el sistema, como su usuario y contraseña. Asimismo, almacena información del taller,
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
34
como el nombre de la compañía, dirección y teléfono. Esta información será recogida por
la aplicación Android y servirá al cliente del taller como información de contacto.
Tabla users. En esta tabla, se almacenan en distintas columnas los datos de login de los
clientes del taller, e información como su nombre, apellidos, número de teléfono (contacto)
o dirección. Asimismo, la columna superuser relaciona a cada cliente con un taller, de
manera que al acceder el cliente al sistema obtendrá la información del taller que le
corresponde.
Tabla comments. Tabla que almacena las ofertas, citas y recordatorios publicados por el
software de escritorio del mecánico, y que los asocia a cada cliente.
4.5.2 Bases de datos locales
El diseño de las dos bases de datos locales se ha realizado teniendo en cuenta que hay que mantener
sincronización con la base de datos del servidor central. Así, el mayor reto ha sido cómo
programáticamente evitar duplicados y consultas innecesarias que recarguen el servidor. Por
ejemplo, cuando recogemos los datos del servidor buscando novedades en android, le indicamos
al servidor la última novedad recibida, de manera que el servidor solo tiene que buscar datos a
partir de ésta.
4.5.2.1 Base de datos local en android
Se trata de una base de datos sencilla (una tabla) en la que almacenamos los mensajes que llegan
del servidor central, el tipo de cada mensaje (oferta, cita, recordatorio) y datos de identificación y
sincronización con el servidor central.
4.5.2.1 Base de datos local en Java (aplicación de escritorio para el mecánico)
Esta base de datos es muy importante ya que la aplicación de escritorio debe poder guardar datos
sin que haya conexión a internet. Más tarde, al detectarse conexión a internet, la aplicación se
sincronizará con el servidor. Tenemos dos tablas:
Tabla users. En esta tabla, se guarda toda la información de los clientes del taller. El
mecánico puede consultar, modificar o eliminar los datos de cada usuario en la aplicación.
Tabla comments. Guarda los datos de citas, recordatorios y ofertas generados por el
mecánico. En caso de encontrarse conexión a internet, estos datos estarán sincronizados en
todo momento con el servidor. En caso de estarse trabajando en modo offline, se irán
guardando y al volver al modo online se autosincronizarán con el servidor.
4.6 Evaluación y pruebas con KeepMyCar
Se diseñan una serie de pruebas para comprobar el correcto funcionamiento del sistema
KeepMyCar. Las pruebas van a consistir en lo que podría considerarse como el proceso normal de
interacción entre un mecánico y un cliente que quiere utilizar la aplicación Android para estar al
corriente de las novedades en su taller. Cabe mencionar que el usuario del mecánico con el que
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
35
vamos a hacer login en la aplicación de escritorio es “Jimenez”, y hemos creado un perfil con un
negocio llamado “Taller Jimenez SA”.
Número Prueba Resultado
1.1 Creación de nuevo usuario Android OK
1.2 Login con el nuevo usuario Android OK
1.3 Comprobar que no se muestran citas ni
recordatorios, pero si las ofertas
OK
2.1 Añadir novedades desde la aplicación de
escritorio
OK
2.2 Check online de las novedades añadidas OK
2.3 Se abren las notificaciones en el móvil OK
3.1 Comprobar datos de contacto del taller OK
4.1 Eliminar usuario creado OK
4.2 Comprobación desde la aplicación móvil OK
4.6.1 Prueba 1: Creación correcta de un cliente de prueba desde la herramienta
de escritorio
Desde la herramienta de escritorio, creamos un nuevo cliente y comprobamos que todo funciona
correctamente:
Figura 4.13 Nuevo cliente del taller desde la aplicación del escritorio
Figura 4.14 Comprobación de que el cliente ha sido añadido en el servidor
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
36
Figura 4.15 Login con nuevo usuario Figura 4.16 No hay citas que mostrar Figura 4.17 No
revisiones
Vemos que, tras hacer login con el nuevo usuario PrueProy y comprobar si hay novedades en la
aplicación Android, no hay citas ni revisiones futuras. Esto es el comportamiento esperado, ya que
no se han añadido desde la aplicación de escritorio. Sin embargo, sí deberían poder consultarse ya
las ofertas, ya que estas son accesibles desde cualquier cliente del
taller. Lo comprobamos:
Figura 4.17 Ofertas
En 4.17 comprobamos cómo Android recoge del servidor las
ofertas del taller. Las ofertas creadas desde la herramienta de
escritorio son guardadas en el servidor como tipo “oferta”, y se
ha creado un script php que responde a la petición de la aplicación
Android para todas las ofertas publicadas por el taller
correspondiente. Comportamiento correcto
4.6.2 Prueba 2: Se añaden novedades desde la aplicación de escritorio y se
comprueba que éstas llegan al servidor, y que Android las recoge
automáticamente abriendo una notificación
Vamos a crear dos recordatorios de revisión “Recordatorio 1” y “Recordatorio 2”, así como una
cita “Cita 1”, asociados al usuario PrueProy que hemos creado en el paso anterior. Estas novedades
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
37
se añaden al servidor, y Android debería “despertarse” y consultarlas, mostrándolas por la pantalla.
Vemos cómo se comporta el sistema ante estas acciones.
Figura 4.18 Se han añadido los recordatorios y la cita a la herramienta de escritorio
Figra 4.19 Novedades añadidas en el servidor central.
Observamos cómo se han añadido correctamente al servidor las tres novedades. Ahora, en el
funcionamiento normal del sistema KeepMyCar, la aplicación accedería cada 12 ó 24 horas al
taller (aún no se ha decidido cada cuánto programar el acceso). Sin embargo, con el propósito de
poder realizar las pruebas, se ha programado un acceso al
servidor cada minuto. Se espera un minuto con la aplicación
KeepMyCar no abierta en Android (eso sí, se había hecho login
con el nuevo usuario anteriormente), y vemos que se abre una
nueva notificación:
La notificación muestra el número de novedades que se han
añadido desde la herramienta de escritorio, así como un icono
de KeepMyCar. Al hacer tap en la notificación, se debería abrir
el menú de la aplicación Android mostrándonos, entre otras
cosas, el desglose de novedades (en este caso, hay 2 revisiones
nuevas y una cita nueva).
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
38
Figura 4.21 Menu con novedades Figura 4.22 Recordatorios añadidos Figura 4.23 Citas
añadidas
4.6.3 Prueba 3: comprobar datos de contacto con el taller desde la aplicación
Android
La aplicación de Android sirve también al cliente para ponerse en contacto con el mecánico si así
lo necesita. Haciendo tap en “información de contacto”, accedemos a la información del taller:
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
39
Figuras 4.24 y 4.25 Contacto con el taller desde la aplicación Android.
4.6.4 Prueba 4: Eliminamos el usuario creado, vemos que no es posible hacer
login en la aplicación Android
Se va a eliminar el usuario creado anteriormente. Tras esto, vamos a comprobar que el usuario ya
no consta en la base de datos del servidor, así como los comentarios que añadimos anteriormente.
Tras realizar las pruebas, se ha comprobado que los datos del usuario no están en el servidor ni en
la base de datos local de la aplicación de escritorio, y que el login desde android no es posible.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
40
Figura 4.26 Lista de clientes, sin el usuario de prueba añadido
Ahora, tras intentar hacer login con el usuario creado anteriormente, la aplicación vuelve a la
pantalla de Login tras unos segundos de intercambio de mensajes con el servidor.
Esto prueba que el usuario ha sido eliminado correctamente. Aun así, vamos a acceder al servidor
central, y ejecutamos la SQL query “select * from users where username= ‘PrueProy’”, para
comprobar que la base de datos no devuelve ningún resultado:
Figura 4.27 Login no exitoso
Figura 4.28 Checkeo online, la base de datos no devuelve ningún resultado
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
41
5. Plan de implantación KeepMyCar
5.1 Concepto de negocio
El sistema al que nos referimos, que hemos llamado KeepMyCar, ofrece a los dueños de talleres
mecánicos las siguientes funcionalidades principales:
Gestión de clientes y citas
Publicación de recordatorios de servicio (recordatorios de citas, futuras revisiones)
Publicación de recomendaciones a los clientes del taller
Además, se piensan añadir funcionalidades en el futuro, como la gestión de citas online, de modo
que el cliente pueda realizar la reserva en el taller desde su teléfono móvil, o el seguimiento online
del arreglo del coche desde la aplicación. Otra funcionalidad que se piensa añadir es la opción de
permitir al mecánico gestionar las citas desde su propia aplicación Android o Iphone para
gestionarlo desde su móvil o Tablet, pensando aquellos que deseen dejar de usar el ordenador para
la gestión de sus clientes.
Los usuarios de KeepMyCar tendrán disponible la aplicación desde dos canales:
Tiendas de aplicaciones (Google Play, App Store)
Página web de KeepMyCar, desde la que también se podrá descargar la aplicación
de gestión de taller de escritorio
A la hora de realizar el modelo de negocio, nos centramos primero en Talleres independientes en
España, con el objetivo de mantenerlo relativamente sencillo y poder así profundizar en éste.
Así, tenemos un mercado en el que hay 29000 talleres, del que en una primera fase, el objetivo a
conseguir en el primer año es tener 30 talleres asociados a KeepMyCar (un 0,13 % del mercado).
Una vez se alcance este ratio, el objetivo es crecer hasta en 3-4 años tener 150 talleres asociados
en el territorio Español.
Para conseguir un producto mínimo viable, se requiere de una inversión inicial de 5000 € que
sufrague gastos iniciales:
Desarrollo de versiones Android, IoS, escritorio de KeepMyCar
Desarrollo de página web
Plan de marketing y comercialización
Otros
El modelo de negocio se basa en subscripciones al paquete KeepMyCar por parte de los talleres.
Se ofrecerá un periodo de prueba gratuito de 2 meses tras el cual el Taller deberá pagar una cuota
de abonado de 35€ mensuales. Esto, si se cumplen las previsiones
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
42
5.2 Presentación de la empresa
La idea de KeepMyCar nace del clásico problema en la relación cliente-mecánico que casi todo
conductor ha vivido en varias ocasiones. “Te dejo escrito en este papel la fecha de tu próxima
revisión”, “¿cuándo tenía yo mi próxima cita con el mecánico?” “¿lo apunté?”. O el problema
típico del mecánico “¿cómo obtengo mayor tasa de fidelidad de mis clientes?
Con el objetivo de solucionar estos problemas y utilizando la sencilla y muy conocida tecnología
de apps de escritorio y apps móviles, KeepMyCar ofrece un sistema de comunicación mecánico-
cliente en el que los clientes pueden estar al tanto de las próximas citas y revisiones, así como de
las ofertas que se hayan publicado por parte del mecánico.
KeepMyCar en este sentido libera al usuario de la preocupación de tener que apuntar futuras
revisiones de su coche, de tener que acordarse de la hora exacta de una cita, y le mantiene al tanto
de novedades en su taller. Y todo a través de una aplicación móvil. ¿Por qué usamos aplicaciones
móviles?
Pues bien, como se ha dicho en el capítulo 2, el desarrollo de aplicaciones se ha convertido en los
últimos años en uno de los nuevos mercados emergentes, en el que aún hay mucho que explotar.
Consideramos que KeepMyCar tiene hueco dentro de este mercado ya que añade, con su
combinación de aplicación de escritorio para el mecánico y aplicación móvil para los clientes, una
funcionalidad no cubierta por el mercado.
Asimismo, destacar que una vez desarrollado el sistema KeepMyCar, éste puede ser aplicado sin
muchas modificaciones a otros sectores, como puede ser la gestión de citas en una consulta médica
o de fisioterapia. El objetivo final a la hora de desarrollar KeepMyCar es el de crear un
sistema de gestión de citas “global”. El usuario de Smartphone hará login en el sistema global.
Seguidamente, se le mostrará al cliente una lista de centros adscritos cercanos de diferentes tipos.
“clínicas médicas”, “talleres mecánicos”, “centro de masajes”, “fisioterapia”… al seleccionarse un
centro, se podrá acceder a ofertas o no dependiendo del tipo de centro, y si se recibe autorización
del gestor de dicho centro (por ejemplo, introduciendo la contraseña del centro) el usuario quedará
registrado en un centro más, y las citas y recordatorios que tenga con ese centro le llegarán al
móvil.
5.3 Visión, misión y objetivos
5.3.1 Vision
Mi visión es implantar KeepMyCar en los talleres a nivel nacional, convertirla en un sistema de
referencia y ser útil para los usuarios. Para conseguir esto, es necesario primero publicar una
versión con el “producto mínimo viable”, y luego ir mejorándolo y añadiendo nuevas
características gradualmente.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
43
Sin embargo, como se ha mencionado anteriormente, una vez desarrollado el producto
KeepMyCar por completo, el objetivo sería el desarrollo paralelo de un sistema de gestión de
cualquier tipo de citas profesionales, en lo que sería un proyecto mucho más ambicioso, amplio y
complejo.
5.3.2 Misión
El compromiso principal de KeepMyCar es ofrecer a sus usuarios una interfaz sencilla de contacto
con su taller, consiguiendo así mayor comodidad en éstos. También pretende ser una herramienta
para los talleres que les permita aumentar la fidelidad de sus clientes, así como ser una plataforma
en la que éstos puedan publicar ofertas.
5.3.3 Objetivos
Empezar a establecerse en los talleres de la zona sur de España durante su primer año de
lanzamiento. Los primeros talleres en acogerse a KeepMyCar lo tendrán de forma gratuita
si acuerdan dar feedback periódico del funcionamiento de éste.
Llegar a ser el sistema líder en interacción mecánico/cliente a nivel nacional.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
44
6. Trabajo futuro
6.1 Fase de prueba del sistema
Siendo KeepMyCar un sistema que gestiona datos de clientes y citas, en él la seguridad va a ser
algo crítico a la hora de desarrollar el sistema, ya que hay que evitar inyecciones y pérdidas de
datos. Por ello, será necesario pasar por una fase de pruebas de seguridad del sistema antes de su
lanzamiento al mercado.
Para ello, cabe mencionar que las contraseñas no deben ser almacenadas como tal, sino que
debemos guardar “huellas digitales” de éstas, para lo cual se piensa utilizar SHA1 a la hora de
guardar los datos en el servidor. Todo sistema que mantiene contraseñas “tal cual” presenta un
problema de seguridad.
También hay que tener en cuenta el rendimiento de las aplicaciones, especialmente la aplicación
de gestión de clientes de escritorio. Ésta aplicación soporta mucha carga de datos y accesos a la
base de datos del servidor, por lo que antes de sacar la primera versión estable del sistema al
mercado, será necesario un periodo de pruebas en el que se intentará optimizar el código.
6.2 Desarrollo de funcionalidades adicionales
Antes de publicar el sistema se desea asimismo añadir una serie de funcionalidades adicionales
que, si bien por separado no suponen un cambio drástico en KeepMyCar, sí pueden entre todas
significar una mejora significativa a la hora de competir en el mercado. Algunas de estas
funcionalidades son:
Envío de todo tipo de notificaciones por Email. Actualmente se está trabajando en añadir
esta funcionalidad, que aportará algo interesante: el taller podrá estar en contacto con los
clientes, incluso con aquellos que no utilicen la aplicación móvil.
Exportar bases de datos a Excel. Esto puede ser necesario para imprimir, por ejemplo, el
historial de un cliente.
Vista en modo “calendario” tanto en la aplicación móvil como en la herramienta Java del
mecánico.
Generar un modo “actualización del estado del coche”. Consiste en, dentro de la cita,
informar al dueño del vehículo del estado y evolución de éste, de un modo parecido a cómo
se nos informa del estado de nuestro pedido online al pedir una pizza.
Mejora del aspecto de interfaces de usuario, tanto en la aplicación de escritorio como en la
aplicación Android.
Estas funcionalidades son lo básico que necesita KeepMyCar para entrar en el mercado.
Primero, se va a prestar más atención a las pruebas básicas mostradas en este apartado. Una
vez se consiga mejorar con ello el rendimiento de KeepMyCar, se pasará a añadir
funcionalidades.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
45
7. Coste del proyecto
En este apartado se desglosan los costes involucrados con la realización del proyecto KeepMyCar.
Los costes se van a desglosar en costes de recursos humanos y costes adicionales.
7.1 Coste de recursos humanos
El proyecto se ha realizado con los recursos de un ingeniero a una tarifa horaria de 25 euros la
hora. Además, se considera que las tareas de programación han sido realizadas por un programador
a una tarifa de 15 euros la hora.
Se ha llevado a cabo entre el final de Enero y final de Mayo de 2015. Se calcula que en total se
han dedicado 558.5 horas de trabajo a su ejecución. Se hace un desglose de los costes en recursos
humanos del proyecto KeepMyCar
Concepto Horas Ejecutor Coste (€) Acumulado (€)
Brainstorming 9 Ingeniero 225 225
Planificación proyecto 13 Ingeniero 325 550
Estudio alternativas
mercado
21.5 Ingeniero 537.5 1087.5
Decisión funcionalidades 22.5 Ingeniero 562.5 1650
Aplicación Android 240 Programador 3600 5250
Gestión Servidor 16 Programador 240 5490
Tutorial
Swing/Android/PHP/SQL
35 Programador 525 6015
Aplicación Java escritorio 125 Programador 1875 7890
Pruebas sistema completo 16.5 Ingeniero 247.5 8137.5
Redacción memoria 60 Ingeniero 900 9037.5
Tabla 7.1 Costes RRHH del proyecto
Vamos a continuación a mostrar las etapas de desarrollo del proyecto a lo largo del tiempo en un
diagrama de Gantt. Varias tareas se realizaron paralelamente, al estar unas relacionadas con las
otras (se ha intentado siempre dar un enfoque práctico a lo aprendido, y así, por ejemplo, cuando
se ha adquirido una nueva habilidad nueva al hacer un tutorial se ha ido probando ésta en el
proyecto).
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
46
Figura 7.2 Diagrama de Gantt del proyecto KeepMyCar
7.2 Costes adicionales
Tenemos en cuenta asimismo los costes adicionales asociados a la ejecución del proyecto. Como
se ha tenido la fortuna de poder acceder a muchos recursos a través de internet, estos costes
adicionales no son muy elevados. En estos costes entrarían:
Realización de tutoriales (tutorial swing, Android, SQL, PHP…)
Conjunto de SDKs y APIs utilizadas
Conexión a internet
Mencionamos que los tutoriales que se han realizado han sido todos de carácter gratuito. En la
actualidad tenemos la suerte de disponer de infinidad de información en internet. Además, dado
su carácter más dinámico, se han visto también muchos tutoriales en la plataforma YouTube.
Por otro lado, se han utilizado SDKs y APIs gratuitas en su totalidad, por lo que los costes
adicionales los componen solamente la conexión a internet utilizada.
Herramienta Coste (€/mes) Meses Coste total (€)
Conexión a internet 25 4 100
Tabla 7.3 Costes adicionales del proyecto
7.3 Coste total del proyecto
Sumando los dos costes anteriormente mencionados, calculamos el coste total del proyecto:
Concepto Valor (€)
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
47
Costes RRHH 9037.5
Otros costes 100
Coste total del Proyecto 9137.5
Tabla 7.4 Coste total del proyecto
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
48
8. Conclusiones
Estoy muy satisfecho con el desarrollo de mi proyecto fin de carrera, dado que he adquirido una
visión global de lo que se necesita para sacar adelante un producto al mercado.
Por un lado, he podido explotar parte de los conocimientos que he ido adquiriendo en mis años de
estudio en la Universidad de Sevilla y en mi año en la Universidad de Cork.
Siempre me ha llamado la atención el mundo de las apps móviles, y poder realizar un proyecto
como éste en el que he tenido que ampliar mis conocimientos y partir absolutamente desde cero
en el diseño y desarrollo ha sido muy enriquecedor para mí. He aprendido a valerme por mi mismo,
adquiriendo la mentalidad de “para todo habrá una solución”.
También, aunque es bien sabida la cantidad de información que hay disponible en la red, para mí
no ha sido hasta ponerme manos a la obra con mi proyecto fin de carrera cuando he comprendido
verdaderamente cómo buscar soluciones en internet, cuáles son fiables y cuales no tanto, y cómo
hacer uso de ellas en mi aprendizaje, y en el desarrollo de un proyecto real.
Cabe destacar la cantidad de horas que me ha tomado llevar a cabo un proyecto que en un principio
me pareció bastante sencillo de ejecutar. Si bien el tiempo total de realización del proyecto entra
dentro de lo normal (4 meses aproximadamente), le he tenido que dedicar muchas horas casi todos
los días para terminarlo en un tiempo razonable. Quizás esto se debe a que no tuve en cuenta el
proceso de aprendizaje mediante tutoriales, que ha tomado bastante tiempo, así como la corrección
de errores y el tiempo que ha tomado añadir nuevas características, por pequeñas que sean.
Quizás lo único no tan positivo de mi experiencia con el proyecto de fin de carrera haya sido el
hecho de que no he podido compartirlo con otro compañero, hecho que ha significado que las
decisiones relativas a la realización del proyecto han sido mías. Muchas veces he echado de menos
una segunda opinión u otro punto de vista distinto que complemente mi visión del proyecto.
Sin embargo, esto me ha obligado a tomar muchas decisiones, y a demostrarme a mí mismo que
era capaz de llevar adelante el proyecto. La satisfacción obtenida con ello es enorme.
Pienso KeepMyCar tiene potencial de hacerse un hueco en el mercado, aunque para ello hace
aún falta una inversión en tiempo y dinero para alcanzar todos los objetivos futuros, y conseguir
un sistema realmente competitivo.
“Siempre lo intentaste. Siempre fallaste. No importa. Inténtalo otra vez. Falla de nuevo. Falla
mejor”
Samuel Beckett
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
49
9. Agradecimientos
Al tutor de este proyecto, Federico Barrero, por darme la oportunidad de desarrollar su idea
original y por su atención a lo largo del proyecto.
A mi familia, por haberme ayudado y aconsejado siempre.
I would also like to thank the people who made my year in Ireland the best experience of my life:
Anbu and Harsh, my two Indian buddies, I will never forget the times you helped me out in the
lab, nor the experiences we shared together. Giac, Dani and Vale, you were always there when I
needed it. Michka and Tiff, you are my family from Cork.
Por último, agradecer a los doce mejores amigos de Cádiz, en especial a mis compañeros de piso
y carrera Luisca y Luisfe, por haberme acompañado todos estos años.
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
50
10. Bibliografía complementaria
1 Tony Bradley. Android dominates market share, but apple makes all the money.
Consulta web:
http://www.forbes.com/sites/tonybradley/2013/11/15/android-dominates-market-share-but-
apple-makes-all-the-money/
2 IDC. Smartphone maket share, Q1 2015. Consulta web:
http://www.idc.com/prodserv/smartphone-os-market-share.jsp
3 En el campo de batalla: C y Java. Consulta web:
https://deltalinuxer.wordpress.com/2007/07/10/en-el-campo-de-batalla-c-y-java/
4 Apache vs NGINX (Performance comparison) Consulta web:
http://www.theorganicagency.com/apache-vs-nginx-performance-comparison/
5 Qué es MariaDB y qué ventajas tiene sobre MySQL. Consulta web:
http://www.vozidea.com/que-es-mariadb-y-ventajas-frente-mysql
6 ¿Cuántos talleres de cada tipo existen en España y cómo son?. Consulta web:
http://www.autofacil.es/talleres/2014/01/09/talleres-tipo-existen-espana-son/17140.html
7 Customer Relationship Management. Consulta web:
http://es.wikipedia.org/wiki/Customer_relationship_management
8 Encuesta sobre equipamiento y uso de las tecnologías de información y comunicación en los
hogares. Año 2014. Consulta web:
http://www.ine.es/prensa/np864.pdf
9 8 Ideas para modernizar tu taller mecánico. Consulta web:
http://imolko.com/2014/12/17/8-ideas-para-modernizar-tu-taller-mecanico/
10 MYSQL and Java JDBC tutorial. Consulta web:
http://www.vogella.com/tutorials/MySQLJava/article.html
11 Java-PHP-MYSQL. Crear una conexión con la base de datos en php. Consulta web:
https://geekytheory.com/java-php-mysql-iii-crear-una-conexion-con-la-base-de-datos-en-
php/
12 Tutorial PHP/Android/SQL de mybringback Consulta web:
http://www.mybringback.com/
13 Tutoriales Android de DrBFraser. Consulta web:
https://www.youtube.com/channel/UCMnSzocL2Z5hhOJglLQF9oA
14 Consultas variadas (uso muy frecuente). Consulta web:
http://stackoverflow.com/
15 Alyssa Gregory. 7 Free appointment schedulers. Consulta web:
Proyecto Final de Carrera INGENIERÍA DE TELECOMUNICACIONES
Memoria
51
http://www.sitepoint.com/free-appointment-schedulers/
16 Tutoriales oficiales de Android. Consulta web:
http://developer.android.com/
17 Soluciones Java/SQL. Consulta web:
http://www.java2s.com/