Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
A mi marido
por su comprensin,
por su paciencia y
por estar siempre conmigo.
A mi hijo
por su alegra que cada
da comparte conmigo.
A mi tutor
por darme la oportunidad
de terminar.
Este documento ha sido liberado bajo Licencia GFDL 1.3 (GNU Free Documentation
License). Se incluyen los trminos de la licencia en ingls al final del mismo.
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.3 or any later version published by
the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no
Back-Cover Texts.
vi
ndice general
I Prolegmeno 1
1. Introduccin 5
1.1. Motivacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2. Planificacin 13
2.2. Metodologa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.1. Participantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
vii
viii NDICE GENERAL
2.4.2.1. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.2.2. Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.5. Costes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
II Desarrollo 39
3. Anlisis de requisitos 43
3.6.1. Lenguajes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.6.1.1. Anlisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
9. Conclusiones 231
10.Anexos 245
A. Acrnimos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
B. Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
C. Gemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
G. Rails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Bibliografa 281
xv
xvi LISTADO DE TABLAS
xvii
xviii NDICE DE FIGURAS
5.7. Correo enviado por Authorized.net con la aprobacin del cobro . . . . . . . 167
7.9. Captura de la pantalla que muestra los datos de una obra . . . . . . . . . . 204
xxv
xxvi LISTADO DE CDIGOS
Prolegmeno
1
3
Introduccin
1.1. Motivacin
Con la tienda online se pretende conseguir abrir un nuevo mercado en Internet, para
vender las obras de arte de la Galera o del Artista a travs de la red, con la oportunidad
de captar nuevos clientes y con el posible incremento de ventas que esto podra aportar.
5
6 CAPTULO 1. INTRODUCCIN
A estos, se les dar la posibilidad de poder visitar y consultar un catlogo de obras on-
line actualizado continuamente y la oportunidad de poder realizar los pedidos de manera
ms cmoda, rpida y segura.
Para cumplir con ellos, hay que salvar una serie de objetivos o subtareas que componen
el primer objetivo principal. stos se listan a continuacin:
1. Un Front Office, con el que interactuarn los clientes, formado por una Tienda On-
line. Donde podrn acceder al catlogo de las Obras de Arte y realizar sus compras.
A continuacin describo los contenidos del presente documento, as como del software
entregado en soporte informtico.
El documento esta dividido en tres partes y cada una de ella en diferentes captulos,
los cuales describo a continuacin:
I Prolegmeno
II Desarrollo
III Eplogo
estadisticas_svn: Incluye las estadsticas de las diferentes carpetas del sistema soft-
ware a travs de la aplicacin StatsSVN (carpeta estadisticas_sist_software) y el
anlisis de estadsticas de cdigo incluido dentro de Ruby on Rails (carpeta estadis-
ticas_codigo).
usabilidad: Incluye los resultados del test de usuabilidad realizado a los usuarios.
Captulo 2
Planificacin
En este captulo se describen todos los aspectos relativos a la planificacin del proyecto:
modelo de negocio, metodologa que voy a emplear, organizacin, planificacin temporal,
costes del desarrollo del proyecto y gestin de riesgos.
2.2. Metodologa
Seguir una Metodologa gil [Marcelo Hernn, Schenone] (ver anexo E), ya que lo
que necesito es poder gestionar mi proyecto de una forma gil, debido a que hoy en da lo
que se necesita es poder incorporar cambios con rapidez y en cualquier fase del proyecto.
13
14 CAPTULO 2. PLANIFICACIN
Concretamente, seguir el mtodo Scrum (ver anexo E), el cual es iterativo e incre-
mental, en el que divido el desarrollo de mi aplicacin en ciclos llamados sprints y, en
cada uno de ellos, trabajo sobre una lista de requisitos priorizada y al final de dicho ciclo,
obtengo como resultado un producto terminado y entregable.
planificacin,
anlisis de requerimientos,
diseo,
codificacin,
revisin y
documentacin.
En este apartado voy a establecer el orden de las tareas y realizar una estimacin del
tiempo que creo necesario para la realizacin de mi proyecto. Tambin mostrar un anlisis
de la desviacin temporal, comparando los tiempos estimados con los que finalmente he
empleado.
2.3. PLANIFICACIN DEL PROYECTO 15
Finalmente, este objetivo se ha ampliado, desarrollando una aplicacin que puede ser
adaptada a distintos requisitos, permitindonos obtener una Tienda Virtual para una
Galera de Arte o para un Artista.
Planificacin. Para cada uno de los Sprint efectuar una planificacin espe-
cfica. Esta la dividir en dos pasos:
Seleccionar los requisitos a travs de entrevistas con el cliente1 .
Planificar el Sprint elaborando una lista con las tareas que tenga que
ejecutar para poder desarrollar los requisitos anteriormente marcados y
asignndole, a cada una de las tareas, los tiempos de desarrollo con un
margen de error para no verme demasiado comprometida.
Anlisis y diseo. Estas actividades las ir realizando de forma paralela a
la segunda y tercera de las fases anteriores, ya que conforme vaya analizando
las necesidades del proyecto tendr que recurrir a la documentacin recopilada
para analizar su viabilidad, y para saber cmo poder llevarlas a cabo.
Implementacin. En esta fase se realizar tambin una serie de pruebas para
ir comprobando que lo que se vaya a implementar funcionaba correctamente.
A la vez que las pruebas vayan funcionando, implementar el cdigo de la
aplicacin. Durante esta actividad sera necesario volver a las fases anteriores:
para consultar cmo hacer las cosas o bien para dar solucin a los problemas
con los que me vaya encontrando.
Revisin. Durante las actividades anteriores y una vez terminadas stas, rea-
lizar revisiones del trabajo desarrollado con el fin de comprobar que se vayan
cumplido los objetivos y los requisitos marcados.
Integracin en la Web. El despliegue de la aplicacin en la web lo realizar
en la plataforma Heroku. ste ser continuo, ya que cada vez que vaya ter-
minando un Sprint subir al servidor el desarrollo realizado de la aplicacin,
comprobando tambin de esta manera su funcionamiento y pudiendo as el
tutor o el cliente tener acceso a ella de forma rpida y sencilla en cualquier
momento para su revisin.
El despliegue de la Galera de Arte se puede visualizar en la siguiente direccin:
http://gadeirart.heroku.com/.
Documentacin. Durante todo el proceso del proyecto y al final de cada
Sprint ir completando la documentacin.
1
Cliente: Galerista o Artista
2.3. PLANIFICACIN DEL PROYECTO 17
Das a la semana: 5
Horas que puedo invertir por da: 4h.
Planificacin general.
Elaboracin de la propuesta de proyecto.
Bibliografa
Adquisicin de conocimientos . . .
Instalacin de programas.
Creacin de las BBDD.
Creacin de la estructura de la aplicacin.
CSS . . .
Sprint 3 - Colecciones.
Sprint 4 - Obras.
Sprint 5 - Secciones.
Sprint 6 - Tcnicas.
Sprint 7 - Catlogo.
Sprint 10 - Etiquetado.
Sprint 11 - Seguridad.
Sprint 12 - Facturacin.
2
Sprints: Hitos.
2.3. PLANIFICACIN DEL PROYECTO 19
Sprint 13 - Internacionalizacin.
Sprint 14 - Inicio.
Sprint 15 - Contactar.
Sprint 17 - Condiciones.
En la figura 2.3, para que quede un poco ms claro, podemos observar la relacin de
actividades del proyecto en general.
Y en la figura 2.4 les muestro, en detalle, la relacin de actividades del diagrama para
la actividad Desarrollo de la aplicacin que es la que ms tiempo me va a llevar.
Seguidamente se muestra el Diagrama de Gantt del proyecto, el cual, para que quede
un poco ms claro, lo he dividido en tres grficos.
Podemos observar en el grfico, en color azul, las tareas que pueden realizarse o des-
plazarse a lo largo del proyecto sin que ello suponga un retraso en la realizacin del mismo,
y en color rojo las tareas crticas, las cuales deben realizarse en el orden y la posicin
indicadas.
A continuacin muestro una comparacin de los tiempos estimados con los finalmente
empleados.
2.4.1. Participantes
En la figura 2.7 se muestra la jerarqua del equipo, as como la relacin existente entre
ellos.
Cliente. Aporta informacin sobre las necesidades planteadas y valida los resultados
con el fin de garantizar la identificacin, comprensin e incorporacin de todos los
requisitos con las prioridades adecuadas.
Para el proyecto el cliente es un artista-galerista.
Cada uno de los roles que voy a describir a continuacin sern desempeados por mi
persona en el desarrollo del proyecto.
Analista
Administrador de Bases de Datos. Participa en la obtencin del diseo
fsico de datos, definiendo la estructura fsica de datos que utilizar el sistema a
partir del modelo lgico de datos normalizado o del modelo de clases, teniendo
presentes las caractersticas especficas del sistema de gestin de base de datos
concreto a utilizar, los requisitos establecidos para el sistema de informacin,
y las particularidades del entorno tecnolgico, se consiga una mayor eficiencia
en el tratamiento de los datos.
Si se va a realizar una migracin de datos colabora con el equipo de proyecto
estimando los volmenes de las estructuras de datos implicadas, definiendo los
mecanismos de migracin y carga inicial de datos y participando activamente
en su realizacin.
Una vez que el sistema est en produccin se ocupa de la gestin y operativa
asociada a las bases de datos y al software en el que estn implementadas.
Perfil Programador. La funcin del programador es construir el cdigo que dar lugar
al producto resultante en base al diseo tcnico realizado por el analista o analista
programador, generando tambin el cdigo asociado a los procedimientos de migra-
cin y carga inicial de datos. Igualmente se encarga de la realizacin de las pruebas
unitarias y participa en las pruebas de conjunto de la aplicacin.
2.4.2.1. Hardware
El hardware del equipo informtico utilizado para la realizacin del proyecto presenta
las siguientes caractersticas:
Ordenador porttil Aspire 5740G, Intel Core i3 processor 330M, 4GB RAM, 320
GB HDD.
2.4.2.2. Software
Base de datos: MySql Server Versin 5.1.54 - 1ubuntu4 (ver seccin 5.1.2).
2.5. Costes
En esta seccin voy a elaborar una estimacin de los costes del proyecto.
Para ello evaluar cada uno de los recursos implicados en el desarrollo: recursos huma-
nos, herramientas, costes indirectos propios de las empresas que trabajan en este sector
(conexin a internet, material de oficina, recambios de impresora. . . ) y los costes del
equipo informtico (ordenador e impresora), ya que aunque las empresas dedicadas al
desarrollo de software cuentan con el equipo informtico necesario, hay que tenerlos en
28 CAPTULO 2. PLANIFICACIN
cuenta porque puede surgir cualquier imprevisto, durante el desarrollo del proyecto, que
implique el tener que realizar una nueva adquisicin.
Para obtener una estimacin de los costes de personal he consultado diferentes web
dedicadas a ofertas de trabajo (infojobs, tecnoempleo. . . ) y he obtenido que la media
salarial ronda los 25.000e/brutos/ao, a lo que hay que aadir el coste de la Seguridad
Social que se considera un tercio de la base de cotizacin. Desglosando se obtiene:
Para los costes del equipo informtico he tenido en cuenta el tiempo en el que se
amortiza. Un equipo suele tener una vida de 3 aos, por lo que si su coste es de 1.500e
se amortizarn anualmente 500e.
Los costes indirectos van a suponer un 10 % del coste del personal y los costes de las
herramientas necesarias para el proyecto, no los tengo en cuenta ya que la mayora son
software libre o la empresa ya cuenta con ellos.
Lo primero que voy a hacer es identificar cada uno de los posibles riesgos que pueden
afectar al proyecto.
Riesgos en la planificacin. Que puede conllevar el fracaso del proyecto. Esto es,
que no se cumplan los objetivos con las estimaciones de tiempo y recursos.
Causas:
Los espacios estn disponibles pero no son adecuados (por ejemplo, cableado
de red).
30 CAPTULO 2. PLANIFICACIN
Riesgos en el personal.
Una vez identificados los riesgos en el apartado 2.6.1.1, el siguiente paso es analizar
cada uno de ellos para determinar su impacto.
32 CAPTULO 2. PLANIFICACIN
En las siguientes tablas se recogen los parmetros mencionados para cada riesgo:
Magnitud de la Exposicin al
Riesgo Probabilidad
prdida riesgo
Planificacin muy optimista 50 % 5 semanas 2,5 semanas
Planificacin no incluye tareas ne- 25 % 4 semanas 1 semana
cesarias
Decisiones impuestas por cliente 25 % 3 semanas 0,75 semana
Infraestimacin tiempos desarro- 50 % 4 semanas 2 semanas
llo tareas
Retrasos en cascada 10 % 6 semanas 0,6 semana
Magnitud de la Exposicin al
Riesgo Probabilidad
prdida riesgo
Planificacin mala 10 % 5 semanas 0,5 semana
Abandono plan proyecto 10 % 5 semanas 0,5 semana
Magnitud de la Exposicin al
Riesgo Probabilidad
prdida riesgo
Espacios no adecuados 5% 5 semanas 0,25 semana
Herramientas no disponibles o 50 % 5 semanas 2,5 semanas
funcionamiento/prestaciones in-
deseadas
Curva de aprendizaje ms larga 10 % 6 semanas 0,6 semana
Magnitud de la Exposicin al
Riesgo Probabilidad
prdida riesgo
No correcta definicin de requisi- 50 % 5 semanas 2,5 semanas
tos
Se aaden requisitos extra 50 % 15 semanas 7,5 semanas
Partes del proyecto no especifica- 45 % 10 semanas 4,5 semanas
das claramente
Magnitud de la Exposicin al
Riesgo Probabilidad
prdida riesgo
Falta seguimiento del progreso 20 % 10 semanas 2 semanas
Repeticin de tareas 10 % 10 semanas 1 semana
Exceso de rigor 30 % 10 semanas 3 semanas
Incapacidad de deteccin riesgos 40 % 7 semanas 2,8 semanas
ms importantes
La gestin de los riesgos necesita 40 % 4 semanas 1,6 semanas
ms tiempo del esperado
Magnitud de la Exposicin al
Riesgo Probabilidad
prdida riesgo
Problemas con el equipo de desa- 20 % 5 semanas 1 semana
rrollo
Lento ciclo de revisin/decisin 30 % 3 semanas 0,9 semana
del cliente
No participacin del cliente en la 10 % 4 semanas 0,4 semana
revisin
El cliente insiste en tomar decisio- 30 % 5 semanas 1,5 semanas
nes tcnicas que alargan la plani-
ficacin
El cliente intenta controlar el rit- 5% 5 semanas 0,25 semana
mo de desarrollo y produccin
El cliente insiste en nuevos requi- 25 % 5 semanas 1,25 semanas
sitos
Tiempo de comunicacin del 5% 4 semanas 0,20 semana
cliente lento
Al cliente no le gusta el producto 5% 5 semanas 0,25 semana
No se ha solicitado informacin al 15 % 6 semanas 0,9 semana
cliente
Magnitud de la Exposicin al
Riesgo Probabilidad
prdida riesgo
Problemas con los clientes 20 % 5 semanas 1 semana
Las tareas preliminares no se aca- 30 % 5 semanas 1,5 semanas
ban a tiempo
Falta de especializacin 40 % 4 semanas 1,6 semanas
El personal necesita tiempo extra 50 % 4 semanas 2 semanas
de aprendizaje
Falta de motivacin 20 % 5 semanas 1 semana
Magnitud de la Exposicin al
Riesgo Probabilidad
prdida riesgo
Utilizar lo ltimo en informtica 5% 5 semanas 0,25 semana
Desarrollo funciones errneas 25 % 10 semanas 2,5 semanas
Desarrollo interfaz inadecuada 10 % 5 semanas 0,5 semana
Desarrollo funciones innecesarias 15 % 10 semanas 1,5 semanas
Trabajo en entorno desconocido 10 % 5 semanas 0,5 semana
Magnitud de la Exposicin al
Riesgo Probabilidad
prdida riesgo
Pasar directamente a implemen- 15 % 10 semanas 1,5 semanas
tar
Diseo por cumplir 20 % 8 semanas 1,6 semanas
Diseo simple y preliminar 15 % 10 semanas 1,5 semanas
Diseo demasiado detallado y con 30 % 3 semanas 0,9 semana
complicaciones innecesarias
Imposibilidad implementar fun- 40 % 4 semanas 1,6 semanas
cionalidad
No es posible integrar los compo- 40 % 5 semanas 2 semanas
nentes desarrollados
Magnitud de la Exposicin al
Riesgo Probabilidad
prdida riesgo
Planificacin muy optimista 50 % 5 semanas 2,5 semanas
Herramientas no disponi- 50 % 5 semanas 2,5 semanas
bles o funcionamiento/pres-
taciones indeseadas
No correcta definicin de re- 50 % 5 semanas 2,5 semanas
quisitos
El personal necesita tiempo 50 % 4 semanas 2 semanas
extra de aprendizaje
Falta seguimiento del pro- 20 % 10 semanas 2 semanas
greso
No es posible integrar los 40 % 5 semanas 2 semanas
componentes desarrollados
Imposibilidad implementar 40 % 4 semanas 1,6 semanas
funcionalidad
Diseo simple y preliminar 15 % 10 semanas 1,5 semanas
En la seccin 2.6.1.3 se defini un listado de los principales riesgos que se deben con-
trolar. La presente seccin tiene dos objetivos principales, por un lado describir aquellas
medidas que minimizarn la probabilidad de aparicin de estos riesgos y por otro, describir
aquellas acciones a llevar a cabo en el caso de que se produzca alguno de ellos.
situacin. Una vez hecho esto, lo siguiente ser redefinir los requisitos y verificarlos
con el cliente, asegurando en la medida de lo posible que stos son correctos.
Desarrollo
39
41
Anlisis de requisitos
Dentro del sistema he identificado los diferentes perfiles de usuarios (Figura 3.1) que
van a trabajar y utilizar la aplicacin:
El visitante es el usuario que navega de forma annima por la web, tendr solo
acceso a visitar las obras contenidas en el catlogo sin poder realizar compras.
43
44 CAPTULO 3. ANLISIS DE REQUISITOS
Voy a describir la funcionalidad que ofrece el sistema mediante diagramas que per-
miten comprender un poco ms el funcionamiento del mismo. La realizacin de un buen
anlisis previo, aadir simplicidad durante el desarrollo y mejorar el rendimiento de la
aplicacin.
A continuacin, para identificar los requisitos funcionales, defino las Historias de Usua-
rio1 que contiene cada uno de los Sprints de mi aplicacin:
1
Las Historias de Usuario se utilizan en la Metodologa gil para especificar los requisitos del sistema.
3.2. REQUISITOS FUNCIONALES 45
Aadir coleccin. El administrador debe ser capaz de dar de alta una nueva
coleccin a travs de un formulario, en el que rellenar todos los datos.
Editar coleccin. El administrador deber poder modificar los datos de la
coleccin a travs de un formulario.
Eliminar coleccin. El administrador podr eliminar una coleccin en cual-
quier momento de forma sencilla.
Listar colecciones. En la interfaz del administrador deber haber una pgina
web que tambin funcionar como una lista de todas las colecciones que posee
la Galera.
Ver coleccin. Cada coleccin deber tener una pgina que muestre toda su
informacin.
Aadir seccin. El administrador debe ser capaz de dar de alta una nueva
seccin a travs de un formulario, en el que rellenar todos los datos.
Editar seccin. El administrador deber poder modificar los datos de las
seccin a travs de un formulario.
Eliminar seccin. El administrador podr eliminar una seccin en cualquier
momento de forma sencilla.
Listar secciones. En la interfaz del administrador deber haber una pgina
web que tambin funcionar como una lista de todas las secciones.
Ver seccin. Cada seccin deber tener una pgina que muestre toda su
informacin.
Sprint 6 - Tcnicas. Cada una de las Secciones posee una serie de Tcnicas con las
que se realizan las Obras de Arte. Estas debern contener la siguiente informacin
traducida: nombre.
Aadir tcnica. El administrador debe ser capaz de dar de alta una nueva
tcnica a travs de un formulario, en el que rellenar todos los datos.
Editar tcnica. El administrador deber poder modificar los datos de la
tcnica a travs de un formulario.
Eliminar tcnica. El administrador podr eliminar una tcnica en cualquier
momento de forma sencilla.
Listar tcnicas. En la interfaz del administrador deber haber una pgina
web que tambin funcionar como una lista de todas las tcnicas.
Ver tcnica. Cada tcnica deber tener una pgina que muestre toda su
informacin.
Aadir a la cesta. El cliente deber poder aadir la obra de arte que desee
comprar en su cesta de la compra de forma fcil.
Sacar de la cesta. El cliente si se equivoca deber tener la posibilidad de
eliminar la obra de arte de su cesta de forma sencilla.
Vaciar la cesta. El cliente podr vaciar su cesta de la compra en cualquier
momento.
Poder tener las obras de arte clasificadas por categora de forma que el admi-
nistrador pueda acceder a dicha clasificacin.
Recomendar obras relacionadas cuando los usuarios estn navegando por la
ficha tcnica de una obra.
Iniciar sesin: La pgina de la Galera tendr una opcin para Iniciar Sesin,
la cual redirigir a una pgina de Inicio de Sesin donde el usuario deber
introducir su login y su clave para poder tener acceso. Una vez introducidos
los datos correctos se redirigir al catlogo donde podr ya navegar por la web
de la Galera. En caso de que los datos sean errneos se le mostrar un mensaje
de error.
Perdida de clave: Dentro de la pgina de Inicio de Sesin deber aparecer
una opcin para obtener una nueva contrasea en caso de prdida u olvido.
Haciendo clic sobre ella se le redirigir a una nueva pgina donde el usuario
indicar su correo electrnico y el sistema, automticamente, deber enviarle
un email con las instrucciones para restablecer su contrasea.
Registrarse: La pgina de la Galera tambin contar con una opcin para que
los usuarios puedan registrarse. Esta redirigir a una pgina donde el cliente
deber rellenar un formulario para poder darse de alta. Una vez rellenado y
validado, el sistema deber enviar un email de notificacin de registro al cliente
y a partir de ese momento ya podr utilizar la opcin Iniciar Sesin sin ningn
problema.
Cerrar sesin: La web tambin contar con esta opcin para que los clientes
puedan cerrar su sesin una vez finalicen.
Mi cuenta: El cliente registrado deber poder acceder a su informacin y
poder modificarla si fuera necesario.
Listar usuarios: El administrador podr ver un listado de los usuarios regis-
trados.
Facturar: Una vez que el cliente haya aadido a su cesta las obras de arte que
desea comprar, deber poder proceder a la facturacin.
Se le redirigir a una pgina donde deber introducir su informacin de contac-
to, la informacin para la facturacin y la informacin de su tarjeta de crdito
en caso de que desee pagar por este mtodo. Una vez rellenado el formulario
y antes de realizar el pedido, se le deber mostrar al usuario la informacin
3.2. REQUISITOS FUNCIONALES 49
Sprint 14 - Inicio. La Galera desea tener una pgina de inicio donde se muestren
las nuevas obras adquiridas.
Sprint 15 - Contactar. La Galera desea tener una pgina desde la que el usuario
pueda obtener la informacin de contacto y la localizacin de la Galera.
Editar usuario. El administrador deber ser capaz de editar los datos del
usuario a travs de un formulario.
Eliminar usuario. El administrador debe ser capaz de eliminar una usuario
de la galera.
50 CAPTULO 3. ANLISIS DE REQUISITOS
Sprint 17 - Quienes somos. Mediante este pgina el usuario deber poder acceder
a la descripcin de la actividad de la galera.
En la Figura 4.26 podemos ver el Diagrama del Sistema donde se definen cada
uno de los subsistemas (Sprint) que lo componen:
En Ingeniera del Software, un Caso de Uso es una tcnica para la captura de requisitos
potenciales de un nuevo sistema. Cada uno proporciona uno o ms escenarios que indican
cmo debera interactuar el sistema con el usuario o con otro sistema para conseguir un
objetivo especfico.
A continuacin se muestra el modelo inicial de Casos de Uso del sistema para cada
uno de los Sprint, utilizando para ello notacin UML.
3
Interaccin con algn agente externo: Desde una peticin de un actor o bien desde la invocacin
desde otro caso de uso.
52 CAPTULO 3. ANLISIS DE REQUISITOS
En esta seccin se describen los diferentes Casos de Uso del sistema para cada uno de
los Sprint.
Gestin de Artistas
Gestin de Catlogo
Gestin de Etiquetas
Gestin de Seguridad
Gestin de Facturacin
Gestin de Internacionalizacin
stos especifican la informacin que debe almacenar el sistema para cumplir con los
objetivos.
Comenzar describiendo cada uno de los objetos que van a formar parte de l y
finalizar representado este modelo mediante el Diagrama E/R.
78 CAPTULO 3. ANLISIS DE REQUISITOS
Tipos de entidades
Las entidades representan cada uno de los elementos contenidos en el modelo concep-
tual de datos.
Entidad Descripcin
admin_artista Artistas de la Galera.
admin_coleccions Colecciones de las obras.
admin_obras Obras de arte.
admin_seccions Secciones en que se dividen las obras de arte.
admin_tecnicas Tcnicas empleadas para realizar las obras.
carritos Cesta de la compra.
carrito_items Cada una de las obras insertadas en la cesta de la compra.
tags Etiquetas para clasificar las obras.
users Usuarios de la aplicacin.
user_sessions Sesiones de usuarios.
pedidos Pedidos realizados por los usuarios.
pedido_items Cada una de las obras que forman el pedido.
admin_nosotros Informacin sobre la actividad de la Galera.
admin_condiciones Condiciones generales.
Tipos de relaciones
La tabla 3.2 recoge las relaciones establecidas entre las distintas entidades del modelo
conceptual de datos.
Diagrama Entidad/Relacin
81
82 CAPTULO 3. ANLISIS DE REQUISITOS
A continuacin se van analizar cada uno de los requisitos relativos a las entradas y
salidas del software.
Los usuarios debern disponer de un ordenador que posea una tarjeta de red o una
tarjeta de red inalmbrica y un punto de acceso que les permita una conexin a Internet
para poder acceder a la aplicacin.
Los usuarios necesitarn la utilizacin de un navegador web para que la aplicacin pue-
da ser visualizada, no siendo necesario el uso de uno especfico debido a que la aplicacin
estar adaptada para poder ser visualizada en la mayora de los navegadores disponibles.
Los datos de la aplicacin solo podrn ser modificados por aquellas personas autori-
zadas para ello.
Las respuestas a las peticiones de los usuarios externos se deber generar en un tiempo
razonable.
El diseo de la aplicacin debe estar orientado hacia la facilidad de uso y a una rpida
localizacin de las opciones, para que pueda ser accesible a cualquier usuario.
Ser necesaria la utilizacin de una base de datos para poder almacenar toda la in-
formacin necesaria para el correcto funcionamiento de la aplicacin. He optado por
almacenar la misma en MySql.
Integridad. Para salvaguardar la integridad de los datos, he optado por almacenar los
mismos en una base de datos subyacente en un SGBD. Estos sistemas ofrecen meca-
nismos y herramientas de control de la integridad sin necesidad de una supervisin
por parte del usuario.
84 CAPTULO 3. ANLISIS DE REQUISITOS
Como ya mencion en la seccin 3.1, los perfiles de usuario de la aplicacin sern tres:
administrador, usuario registrado (cliente) y usuario visitante.
3.6.1. Lenguajes
Para comenzar descartar todos los lenguajes que su desarrollo requieran el pago de
cualquier licencia.
3.6. ESTUDIO DE ALTERNATIVAS TECNOLGICAS 85
la eficiencia,
la facilidad de escribir,
la alta calidad y
3.6.1.1. Anlisis
Google Code y Freshmeat son servicios web donde se almacenan todo tipo de proyectos
Open Source. Sus anlisis podemos observarlos en las Figuras 3.64 y 3.65.
Ohloh es un directorio pblico de Open Source y personas que lo desarrollan y/o usan.
Se centra en un anlisis de los proyectos que tiene enlazado.
Gracias a los datos que obtiene de los repositorios oficiales de los proyectos puede
realizar diferentes informes sobre el uso del lenguaje de programacin, el sistema de
control de versiones o incluso comparar varios proyectos. Podemos ver su anlisis en la
Figura 3.66.
86 CAPTULO 3. ANLISIS DE REQUISITOS
La eleccin del lenguaje vendr determinada por las preferencias del programador
y, aunque estas estadsticas no son significativas de las necesidades en la industria del
software, si nos indican las preferencias de los programadores en el uso de un lenguaje.
Delicious
Craigslist, Indeed
el lenguaje ms demandado en el mercado en los ltimos aos. Esto, junto con los datos
obtenidos anteriormente del estudio, nos indican que Java es el lenguaje de desarrollo por
el que se decanta la comunidad de programadores.
Yahoo Search
Conclusin
Java tiene un manejo muy bueno de conexiones a base de datos, la portabilidad entre
sistemas operativos es muy buena ya que ejecuta el cdigo Java en su propia maquina
virtual, no hacindola dependiente de libreras propias de un sistema operativo y tiene
una serie de frameworks de desarrollo de aplicaciones Web que hacen que este lenguaje
sea altamente productivo a la hora de desarrollar aplicaciones Web.
Siempre existen diferentes variables que nos influyen a la hora de tomar una decisin
y que se deben sopesar para encontrar un equilibrio entre lo que la tecnologa nos ofrece y
lo que necesitamos nosotros de ella. Pero las variables ms importantes a tener en cuenta
sern el propsito de la aplicacin web y sus dimensiones.
populares, C/C++ (orientado a objetos), y que tengo algunas nociones sobre Java de un
curso que realic hace ya algunos aos, me he decidido por aprender un nuevo lenguaje
Ruby (ver anexo D), ya que parece ser bastante interesante y presenta una nueva forma
de programar diferente a las estudiadas durante la carrera.
Estos pueden ser una herramienta muy til, cuando tenemos mucho trabajo, para
ahorrarnos tiempo y ayudarnos a ser ms eficientes en nuestro da a da, aunque por
supuesto, podemos decidir desarrollar todo el cdigo.
Facilita la colaboracin. Cualquiera que haya tenido que pelearse con el cdigo
fuente de otro programador o incluso, con el suyo mismo pasado algn tiempo,
sabr lo difcil que es entenderlo y modificarlo; por tanto, todo lo que sea definir y
estandarizar va a ahorrar tiempo y trabajo a los desarrollos colaborativos.
Tal y como ya mencion anteriormente en la Seccin 3.6.1.2 Ruby como lenguaje para
mi proyecto de la pgina 91, uno de los objetivos del presente proyecto es el adquirir y
reforzar nuevos conocimientos acerca de la programacin de aplicaciones Web. Es por lo
debo tener en cuenta en la eleccin que, aparte de que facilite las tareas repetitivas, me
ayude a programar siguiendo las buenas prcticas de programacin.
En la seccin 3.7 Anlisis GAP tratar sobre las caractersticas mostradas en la tabla
anterior.
Oscommerce
Este gestor de tiendas apareci en Marzo del ao 2000 y posiblemente haya sido el
mejor gestor para tiendas online, ahora bien, a da de hoy, se ha quedado atrs y ms
viendo lo fuerte que vienen sus competidores. Hay que destacar su estabilidad y potencia,
en cambio tiene en contra su diseo con tablas, que en los aos en los que nos encontramos
no podemos permitir seguir usando maquetacin sin CSS.
Actualmente est la versin 3 que apareci corrigiendo grandes problemas que tena
con los logins, dispone de un cdigo obsoleto que puede traer de cabeza a ms de uno
debido al gran nmero de agujeros que presenta. . . , tambin separaron lo que es cdigo
del diseo, pero an con estas mejoras sigue existiendo una huida masiva de este sistema
hacia otras plataformas como son Prestashop y Magento.
Dado que Oscommerce est desactualizado y descontinuado, no creo que sea una buena
opcin para desarrollar mi proyecto.
96 CAPTULO 3. ANLISIS DE REQUISITOS
A destacar:
En contra:
Apenas usa CSS por lo que todos los cambios de bloques hay que realizarlos ma-
nualmente.
Proyecto estancado.
No son accesibles (mapas del sitio, url amigables, meta-tags, ttulos dinmicos,etc. . . )
por parte de los buscadores si no implantamos un gran nmero de mdulos.
Con el cierre del foro en espaol de Oscomerce, desaparece la mayor ayuda que
exista de este software en Espaol.
Prestashop
Este es uno de los gestores ms nuevos, muy buena indexacin, Ajax totalmente
integrado, lo que le da un aspecto muy actual, y por supuesto funciona con CSS. Resulta
muy fcil cambiarle el aspecto y personalizarlo.
Es una aplicacin modular por lo que nos permitir ir aadiendo funcionalidades sin
apenas tener que modificar el core de la aplicacin.
Sin lugar a dudas en estos momentos parece ser el rey del comercio electrnico, empez
despacio pero disponer de una tienda realizada en Prestashop [Global] es garantizarse un
buen desarrollo.
A destacar:
Es muy rpido.
Prestashop 1.5 dispondr de versin para mviles tanto para Iphone como Android.
98 CAPTULO 3. ANLISIS DE REQUISITOS
En contra:
Magento
Naci en el ao 2007 siendo un proyecto relativamente joven, pero pese a este factor
se ha ganado el respeto de muchos programadores, siendo hoy en da uno de los sistemas
ms utilizados.
Una de las cosas que no gusta de este gestor es su instalacin, demasiados problemas
para instalar el script, igual de complicado es su panel de control, si se tiene experiencia
en pginas web, se consigue hacerse a l, pero si el cliente, que al final va a ser la persona
que va a trabajar da a da en ella, no tienes conocimientos informticos puede tener
bastantes problemas para poder gestionarla.
Tienen una versin gratuita que cada vez van limitando ms y ms, frente a la
versin de pago que ronda los 10.000 euros al ao.
3.6. ESTUDIO DE ALTERNATIVAS TECNOLGICAS 99
Como podemos ver Magento [Global] es potente, es muy bueno, pero un desarrollo
con esta aplicacin es caro y se debe disponer de un servidor con suficientes recursos.
A destacar:
Permite multitiendas.
En contra:
En caso de tener una tienda con mucho trfico es posible necesitar dos hosting por
lo que el gasto se puede disparar.
Comparativa
Finalmente del sitio web Indeed.com he realizado un pequeo anlisis de las tendencias
de la demanda de programadores con conocimientos especficos en un framework.
El framework Ruby on Rails nos proporciona las siguientes caractersticas con las
que puedo solventar los requisitos definidos para el proyecto:
Scaffolding. Herramienta que nos permite crear un esqueleto funcional, que genera
una interfaz web que permite llevar a cabo las operaciones bsicas CRUD sobre una
tabla especificada de la BD.
La fase de diseo tiene como objetivo determinar cmo va ser construido el sistema a
partir de los requisitos y el modelo obtenidos durante la especificacin, aplicando patrones
de diseo.
Servidor Web: El navegador del cliente acceder al sistema a travs del servidor
Web (WEBrick), el cual acepta las peticiones del cliente y ejecuta, si es el caso, los
scripts del lado del servidor necesarios. El resultado, una pgina HTML formateada,
ser enviada al cliente.
103
104 CAPTULO 4. DISEO DEL SISTEMA
El haber seleccionado Rails para desarrollar mi aplicacin implica la eleccin del pa-
trn de diseo de software MVC (Modelo, Vista y Controlador) como base para mi
proyecto. Este es una gua para el diseo de la arquitectura de aplicaciones que ofrezcan
una fuerte interactividad con los usuarios.
Un modelo puede tener varias vistas, cada una con su correspondiente controlador.
Es el cdigo ms reutilizable y ms susceptible a cambios.
Vista (Interfaz de usuario) es la lgica de visualizacin, o cmo se muestran los
datos de las clases del Controlador. Con frecuencia en las aplicaciones web la vista
consiste en una cantidad mnima de cdigo incluido en HTML.
Existen muchas maneras de gestionar las vistas. El mtodo que se emplea en Rails,
por defecto, es usar Ruby Empotrado (archivos.html.erb), que son bsicamente
fragmentos de cdigo HTML con algo de cdigo en Ruby, siguiendo una sintaxis
similar a JSP. Tambin pueden construirse vistas en HTML y XML.
Es necesario escribir un pequeo fragmento de cdigo en HTML para cada mtodo
del controlador que necesita mostrar informacin al usuario.
Es la parte menos reutilizable y ms fcil de modificar sin que se vea afectado
nuestro ncleo.
Controlador (Lgica de negocio) une la vista con el modelo, contiene toda la lgica
de programacin. Almacena las funciones que toman los valores de un formulario,
delega consultas de base de datos al modelo y produce valores que invocarn a la
vista adecuada.
En el MVC, las clases del Controlador responden a la interaccin del usuario e
invocan a la lgica de la aplicacin, que a su vez manipula los datos de las clases
del Modelo y muestra los resultados usando las Vistas. En las aplicaciones web
basadas en MVC, los mtodos del controlador son invocados por el usuario usando
el navegador web.
La implementacin del Controlador es manejada por el ActionPack de Rails, que
contiene la clase ApplicationController. Una aplicacin Rails simplemente hereda
de esta clase y define las acciones necesarias como mtodos, que pueden ser invo-
cados desde la web, por lo general, en la forma http://aplicacion/ejemplo/metodo,
que invoca a EjemploController#mtodo, y presenta los datos usando el archivo de
plantilla \app\views\ejemplo\mtodo.html.erb, a no ser que el mtodo redirija
a algn otro lugar.
106 CAPTULO 4. DISEO DEL SISTEMA
El modelo encapsula una tabla de la base de datos1 , el controlador contiene una serie
de operaciones en los que se emplearn y modificarn los datos presentes en el modelo,
y por cada una de estas operaciones, existir una vista, desde la cual el usuario podr
configurar estas operaciones o recibir informacin sobre el estado de las mismas.
1
Por convencin, el nombre de la clase del modelo es el mismo de la tabla de la BBDD en singular.
4.2. DISEO DE LA INTERFAZ DE USUARIO 107
Sobre esta convencin se basa una de las prestaciones ms tiles que ofrece Rails,
conocida como Scaffold . Consiste en un pequeo script que, a partir de una especificacin
de una tabla de una base de datos, puede construir rpidamente la mayor parte de la
lgica y vistas necesarias para realizar las operaciones ms frecuentes. (Ver Seccin 5.2
Esqueleto para la aplicacin de la pgina 139).
El usuario recibe en todo momento una respuesta del programa en torno a operacio-
nes consideradas como invlidas, indicndole cmo llevarlas a cabo de manera correcta
mediante mensajes.
Al usar hojas de estilo CSS la apariencia de la aplicacin puede ser fcilmente modi-
ficada para adaptarla a nuevas tendencias de diseo de forma sencilla y eficiente.
Cada una de las pantallas que forman la aplicacin cuenta con una cabecera, diferente
para el administrador, y un pie de pgina comn.
4.2.1. Mockups
En cada uno de los sprints de la aplicacin he ido desarrollando una serie de mockups
que me han ayudado a la hora de disear la interfaz de usuario. stos se han ido mostrando
al cliente para su modificacin y aceptacin.
Visualizamos el mockup para la pantalla del gestor de contenidos Obras. sta tiene
aadido un apartado para realizar las bsquedas, de esta forma el administrador podr
obtener un listado de las obras (figura 4.10) y tambin adquirir el listado realizando una
bsqueda por cualquiera de los campos que se muestran.
La figura 4.13 ser utilizada para que el usuario pueda tener acceso, en caso de estar
registrado, a su cuenta de usuario o para que pueda registrarse en la web.
La pantalla de la figura 4.14 nos muestran la ficha tcnica de las obras, podemos ver
que el usuario tambin obtendr algunas recomendaciones relacionadas con la obra que
est visitando.
110 CAPTULO 4. DISEO DEL SISTEMA
Tambin he realizado los mockups de los diferentes emails que se le envan al usuario
y a la Galera. Un ejemplo de ellos lo tenemos representado en la figura 4.16, ste ser
recibido por el usuario cuando realice un pedido.
2
Usuario: Registrado o Visitante
3
Usuario registrado: Cliente o Administrador
114 CAPTULO 4. DISEO DEL SISTEMA
115
116
CAPTULO 4. DISEO DEL SISTEMA
Figura 4.18: Diagrama de navegacin para el administrador: Gestores de contenidos
4.2. DISEO DE LA INTERFAZ DE USUARIO
Figura 4.19: Diagrama de navegacin para el administrador: Gestores generales
117
118
CAPTULO 4. DISEO DEL SISTEMA
Figura 4.20: Diagrama de navegacin para el administrador: Gestores de clientes
4.2. DISEO DE LA INTERFAZ DE USUARIO
Figura 4.21: Diagrama de navegacin para los usuarios: Mens
119
120
CAPTULO 4. DISEO DEL SISTEMA
Figura 4.22: Diagrama de navegacin para los usuarios: Catlogo
4.2. DISEO DE LA INTERFAZ DE USUARIO
Figura 4.23: Diagrama de navegacin para el cliente: Cesta de la compra
121
122
CAPTULO 4. DISEO DEL SISTEMA
Figura 4.24: Diagrama de navegacin para el visitante: Cesta de la compra
4.3. DISEO DE DATOS 123
En esta seccin se define la estructura fsica de datos que utilizar el sistema, a partir
del modelo conceptual de clases mostrado en la seccin 3.3.
Para ello, he teniendo presente los requisitos establecidos para el sistema y las par-
ticularidades del entorno tecnolgico, de forma que se consiga un acceso eficiente de los
datos.
4.3.1. Esquema de la BD
Podemos ver en la Figura 4.25 representado el esquema de la base de datos del pro-
yecto.
Los nombres de las tablas se han elegido siguiendo las convenciones de RoR, donde
Active Record obliga a que las tablas de la base de datos tengan el mismo nombre que las
clases del modelo pluralizadas.
4
Estructura de la BD: tablas, campos de cada tabla y relaciones existentes.
124
CAPTULO 4. DISEO DEL SISTEMA
Figura 4.25: Esquema ERR de la Base de Datos
4.4. DISEO DE COMPONENTES 125
Debido a que estoy usando una metodologa gil, en esta seccin solo voy a mostrar, en
la figura 4.26, un diagrama de secuencia ilustrativo del funcionamiento de las peticiones
siguiendo el patrn MVC.
En esta seccin se indica el marco tecnolgico utilizado para la construccin del sis-
tema.
Para facilitarme el trabajo he elegido Ruby on Rails (ver seccin 3.6.2.1), debido a
que es un framework de cdigo abierto para Ruby que sirve para desarrollar aplicaciones
web y ayuda a programar siguiendo las buenas prcticas de programacin.
129
130 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
Lenguaje HTML
Voy a emplear este lenguaje en las Vistas como veremos ms adelante. En ellas este
ser el lenguaje principal. El cdigo en Ruby integrado en las vistas va a ser traducido a
HTML antes de ser interpretado por el navegador.
Los navegadores se encargan de mostrar a los usuarios las pginas web resultantes del
cdigo interpretado.
Lenguaje CSS
La idea principal del uso de CSS [W3C] es separar la estructura del documento de su
presentacin, con lo cual HTML define la estructura del documento y las hojas de estilo
su aspecto visual.
El servidor MySQL fue desarrollado para manejar grandes bases de datos mucho ms
rpido que las soluciones existentes y aunque se encuentra en desarrollo constante, ofrece
un conjunto rico y til de funciones. Su conectividad, velocidad, seguridad , y su
facilidad de uso hacen de MySQL un servidor bastante apropiado para acceder a bases
de datos en Internet.
Para alojar mi proyecto he utilizado uno de los sistema de control de versiones que
posee Assembla: Subversion(5.1.3), ya que de entre los que ofrece es el que mejor
saba manejar.
Su pgina web es: http://www.assembla.com/.
Balsamiq Mockups: Aplicacin AIR pensada para ayudarnos a crear de manera
fcil y rpida nuestros wireframes1 . Lo consigue a travs de un sistema de drag-and-
drop de componentes predefinidos.
Con este software he desarrollado los diferentes Mockups de la aplicacin.
Su pgina web es: http://www.balsamiq.com/.
1
Wireframe: Boceto que define el contenido y la funcionalidad de una web.
132 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
En el desarrollo de software resulta til tener un historial del trabajo que se est
realizando y poder volver a una copia anterior con relativa facilidad. Tambin me
servir como copia de seguridad del trabajo realizado.
El gestor de versiones lo puede encontrar en las siguientes direcciones:
Galera de arte: https://www.assembla.com/code/pitig/subversion/nodes
Artista: https://www.assembla.com/code/pitig_artista/subversion/nodes
2
Gratuito para aplicaciones de poco consumo, lo cual es bastante bueno para poder desarrollar y
lanzar la aplicacin sin pagar.
134 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
Diagramas Gantt.
Diagramas PERT.
Diagramas WBS.
Diagramas RBS.
5.1.4. Componentes
Lo ms comn en una aplicacin escrita en Rails es que se reutilize cdigo creado por
otros desarrolladores. Este cdigo puede ser distribuido en gemas, las cuales podemos
decir, que son libreras que nos aportan nuevas funcionalidades para nuestro desarrollo.
En otras palabras, RubyGems nos provee de una aplicacin llamada gem que permite
instalar, desinstalar y consultar sobre las libreras o gemas que tengamos instalada para
implementar en el desarrollo.
gem r a i l s , 3.0.9
136 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
# Bundle edge R a i l s i n s t e a d :
# gem r a i l s , : g i t => g i t : / / g i t h u b . com/ r a i l s / r a i l s . g i t
# Usamos MySql
gem mysql , : r e q u i r e => mysql
# Gema para p a g i n a r l a s v i s t a s
gem w i l l _ p a g i n a t e , ~> 3 . 0 . pre2
....
En el fichero podemos ver que la mayora de las gemas se instalan desde el repositorio
de gemas http: // rubygems. org , aunque tambin se pueden instalar desde un reposito-
rio Git o desde una ruta. Junto al nombre de la gema le he indicado la versin que deseo
instalar.
Rails posee la herramienta Bundler para gestionar de forma sencilla y eficaz las de-
pendencias de gemas configuradas en el fichero Gemfile. sta se asegura de que la
aplicacin siempre cuente con las gemas necesarias para funcionar sin problemas. Me-
diante la orden:
$>bundle install
GEM
remote : http : / / rubygems . o rg /
specs :
....
activerecord (3.0.9)
a c t i v e m o d e l (= 3 . 0 . 9 )
a c t i v e s u p p o r t (= 3 . 0 . 9 )
5.2. CDIGO FUENTE 137
a r e l (~> 2 . 0 . 1 0 )
t z i n f o (~> 0 . 3 . 2 3 )
....
rails (3.0.9)
a c t i o n m a i l e r (= 3 . 0 . 9 )
a c t i o n p a c k (= 3 . 0 . 9 )
a c t i v e r e c o r d (= 3 . 0 . 9 )
a c t i v e r e s o u r c e (= 3 . 0 . 9 )
a c t i v e s u p p o r t (= 3 . 0 . 9 )
b u n d l e r (~> 1 . 0 )
r a i l t i e s (= 3 . 0 . 9 )
....
PLATFORMS
ruby
DEPENDENCIES
....
n o k o g i r i (= 1 . 4 . 4 )
p a p e r c l i p (= 2 . 3 . 1 6 )
p a p e r c l i p d r o p b o x (= 1 . 0 . 5 )
r a i l s (= 3 . 0 . 9 )
s u n s p o t _ r a i l s (~> 1 . 2 . 1 )
tzinfo
w i l l _ p a g i n a t e (~> 3 . 0 . pre2 )
En el anexo C Gemas podr encontrar descrita cada una de las gemas que he utili-
zado para el desarrollo de la aplicacin.
Para poder comenzar mi proyecto [Hellsten, Christian; Laine, Jarkko], lo primero que
me hizo falta fue instalar Ruby on Rails y todos los paquetes que estn relacionados con
este ltimo que, por defecto, suelen instalarse con l.
db Este directorio alberga un subdirectorio llamado migrate que contiene las mi-
graciones de ActiveRecord, las cuales se encargarn de la creacin o eliminacin
de tablas y de la inclusin o eliminacin de campos en ellas, y los ficheros del
esquema de base de datos.
doc RoR posee Rubydoc, una interfaz a partir de la cual es posible generar autom-
ticamente documentacin sobre la aplicacin a partir de los comentarios recogidos
en el cdigo y que se almacenarn en este directorio.
lib Aqu se almacenan las libreras adicionales que son utilizadas en el proyecto.
log Contiene las trazas de ejecucin, que resultan especialmente tiles para tareas
de depuracin.
Una de las utilidades que ofrece Rails y que he aprovechado para la implementacin
es el Scaffolding, el cual sirve para crear un esqueleto funcional, que genera una interfaz
140 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
web que permite llevar a cabo las operaciones bsicas CRUD sobre una tabla especificada
de la BD.
Por cada elemento que representa una tabla en la base de datos, al ejecutar el script
Scaffold (figura 5.1) se genera:
A partir del esqueleto y para cada uno de los sprint, he ido implementando lo necesario
para obtener mi aplicacin final.
El Modelo es el componente del patrn de diseo MVC encargado del acceso a los
datos.
Llamaremos modelo a una clase que trabaja en relacin a una tabla de la base de
datos, las instancias de esta clase son instancias del modelo y el modelo encapsula la
lgica de negocios.
Este patrn me ayuda a realizar todas las tareas de la base de datos: Definicin de
Datos y Manipulacin de Datos a travs de sus capacidades de metaprogramacin, sin
tener que escribir sentencias SQL.
5.3. IMPLEMENTACIN DEL SISTEMA 141
Las migraciones contienen los mtodos necesarios para la creacin de la tabla con todos
sus campos, as como su eliminacin, y se pueden localizar en el directorio db\migrate
de mi aplicacin con el siguiente nombre:
t . timestamps
end
d e f s e l f . down
drop_table : admin_obras
Admin : : Obra . d r o p _ t r a n s l a t i o n _ t a b l e !
end
end
Utilizar migraciones presenta otra gran ventaja y es que permite llevar un control de
versiones de cambios del schema de la base de datos, permitiendo volver atrs tras una
modificacin errnea.
$>rake db:migrate
y, por medio de ella, Rails explora el contenido del directorio db\migrate y ejecuta las
instrucciones contenidas en cada uno de los archivos(figura 5.2).
Rails, adems de las tablas definidas en las migraciones, aade otra tabla llamada
schema_migrations en la que almacena la versin actual de las migraciones. De este
modo, Active Record puede seguir el rastro de los cambios realizados en el esquema de
cada tabla.
Para el desarrollo de las clases del modelo he realizado los siguientes pasos en el fichero
anterior:
Esta relacin expresa que una obra puede ser creada por un artista y que un artista
puede crear n obras. En cdigo Rails se expresa de la siguiente forma.
Para el modelo de datos del ejemplo (Cdigo 5.7) existe una serie de relaciones be-
longs_to traducidas a que la obra pertenece a un artista, a una coleccin, a una seccin
y a una tcnica. Tambin podemos ver la existencia de relaciones has_many traducidas
a que pertenece a uno o varios carritos a travs de la clase CarritoItems y a uno o varios
pedidos a travs de la clase PedidoItems.
### R e l a c i o n e s ###
# R e l a c i o n de uno a uno
belongs_to : admin_artistum , : class_name => " Artistum "
belongs_to : admin_coleccion , : class_name => " C o l e c c i o n "
belongs_to : admin_seccion , : class_name => " S e c c i o n "
belongs_to : admin_tecnica , : class_name => " Tecnica "
# R e l a c i o n de uno a muchos
has_many : c a r r i t o s , : through => : c a r r i t o _ i t e m s
has_many : c a r r i t o _ i t e m s , : f o r e i g n _ k e y => " admin_obra_id "
...
end
Tambin se puede contemplar una serie de validaciones que aseguran que los datos
que se guardan en el modelo de datos son correctos.
### V a l i d a c i o n de d a t o s ###
# R e s t r i n g i m o s l o s s t r i n g s a 255 caracteres
validates_length_of : titulo , : i n => 1 . . 2 5 5
v a l i d a t e s _ l e n g t h _ o f : medidas , : i n => 1 . . 2 5 5
validates_length_of : referencia , : i n => 1 . . 2 5 5
validates_presence_of : anio_realizacion
validates_presence_of : medidas
validates_presence_of : precio
validates_presence_of : admin_artistum
validates_presence_of : admin_seccion
# Asociacion
v a l i d a t e s _ a s s o c i a t e d : admin_artistum , : admin_coleccion ,
: admin_seccion , : admin_tecnica
# Debe s e r un numero p o s i t i v o
validates : precio ,
: n u m e r i c a l i t y => { : greater_than_or_equal_to => 0 . 0 1 }
# Valor u n i c o
validates_uniqueness_of : r e f e r e n c i a
# Paperclip
v a l i d a t e s _ a t t a c h m e n t _ p r e s e n c e : imagen , : message => : blank
validates_attachment_content_type : imagen ,
: content_type =>[ image / jpeg , image /png , image / g i f ]
v a l i d a t e s _ a t t a c h m e n t _ s i z e : imagen ,
: g r e a t e r _ t h a n => 1 . k i l o b y t e
...
end
# Obras mas r e c i e n t e s
def s e l f . l a t e s t
f i n d : a l l , : l i m i t => 1 2 , : o r d e r => " admin_obras . i d d e s c " ,
i n c l u d e => [ : admin_artistum , : admin_coleccion ,
: admin_seccion ]
end
# Metodo para s u n s p o t
s e a r c h a b l e do
5.3. IMPLEMENTACIN DEL SISTEMA 147
# Alias del a rt is t a
def alias_artista
r e t u r n admin_artistum . i _ a l i a s
end
# Nombre d e l a r t i s t a
d e f nombre_artista
r e t u r n admin_artistum . nombre
end
# Nombre de l a s e c c i o n
d e f nombre_seccion
admin_seccion . nombre
end
end
He definido tres bases de datos, una para cada uno de los entornos definidos en el
directorio config\environments: development, test, production (descritos en la seccin
5.2).
development :
a d a p t e r : mysql
database : galeriaArte_development
username : g a l e r i a A r t e
password : hacked
encoding : utf8
148 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
test :
adapter : mysql
database : galeriaArte_test
username : galeriaArte
password : hacked
encoding : utf8
production :
adapter : mysql
database : galeriaArte_production
username : galeriaArte
password : hacked
encoding : utf8
$>rake db:create
$>rake db:drop
$>rake db:fixtures:load
4
Solamente se trasladan las definiciones.
5.3. IMPLEMENTACIN DEL SISTEMA 149
En las aplicaciones web basadas en MVC, los mtodos del controlador son invocados
por el usuario a travs de las peticiones enviadas desde el navegador web.
<nombre de la tabla>_controller.rb
c l a s s Admin : : O b r a s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r
# e n c o d i n g : u t f 8
Seguidamente vemos las definiciones de los helpers y los filtros del controlador.
150 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
# e n c o d i n g : u t f 8
c l a s s Admin : : O b r a s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r
helper_method : sort_column , : s o r t _ d i r e c t i o n
b e f o r e _ f i l t e r : set_obra ,
: o n l y => [ : show , : e d i t , : e d i t _ t r a d u c c i o n ,
: update , : d e s t r o y ]
....
d e f sort_column
Admin : : Obra . column_names .
i n c l u d e ? ( params [ : s o r t ] ) ? params [ : s o r t ] : " t i t u l o "
end
def sort_direction
% w[ a s c d e s c ] . i n c l u d e ? ( params [ : d i r e c t i o n ] )
? params [ : d i r e c t i o n ] : " a s c "
end
...
end
c l a s s Admin : : O b r a s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r
....
# GET /admin/ o b r a s
def index
# P a g i n a c i o n con l a gema w i l l _ p a g i n a t e y o r d e n a c i o n
@admin_obras = Admin : : Obra .
o r d e r ( sort_column + + s o r t _ d i r e c t i o n ) . p a g i n a t e
5.3. IMPLEMENTACIN DEL SISTEMA 151
store_location
respond_to do | format |
format . html # i n d e x . html . er b
format . xml { r e n d e r : xml => @admin_obras }
end
end
# GET /admin/ o b r a s /1
d e f show
store_location
respond_to do | format |
format . html # show . html . e rb
format . xml { r e n d e r : xml => @admin_obra }
end
end
respond_to do | format |
format . html # new . html . e rb
format . xml { r e n d e r : xml => @admin_obra }
end
end . . . .
end
5.3.2.2. Enrutamiento
El enlace entre las acciones5 y las peticiones del navegador se encuentran definidas en
el archivo routes.rb del directorio config.
5
Acciones: Mtodos de los controladores
152 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
G a l e r i a A r t e : : A p p l i c a t i o n . r o u t e s . draw do
....
# Obras
namespace : admin do
r e s o u r c e s : o b r a s end
p o s t " o b r a s / u p d a t e _ t e c n i c a s " => " o b r a s#u p d a t e _ t e c n i c a s "
end
# Internacionalizacion espanol
s c o p e ( / : l o c a l e ) , : l o c a l e => / e s / do
namespace : admin do r e s o u r c e s : c o l e c c i o n s end
namespace : admin do r e s o u r c e s : a r t i s t a end
namespace : admin do r e s o u r c e s : s e c c i o n s end
namespace : admin do r e s o u r c e s : t e c n i c a s end
end . . . .
end
namespace : admin do
r e s o u r c e s : o b r a s end
$>rake routes
La Vista es el objeto que maneja la presentacin visual de los datos representados por
el Modelo. Genera una representacin visual del Modelo y muestra los datos al usuario.
Aunque existen muchas maneras de gestionar las Vistas, el mtodo por defecto que se
emplea en Rails es Ruby Empotrado, que consiste en fragmentos de cdigo HTML con
algo de cdigo en Ruby, generando as HTML dinmico. Podemos diferenciar el cdigo
Ruby ya que se representa mediante el uso de:
Las vistas del proyecto las podemos localizar dentro del directorio app\views, donde
cada controlador tiene su propio directorio en el que se guardan todas las plantillas
RHTML con la siguiente estructura:
5.3.3.1. Layout
RoR permite utilizar una plantilla comn para toda la aplicacin llamada layout
donde, segn la peticin recibida, se incrusta la plantilla de la vista solicitada. Esta, que
ser la plantilla principal de mi aplicacin, modela los elementos comunes de la aplicacin
como: el encabezado, el men principal, el pie de pgina. . .
Podemos localizarla tambin dentro del directorio app\views con la siguiente es-
tructura:
\layouts\application.html.erb
5.3.3.2. Partials
<d i v i d="page_content">
< %= form_for ( @admin_obra , @admin_artistas ,
@admin_coleccions , @tags ,
: html => { : m u l t i p a r t => t r u e } ) do | f | %>
< %= r e n d e r form_1 , : f => f %>
< %= r e n d e r form_2_new_tit , : f => f %>
< %= r e n d e r form_3 , : f => f %>
< %= r e n d e r form_4_new_com , : f => f %>
< %= r e n d e r form_5 , : f => f %>
< %= r e n d e r form_6_boton , : f => f %>
< % end %>
<ul>
< % @admin_obra . e r r o r s . f u l l _ m e s s a g e s . each do | msg | %>
<l i >< %= raw msg %></l i >
< % end %>
</ul>
</div>
< % end %>
\nombre_hoja_estilo.css
/ Catalogo /
/ Botones en c a t a l o g o /
a . img_recent {
t e x t d e c o r a t i o n : none ;
d i s p l a y : i n l i n e b l o c k ;
width : 2 2 px ;
h e i g h t : 2 2 px ;
backgroundimage : u r l ( . . / images / l a s t _ a r t . png ) ;
}
a . img_recent : hover {
d i s p l a y : i n l i n e b l o c k ;
width : 2 2 px ;
h e i g h t : 2 2 px ;
backgroundimage : u r l ( " . . / images / l a s t _ a r t o v e r . png " ) ;
backgroundc o l o r : t r a n s p a r e n t ;
}
a . img_cesta {
t e x t d e c o r a t i o n : none ;
d i s p l a y : i n l i n e b l o c k ;
width : 2 2 px ;
h e i g h t : 2 2 px ;
backgroundimage : u r l ( . . / images / cart_24 . png ) ;
}
a . img_cesta : hover {
d i s p l a y : i n l i n e b l o c k ;
width : 2 2 px ;
h e i g h t : 2 2 px ;
5.3. IMPLEMENTACIN DEL SISTEMA 157
c l a s s U s e r S e s s i o n < A u t h l o g i c : : S e s s i o n : : Base
Hay que destacar que este modelo hereda de Authlogic::Session::Base, lo cual permite
configurarlo fcilmente.
c l a s s A p p l i c a t i o n C o n t r o l l e r < A c t i o n C o n t r o l l e r : : Base
def require_usuario
unless current_user
store_location
r e d i r e c t _ t o ( new_user_session_url ,
: n o t i c e => " Usted debe e s t a r c o n e c t a d o
para t e n e r a c c e s o " )
return f a l s e
end
end
def require_no_usuario
i f current_user
store_location
r e d i r e c t _ t o ( catalogo_path ,
: n o t i c e => " Usted debe c e r r a r su s e s i o n
para a c c e d e r a e s t a pagina " )
return f a l s e
end
end . . .
los cuales utilizo a travs de filtros en los controladores. Por ejemplo, solo los usuarios
registrados podrn realizar compras de obras de arte.
# app\ c o n t r o l l e r s \ c h e c k o u t _ c o n t r o l l e r . rb
c l a s s CheckoutController < ApplicationController
...
# Se r e q u i e r e s e r u s u a r i o r e g i s t r a d o
b e f o r e _ f i l t e r : require_usuario
...
end
De esta forma, si un usuario visitante intenta realizar una compra, ser redirigido
automticamente al formulario de Inicio de sesin para que se se registre o se identifique
con su usuario antes de poder continuar.
5.3. IMPLEMENTACIN DEL SISTEMA 159
Esta gema aade una forma muy til de realizar bsquedas sobre un modelo desde un
formulario, que consiste en llamar a un mtodo llamado search sobre cualquier modelo
pasndole los parmetros de bsqueda, tras lo que se recuperan los registros que casan
con dicha consulta.
# c o n t r o l l e r s \admin\ o b r a s _ c o n t r o l l e r . rb
c l a s s Admin : : O b r a s C o n t r o l l e r < A p p l i c a t i o n C o n t r o l l e r
...
def index
...
# Busqueda con l a gema meta_search
@search = Admin : : Obra . s e a r c h ( params [ : s e a r c h ] )
@admin_obras =
@search . o r d e r ( sort_column + + s o r t _ d i r e c t i o n ) .
p a g i n a t e ( : page => params [ : page ] , : per_page => 5 )
...
end
...
end
Cdigo 5.24: Nombre de los campos para la bsqueda con gema MetaSearch
En la instalacin por defecto de Rails existe una librera llamada ActionMailer [Lind-
saar, Mikel; ASCIIcasts], cuya funcin es la de implementar el envo de correos electrnicos
de una manera sencilla (figura 5.5).
En esta instruccin, la clase Mailer ser una clase que se crear en el directorio
app\mailers, que heredar de la clase principal de la librera ActionMailer. Cada una
de las notificaciones que sea implementada dentro de esta clase, tendr su correspondiente
mtodo dentro de la misma.
se registra en la web,
no recuerda su contrasea y
# E s t a b l e c e e l metodo de e n t r e g a
A c t i o n M a i l e r : : Base . delivery_method = : smtp
# Despliegue
A c t i o n M a i l e r : : Base . d e f a u l t _ u r l _ o p t i o n s [ : h o s t ] =
" g a d e i r a r t . heroku . com"
Implementacin
c l a s s U s e r M a i l e r < A c t i o n M a i l e r : : Base
# Los e m a i l s s i e m p r e s e e n v i a n desde l a misma d i r e c c i o n
d e f a u l t : from => " g a d e i r a r t @ g m a i l . com"
# C o nf i r m a ci o n de r e g i s t r o
def confirmacion_registro ( user )
@usuario_registrado = user
Lo que hace el mtodo anterior es invocar el mtodo mail pasndole un hash con
argumentos tales como: :to, :from, y :subject.
Los mailers de correo, al igual que los controladores, tienen asociado un archivo de
vista, en el que se coloca el cuerpo del correo que se desea enviar. Para la aplicacin he
implementado correos en:
Los emails se envan cuando se esta interactuando directamente con la propia apli-
cacin, en cuyo caso se est pasando por el controlador. Continuando con el ejemplo
anterior, vemos como se invoca al mtodo desde el controlador.
164 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
La Galera de Arte desea un sistema de procesamiento, para los pedidos de sus clientes,
a travs de una pasarela de pago.
Active Merchant [Luetke, Tobias; Fauser, Cody]: Nos permite el acceso de forma
sencilla a la pasarela de pago, haciendo frente a las tarjetas de crdito.
G a l e r i a A r t e : : A p p l i c a t i o n . c o n f i g u r e do
...
# P a s a r e l a de pagos
c o n f i g . a f t e r _ i n i t i a l i z e do
# Envia una s o l i c i t u d a l s e r v i d o r de prueba
# de l a p a s a r e l a de pagos
ActiveMerchant : : B i l l i n g : : Base . mode = : t e s t
# Crea un o b j e t o p a s a r e l a a l s e r v i c i o AuthorizeNetGateway
: :GATEWAY =
ActiveMerchant : : B i l l i n g : : AuthorizeNetGateway . new (
# API C r e d e n t i a l AuthorizeNetGateway
: login => 8gNzqAW9S8d ,
: password => 9 6 2 ZT2Grx7h9jv5C
)
end
end
En la imagen 5.28 podemos ver los datos de la API Credentials facilitados al crear la
cuenta.
El acceso a sta se consigue a travs de la gema Active Merchant. Para ello he imple-
mentado el siguiente procedimiento:
d e f process_with_active_merchant
# Crea una t a r j e t a c r d i t o para e l comprador
c r e d i t _ c a r d = ActiveMerchant : : B i l l i n g : : CreditCard . new (
: fi r s t _ n a me => entregar_a_nombre ,
: last_name => e n t r e g a r _ a _ a p e l l i d o s ,
: type => t i p o _ t a r j e t a ,
: number => numero_tarjeta ,
: month => mes_caducidad ,
: year => anio_caducidad ,
: v e r i f i c a t i o n _ v a l u e => c o d i g o _ v e r i f i c a c i o n
)
i f credit_card . valid ?
# I n f o r m a c i o n d e l comprador para su pedido
options = {
# I n f o r m a c i n d e l pedido
: order_id => s e l f . id ,
166 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
# I n f o r m a c i n de f a c t u r a c i n
: billing_address => {
: address1 => d i r e c c i o n _ d e _ e n t r e g a ,
: city => poblacion_de_entrega ,
: state => ciudad_de_entrega ,
: zip => cp_entrega ,
: country => p a i s _ e n t r e g a ,
: phone => t e l e f o n o ,
},
: email => email ,
# I n f o r m a c i n de e n v o
: s h i p p i n g _ a d d r e s s => {
: fi r s t _ n a me => entregar_a_nombre + " "
+ entregar_a_apellidos ,
: address1 => d i r e c c i o n _ d e _ e n t r e g a ,
: city => poblacion_de_entrega ,
: state => ciudad_de_entrega ,
: zip => cp_entrega ,
: country => p a i s _ e n t r e g a
}
}
# A u t o r i z a c i n para una c a n t i d a d de d i n e r o
response =
GATEWAY. p u r c h a s e ( t o t a l , c r e d i t _ c a r d , o p t i o n s )
...
end
En el cdigo 5.29 se crea una tarjeta de crdito a travs de los datos facilitados por el
cliente y se recoge la informacin relacionada con la facturacin del pedido.
Figura 5.7: Correo enviado por Authorized.net con la aprobacin del cobro
5.3.8. Internacionalizacin
Primeramente voy a definir un par de trminos que creo importantes para esta seccin.
Recordemos que uno de los requisitos del sistema es que las pginas web de la tienda
virtual puedan verse tanto en espaol como en ingls. Para la internacionalizacin/loca-
lizacin de la aplicacin he utilizado dos gemas.
I18n
Crear un fichero yml por cada uno de los idiomas que utiliza la aplicacin en el direc-
torio config\locales: espaol (es.yml) e ingls (en.yml) . Como ejemplo
muestro el mismo extracto de cada uno de estos ficheros.
# Traduccion en e s p a n o l
" es ":
...
layouts :
application :
catalogo : " Catalogo "
etiquetas : " Etiquetas "
contactar : " Contactar "
quienes_somos : " Quienes somos "
condiciones : " Condiciones "
bienvenido : " Bienvenid@ "
mi_cuenta : "Mi cuenta "
salir : " Salir "
registrarse : " Registrarse "
login : " Iniciar sesion "
es : " Espanol "
en : " Ingles "
mi_cesta : "Mi compra "
...
# Traduccion en i n g l e s
en :
...
layouts :
application :
catalogo : " Catalog "
etiquetas : " Tags "
contactar : " Contact us "
5.3. IMPLEMENTACIN DEL SISTEMA 169
Indicar a la aplicacin que cargue los diferentes archivos de idioma, para lo he creado
el archivo de inicializacin config\initializers\i18n.rb.
Seleccionar el idioma con el que deseo que se muestre la aplicacin, es decir, espaol.
# Idioma por d e f e c t o
I18n . d e f a u l t _ l o c a l e = : e s
...
<body>
...
<d i v i d="top_banner">
<d i v i d="top_menu">
170 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
<u l c l a s s ="menu">
...
<l i ><a h r e f ="/ i n i c i o " c l a s s ="nav">
< %= t ( . i n i c i o ) %>
</a></ l i >
<l i ><a h r e f ="/ g a l e r i a / n o s o t r o s /1" c l a s s ="nav">
< %= t ( . quienes_somos ) %>
</a></ l i >
<l i ><a h r e f ="/ c a t a l o g o " c l a s s ="nav">
< %= t ( . c a t a l o g o ) %>
</a></ l i >
<l i ><a h r e f ="/ g a l e r i a / c o n d i c i o n e s / i n d e x _ u s u a r i o "
c l a s s ="nav">
< %= t ( . c o n d i c i o n e s ) %>
</a></ l i >
<l i ><a h r e f ="/ c o n t a c t a r " c l a s s ="nav">
< %= t ( . c o n t a c t a r ) %>
</a></ l i >
</ul>
</div>
</div>
...
Globalize3
d e f s e l f . down
...
Admin : : Obra . d r o p _ t r a n s l a t i o n _ t a b l e !
end
end
El cdigo anterior crea una tabla para la traduccin del modelo Obras con los campos
que se desean traducir.
172 CAPTULO 5. IMPLEMENTACIN DEL SISTEMA
Captulo 6
Las pruebas de software (testing) [Wikipedia] son los procesos que permiten verificar
y revelar la calidad de un producto software. Son utilizadas para identificar posibles fallos
de implementacin, calidad o usabilidad de un programa. Bsicamente es una fase en el
desarrollo de software consistente en probar las aplicaciones construidas.
Para ello, seguir un desarrollo guiado por pruebas - TDD con el que lograr un cdigo
limpio que funcione. Este consiste en dos prcticas:
Escribir las pruebas primero (Test First Development), y se verifica que estas
fallen, luego se implementa el cdigo que haga que la prueba pase satisfactoriamente.
La descripcin de las diferentes pruebas que llevar a cabo durante el desarrollo del
proyecto se encuentra en el anexo F Pruebas y tendrn dos finalidades:
Dar una garanta del correcto funcionamiento de las distintas funcionalidades im-
plementadas, para poder as asegurar la calidad del producto final entregado.
fixtures: Donde se incluirn una serie de ficheros YAML, en los cuales ser posible
crear, de forma sencilla e intuitiva, las instancias que sern empleadas en las distintas
pruebas.
173
174 CAPTULO 6. PRUEBAS DEL SISTEMA
unit: Se almacenarn las distintas pruebas unitarias que se lleven a cabo sobre los
modelos de datos de los distintos mdulos a probar.
La creacin de los ficheros con las plantillas para poder programar los test, incluidos
en los subdirectorios anteriores, se realiza de forma automtica cuando se utilizan algunos
de los scripts incluidos en Rails, como por ejemplo el Scaffold (ver seccin 5.2).
La aplicacin web que voy a desarrollar est basada en el patrn de diseo MVC
(Modelo, Vista y Controlador) (ver seccin 4.1.2), siendo cada uno de estos compo-
nentes independientes entre s. Este hecho, trasladado a la fase de pruebas, lleva como
consecuencia que algunas de las pruebas que se realicen se centren en aspectos cuya fun-
cionalidad resida en el modelo, en el controlador o en la vista; y que segn donde se
establezca, las pruebas necesiten un enfoque o unas herramientas concretas.
Los modelos de datos incluye una serie de normas, excepciones y relaciones adaptados
al problema a resolver. Para poder comprobar su correcto cumplimiento, he realizado
una serie de pruebas unitarias, cuyo objetivo ser el de garantizar el cumplimiento de las
condiciones de validacin tratando que ningn tipo de informacin que las vulnere sea
almacenada en la base de datos. Podemos localizar todas estas pruebas en el directorio
test\unit de la aplicacin con la siguiente estructura de nombre:
##############################################
# Test para comprobar que no puede g u a r d a r s e #
# una obra s i n t i t u l o #
##############################################
t e s t " Test no guardar obra s i n t i t u l o " do
obra = Admin : : Obra . new (
6.2. PRUEBAS UNITARIAS 175
#################################################
# Test para comprobar que e l p r e c i o e s p o s i t i v o #
#################################################
t e s t " Test p r e c i o de l a obra debe s e r p o s i t i v o " do
obra = Admin : : Obra . new (
: titulo => Gato pardo ,
: referencia => 3 2 1 ,
: anio_realizacion => 2 0 1 0 ,
: medidas => 1 0 x 1 5 ,
: precio => 3 5 . 5 0 ,
: admin_coleccion_id => 1 ,
: admin_artistum_id => 1 ,
: admin_seccion_id => 1 ,
: admin_tecnica_id => 1 ,
: imagen_file_name => cuadro . jpg ,
: imagen_content_type => image / jpeg ,
: imagen_file_size => 34714)
obra . p r e c i o = 1
a s s e r t obra . i n v a l i d ?
a s s e r t _ e q u a l " debe s e r mayor que o i g u a l a 0 . 0 1 " ,
obra . e r r o r s [ : p r e c i o ] . j o i n ( ; )
obra . p r e c i o = 0
a s s e r t obra . i n v a l i d ?
a s s e r t _ e q u a l " debe s e r mayor que o i g u a l a 0 . 0 1 " ,
obra . e r r o r s [ : p r e c i o ] . j o i n ( ; )
obra . p r e c i o = 3 5 . 5 0
a s s e r t obra . v a l i d ?
end
...
176 CAPTULO 6. PRUEBAS DEL SISTEMA
##############################################
# Test para v e r i f i c a r que s e puede a c c e d e r a #
# una c o n j u n t o de o b r a s de un a r t i s t a #
##############################################
t e s t " has_many_and_belongs_to_artista " do
# Mira en l o s a r t i s t a s y v e r i f i c a que hay a l menos
# una obra en e l c o n j u n t o de o b r a s i n s e r t a d a por
# f i x t u r e a l comienzo d e l t e s t .
artista =
Admin : : Artistum . f i n d _ b y _ i _ a l i a s ( " Pedro Gonzlez " )
a s s e r t _ e q u a l 2 , a r t i s t a . admin_obras . s i z e
# Recargamos en l a BD l o s d a t o s
artista . reload
obra . r e l o a d
###################################################
# Test para comprobar que s e puede c r e a r una obra #
###################################################
t e s t " Test d e b e r a c r e a r una obra " do
obra = Admin : : Obra . new
6.2. PRUEBAS UNITARIAS 177
a s s e r t obra . s a v e
end
...
end
Podemos observar en el cdigo que se realizan pruebas sobre: las validaciones imple-
mentadas al modelo, sobre las relaciones establecidas entre entidades (mostradas en los
ejemplos de la seccin 5.3.1.2) y por ltimo se establece un contexto donde se comprueba
la creacin de una nueva instancia de la clase.
$>rake test:units
<nombre de la prueba>_test.rb
c l a s s ObraTest < A c t i o n D i s p a t c h : : I n t e g r a t i o n T e s t
# E s p e c i f i c o f i x t u r e s que deben c a r g a r s e
f i x t u r e s : users
# Comprueba e l c o r r e c t o f u n c i o n a m i e n t o de l a
# a d m i n i s t r a c i o n de o b r a s
t e s t " G e s t i o n de o b r a s " do
# Crear nueva c o l e c c i o n
c o l e c c i o n = Admin : : C o l e c c i o n . c r e a t e (
: nombre => E s c u l t u r a s Romanas )
# Crear nuevo a r t i s t a
artista = Admin : : Artistum . c r e a t e (
: i_alias => Marcos Torres ,
: nombre => Marcos T o r r e s Sanz ,
: c u r r i c u l u m => Nacio en S e v i l l a en 1 9 5 5 )
...
# I n i c i a r s e s i o n como u s u a r i o
u s u a r i o = new_session_as ( : usuario_001 )
# Ver e l l i s t a d o de o b r a s
usuario . list_obras
...
# I n i c i a r s e s i o n con o t r o u s u a r i o
u s u a r i o 2 = new_session_as ( : usuario_002 )
# E l i m i n a r una obra
u s u a r i o 2 . d e l e t e _ o b r a obra_nueva
end
private
module ObraTestDSL
a t t r _ w r i t e r : name
# L i s t a d o de o b r a s
def list_obras
g e t "/ admin/ o b r a s "
assert_response : success
a s s e r t _ t e m p l a t e "admin/ o b r a s / i n d e x "
end
# Anadir obra
d e f add_obra ( p a r a m e t e r s )
c o l e c c i o n = Admin : : C o l e c c i o n . f i n d ( : a l l ) . f i r s t
artista = Admin : : Artistum . f i n d ( : a l l ) . f i r s t
a s s e r t _ t a g : t ag => op ti o n ,
: a t t r i b u t e s => { : v a l u e => c o l e c c i o n . i d }
a s s e r t _ t a g : t ag => op ti o n ,
: a t t r i b u t e s => { : v a l u e => a r t i s t a . i d }
r e t u r n obra
end
# B o r r a r obra
d e f d e l e t e _ o b r a ( obra )
d e l e t e "/ admin/ o b r a s/#{obra . i d }"
assert_response : redirect
follow_redirect !
a s s e r t _ t e m p l a t e "admin/ o b r a s / i n d e x "
end
...
end
El extracto anterior verifica que las historias de usuarios aadir obras, listar obras
de arte y eliminar obras funcionan correctamente.
Se puede observar que, a diferencia de las pruebas funcionales, las pruebas de integra-
cin pueden:
6.4. PRUEBAS DE SISTEMA 181
abrir varias sesiones, en el ejemplo se abren dos: una para usuario y otra para un
usuario diferente: usuario2.
$>rake test:integration
Mediante la realizacin de estas pruebas se asegura que el sistema cumple con to-
dos los requisitos establecidos: funcionales, de almacenamiento, reglas de negocio y no
funcionales.
a s s e r t _ r e d i r e c t e d _ t o admin_obra_path ( a s s i g n s ( : admin_obra ) )
a s s e r t _ e q u a l num_obras+1, Admin : : Obra . count
end
###############################################
# Test para comprobar que s e muestra una obra #
###############################################
t e s t " D e b e r i a poder mostrar una obra " do
g e t : show , : i d => @admin_obra . to_param
assert_response : success
a s s e r t _ t e m p l a t e admin/ o b r a s /show
a s s e r t _ e q u a l " Busto de emperador " ,
a s s i g n s ( : admin_obra ) . t i t u l o
a s s e r t _ e q u a l 2 , a s s i g n s ( : admin_obra ) . admin_seccion_id
end
...
end
$>rake test:functionals
Estas pruebas pretenden comprobar el funcionamiento del sistema, con respecto a los
requisitos no funcionales definidos en la etapa de anlisis.
El tiempo de carga de una web es importante de conocer, ya que puede que la pgina
est cargndose de forma muy lenta haciendo que muchos usuarios se pierdan algunos
contenidos, que este consumiendo muchos recursos, que tenga demasiados enlaces, o im-
genes muy pesadas, por lo que es bueno hacerle un test de velocidad.
sta lo que hace es probar la pgina web por completo rastreando todo el contenido a
travs del cdigo HTML (es capaz de detectar imgenes, CSS, Javascripts, RSS, Flash y
frames/iframes), imitando la manera en la cual se cargara la web normalmente. Adems
genera un grfico bastante sencillo de entender donde se ve la evolucin de carga en
segundos de cada uno de los archivos de la web, el cual nos permite saber cul es el origen
de una posible carga lenta y a qu archivo se debe. Posee un funcionamiento bastante
sencillo, ya que tan solo hay que ingresar la URL para obtener el test.
En la tabla 6.1 muestro los tiempos de carga de diferentes pginas web que componen
la aplicacin, pudindose observar que tardan menos de un segundo, aunque hay algunas
que se podran optimizar ms.
Podemos ver que esta herramienta nos ensea visualmente, en un grfico de barras
(figura 6.6), el tiempo, mostrndonos la lista de objetos en el orden en que se van cargando
jerrquicamente. Esto nos permite ver los objetos que estn siendo linkeados. Un ejemplo
de los grficos obtenidos pueden contemplarlo a continuacin:
Cada test de lafigura 6.7 muestra estadsticas generales acerca de la carga de la pgina,
as como el nmero total de objetos, tiempo de carga y tamao de todos los objetos
incluidos.
He realizado un segundo anlisis y para estas pruebas he optado por New Relic (https:
//newrelic.com/), la cual es una plataforma para el monitoreo y anlisis del rendimiento
de aplicaciones que es ofrecida como un servicio en la web.
A partir de este momento, los agentes del lenguaje envan mtricas de la aplicacin
monitoreada a New Relic cada minuto, mientras se navega por las diferentes pginas
de la web. Para ver esta informacin de rendimiento, incluyendo un anlisis detallado
de las sentencias SQL, hay que abrir New Relic en el navegador (http://localhost:
3000/newrelic) y obtenemos la informacin de la figura 6.8.
Tambin se pueden visualizar los detalles, por ejemplo, para la cuarta de las URLs
que aparecen, /es/galeria/artista, en la figura 6.8. Ello lo vemos representado en la
figura 6.9.
Y contemplar, por ejemplo para la misma URL, el rendimiento obtenido por las sen-
tencias SQL que ejecuta (figura 6.10).
Podemos observar en las imgenes anteriores, que hay rendimientos, marcados en rojo,
los cuales deberan ser optimizados para obtener unos mejores resultados en la aplicacin,
esto lo voy a dejar como una de las mejoras para realizar de la aplicacin. Tambin
comentar que dependiendo del navegador y del hardware que se utilice se pueden obtener
diferentes rendimientos.
1
Cliente: Galerista o Artista
190 CAPTULO 6. PRUEBAS DEL SISTEMA
Parte III
Eplogo
191
193
Manual de usuario
7.1. Introduccin
Este manual proporciona una gua para el usuario de la tienda virtual de la Galera
de Arte GadeirArt, detallndose las funcionalidades de la aplicacin. Los lectores no
requieren ningn conocimiento acerca de programacin ni desarrollo de software.
Usuario final cuyo fin ser visualizar las obras de arte de la Galera y comprarlas
en caso de estar interesado.
7.2. Caractersticas
1. Un Front Office, con el que interactuarn los usuarios, formado por una Tienda
Online. Aqu podrn acceder al catlogo de las Obras de Arte y realizar sus compras.
195
196 CAPTULO 7. MANUAL DE USUARIO
Las funcionalidades que ofrece el sistema estn definidas en la seccin 3.2.1 Historias
de usuario y son las siguientes:
Gestin de Obras: Poseer informacin de cada una de las Obras de Arte que tenga
en su inventario.
Gestin de Tcnicas: Cada una de las Secciones posee una serie de Tcnicas con las
que se realizan las Obras de Arte.
Poder tener las obras de arte clasificadas por categora de forma que el usuario
pueda acceder a dicha clasificacin.
Recomendar obras relacionadas cuando los usuarios estn navegando por la
ficha tcnica de una obra.
Los usuarios debern disponer de un ordenador que posea una tarjeta de red o una
tarjeta de red inalmbrica y un punto de acceso que les permita una conexin a Internet
para poder acceder a la aplicacin.
7.4. Utilizacin
No hacer falta estar registrado para visualizar los contenidos de la tienda, pero s ser
necesario para poder comprar.
En cada una de las pginas de la web existir un men principal desde el que se
puede acceder a todas las funcionalidades presentes en la aplicacin segn el rol que
tenga asignado el usuario.
198 CAPTULO 7. MANUAL DE USUARIO
7.4.1. Administrador
Para tener acceso a ella, el administrador deber logarse desde el enlace Registro/Ac-
ceso clientes (figura 7.1) con los siguientes datos iniciales:
Una vez registrado le aparecer una barra de men (figura 7.3), similar al del resto
de usuarios, con una opcin ms: Administracin, desde la que podr gestionar toda
la informacin de la web.
Tambin podemos ver en la imagen 7.3 que aparece un link llamado Mi cuenta que
mostrar al administrador sus datos (figura 7.4). Desde l podr modificar su clave de
acceso haciendo click sobre el botn Editar y rellenando el formulario que se presenta
(figura 7.5).
7.4. UTILIZACIN 199
Gestores de contenido
Gestores de clientes
Gestores generales
7.4.1.3. Listados
Cuando hacemos click en algunas de las opciones de los gestores anteriormente co-
mentados, accedemos al listado de la opcin elegida. Por ejemplo, el listado de los artistas
se obtiene haciendo click sobre el botn Artistas (figura 7.7).
202 CAPTULO 7. MANUAL DE USUARIO
Voy a explicar la funcionalidad de cada uno de los botones que vemos en la pantalla
anterior u otras.
Botn Nuevo: Sirve para dar de alta a nuevos artistas de la Galera de Arte.
Para ello tendr que rellenar cada uno de los campos solicitados en el formulario
que se presenta.
El administrador podr dar un nuevo alta (de artista, de obras, colecciones. . . ) ha-
ciendo click en el listado, o dentro de cualquier otra pantalla, sobre el botn Nuevo.
Aparecer una nueva ventana que contiene un formulario en el que hay que rellenar todos
los campos que sean obligatorios y tras pulsar el botn se realizar un nuevo alta (figura
7.8).
Mostrar
Para tener acceso a la informacin sobre las nuevas altas haremos click sobre el botn
Mostrar que aparece en el listado o dentro de cualquier otra pantalla (figura 7.9).
En esta pantalla tambin tenemos una serie de botones que podemos utilizar para la
administracin.
204 CAPTULO 7. MANUAL DE USUARIO
Figura 7.9: Captura de la pantalla que muestra los datos de una obra
Editar
Para editar la informacin tan solo hay que pulsar sobre el botn Editar que aparece
en el listado o dentro de cualquier otra pantalla. Aparecer una nueva pantalla contenien-
do la informacin, pudiendo modificar la que deseemos. Para que las modificaciones se
lleven a cabo habr que hacer click sobre el botn Actualizar.
Eliminar
Para eliminar debemos hacer click sobre el botn Eliminar que aparece en el lis-
tado y aparecer una ventana emergente que nos preguntar si deseamos o no hacer la
eliminacin.
Traducir al ingls
El administrador podr traducir algunos de los campos para que la informacin pueda
ser transmitida al usuario final en dos idiomas: espaol e ingls.
Para ello tendr que pulsar sobre el botn Traducir al ingls que aparece en el listado
(figura 7.9) o dentro de cualquier otra pantalla. Una vez traducido y tras pulsar el botn
Traducir (figura 7.12), podr ver como le ha quedado la traduccin.
El botn Limpiar sirve para eliminar las opciones elegidas para la bsqueda.
En la figura 7.14, vemos que presenta varias Vistas del estado: todos, procesado,
cerrado, fracasado. Segn la vista que seleccione aparecer el listado de los pedidos de
esa opcin.
El botn Cerrar pedido se pulsar una vez se haya enviado el pedido al cliente, con
lo que el estado del pedido cambiar a Cerrado como podemos ver en la figura 7.14.
donde es obligatorio insertar todos los campos marcados con * y tras completar la
informacin solicitada se dar de alta al usuario en la tienda virtual. ste recibir un
correo electrnico de notificacin de registro.
210 CAPTULO 7. MANUAL DE USUARIO
Cualquier usuario que se encuentre logado en la web puede modificar sus datos. Para
ello deber pulsar el link Mi cuenta de cualquier pantalla y luego, en la pantalla que
aparece, sobre el botn Editar (figura 7.18 ).
Al pulsar accedemos a la zona donde el usuario puede modificar todos sus datos. Para
ello basta con modificar los datos disponibles y pulsar sobre el botn Actualizar usuario
(figura 7.19).
7.4.2.3. Catlogo
Para acceder al catlogo de la tienda virtual de la Galera, deber hacer click (figura
7.20) sobre el men Catlogo que aparece en cualquiera de las pginas.
Podemos tener acceso a las ltimas adquisiciones de la Galera haciendo click sobre el
link Obras recientes que aparece dentro del catlogo (figura 7.21).
7.4. UTILIZACIN 211
La bsqueda de obras de arte se realizar desde el link Bsqueda que nos encontramos
dentro del catlogo de obras (figura 7.20).
El botn Limpiar sirve para eliminar las opciones elegidas para la bsqueda.
En este apartado se definen las posibles acciones que se pueden realizar sobre las obras
de arte de la Galera obtenidos a travs de la bsqueda o en el catlogo de la Galera.
7.4. UTILIZACIN 213
Independientemente de cmo se han obtenido los listados de obras de arte que posee
la galera, siempre se muestran de la siguiente forma:
Artista: Haciendo click sobre el artista podr visualizar informacin sobre ste.
Cesta de la compra: Para comprar la obra hay que aadirla a su cesta de la compra
y para ello bastara con hacer click sobre ella.
Para ver la informacin de la obra basta con pulsar sobre el ttulo de la obra que
aparece en la pantalla como la de la figura 7.23.
Pulsando sobre alguna de las etiquetas de la obra accedemos a un listado de todas las
obras que contienen dicha etiqueta.
Podemos observar que aparte de ver la informacin sobre la obra nos aparece a la
derecha una serie de recomendaciones de obras (figura 7.24).
Para poder ver las fotos ampliada basta con pulsar sobre la imagen, se abrir una
nueva ventana donde se visualizar la imagen de la obra de arte en un tamao superior
(figura 7.25).
7.4. UTILIZACIN 215
Para ello basta con hacer click sobre el nombre del artista que aparece en la pantalla
como la de la figura 7.23 y se mostrar una nueva ventana con toda la informacin sobre
ste.
Para aadir una obra de arte a nuestra cesta de la compra tenemos que pulsar sobre
la imagen del carrito como el que vemos en la figura 7.23.
En la figura 7.26 se nos muestra la cesta de la compra conteniendo las obras que
deseamos comprar junto con su importe.
Para realizar el pedido hay que pagar el contenido de la cesta, para acceder a esta
zona hay que pulsar sobre el botn Comprar que se encuentra en la cesta de la compra.
Logarse en la web
Para ello tenemos el enlace Registro/Acceso clientes que aparece en cualquier panta-
lla y que nos enva a la pgina donde poder realizarlo. A esta pgina (figura 7.28) tambin
se accede si el usuario no esta logado y pulsar sobre el botn Comprar en la cesta de la
compra.
Si el usuario est logado en la tienda virtual de la Galera, sus datos aparecen au-
tomticamente y estos podrn ser modificados en caso de que los datos de facturacin
varen.
7.4. UTILIZACIN 217
Tras indicar todos los datos necesarios hay que seleccionar la forma de pago con la
que se desea pagar y pulsar el botn Continuar para realizar el pedido.
Tras rellenar los datos, si son necesarios, para la forma de pago y pulsar sobre el botn
Realizar el pedido, se muestra un resumen de los datos indicados para que el usuario
confirme el pedido pulsando sobre el botn Comprar. De esta manera el pedido ya se
ha enviado a la Galera, la cual recibir un email con los datos del pedido y el usuario
recibir otro de confirmacin de pedido.
Forma de pago
Como se muestra en la figura 7.29, el usuario tiene varias formas de pago para el
pedido.
Para conocer las condiciones generales (figura 7.33) de la Galera tendremos que hacer
click sobre el men Condiciones que aparece en cualquiera de las pginas de la web.
7.4.2.11. Contactar
Obtener la informacin para poder contactar con la Galera de Arte (figura 7.34), se
hace desde el men Contactar de la barra de mens.
A travs del enlace de Google map se tendr acceso al mapa con la localizacin
exacta de la Galera.
220 CAPTULO 7. MANUAL DE USUARIO
8.1. Introduccin
Este manual proporciona una gua para la instalacin y explotacin del sistema desa-
rrollado para la galera de arte GadeirArt.
Los requerimientos que el sistema debe tener para el correcto funcionamiento. Entre
parntesis pondr la versin con la que yo he trabajado.
223
224 CAPTULO 8. MANUAL DE INSTALACIN Y EXPLOTACIN
Descarga de la aplicacin
Lo primero que tendremos que hacer ser bajarnos la ltima versin del repositorio de
nuestra aplicacin, para ello ejecutaremos el siguiente comando desde la lnea de consola:
$>svn co http://subversion.assembla.com/svn/pitig/
$>bash librerias.sh
Instalar la aplicacin
$>bash instalacion.sh
Crear y actualizar las nuevas BBDD (cargndose el fichero de rdenes .sql incluido
en instalacion.sh).
Iniciar el servidor.
#! / b in / bash
echo "##########################"
echo "## I n s t a l a c i o n de Gemas ##"
echo "##########################"
e x p o r t PATH=${PATH} : / var / l i b /gems
sudo bundle i n s t a l l
# Ahora vamos a e l i m i n a r l a s b a s e s de d a t o s a n t e r i o r e s
226 CAPTULO 8. MANUAL DE INSTALACIN Y EXPLOTACIN
# para p o s t e r i o r m e n t e c r e a r l a s y a c t u a l i z a r l a s
echo "> E l i m i n a c i o n de l a BD"
r a k e db : drop : a l l
# Leer c o n t r a s e n a de MySQL
echo " I n t r o d u z c a su c o n t r a s e n a de r o o t para MySQL: "
mysql u r o o t p < . / db/ o r d e n e s . s q l
# Crear l a s r u t a s
echo "> Creamos l a s r u t a s "
rake routes
# Iniciamos el servidor
echo "> I n i c i a n d o s e r v i d o r de l a a p l i c a c i o n "
echo "##########################"
echo "## A b r i r a p l i c a c i o n ##"
echo "##########################"
f i r e f o x h ttp : / / l o c a l h o s t : 3 0 0 0 &
r a i l s server
En Ruby on Rails tenemos tres tipos de entornos (ver seccin 5.2 Cdigo fuente),
cada uno de los cuales ayuda a desarrollar las aplicaciones de una forma ms cmoda y
eficiente, ayudando en el ciclo de desarrollo:
8.5. PROCEDIMIENTOS DE OPERACIN Y NIVEL DE SERVICIO 227
por:
RAILS_ENV = development
Para respetar la configuracin existente, en primer lugar compruebe que tiene todas
las gemas instaladas.
La siguiente orden se encarga de comprobar las gemas e instalar las que faltan:
$>bundle install
Configuracin de la BD
Las bases de datos con las que puede interactuar la aplicacin se especifican en el
archivo de configuracin config/database.yml.
El archivo contiene secciones para los diferentes entornos en los que Rails se puede
ejecutar de forma predeterminada. ste trae una configuracin de BD predeterminada
utilizando SQLite3, as que debe de ser modificado ya que se ha elegido como BD MySQL.
development :
a d a p t e r : mysql
database : galeriaArte_development
username : g a l e r i a A r t e
password : hacked
encoding : utf8
228 CAPTULO 8. MANUAL DE INSTALACIN Y EXPLOTACIN
test :
adapter : mysql
database : galeriaArte_test
username : galeriaArte
password : hacked
encoding : utf8
production :
adapter : mysql
database : galeriaArte_production
username : galeriaArte
password : hacked
encoding : utf8
Se debe otorgar permisos al usuario galeriaArte sobre las bases de datos: galeriaAr-
te_development y galeriaArte_test. Esta asignacin de privilegios se consigue, si el servi-
dor es la mquina local, con las ordenes:
Acceso a la aplicacin
http://localhost:3000
Conclusiones
En este ltimo captulo se detallan las lecciones aprendidas tras el desarrollo del
presente proyecto y se identifican las posibles oportunidades de mejora sobre la aplicacin
desarrollada.
9.1. Objetivos
Los objetivos que me marque al comienzo de este proyecto (seccin 1.2 Propsito,
objetivos y alcance del proyecto) han sido ms que satisfactorios, tanto en el plano personal
como en el profesional. Quera:
https://www.assembla.com/spaces/pitig/
231
232 CAPTULO 9. CONCLUSIONES
Realizar un anlisis comparativo del framework Ruby on Rails frente a otras al-
ternativas, evaluando las ventajas y caractersticas de este respecto a otros. Com-
placido con el estudio realizado en la memoria en el apartado 3.6 Estudio de alter-
nativas tecnolgicas.
En esta seccin se detallan las buenas prcticas adquiridas, un anlisis de mtricas, una
comparacin cuantitativa del tiempo y el esfuerzo invertido y por ltimo, los problemas
encontrados durante el desarrollo del proyecto.
Ahora puedo destacar lo cmodo y sencillo que resulta el adaptarse a este framework,
el cual facilita y acelera la funcin del desarrollador mediante unas configuraciones de
inicio muy efectivas, una estructura muy clara y, sobre todo, el uso de un lenguaje que
resulta realmente intuitivo y funcional como es Ruby.
9.2. LECCIONES APRENDIDAS 233
9.2.2. Mtricas
En la figuras 9.1, 9.2, 9.5, 9.4, 9.3 y 9.6 podemos ver las estadsticas de cdigo clasi-
ficadas segn extensin y ordenados por el nmero de lneas de los directorios principales
de la aplicacin.
En la figuras 9.7 podemos ver el anlisis del cdigo fuente segn la estructura del
proyecto realizado en Ruby On Rails [Fowler, Martin].
A continuacin pasamos a describir los trminos que aparecen en la figuras 9.7 para
una mejor interpretacin de la misma:
Das a la semana: 5
Horas que puedo invertir por da: 4h.
En la figura 9.9 muestro, mas detalladamente, las horas estimadas e invertidas por
hitos, junto con el no de tickets empleados en cada uno de los sprints y en la figura 9.10
muestro su respectiva grfica.
236 CAPTULO 9. CONCLUSIONES
Se observa que las horas estimadas para la realizacin del proyecto son 1.440h,
equivalentes, aproximadamente, a 72 semanas de trabajo (20h/semana).
19/ a b r i l /2012
Obras C o n t r o l a d o r Destroy
C o l e c c i o n e s C o n t r o l a d o r Destroy
M o d i f i c a c i n para que no s e b o r r e s i t i e n e o b r a s a s o c i a d a s
S e c c i o n e s C o n t r o l a d o r Destroy
M o d i f i c a c i n para que no s e b o r r e s i t i e n e o b r a s u
tcnicas asociadas
T e c n i c a s C o n t r o l a d o r Destroy
M o d i f i c a c i n para que no s e b o r r e s i t i e n e o b r a s a s o c i a d a s
A r t i s t a s C o n t r o l a d o r Destroy
M o d i f i c a c i n para que no s e b o r r e s i t i e n e o b r a s a s o c i a d a s
Actualizacin changelog
Memoria B i b l i o g r a f a
Memoria C a p t u l o 4 Implementacin Gemas
MetaSearch
Memoria C a p t u l o 4 A n l i s i s H i s t o r i a s de u s u a r i o s
Obras y Catlogo
Catalogo Busqueda con gema metasearch
Obras Busqueda con gema metasearch
Catalogo E l i m i n a c i n de l o r e l a c i o n a d o con gema s u n s p o t
Memoria C a p t u l o 4 Implementacin Gemas
Eliminacin sunspot
Catalogo Bsqueda Aadido botn l i m p i a r f o r m u l a r i o
Obras Bsqueda Aadido botn l i m p i a r f o r m u l a r i o
Bsqueda de i n f o r m a c i n s o b r e c o n t e n e d o r e s con p e s t a a s
en R a i l s
18/ a b r i l /2012
Catalogo Recomendaciones M o d i f i c a c i o n e s
Obras Busqueda con gema metasearch
Obras Gema meta_search I n v e s t i g a c i n
Obras , a r t i s t a s , c o l e c c i o n e s , s e c c i o n e s , t c n i c a s
M o d i f i c a c i n botn new en i n d e x
Secciones Integridad r e f e r e n c i a l
(20h/semana) (40h/semana)
Semanas estimadas 72 semanas 36 semanas
Semanas invertidas 60 semanas 30 semanas
Desviacin temporal 12 semanas 6 semanas
Para concluir, la experiencia ha sido muy grata junto con un aprendizaje muy completo
y satisfactorio.
A partir de ahora, una vez realizada la primera aplicacin, puedo generar cualquier
aplicacin web a medida para galeras y/o artistas con un coste menor , amortizando
el importe de la realizacin de la aplicacin para la Galera de Arte.
Con esto quiero demostrar la ventaja de construir una nueva aplicacin, partiendo
y reutilizando el cdigo de otra, respecto al coste y el tiempo empleado inicializndola
desde cero.
Das a la semana: 5
Podemos comprobar que he ganado bastante reutilizando gran parte del cdigo de la
Galera de Arte para la nueva aplicacin, ya que tanto el coste como el tiempo empleado
es menor. De esta forma, cada vez que cree una aplicacin para una Galera y/o Artista
ir amortizando el coste de la primera aplicacin desarrollada.
Das a la semana: 5
Comparativa del coste entre ambas aplicaciones (ver seccin Costes 2.5):
Eficiencia: Se refiere al esfuerzo que un usuario tiene que hacer para conseguir un
objetivo. Medir el tiempo empleado en completar cada tarea.
Tras realizar a los usuarios un pequeo test (Anexo I) con siete tareas, he obtenido
los siguientes resultados reflejados en los siguientes grficos. Los resultados de los test
podemos visualizarlos en la carpeta usabilidad contenida en el CD adjunto.
Todos los usuarios han conseguido completar las diferentes tareas que se les ha reco-
mendado en el test de usabilidad.
242 CAPTULO 9. CONCLUSIONES
La media de dificultad con que se han encontrado los usuarios al realizar cada una de
las tareas la podemos ver en el grfico 9.13.
Voy a destacar algunos de ellos aunque, durante todo el desarrollo, me he ido encon-
trando con problemas que he ido solventando poco a poco.
Uno de los problemas que me encontr fue que tras tener implementada la bsqueda de
obras de arte a travs de la gema Sunspot, la cual me llevo bastante tiempo estudiar como
funcionaba y obtener su funcionamiento en mi aplicacin, me encontr que al realizar el
despliegue en Heroku1 no me permita utilizar esta gema ya que para poder hacerlo haba
que pagar por no ser de libre uso. Para solucionarlo opte por usar otra gema MetaSearch,
la cual tambin me resulto bastante til.
Otro problema similar fue el espacio donde guardar las imgenes de los artistas y
las obras de arte de la Galera, tambin en Heroku haba que pagar por este servicio de
alojamiento, as que finalmente pude solucionar el problema utilizando el servicio dropbox
para alojar las imgenes.
implementado a falta de unos datos que me tena que facilitar la empresa y ponerme en
contacto con ellos, no podan facilitarmelos porque tena que ser cliente de la empresa.
As que lo he dejado como ampliacin para un trabajo futuro donde buscara otra forma
de poder facilitar automticamente las tasas al cliente.
Anexos
245
246 CAPTULO 10. ANEXOS
A. ACRNIMOS 247
A. Acrnimos
AIR (Adobe Integrated Runtime).
AJAX JavaScript asncrono y XML (Asynchronous JavaScript And XML).
API Interfaz de Programacin de Aplicaciones (Application Programming
Interface).
B2C Del negocio al consumidor (Business-to-Consumer).
BD Base de Datos (DataBase).
BBDD Bases de Datos (DataBases).
CRUD Crear, Obtener, Actualizar y Borrar (Create, Read, Update and Dele-
te).
CSS Hojas de Estilo en Cascada (Cascading Style Sheets).
DOM Modelo de Objetos del Documento (Document Object Model).
DRY No te repitas (Dont Repeat Yourself).
DSL Lenguaje Especfico de Dominio (Domain-Specific Language).
E/R Entidad/Relacin (Entity relationship).
EER Entidad-Relacin Mejorado (Enhanced Entity-Relationship).
GNU GNU No es Unix (GNU is Not Unix).
GPL Licencia Pblica General de GNU (GNU General Public License).
HTML Lenguaje de Marcado de HiperTexto (HyperText Markup Language).
HTTP Protocolo de Transferencia de Hipertexto (Hypertext Transfer Proto-
col).
i18n Internacionalizacin (Internationalization).
IEEE Instituto de Ingenieros Elctricos y Electrnicos (Institute of Electrical
and Electronics Engineers).
JSP (JavaServer Pages).
MIT Instituto Tecnolgico de Massachusetts (Massachusetts Institute of
Technology).
MVC Modelo-Vista-Controlador (Model-View-Controller).
ORM Mapeo Objeto-Relacional ( Object-Relational Mapping).
PDF Formato de Documento Porttil (Portable Document Format).
PERT Programa o Proyecto de Evaluacin y Revisin Tcnica (Program (or
Project) Evaluation and Review Technique).
PHP (Hypertext Pre-processor).
png (Portable Network Graphics).
POO Programacin Orientada a Objetos.
RBS Estructura de desglose de recursos (Resource Breakdown Structure).
RoR Ruby on Rails.
SGBD Sistema de Gestin de Base de Datos.
SMTP Protocolo Simple de Transferencia de Correo (Simple Mail Transfer Pro-
tocol).
SQL Lenguaje de Consulta Estructurado (Structured Query Language ).
TCP/IP Protocolo de Control de Transmisin (Transmission Control Proto-
col)/Protocolo de Internet (Internet Protocol).
TDD Desarrollo Guiado por Pruebas (Test-Driven Development).
UTF-8 (8-bit Unicode Transformation Format).
248 CAPTULO 10. ANEXOS
B. Definiciones
ActiveRecord Patrn de diseo que permite crear un objeto que envuelve una tabla
SQL, agregndole la lgica del modelo y el control de acceso. Este patrn permite
unir el mundo de la programacin orientada a objetos (POO), que es un mundo
intuitivo y natural, con el mundo matemtico y rgido de los datos relacionales
(SQL).
Andamiaje (Scaffold) es poder realizar todas las operaciones que se nos pide con tan
solo definir la entidad.
B2C Estrategia que desarrollan las empresas comerciales para llegar directamente al
cliente o usuario final. En la prctica, suele referirse a las plataformas virtuales
utilizadas en el comercio electrnico para comunicar empresas (vendedoras) con
particulares (compradores). Por eso, el uso ms frecuente es Comercio electrnico
B2C.
Changelog Archivo que lista los cambios hechos a un proyecto informtico desde su
ltima versin.
Control de versiones Gestin de los cambios que se realizan sobre los elementos de
un producto facilitando la administracin de las mismas.
CRUD Hace referencia a las funciones bsicas en bases de datos: crear, obtener, actua-
lizar y borrar
CSS Tecnologa que permite crear pginas web con un diseo ms exacto, aadien-
do mayores posibilidades a HTML y permitiendo una mayor separacin entre la
informacin y la presentacin.
El W3C es el encargado de formular la especificacin de las hojas de estilo que
servirn de estndar para los agentes de usuario o navegadores.
250 CAPTULO 10. ANEXOS
Dia Editor de diagramas con las herramientas necesarias para crear o modificar grficos.
Diagrama PERT Este diagrama es una representacin grfica de las relaciones entre
las tareas del proyecto que permite calcular los tiempos de ste de forma sencilla.
DSL Consiste en proporcionar a los clientes un lenguaje con una sintaxis y una semntica
ms conveniente para describir la solucin al tipo de problema al que se enfrentan.
Gemas Plugins y/o cdigos aadidos a nuestros proyectos RoR, que nos permiten nuevas
funcionalidades como nuevos create, nuevas funciones pre-escritas o nuevas herra-
mientas para el desarrollo.
GitHub Forja para alojar proyectos utilizando el sistema de control de versiones Git.
Helpers Mdulo que ayuda a las vistas definiendo funciones que devuelven cdigo
HTML.
Hosting en la nube El alojamiento web en la nube se asienta sobre una red de ser-
vidores vinculados para formar una sola plataforma. Debido a que hay una gran
cantidad de servidores trabajando en conjunto en lugar de uno solo, se equilibra la
carga, aumenta la capacidad, y se reduce al mnimo la probabilidad de fallo.
B. DEFINICIONES 251
HTML Lenguaje sencillo de hipertexto, es decir, un lenguaje que permite escribir texto
de forma estructurada, y que est compuesto por etiquetas, que marcan el inicio y
el fin de cada elemento del documento.
Con el hipertexto lo que se consigue realmente es especificar tanto la estructura
lgica del contenido como los diferentes aspectos que se desean dar a dicho conte-
nido. Sin embargo, el uso de CSS nos permite separar ambos conceptos: estructura
y aspecto visual.
Ingeniera del Software Aquella que ofrece mtodos y tcnicas para desarrollar y
mantener software de calidad.
ISO 3166 Estndar que codifica los nombres de pases y reas dependientes as como
sus principales subdivisiones.
JSP Tecnologa Java que permite generar contenido dinmico para web, en forma de
documentos HTML, XML o de otro tipo.
Mquina virtual Software que emula a una computadora y puede ejecutar programas
como si fuese una computadora real.
Mtrica del proceso Medidas del proceso de desarrollo del Software tales como tiempo
de desarrollo total, esfuerzo en das/hombre o mes/hombre de desarrollo del produc-
to, tipo de metodologa utilizada o nivel medio de experiencia de los programadores.
MIT Licencia que permite reutilizar el software as licenciado tanto para ser software
libre como para ser software no libre, permitiendo no liberar los cambios realizados
al programa original.
Modelo de negocio Planificacin que realiza una empresa respecto a los ingresos y
beneficios que intenta obtener. En un modelo de negocio, se establecen las pautas
a seguir para atraer clientes, definir ofertas de producto e implementar estrategias
publicitarias, entre muchas otras cuestiones vinculadas a la configuracin de los
recursos de la compaa.
MVC Patrn arquitectnico desarrollado para interfaces grficas que resalta la impor-
tancia de una separacin clara entre la presentacin de datos y la lgica de negocio
de una aplicacin.
Open Source Calificacin de software que cumple una serie de requisitos, principalmen-
te aquel que permite una libre redistribucin, distribuye el cdigo fuente, y permite
modificaciones y trabajos derivados.
ORM Tcnica de programacin para convertir datos entre el sistema de tipos utilizado
en un lenguaje de programacin orientado a objetos y el utilizado en una base de
datos relacional, utilizando un motor de persistencia, que en Rails es ActiveRecord.
png Formato grfico basado en un algoritmo de compresin sin prdida para bitmaps.
POO Paradigma de programacin que usa objetos y sus interacciones, para disear
aplicaciones y programas informticos. Est basado en varias tcnicas, incluyendo
herencia, abstraccin, polimorfismo y encapsulamiento.
Rake Equivalente a make para Ruby. Sirve para crear y automatizar tareas de mante-
nimiento.
B. DEFINICIONES 253
REST Conjunto de principios arquitectnicos por los cuales se disean servicios web
haciendo foco en los recursos del sistema, incluyendo cmo se accede al estado de
dichos recursos y cmo se transfieren por HTTP hacia clientes escritos en diversos
lenguajes.
SGBD Agrupacin de programas que sirven para definir, construir y manipular una
base de datos.
SQL Lenguaje declarativo de acceso a bases de datos relacionales que permite especificar
diversos tipos de operaciones en estas.
TCP/IP Conjunto de protocolos de red en los que se basa Internet y que permiten la
transmisin de datos entre computadoras.
Tienda virtual Sitio web donde se pueden comprar productos y pagarlos por cualquier
medio electrnico.
WinEdt Editor de texto potente y verstil para Windows con una fuerte predisposicin
hacia la creacin de documentos LATEX.
XML Formato estndar para el intercambio de datos basado en archivos de texto plano
con una estructura de etiquetas (tags).
C. Gemas
Authlogic [Johnson, Ben; ASCIIcasts]: Esta gema sirve para gestionar la au-
tenticacin en la aplicacin. Trabaja slo con el cdigo que gestiona la autenticacin
de los usuarios, ganando con ella flexibilidad y control acerca de cmo se presenta
sta al usuario.
(https://github.com/binarylogic/authlogic).
MetaSearch [Miller; Railscasts]: Esta gema aade una forma muy til de rea-
lizar bsquedas sobre un modelo desde un formulario.
(https://github.com/ernie/meta_search).
256 CAPTULO 10. ANEXOS
Esta gema no slo se encarga de guardar el archivo en nuestro servidor, sino tambin
crea automticamente thumbnails1 de esa imagen, las cuales me vienen muy bien
para la aplicacin. Para ello, Paperclip utilizar la librera ImageMagick2 que es la
realmente permite generar los thumbnails de las imgenes.
(https://github.com/thoughtbot/paperclip).
1
Thumbnails: Vistas en miniatura.
2
ImageMagick: Librera para realizar manipulaciones de imgenes.
C. GEMAS 257
D. Lenguaje Ruby
Software Libre: Ruby dispone de una licencia GPL, creada por la Free Software
Foundation la cual hace que este lenguaje de programacin sea software libre y por
tanto, los usuarios tienen total libertad para ejecutar, copiar, distribuir, estudiar,
cambiar y mejorar el software.
Dinamismo: En Ruby, las clases nunca estn cerrada, esto quiere decir, que siempre
se pueden aadir nuevos mtodos a esta clase. Siendo vlido tanto para las clases
incluidas con el intrprete como para las nuevas clases escritas.
Tipado Dinmico: Ruby es un lenguaje de tipos dbiles, es decir, que las variables
que usa no tienen un tipo fijo y no es necesaria su declaracin para poder usarlas.
En Ruby, se confa menos en el tipo de un objeto y ms en sus capacidades, que
significa que el tipo de un objeto est definido por lo que puede hacer, no por lo
que es.
El tipado dinmico aporta flexibilidad a la hora de programar, ya que libera al
programador de la obligacin de tener que declarar todas las variables usadas en el
desarrollo del cdigo. Esto conlleva la creacin de programa con menor nmero de
lneas y en consecuencia un aumento de productividad. Pero se puede convertir en
una desventaja, ya que el uso del tipado dinmico puede comportar la generacin
de pequeos bugs difcilmente detectables hasta la ejecucin del programa. Por esta
razn, el desarrollo de aplicaciones en Ruby requieren que se creen multitud de test
para poder detectar el correcto funcionamiento del cdigo generado.
D. LENGUAJE RUBY 261
E. Metodologa gil
Esta metodologa tiene varios principios que la diferencian de las metodologas tra-
dicionales, los cuales estn reflejados en el Manifiesto gil [Beck, Kent; Beedle, Mike;
Bennekum, Arie; Otros] . Segn ste se valora:
Los valores anteriores inspiran los doce Principios del Manifiesto [Beck, Kent;
Beedle, Mike; Bennekum, Arie; Otros]. Los dos primeros principios son generales y resu-
men gran parte del espritu gil. El resto tienen que ver con el proceso a seguir y con el
equipo de desarrollo, en cuanto metas a seguir y organizacin del mismo.
Scrum fue desarrollado por Ken Schwaber, Jeff Sutherland y Mike Beedle y es un
marco de referencia para generar una metodologa gil. Su principal objetivo es llevar los
proyectos a su realizacin final cuando estn envueltos en entornos cambiantes, como es
el mundo del software y, especialmente, el entorno web.
264 CAPTULO 10. ANEXOS
En Scrum se realizan entregas parciales y regulares del producto final, priorizadas por
el beneficio que aportan al receptor del proyecto. Por ello, est especialmente indicado
para proyectos en entornos complejos, donde:
Transparencia hace referencia a que todas las personas implicadas deben estar al
corriente de los cambios, contratiempos o impedimentos que surjan.
F. Pruebas en Rails
G. Rails
Fue desarrollado por el dans David Heinemeier Hansson, como una herramienta
para facilitarse el trabajo al programar la aplicacin web Basecamp para la empresa
37 Signals. En julio de 2004 liber el cdigo como software libre, y en febrero de 2005
comenz a aceptar colaboraciones para mejorar Rails, formndose un amplio equipo de
programadores, el Core Team.
Caractersticas de Rails
Arquitectura MVC.
Simplicidad.
Soportes de Rails
Bases de Datos: PostGreSQL, MySQL, Oracle, SQL Server, SQLite, IBM DB2.
Filosofa
Dont Repeat Yourself : Las definiciones solo deben de realizarse una nica vez,
pues los componentes estn integrados de manera que no hace falta establecer puen-
tes entre ellos. Cada pieza de conocimiento en un sistema, deber ser expresada en
un slo lugar.
Este principio se basa en escribir menos lneas de cdigo para implementar la apli-
cacin. Si el cdigo es pequeo quiere decir que el desarrollo es ms rpido y con
menos errores, lo que har que el cdigo sea fcil de entender, mantener y mejorar.
Un ejemplo de esto es el utilizado por el patrn ActiveRecord , Ruby no necesita que
se le especifiquen los campos (columnas) de un objeto, este es capaz de obtenerlos a
partir de la base de datos, de modo que no es necesario replicar dicha informacin
en el cdigo.
Llevando ests dos sencillas reglas a la prctica, ser muy sencillo realizar aplicaciones
web funcionales, con una sencillez y claridad en el cdigo que no se puede hacer en otros
lenguajes.
Action View: Este mdulo se encarga de renderizar los datos que el controlador
quiere mostrar al usuario. Su uso es mediante vistas que pertenecen a acciones del
controlador. Adems da la opcin de hacer subvistas para la eficiencia de nuestra
aplicacin. Otra cosa a tener en cuenta es la opcin de poner layouts, que son vistas
270 CAPTULO 10. ANEXOS
que son visibles para cualquier accin del controlador, o si lo ponemos en el principal
ser vista durante toda la web, salvo que no se quiera. Puede crear HTML y XML.
Rails proporciona una serie de herramientas que nos facilitan las tareas comunes. Estas
son:
4
Los Rakefiles equivalen a los Makefiles de Make.
G. RAILS 271
Para la creacin de aplicaciones web Rails posee los siguientes componentes, la mayora
de ellos descritos en la seccin anterior:
Active Record
Action View
Action Controller
Action Mailer
Railties: Cdigo del ncleo de Rails que crea nuevas aplicaciones y las conecta con
los framework en una sola aplicacin.
Rails:
Soporta diferentes SGBDRs para almacenar los datos, incluyendo MySQL, Post-
greSQL, SQLite, IBM DB2 y Oracle. Por defecto tiene la biblioteca SQLite.
Intenta mantener:
A continuacin muestro un listado que indica para cada Caso de Uso cual es el mockup
que lo implementa. stos estn contenidos en la carpeta mockups del CD adjunto.
CU de Gestin de Artistas
Los CU de Gestin de Colecciones, Secciones y Tcnicas son implementados me-
diante mockup similares a los de la Gestin del Artista.
listado_artistas
admin_edicion_artista
admin_ficha_artista
ficha_artista
CU de Gestin de Obras
listado_obras
ficha_obra
foto_obra
CU de Gestin de Catlogo
catalogo
busqueda
obras_recientes
cesta_compra
CU de Gestin de Etiquetas
listado_obras_por_etiquetas
CU de Gestin de Seguridad
identificacion
listado_usuarios
registro_datos_identificacion
registro_datos_personales
registro_datos_confirmacin
notificacion_registro_cliente
restablecer_contrasea_cliente
274 CAPTULO 10. ANEXOS
CU de Gestin de Facturacin
listado_pedidos
informacion_pedido
admin_mostrar_pedido
pago_tarjeta
transferencia_bancaria
confirmacion_pedido_cliente
solicitud_pedido_galeria
CU de Gestin de Internacionalizacin
admin_traduccion_artista
admin_traducir_artista
CU de Quienes somos
quienes_somos
CU de Condiciones
condiciones
Otros
inicio
panel_administracion
contactar
I. TEST DE USABILIDAD 275
I. Test de Usabilidad
Glosario de trminos
277
278 NDICE ALFABTICO
Java, 91, 251, 259 Rails, 27, 94, 101, 129, 252, 260, 267
jQuery, 251, 268 Action controller, 270
JSP, 247, 251 Action mailer, 160, 270
Action Pack, 105
LOC, 235 Action resource, 271
Action view, 269
Mquina virtual, 251 Action webservices, 270
Mtrica Active record, 140, 143, 249, 268, 269
Proceso, 252 Active support, 271
Producto, 251 Helpers, 250
Magento, 98 MVC, 247, 252, 267
Manifiesto gil, 263 Railties, 271
Metaprogramacin, 140, 251, 267 Rake, 252, 259, 270
Metodologa gil, 13, 251, 263 Rakefile, 139
Scrum, 14, 253, 263 Rakefiles, 270
Metodologa de desarrollo, 13, 251 Scaffold, 249
MIT, 247, 252 Scaffolding, 139, 270
Mockup, 108, 131 WEBrick, 268, 270
Modelo de negocio, 13, 252 WebServer, 270
Multiplataforma, 259 RBS, 247
MVC, 93, 104, 106, 125, 149 Refactorizacin, 253
MySql, 27, 83, 104, 130, 252, 268
Reglas de negocio, 84, 253
Repositorio, 253
Navegador, 252
REST, 253
Open source, 252, 259 RESTful, 253, 271
ORM, 247, 252 Riesgo, 29, 31, 3537
Oscommerce, 95 RoR, 129, 247
Ruby, 27, 91, 101, 129, 253, 259, 267
Pasarela de pago, 43, 164 JRuby, 259
Patrn de diseo, 252 Rdoc, 260
PDF, 247 RubyGems, 135, 253, 267
Perfil, 24 Ruby empotrado, 153
Administrador de BBDD, 26 Ruby on Rails, 129, 253, 260
NDICE ALFABTICO 279
AENOR (2002).
Norma espaola: UNE 157001. Criterios generales para la elaboracin de proyectos.
http://www.ehu.es/Degypi/General/norma157001.pdf.
Alarcos, UCLM-ESI. Grupo.
Gestin de riesgos en proyectos software.
http://alarcos.inf-cr.uclm.es/doc/pgsi/doc/teo/7/pgsi-t7.pdf.
ASCIIcasts.
160: Authlogic.
http://es.asciicasts.com/episodes/160-authlogic.
ASCIIcasts.
206: Action Mailer en Rails 3.
http://es.asciicasts.com/episodes/206-action-mailer-en-rails-3.
ASCIIcasts.
228: Sortable Table Columns.
http://asciicasts.com/episodes/228-sortable-table-columns.
ASCIIcasts.
240: Search, Sort, Paginate with AJAX.
http://asciicasts.com/episodes/240-search-sort-paginate-with-ajax.
Ataz Lpez, Joaqun (2006).
Gua casi completa de BIBTEX.
ftp://ftp.ctan.org/tex-archive/info/spanish/guia-bibtex/guia-bibtex.pdf.
Authorize.net.
Gema authorize-net.
http://rubydoc.info/gems/authorize-net/1.5.2/frames/.
AuthorizeNet (2011).
Merchant Web Services API. Automated Recurring BillingTM (ARB) XML Guide.
http://www.authorize.net/support/ARB_guide.pdf.
AVOS.
Delicious.
http://delicious.com/.
281
Beck, Kent; Beedle, Mike; Bennekum, Arie; Otros (2001a).
Manifesto for Agile Software Development.
http://agilemanifesto.org/.
Britt, James.
Module::Authlogic::I18n.
http://rubydoc.info/github/binarylogic/authlogic/master/Authlogic/I18n.
Brown, Mat.
Gema sunspot_rails.
https://github.com/outoftime/sunspot/tree/master/sunspot_rails.
BuenasTareas.com.
Patron Active Record.
http://www.buenastareas.com/ensayos/Patron-Active-Record/3226566.html.
Corporation, Oracle.
MySql.
http://dev.mysql.com/.
CraigsList (2012).
Craigslist Classifieds.
http://www.craigslist.org/.
282
Fowler, Martin (2006).
Rake: algunos comandos tiles.
http://dummyonrails.lacoctelera.net/post/2007/06/13/rake-algunos-comandos-utiles.
Fuchs, Sven.
Rails i18n.
https://github.com/svenfuchs/rails-i18n/tree/master/rails/locale.
Geeknet, Inc..
Documentation from Ruby Source Files.
http://rdoc.sourceforge.net/.
Geeknet, Inc..
freshmeat.net.
http://freshmeat.net/.
Google.
Google Code.
http://code.google.com/.
Heroku.
Getting Started with Heroku.
http://devcenter.heroku.com/articles/quickstart.
283
IEEE (1990).
IEEE Standard Glossary of Software Engineering Terminology.
http://www.idi.ntnu.no/grupper/su/publ/ese/ieee-se-glossary-610.12-1990.pdf.
IEEE-SA (1998).
IEEE 830/1998. IEEE Recommended Practice for Software Requeriments Specifica-
tions.
http://www.slideshare.net/ahmedhasan/ieee-830-1998-software-requirements-
specifications.
Indeed (2012).
Indeed.
http://www.indeed.com/.
Johnson, Ben.
Gema authlogic.
http://rubydoc.info/gems/authlogic/3.1.0/frames.
Ketelle, Paul.
Gema paperclipdropbox.
https://github.com/dripster82/paperclipdropbox.
Kramarenko, Artem.
Gema acts-as-taggable-on.
http://rubydoc.info/gems/acts-as-taggable-on/2.2.2/frames.
Lindsaar, Mikel.
Gema mail.
https://github.com/mikel/mail.
Luetke, Tobias.
Gema activemerchan.
http://activemerchant.org/.
284
Marcelo Hernn, Schenone (2004).
Tesis: Diseo de una Metodologa gil de Desarrollo de Software.
http://materias.fi.uba.ar/7500/schenone-tesisdegradoingenieriainformatica.pdf.
Marohnic, Mislav.
Gema will_paginate.
https://github.com/mislav/will_paginate/wiki.
Matake, Nov.
Gema paypal-express.
https://github.com/nov/paypal-express.
Matsuda, Akira.
Gema kaminari.
https://github.com/amatsuda/kaminari.
Microsistems, Sun.
MySQL.
http://www.mysql.com/.
Motion, Sparkle.
Gema nokogiri.
http://nokogiri.org/.
Paypal.
Incorporar pago de PayPal a su carrito de compras de terceros.
https://www.paypal.com/.
PayPal (2008).
Website Payments Standard Integration Guide.
https://www.paypalobjects.com/en_US/pdf/PP_WebsitePaymentsStandard_IntegrationGuide.pdf.
285
Railscasts.
251 MetaWhere and MetaSearch.
http://railscasts.com/episodes/251-metawhere-metasearch?language=es&view=asciicast.
Ross, Phil.
Gema tzinfo.
http://tzinfo.rubyforge.org/.
Sichanugrist, Prem.
Gema paperclip.
https://github.com/thoughtbot/paperclip.
Simonic, Aleksander.
WinEdt.
http://www.winedt.com/.
Stachewicz, Tomasz.
Gema globalize3.
https://github.com/svenfuchs/globalize3.
StuFF mc.
Demo globalize2.
https://github.com/joshmh/globalize2-demo.
W3C.
World Wide Web Consortium (W3C).
http://www.w3.org/.
286
Welton, David N. (2011).
Programming Language Popularity.
http://www.langpop.com/.
Wikibooks (2011).
LATEX Wikibook.
http://en.wikibooks.org/wiki/LaTeX.
Wikipedia.
Desarrollo gil de software.
http://es.wikipedia.org/wiki/Desarrollo_ %C3 %A1gil_de_software.
Wikipedia.
Lenguaje de programacin interpretado.
http://es.wikipedia.org/wiki/Lenguaje_de_programaci %C3 %B3n_interpretado.
Wikipedia.
Pruebas de software.
http://es.wikipedia.org/wiki/Pruebas_de_software.
Wikipedia.
Ruby.
http://es.wikipedia.org/wiki/Ruby.
Wikipedia.
Ruby on Rails.
http://es.wikipedia.org/wiki/Ruby_on_Rails.
Yahoo.
Yahoo Search.
http://es.search.yahoo.com/.
287
288
GNU Free Documentation License
Copyright
c 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. http://
fsf.org/.
Everyone is permitted to copy and distribute verbatim copies of this license document,
but changing it is not allowed.
Preamble
The purpose of this License is to make a manual, textbook, or other functional and
useful document free in the sense of freedom: to assure everyone the effective freedom
to copy and redistribute it, with or without modifying it, either commercially or noncom-
mercially. Secondarily, this License preserves for the author and publisher a way to get
credit for their work, while not being considered responsible for modifications made by
others.
This License is a kind of copyleft, which means that derivative works of the document
must themselves be free in the same sense. It complements the GNU General Public
License, which is a copyleft license designed for free software.
We have designed this License in order to use it for manuals for free software, because
free software needs free documentation: a free program should come with manuals provi-
ding the same freedoms that the software does. But this License is not limited to software
manuals; it can be used for any textual work, regardless of subject matter or whether it
is published as a printed book. We recommend this License principally for works whose
purpose is instruction or reference.
This License applies to any manual or other work, in any medium, that contains a
notice placed by the copyright holder saying it can be distributed under the terms of this
License. Such a notice grants a world-wide, royalty-free license, unlimited in duration,
to use that work under the conditions stated herein. The Document, below, refers to
289
any such manual or work. Any member of the public is a licensee, and is addressed as
you. You accept the license if you copy, modify or distribute the work in a way requiring
permission under copyright law.
A Modified Version of the Document means any work containing the Document or a
portion of it, either copied verbatim, or with modifications and/or translated into another
language.
The Invariant Sections are certain Secondary Sections whose titles are designated,
as being those of Invariant Sections, in the notice that says that the Document is released
under this License. If a section does not fit the above definition of Secondary then it
is not allowed to be designated as Invariant. The Document may contain zero Invariant
Sections. If the Document does not identify any Invariant Sections then there are none.
The Cover Texts are certain short passages of text that are listed, as Front-Cover
Texts or Back-Cover Texts, in the notice that says that the Document is released under
this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may
be at most 25 words.
Examples of suitable formats for Transparent copies include plain ASCII without mar-
kup, Texinfo input format, LATEXinput format, SGML or XML using a publicly available
DTD, and standard-conforming simple HTML, PostScript or PDF designed for human
modification. Examples of transparent image formats include PNG, XCF and JPG. Opa-
que formats include proprietary formats that can be read and edited only by proprietary
word processors, SGML or XML for which the DTD and/or processing tools are not
generally available, and the machine-generated HTML, PostScript or PDF produced by
some word processors for output purposes only.
290
The Title Page means, for a printed book, the title page itself, plus such following
pages as are needed to hold, legibly, the material this License requires to appear in the
title page. For works in formats which do not have any title page as such, Title Page
means the text near the most prominent appearance of the works title, preceding the
beginning of the body of the text.
The publisher means any person or entity that distributes copies of the Document
to the public.
A section Entitled XYZ means a named subunit of the Document whose title either
is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in
another language. (Here XYZ stands for a specific section name mentioned below, such
as Acknowledgements, Dedications, Endorsements, or History.) To "Preserve the
Title.of such a section when you modify the Document means that it remains a section
Entitled XYZ according to this definition.
The Document may include Warranty Disclaimers next to the notice which states
that this License applies to the Document. These Warranty Disclaimers are considered to
be included by reference in this License, but only as regards disclaiming warranties: any
other implication that these Warranty Disclaimers may have is void and has no effect on
the meaning of this License.
VERBATIM COPYING
You may copy and distribute the Document in any medium, either commercially or
noncommercially, provided that this License, the copyright notices, and the license notice
saying this License applies to the Document are reproduced in all copies, and that you
add no other conditions whatsoever to those of this License. You may not use technical
measures to obstruct or control the reading or further copying of the copies you make or
distribute. However, you may accept compensation in exchange for copies. If you distribute
a large enough number of copies you must also follow the conditions in section 3.
You may also lend copies, under the same conditions stated above, and you may
publicly display copies.
COPYING IN QUANTITY
If you publish printed copies (or copies in media that commonly have printed covers)
of the Document, numbering more than 100, and the Documents license notice requires
Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all
these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the
back cover. Both covers must also clearly and legibly identify you as the publisher of
these copies. The front cover must present the full title with all words of the title equally
prominent and visible. You may add other material on the covers in addition. Copying
291
with changes limited to the covers, as long as they preserve the title of the Document
and satisfy these conditions, can be treated as verbatim copying in other respects.
If the required texts for either cover are too voluminous to fit legibly, you should put
the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest
onto adjacent pages.
If you publish or distribute Opaque copies of the Document numbering more than 100,
you must either include a machine-readable Transparent copy along with each Opaque
copy, or state in or with each Opaque copy a computer-network location from which
the general network-using public has access to download using public-standard network
protocols a complete Transparent copy of the Document, free of added material. If you use
the latter option, you must take reasonably prudent steps, when you begin distribution
of Opaque copies in quantity, to ensure that this Transparent copy will remain thus
accessible at the stated location until at least one year after the last time you distribute
an Opaque copy (directly or through your agents or retailers) of that edition to the public.
It is requested, but not required, that you contact the authors of the Document well
before redistributing any large number of copies, to give them a chance to provide you
with an updated version of the Document.
MODIFICATIONS
You may copy and distribute a Modified Version of the Document under the conditions
of sections 2 and 3 above, provided that you release the Modified Version under precisely
this License, with the Modified Version filling the role of the Document, thus licensing
distribution and modification of the Modified Version to whoever possesses a copy of it.
In addition, you must do these things in the Modified Version:
Use in the Title Page (and on the covers, if any) a title distinct from that of the
Document, and from those of previous versions (which should, if there were any,
be listed in the History section of the Document). You may use the same title as a
previous version if the original publisher of that version gives permission.
List on the Title Page, as authors, one or more persons or entities responsible for
authorship of the modifications in the Modified Version, together with at least five
of the principal authors of the Document (all of its principal authors, if it has fewer
than five), unless they release you from this requirement.
State on the Title page the name of the publisher of the Modified Version, as the
publisher.
Add an appropriate copyright notice for your modifications adjacent to the other
copyright notices.
292
Include, immediately after the copyright notices, a license notice giving the public
permission to use the Modified Version under the terms of this License, in the form
shown in the Addendum below.
Preserve in that license notice the full lists of Invariant Sections and required Cover
Texts given in the Documents license notice.
Include an unaltered copy of this License.
Preserve the section Entitled "History", Preserve its Title, and add to it an item
stating at least the title, year, new authors, and publisher of the Modified Version
as given on the Title Page. If there is no section Entitled "Historyn the Document,
create one stating the title, year, authors, and publisher of the Document as given
on its Title Page, then add an item describing the Modified Version as stated in the
previous sentence.
Preserve the network location, if any, given in the Document for public access to
a Transparent copy of the Document, and likewise the network locations given in
the Document for previous versions it was based on. These may be placed in the
"History"section. You may omit a network location for a work that was published
at least four years before the Document itself, or if the original publisher of the
version it refers to gives permission.
For any section Entitled .Acknowledgements.or "Dedications", Preserve the Title of
the section, and preserve in the section all the substance and tone of each of the
contributor acknowledgements and/or dedications given therein.
Preserve all the Invariant Sections of the Document, unaltered in their text and in
their titles. Section numbers or the equivalent are not considered part of the section
titles.
Delete any section Entitled .Endorsements". Such a section may not be included in
the Modified Version.
Do not retitle any existing section to be Entitled .Endorsements.or to conflict in title
with any Invariant Section.
Preserve any Warranty Disclaimers.
If the Modified Version includes new front-matter sections or appendices that qualify
as Secondary Sections and contain no material copied from the Document, you may at
your option designate some or all of these sections as invariant. To do this, add their titles
to the list of Invariant Sections in the Modified Versions license notice. These titles must
be distinct from any other section titles.
You may add a section Entitled Endorsements, provided it contains nothing but
endorsements of your Modified Version by various partiesfor example, statements of
peer review or that the text has been approved by an organization as the authoritative
definition of a standard.
293
You may add a passage of up to five words as a Front-Cover Text, and a passage of up
to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified
Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added
by (or through arrangements made by) any one entity. If the Document already includes
a cover text for the same cover, previously added by you or by arrangement made by the
same entity you are acting on behalf of, you may not add another; but you may replace
the old one, on explicit permission from the previous publisher that added the old one.
The author(s) and publisher(s) of the Document do not by this License give permission
to use their names for publicity for or to assert or imply endorsement of any Modified
Version.
COMBINING DOCUMENTS
You may combine the Document with other documents released under this License,
under the terms defined in section 4 above for modified versions, provided that you
include in the combination all of the Invariant Sections of all of the original documents,
unmodified, and list them all as Invariant Sections of your combined work in its license
notice, and that you preserve all their Warranty Disclaimers.
The combined work need only contain one copy of this License, and multiple identical
Invariant Sections may be replaced with a single copy. If there are multiple Invariant
Sections with the same name but different contents, make the title of each such section
unique by adding at the end of it, in parentheses, the name of the original author or
publisher of that section if known, or else a unique number. Make the same adjustment
to the section titles in the list of Invariant Sections in the license notice of the combined
work.
In the combination, you must combine any sections Entitled History in the various
original documents, forming one section Entitled History; likewise combine any sections
Entitled Acknowledgements, and any sections Entitled Dedications. You must delete
all sections Entitled .Endorsements".
COLLECTIONS OF DOCUMENTS
You may make a collection consisting of the Document and other documents released
under this License, and replace the individual copies of this License in the various docu-
ments with a single copy that is included in the collection, provided that you follow the
rules of this License for verbatim copying of each of the documents in all other respects.
You may extract a single document from such a collection, and distribute it indivi-
dually under this License, provided you insert a copy of this License into the extracted
document, and follow this License in all other respects regarding verbatim copying of that
document.
294
AGGREGATION WITH INDEPENDENT WORKS
A compilation of the Document or its derivatives with other separate and independent
documents or works, in or on a volume of a storage or distribution medium, is called an
aggregate if the copyright resulting from the compilation is not used to limit the legal
rights of the compilations users beyond what the individual works permit. When the
Document is included in an aggregate, this License does not apply to the other works in
the aggregate which are not themselves derivative works of the Document.
If the Cover Text requirement of section 3 is applicable to these copies of the Docu-
ment, then if the Document is less than one half of the entire aggregate, the Documents
Cover Texts may be placed on covers that bracket the Document within the aggregate, or
the electronic equivalent of covers if the Document is in electronic form. Otherwise they
must appear on printed covers that bracket the whole aggregate.
TRANSLATION
TERMINATION
You may not copy, modify, sublicense, or distribute the Document except as expressly
provided under this License. Any attempt otherwise to copy, modify, sublicense, or dis-
tribute it is void, and will automatically terminate your rights under this License.
However, if you cease all violation of this License, then your license from a particular
copyright holder is reinstated (a) provisionally, unless and until the copyright holder
explicitly and finally terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to 60 days after the
cessation.
295
Moreover, your license from a particular copyright holder is reinstated permanently if
the copyright holder notifies you of the violation by some reasonable means, this is the
first time you have received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after your receipt of the
notice.
Termination of your rights under this section does not terminate the licenses of parties
who have received copies or rights from you under this License. If your rights have been
terminated and not permanently reinstated, receipt of a copy of some or all of the same
material does not give you any rights to use it.
The Free Software Foundation may publish new, revised versions of the GNU Free
Documentation License from time to time. Such new versions will be similar in spirit to
the present version, but may differ in detail to address new problems or concerns. See
http://www.gnu.org/copyleft/.
Each version of the License is given a distinguishing version number. If the Document
specifies that a particular numbered version of this License .or any later version.applies
to it, you have the option of following the terms and conditions either of that specified
version or of any later version that has been published (not as a draft) by the Free Software
Foundation. If the Document does not specify a version number of this License, you may
choose any version ever published (not as a draft) by the Free Software Foundation. If
the Document specifies that a proxy can decide which future versions of this License can
be used, that proxys public statement of acceptance of a version permanently authorizes
you to choose that version for the Document.
RELICENSING
Massive Multiauthor Collaboration Site (or MMC Sit) means any World Wide
Web server that publishes copyrightable works and also provides prominent facilities for
anybody to edit those works. A public wiki that anybody can edit is an example of such
a server. A Massive Multiauthor Collaboration (or MMC) contained in the site means
any set of copyrightable works thus published on the MMC site.
CC-BY-SA means the Creative Commons Attribution-Share Alike 3.0 license pu-
blished by Creative Commons Corporation, a not-for-profit corporation with a principal
place of business in San Francisco, California, as well as future copyleft versions of that
license published by that same organization.
296
An MMC is eligible for relicensing if it is licensed under this License, and if all
works that were first published under this License somewhere other than this MMC, and
subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or
invariant sections, and (2) were thus incorporated prior to November 1, 2008.
The operator of an MMC Site may republish an MMC contained in the site under
CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is
eligible for relicensing.
To use this License in a document you have written, include a copy of the License in
the document and put the following copyright and license notices just after the title page:
Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or
modify this document under the terms of the GNU Free Documentation License, Version
1.3 or any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included
in the section entitled "GNU Free Documentation License".
If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the
with . . . Texts. line with this:
with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts
being LIST, and with the Back-Cover Texts being LIST.
If you have Invariant Sections without Cover Texts, or some other combination of the
three, merge those two alternatives to suit the situation.
297