Vous êtes sur la page 1sur 35

METODOLOGAS GILES DE DESARROLLO: EL

CASO Ruby On Rails

LUIS ALBERTO PINEDA SOTO


JEAN PHILIP ZUCCHET AMAYA

UNIVERSIDAD DE LOS ANDES


FACULTAD DE INGENIERA
DEPARTAMENTO DE INGENIERA DE SISTEMAS
BOGOT D.C., 2007

METODOLOGAS GILES DE DESARROLLO: EL


CASO Ruby On Rails

LUIS ALBERTO PINEDA SOTO


JEAN PHILIP ZUCCHET AMAYA

Tesis de Grado

Directores
Rubby Casallas
Nicols Lpez

UNIVERSIDAD DE LOS ANDES


FACULTAD DE INGENIERA
DEPARTAMENTO DE INGENIERA DE SISTEMAS
BOGOT D.C., 2007

Nota de aceptacin.

___________________________

___________________________

___________________________

___________________________
Director de Proyecto

___________________________
Jurado

___________________________
Jurado

Bogot D.C Diciembre 2007

TABLA DE CONTENIDO
1. INTRODUCCIN ............................................................................................................................5
2. MOTIVACIN ..................................................................................................................................5
3. OBJETIVOS.......................................................................................................................................6
3.1 OBJETIVO GENERAL ........................................................................................................................6
3.2 OBJETIVOS ESPECFICOS ...............................................................................................................6
4. METODOLOGAS GILES DE DESARROLLO ...................................................................7
5. INTRODUCCIN RUBY Y RAILS ...........................................................................................8
5.1 QU ES RUBY? ..............................................................................................................................8
5.2 QU ES RAILS? .............................................................................................................................8
6. RUBY ....................................................................................................................................................9
6.1 CMO FUNCIONA RUBY? ..............................................................................................................9
6.2 PRERREQUISITOS ............................................................................................................................9
6.3 AMBIENTE DE DESARROLLO ...........................................................................................................9
6.4 RUBY INTERACTIVO (IRB) ............................................................................................................10
6.5 SINTAXIS BSICA .........................................................................................................................11
6.6 PROGRAMAS RUBY ........................................................................................................................12
7 RAILS ..................................................................................................................................................13
7.1 CMO FUNCIONA RAILS? ...........................................................................................................13
7.2 ESTRUCTURA Y FUNCIONAMIENTO DE RAILS ..............................................................................14
7.3 PROCESO GENERAL DE DESARROLLO DE APLICACIONES RAILS ...............................................15
7.4 PRIMERA IMPLEMENTACIN EN RAILS .........................................................................................15
7.4.1 Definicin el Modelo de Negocio ................................................................................15
7.4.2 Instanciacin de la Aplicacin Rails ..........................................................................16
7.4.3 Creacin y Configuracin de la Base de Datos para Rails. ..............................18
7.4.4 Traduccin del Modelo de Negocio a Tablas Relacionales................................19
7.4.5 Generacin de los Modelos ..........................................................................................20
7.4.6 Generacin de los Controladores...............................................................................21
7.4.7 Generacin de las Vistas...............................................................................................23
7.4.8 Ejecutando la Aplicacin ...............................................................................................27
8. RUBY ON RAILS VS JAVA (CASO DE ESTUDIO) ........................................................31
8.1 DESCRIPCIN DEL CASO ..............................................................................................................31
8.2 RESULTADOS .................................................................................................................................31
8.3 CONCLUSIONES Y ASPECTOS A ANALIZAR ..................................................................................33
9. TRABAJO FUTURO ......................................................................................................................34
10. BIBLIOGRAFA..........................................................................................................................35

1. Introduccin
Ruby es un lenguaje de programacin dinmico Open Source
enfocado en la simplicidad y la productividad. Rails es un entorno
para el desarrollo de aplicaciones Web con base de datos. La
cooperacin de estos dos artefactos ha dado surgimiento a lo que
se conoce en la actualidad como Desarrollo Web Ruby On Rails. Su
principal objetivo es el de facilitar el desarrollo de aplicaciones
Web con muy poco cdigo y mnima configuracin.
El propsito de esta investigacin es evaluar las principales
caractersticas de este framework de desarrollo, proporcionando
una primera aproximacin al conjunto de tcnicas y principios
inherentes a este paradigma de desarrollo, identificando en
paralelo sus oportunidades y desafos. Al final del proceso, se
disear e implementar un prototipo funcional que involucre la
utilizacin de los principales conceptos asociados a dicho entorno.

2. Motivacin
La tendencia impuesta en los ltimos aos por los grandes
jugadores de la industria de software, ha planteado una serie de
cambios en la forma que se conciben los procesos de desarrollo de
software. Entre ellas, encontramos premisas importantes sobre la
forma de lidiar con las principales restricciones de tiempo, costo y
capital humano involucradas en el desarrollo de un proyecto de
software.
En particular, el grupo de desarrollo e investigacin de toda
organizacin de software debe estar en capacidad de fomentar la
utilizacin de metodologas y herramientas que permitan mitigar
los principales riesgos asociados al proceso de desarrollo. Para ello,
se ha propuesto en la industria, una serie de metodologas giles
que permiten atacar este tipo de problemas, una de estas
iniciativas es el framework Ruby On Rails cuyo impacto en la
industria se ha incrementando notablemente en los ltimos aos.
Luego, es importante ir acorde a las tendencias que este tipo de
tecnologas imponen. Para lograr esto ser necesario contar con
criterios objetivos al momento de adoptar nuevas propuestas.

3. Objetivos
3.1 Objetivo General
Analizar y presentar el entorno de desarrollo de aplicaciones Web:
Ruby On Rails como punto de partida en el estudio de
metodologas giles de desarrollo y su impacto en la visin global
de los procesos de construccin de software.
3.2 Objetivos Especficos
Desarrollar un proceso de investigacin que permita
introducir los principales conceptos inherentes al lenguaje de
programacin Ruby y el framework de desarrollo web Rails,
determinando su estructura general de funcionamiento y los
conocimientos necesarios con que se debe contar al
momento de dar inicio a un desarrollo de tamao pequeo.
Estructurar un tutorial que permita introducir de manera
prctica la utilizacin de Ruby y Rails a travs de la
implementacin de una aplicacin Web con funcionalidad
CRUD.
Implementar un prototipo funcional correspondiente a un
sistema con caractersticas similares a un MIS (Management
Information System). En particular, los requerimientos
funcionales de este sistema se ajustarn a los planteados en
la Consola de Administracin de Usuarios Qualdev
desarrollado por el Grupo de Seguridad del grupo Qualdev
en 2007-II.

4. Metodologas giles de Desarrollo


Para entender el concepto de metodologas agiles y lo que subyace
bajo ellas resulta adecuado contextualizar en primera instancia la
razn de su surgimiento. Para ello, vale la pena hace referencia a lo
planteado por Fowler en [4],
From Nothing, to Monumental, to Agile
Most software development is a chaotic activity, often characterized by the
phrase "code and fix". The software is written without much of an
underlying plan, and the design of the system is cobbled together from
many short term decisions. This actually works pretty well as the system is
small, but as the system grows it becomes increasingly difficult to add new
features to the system. Furthermore bugs become increasingly prevalent
and increasingly difficult to fix. A typical sign of such a system is a long
test phase after the system is "feature complete". Such a long test phase
plays havoc with schedules as testing and debugging is impossible to
schedule.
The original movement to try to change this introduced the notion of
methodology. These methodologies impose a disciplined process upon
software development with the aim of making software development more
predictable and more efficient. They do this by developing a detailed
process with a strong emphasis on planning inspired by other engineering
disciplines - which is why I like to refer to them as engineering
methodologies (another widely used term for them is plan-driven
methodologies).
Engineering methodologies have been around for a long time. They've not
been noticeable for being terribly successful. They are even less noted for
being popular. The most frequent criticism of these methodologies is that
they are bureaucratic. There's so much stuff to do to follow the
methodology that the whole pace of development slows down.
Agile methodologies developed as a reaction to these methodologies. For
many people the appeal of these agile methodologies is their reaction to
the bureaucracy of the engineering methodologies. These new methods
attempt a useful compromise between no process and too much process,
providing just enough process to gain a reasonable payoff.

El cambio de paradigma se hace entonces evidente, no solo


abarcando temticas que afectan el rea de desarrollo de una
organizacin de software, sino contemplando de manera transversal
la gestin de relaciones con cliente, administracin de recursos
humanos sin dejar de lado el marco financiero.
De este modo, las metodologas agiles se presentan como una
propuesta que vale la pena diagnosticar, analizar y evaluar con el fin
de alinear estrategias empresariales que puedan enriquecer la
propuesta de valor ofrecida por las casas de software a ciertos
segmentos de su mercado.

5. Introduccin Ruby y Rails


5.1 Qu es Ruby?
Ruby es un lenguaje de programacin Open Source interpretado, de
propsito general y orientado a objetos. En realidad uno de los pocos
lenguajes puramente OO. A pesar de su simplicidad, Ruby es un
poderoso lenguaje de programacin utilizado en la industria.
Diseado y escrito por Yukihiro Matsumoto, este lenguaje fue
presentado en 1994, adquiriendo rpidamente popularidad entre
programadores Japoneses. Para principios del 2000, ms de 20 libros
(escritos en japons) sobre Ruby haban sido publicados.
Ruby integra grandes ideas de lenguajes tradicionales tales como
Perl, Python, Smalltalk, Eiffel, ADA, CLU y LISP. En general Ruby
integra de manera simple y estructurada en un sistema que
representa los principios del menor esfuerzo y menos sorpresa. Ruby
por lo tanto es un lenguaje relativamente fcil de aprender, fcil de
leer y fcil de mantener, sin dejar de ser muy poderoso y sofisticado.
5.2 Qu es Rails?
A mediados de 2004 se produce un segundo surgimiento masivo de
inters con la presentacin por parte de David Heinemeier Hansson
del framework de desarrollo de aplicaciones web: Ruby On Rails.
Construido sobre un clster separado de libreras, el framework Rails
administra almacenamiento y retorno de bases de datos, plantillas
HTML, y todo el trabajo de capa intermedia para conectar los datos
subyacentes a pginas Web y formularios de entrada que se
despliegan y actualizan.
Rails ha crecido en popularidad, ganando una slida y amplia
reputacin como herramienta de desarrollo.

6. Ruby
6.1 Cmo funciona Ruby?
Con el fin de iniciar un desarrollo que haga uso de Ruby On Rails, es
necesario que el programador principiante conozca ciertos elementos
y premisas del lenguaje de programacin Ruby. No olvidemos que
finalmente Rails es un framework desarrollado principalmente con
Ruby y que de una u otra manera solo entendiendo este ltimo, se
estar en capacidad de explotar todo el potencial que Rails provee.
En primera instancia es necesario aclarar ciertos trminos que
guiaran el proceso de aprendizaje contemplado en este documento.
Ruby, ruby y RUBY?. Ruby es un lenguaje de programacin. De
hecho en esta seccin hablamos del funcionamiento de Ruby. La
versin en minscula, ruby, es un programa de computador;
especficamente es el interprete Ruby, es decir el programa que lee y
corre sus programas. Finalmente existe RUBY o mejor no existe-.
Ruby no es un acrnimo y por lo tanto no es correcto deletrearlo en
mayscula. Luego, Ruby para el lenguaje, ruby para el intrprete.
6.2 Prerrequisitos
El proceso de instalacin y configuracin del ambiente de desarrollo
para Ruby y Rails se considera relativamente sencillo, sin embargo se
listarn los pasos necesarios para llevar a cabo esta tarea y algunas
consideraciones adicionales a la hora de crear un proyecto en este
ambiente.
6.3 Ambiente de Desarrollo
Debido a su popularidad, el listado de herramientas disponibles para
el desarrollo de aplicaciones Ruby y Rails es amplio. En primera
instancia es necesario tener en cuenta que los requerimientos
mnimos para hacer uso de Ruby on Rails son:
Ruby: La versin estable actual es 1.8.6.
Rails: La versin estable actual es 1.2.5.
Servidor Web.
Motor de Base de Datos.
Adicionalmente, existen bundles (paquetes preconfigurados) que
permiten realizar el despliegue de aplicaciones Rails de una manera
mucho ms rpida, sin necesidad que el desarrollador se tenga que
preocupar por el proceso de configuracin previo. Estos paquetes se
encuentran disponibles para los principales sistemas operativos de la
industria.

A continuacin se listan algunos de los paquetes que presentan


mayor aceptacin dentro de la comunidad por su facilidad de
instalacin y utilizacin.
Windows
Instant Rails: Paquete preconfigurado con Apache y MySQL.
Home: http://instantrails.rubyforge.org/wiki/wiki.pl.
Linux
LinRails: Paquete preconfigurado con Mongrel (Servidor Web)
y MySQL. Home: http://linrails.thembid.com
Mac OS X
Locomotive: Paquete preconfigurado con Mongrel y MySQL.
Home: http://locomotive.raaum.org/
6.4 Ruby Interactivo (irb)
Con el fin de dar inicio al proceso de aprendizaje del lenguaje Ruby,
introduciremos una herramienta de fcil uso llamada irb (Interactive
Ruby) que permitir abordar los principales conceptos del lenguaje de
una manera agradable.
Escrito por Keiju Ishitsuka, irb resulta indispensable para
programadores Ruby, y a travs de su utilizacin y experimentacin
el proceso de aprendizaje arrojar mejores resultados. As entonces,
irb es bsicamente una lnea de comandos que de manera interactiva
permite ejecutar llamados a funciones Ruby.
Con el fin de hacer uso de esta herramienta es necesario que el
paquete de Ruby est referenciado en el sistema operativo a travs
de una variable de entorno o de sistema. Es decir, se agregar la
direccin <installDir>/ruby/bin al PATH del sistema.

Figura 1. Interactive Ruby (irb)

6.5 Sintaxis Bsica


Cmo parte del proceso de inicio, vale la pena invertir un poco de
tiempo para conocer los elementos ms bsicos de la sintaxis de
Ruby, y an cuando el cdigo resulte muchas veces similar a cajas
negras, s permitir vislumbrar el principal significado de un pequeo
nmero de elementos. Para introducir la utilizacin de estos
elementos, haremos uso de irb.
Gran parte del cdigo que se escribe en un programa Ruby son
llamadas a mtodos. Estos llamados algunas veces consisten
simplemente en el nombre de un mtodo, posiblemente seguido por
uno o ms argumentos.
Por ejemplo, esta lnea llama al mtodo puts con un argumento:
puts This is Ruby
Otra llamada de mtodo usa sintaxis especial: el operador punto, el
cual establece una relacin entre un valor o expresin a su izquierda
y un nombre de mtodo a su derecha.
x = 500.to_i

# El mensaje to_i est siendo enviado a la


cadena 500

Finalmente se puede llamar un mtodo con argumentos de la


siguiente manera:
x = 500.to_i(9)
El anterior ejemplo despliega por pantalla el valor de la cadena 500
en base 9.

A continuacin se listan algunas operaciones que pueden resultar


interesantes para conocer el funcionamiento bsico de Ruby.
Operacin

Ejemplo(s)

Comentario

Aritmtica

5+7
4-3
3*7
90 / 3
X = 13
cadena = Hola mundo
puts I love Ruby

Los ejemplos muestran


enteros. De igual modo se
pueden usar flotantes.

print Rails rules

Imprime la lnea tal como se


especfica y deja el cursor al
final.

Asignando un valor a una


variable
Salida por pantalla

Asignacin de valores a
variables.
Agrega fin de lnea a la
cadena resultado.

x = abc
puts x
x=abc
prints x

Obteniendo una lnea por


teclado

x=abc
px
gets
string = gets

Convirtiendo una cadena


a un nmero

x = 100.to_i
s = 100
x = s.to_i

Comparando dos
valores/variables

x == y

Condicionales

if x == y
# execute
else
# execute
end
# Linea de comentario
X = 2 # Mi comentario

Comentarios

p imprime una cadena


previamente inspeccionada.
Asignacin directa de la
entrada de flujo a una
cadena.
Para operaciones
aritmticas es necesario
utilizar la conversin
adecuada.
La comparacin utiliza
doble signo. No solo uno.
La expresin condicional
siempre debe terminar
con end.
Los comentarios son
ignorados por el
intrprete.

6.6 Programas Ruby


En esta seccin se describir como crear, compilar y ejecutar
programas Ruby desde la consola de comandos de Windows.
Creacin
Por ahora es suficiente con usar cualquier editor de texto y
guardar los archivos con extensin .rb.

Compilacin
Para compilar un archivo .rb desde la consola Windows, se
ejecuta el comando: ruby -cw ejemplo.rb. El flag c le indica al
intrprete de Ruby que compile el archivo y w que nos informe
la presencia de warnings en el cdigo.
Ejecucin.
Finalmente basta con ejecutar el comando ruby ejemplo.rb

7 Rails
7.1 Cmo funciona Rails?
Una aplicacin Rails es el programa que toma el control cuando
alguien se conecta a un sitio Web administrado por Rails. Esta puede
ser un servicio de compras en lnea, un sitio de viajes, un catalogo de
una librera, etc. La naturaleza y propsito de una aplicacin Rails
varan enormemente. Sin embargo la forma general de cualquier
aplicacin Rails es muy similar.
El framework Ruby on Rails los programas y libreras de
programacin que obtiene cuando instala Rails en su sistema- existe
para el propsito de permitir al usuario escribir aplicaciones Rails
individuales.
MVC (Model/View/Controller) es la familia de frameworks a la cual
pertenece Rails, luego entender el funcionamiento de dicha familia
ayudar en consecuencia a entender el funcionamiento de Rails.
Tres cosas ocurren en una aplicacin MVC: se obtiene informacin, se
almacena y manipula dicha informacin, y se presenta dicha
informacin. Por s mismo, esto no es algo nuevo. De hecho la
mayora de programas para computadora ejecutan dichas
operaciones sobre los datos y despliegan los resultados. El principio
MVC, sin embargo, no es solo una descripcin de lo que ocurre con
los datos. Es tambin el principio de administracin detrs del cmo,
el desarrollador, trabaja sobre un programa.

7.2 Estructura y Funcionamiento de Rails

Figura 2. Vista esquemtica de Ruby y el framework Rails

ActiveRecord
Provee una interface y comunicacin entre las tablas de la base
de datos relacional y el programa Ruby que manipula los
registros de dicha base de datos. Los nombres de los mtodos
de una clase Ruby se generan automticamente a partir de los
nombres de las columnas de las tablas de la base de datos.
ActionView
Componente basado en ERb que se encarga de la construccin
de las vistas de la aplicacin. Toda conexin a una aplicacin
Rails resulta en el despliegue de la informacin de una vista.
ActionController
Intermediario entre ActionView y ActionRecord. Ofrece
funcionalidad para manipular las entidades definidas en el
modelo segn el input obtenido desde las vistas.

7.3 Proceso General de Desarrollo de Aplicaciones Rails


i.

Definir el Modelo del Dominio de la Aplicacin


Esta labor consiste en definir las entidades de negocio y las
relaciones existentes entre ellas. Como resultado de llevar a
cabo esta labor se tendr el diseo fsico de la base de datos.

ii. Definir el Comportamiento del Dominio


Identificar comportamiento y acciones que pueden ejecutarse
sobre las entidades definidas en el dominio.
iii. Disear y Publicar las Vistas del Dominio
Rails es totalmente orientado al desarrollo de aplicaciones web,
por lo cual cuando se habla de vistas se habla concretamente
pginas web. En esta etapa de define la visualizacin de las
entidades y las acciones sobre estas en pginas web.
7.4 Primera Implementacin en Rails
Esta seccin describe la manera de definir el modelo, para ello es
necesario contar con un sistema de Base de Datos relacional. En lo
que resta del documento, el sistema referenciado ser MySQL por lo
cual las sentencias utilizadas ser acordes al funcionamiento de dicho
sistema.
7.4.1 Definicin el Modelo de Negocio
Para cada entidad del modelo se debe asignar un nombre, identificar
sus atributos (nombrarlos y definir su tipo) e identificar las relaciones
existentes con las dems entidades (1 a 1, 1 a muchos, muchos a
muchos). Para esta etapa resulta til el uso de UML como
herramienta de diagramacin del modelo de negocio.

Figura 3. Modelo de Entidades de Negocio

La figura 3 relaciona un modelo de dominio sencillo que servir como


gua para el proceso de puesta en marcha de una aplicacin Rails. El
sistema a modelar contiene dos entidades de negocio, Estudiante y
Curso, que a su vez cuentan con sus atributos bsicos. Note la
relacin de 1 a Muchos existente entre Curso y Estudiante (un curso
est compuesto de cero o ms estudiantes).
7.4.2 Instanciacin de la Aplicacin Rails
Con el fin de crear la estructura de carpetas necesarias para el
proyecto, se har uso de la herramienta Instant Rails. Esta nos
permitir agilizar de manera notable la ejecucin de dicho proceso.
En la carpeta raz de la herramienta Instant Rails de doble clic sobre
el icono de InstantRailsManager. Esto inicializar la consola principal.

Figura 4. Consola principal Instant Rails

De click sobre el botn con el logo de Instant Rails, seleccione Rails

Applications->Manage Rails Applications

Figura 5. Inicializacin de la consola de


Instant Rails

En la pantalla que se despliega de click en el botn Create New Rail


App. A continuacin se despliega la lnea de comandos de Rails. En
esta consola se proceder a instanciar la aplicacin Rails de inters
(el nombre de nuestra aplicacin ejemplo ser r4rejemplo). Para ello
ejecute el comando:
-> rails r4rejemplo

Figura 6. Instanciacin de una


aplicacin Rails

Al ejecutar este comando, Rails se encarga de generar toda la


estructura de carpetas necesarias para poner en marcha el proyecto.
La carpeta raz de la aplicacin queda ubicada en {Directorio Instant
Rails}\rails_apps. Explore la carpeta generada para conocer la
estructura general de carpetas de una aplicacin Rails.

Figura 7. Estructura de carpetas bsica para


un proyecto Rails

7.4.3 Creacin y Configuracin de la Base de Datos para Rails.


Habiendo instanciado una aplicacin Rails y contando con la definicin
del modelo conceptual del dominio de negocio, es hora de crear el
modelo relacional que soporte el modelo definido.
Siguiendo las buenas prcticas de Rails, se inicializarn tres bases de
datos, una para el ambiente de desarrollo, una para el ambiente de
produccin y otra para el ambiente de pruebas. Siguiendo los
estndares de nombramiento de Rails, las bases de datos se llamarn
r4rejemplo_development, r4rejemplo_production, r4rejemplo_test.
Adicionalmente, se debe crear un usuario con todos los privilegios
para estas bases de datos.
mysql> grant all privileges on
r4rejemplo_development.* to
nombreUsuario@localhost identified by
contrasea
Figura 8. Creacin de un usuario con privilegios
para la base de datos de produccin

Una vez creado el usuario es necesario proveer a Rails los datos de


conexin a las diferentes bases de datos. Para ello, acceda al
directorio config de la aplicacin, abra el archivo database.YML y
configure los datos de usuario y base de datos. Verifique que los
datos ingresados correspondan exactamente a los definidos con
anterioridad.

7.4.4 Traduccin del Modelo de Negocio a Tablas Relacionales


En esta etapa es crucial tener en mente la filosofa de convention
over configuration, es decir, se debe ser estricto respecto al
nombramiento de las tablas y sus campos. En general las reglas son:
Por cada entidad debe crearse una tabla llamada igual que la
entidad pero con una s al final; por ejemplo, si se tiene una
entidad Estudiante, la correspondiente tabla debe ser
nombrada Estudiantes.
Toda tabla que corresponda a una entidad debe tener un campo
nico llamado id de tipo entero (Unique Constraint).
Todo atributo definido en la entidad tiene su correspondiente
campo en la tabla de la entidad, los campos y los atributos
deben tener el mismo nombre.
Para las relaciones entre entidades; si se tiene una entidad
llamada A que pertenece a una entidad llamada B, entonces
en la tabla As debe crearse un campo llamado B_id.
Lo anterior aplica para las relaciones 1 a 1 y 1 a muchos. Las
relaciones muchos a muchos se definen de otra manera que
ser descrita ms adelante.
Partiendo del modelo de negocio planteado para el ejemplo y
siguiendo las reglas mencionadas, las sentencias de creacin de las
tablas son:
mysql> create table estudiantes (
id INT(11) NOT NULL
AUTO_INCREMENT,
curso_id INT(11) NOT NULL,
nombre VARCHAR(30),
codigo INT(11),
fecha_nacimiento DATE,
PRIMARY KEY (id)
);

mysql> create table cursos (


id INT(11) NOT NULL
AUTO_INCREMENT,
nombre VARCHAR(30),
codigo VARCHAR(30),
PRIMARY KEY (id)
);

Figura 9. Creacin de las tablas relacionales


para el modelo de la aplicacin r4rejemplo

7.4.5 Generacin de los Modelos


A continuacin es necesario crear los archivos fuente de Ruby
(archivos con extensin .rb) que representarn el modelo de la
aplicacin desarrollada.
Retornando a la lnea de comandos de Rails. A partir del directorio
raz de su aplicacin ejecute:
-> ruby script/generate model estudiante
-> ruby script/generate model curso

Figura 10. Generacin de las fuentes que


representa el modelo de negocio

Note que en el directorio app/models de su aplicacin se han


generado un archivo .rb para cada entidad de negocio definida.
Explore y analice su contenido. Estos archivos representan
definiciones vacas de clases Ruby y aunque parecen no contener
informacin relevante Rails ya se encarg de examinar los campos
definidos para cada entidad declarados en el modelo relacional, y
por este hecho, las clases cuentan ahora con servicios getters y
setters para cada uno de sus atributos.
Para completar el proceso de generacin del modelo de la
aplicacin, es necesario declarar en los .rb generados las
relaciones existentes entre entidades. Note la utilizacin de las
palabras reservadas belongs_to y has_many.

Figura 11. Relaciones de agregacin y pertenencia


para las entidades Estudiante y Curso

7.4.6 Generacin de los Controladores


En general todos los controladores estn asociados directamente a un
elemento del modelo, un caso particular en el que esto no se cumple
es el controlador encargado de la pantalla de bienvenida a la
aplicacin. A continuacin se crear el controlador de bienvenida para
que en este se despliegue la lista actual de cursos. Al ejecutar el
script:
-> ruby script/generate controller main welcome
Tras la ejecucin del script anterior, ocurren dos eventos de principal
inters:
Se crea el archivo main_controller.rb en la ruta
app/controller del directorio raz de la aplicacin, este
controlador contiene la definicin vaca del mtodo welcome.
Se crea el archivo welcome.rhtml en la ruta app/views/main
del directorio raz de la aplicacin. En este archivo se tiene la
plantilla para la vista welcome.
Ahora que se tiene el controlador generado, es hora de definir las
acciones para este. Ya que se desea que en la vista welcome se
despliegue la lista de todos los cursos existentes, basta con agregar
al cuerpo del mtodo welcome una instruccin que solicite al modelo
el listado de todos los cursos ordenados por nombre y cdigo.
De este modo la entidad del modelo Curso entregar al controlador
un listado con las caractersticas definidas. Ver figura 12.

Figura 12. Definiendo accin welcome sobre el


controlador MainController

Es necesario ahora definir los controladores para los elementos del


modelo. Esta tarea se ejecuta desde la lnea de comandos de Rails.
Basta con ejecutar los scripts:
-> ruby script/generate controller estudiante show
-> ruby script/generate controller curso show
Los controladores generados quedan almacenados en la carpeta
controllers de su aplicacin. El parmetro adicional show indica a
Rails que el controlador deber contar con la definicin de un mtodo
llamado show.
Teniendo el esqueleto de los controladores, se debe proceder a
realizar la implementacin de los mtodos show con que cuenta cada
uno de estos. Tanto el controlador estudiante como el de curso
utilizarn un idioma comn para Rails: atrapar el valor de la variable
CGI id y usarla como ndice para encontrar la instancia correcta de la
entidad relevante. La lnea 4 de la figura 13 relaciona esta instruccin
para el controlador estudiante.

Figura 13. Implementacin del mtodo show


para EstudianteController

La variable @estudiante almacenar el resultado de la consulta


realizada por Rails. El valor que tome dicha variable puede ser
accedido por el cdigo ERb1 en las respectivas vistas de las entidades.

ERb es un mecanismo de produccin de documentos HTML a partir de plantillas y cdigo Ruby.

7.4.7 Generacin de las Vistas


Teniendo listo el modelo y los controladores, es hora de implementar
el conjunto de vistas que permitirn finalmente acceder a la
funcionalidad de nuestra aplicacin. Observe que en la carpeta
app/views de su aplicacin, Rails ha generado a travs de la
ejecucin de los scripts de generacin de controladores, un directorio
para las vistas de cada entidad del modelo. Adicionalmente, por cada
mtodo definido en el controlador de una entidad, Rails ha generado
un archivo .rhtml2 con el mismo nombre del mtodo.
El contenido de dicho archivo es una plantilla bsica para la
implementacin de la vista asociada al servicio del controlador. Para
nuestro caso en particular, el contenido del archivo show.rhtml se
desplegar en pantalla cuando la aplicacin reciba una solicitud
(request) para la accin show de un controlador dado.
En este punto, se tiene pendiente la implementacin de 3 vistas
(vista de bienvenida y las vistas show de estudiante y curso). En
este punto es pertinente recordar que se debe contar con un
conocimiento medio de HTML para identificar de manera correcta el
funcionamiento de las vistas.
Definiendo un Layout por Defecto
En el proceso de construccin de la capa de presentacin de
una aplicacin Web es usual definir pginas header, footer,
mens que enmarquen y delimiten el contenido grfico
comn para todas las vistas de la aplicacin. Rails no se ha
olvidado de esto y por ello ofrece la oportunidad de
encapsular todo este contenido en una vista comn que
servir como layout general para la aplicacin desarrollada.
Para la definicin de dicho layout basta con agregar un
archivo .rhtml en el directorio views/layout de su aplicacin.
En nuestro caso el nombre del archivo ser base.rhtml. Ver
figura 14.

La extensin rhtml hace referencia a documentos HTML que


presentan en su contenido cdigo Ruby embebido.

Figura 14. Codificacin de la vista layout por


defecto para la aplicacin r4rejemplo

Es importante resaltar el contenido de la lnea 9 en donde se


referencia la variable @content_for_layout. Esta variable
indica a Rails cul ser el espacio reservado para el
despliegue de contenido de las dems vistas de la aplicacin.
Con el fin de establecer este archivo como layout general de
la aplicacin, es necesario modificar el archivo application.rb
del directorio app/controllers de la manera que propone la
figura 15.

Figura 15. Configurando el ApplicationController


para la definicin del layout por defecto

La lnea 7 establece el nombre del layout por defecto (en


este caso base). Todo el contenido definido en el archivo
application.rb aplicar a los dems controladores definidos
en la aplicacin.

Definiendo la Vista de Bienvenida


La vista de bienvenida como en cualquier otra aplicacin
Web, desplegar los elementos del home de la aplicacin
desarrollada.
Como se mencion antes, para esto es necesario la creacin
de un archivo .rhtml que relacione el contenido que se desea
desplegar. Para nuestra aplicacin ejemplo, se presentar un
listado de todos los cursos disponibles. Cada curso de la lista
ser un enlace que permitir navegar en la aplicacin hacia
el listado de estudiantes inscritos perteneciente a dicho
curso.
El contenido del archivo .rhtml construido se observa en la
figura 16. Este archivo debe quedar almacenado en el
directorio views/main. Para nuestro caso, el nombre del
archivo ser welcome.rhtml.

Figura 16. Contenido de la pgina de bienvenida


para la aplicacin r4rejemplo

Las lneas 3 y 10 delimitan el cuerpo de la vista, cuya accin


principal es la utilizacin de un ciclo que recorre la lista de
cursos, creando en cada iteracin un tem de una lista HTML
(<li> por las iniciales List Item). Cada tem ser un enlace
que ejecute la accin show del controlador curso indexado
por el id correspondiente. Este enlace es construido con la
funcin auxiliar de Rails, link_to.
Finalmente para definir esta vista como la pgina de
bienvenida de la aplicacin, ser necesario modificar el
archivo routes.rb del directorio config de su aplicacin
agregando una lnea que mapee la vista definida a la vista
de bienvenida de Rails. Ver figura 17.

Figura 17. Estableciendo la ruta por defecto


de la pgina de bienvenida en la aplicacin r4rejemplo

Adicionalmente, en la carpeta public de su aplicacin debe


eliminar o renombrar el archivo index.html. Ello con el fin
que la pgina de bienvenida creada anteriormente, obtenga
el status de pgina ndice de la aplicacin.
Definiendo la Vista show para la Entidad Curso
Ingrese a la carpeta app/views/curso de su aplicacin
modifique el archivo show.rhtml como se muestra en la
figura 18.

Figura 18. Contenido del archivo show.rhtml


para la vista de Curso

Note que en esta vista se utiliza nuevamente un ciclo para


listar los estudiantes asociados a un curso que se seleccion
en una vista previa de la aplicacin (en nuestro ejemplo la
vista de bienvenida). El uso de la variable id es utilizada
como parte del re direccionamiento hacia los controladores
de la entidad Estudiante.
Definiendo la Vista show para la Entidad Estudiante
Ingrese a la carpeta app/views/estudiante de su aplicacin
modifique el archivo show.rhtml como se muestra en la
figura 19.

Figura 19. Contenido del archivo show.rhtml


para la vista de Estudiante

Lo importante en la creacin de estas dos vistas (Curso y


Estudiante), es que el lector identifique y comprenda la
utilizacin de la funcin link_to como puente entre la vista y
un determinado mtodo de la clase controladora,
adicionalmente, entender cmo se referencian atributos de
una clase Ruby a travs de la utilizacin de variables del
modelo e.g. @estudiante.codigo.
7.4.8 Ejecutando la Aplicacin
Con el trabajo realizado hasta el momento, es hora de observar los
resultados que permiten materializar el conocimiento terico
aprendido hasta el momento.
As entonces, ser necesario poner en marcha el servidor Web que
servir como anfitrin (host en ingles) de nuestra aplicacin. Instant
Rails cuenta con un servidor Web (Mongrel) que soporta de manera
adecuada la utilizacin de aplicaciones desarrolladas en Rails.
Seleccione en la ventana Manage Rails Applications de Instant Rails el
tem que hace referencia a su aplicacin. A continuacin de click
sobre el botn Start with Mongrel. Ver figura 20.

Figura 20. Arrancando el servidor Mongrel con


la aplicacin r4rejemplo

A continuacin se desplegar en pantalla la consola de inicio del


servido Mongrel.

Figura 21. Consola de inicio del servidor Web Mongrel

Una vez la consola informa que el servidor se encuentra disponible,


abra su navegador de internet e ingrese la URL http://localhost:30003

El puerto
nmero de
Verifique el
que este se

por el cual escucha la aplicacin puede variar de acuerdo al


aplicaciones que se estn ejecutando en el servidor Web.
puerto asignado en la consola del servidor Web al momento en
inicia.

Si el tutorial se ha desarrollado de manera correcta, el navegador


debera desplegar una pantalla similar a la mostrada en la figura 22.
OJO: No olvide poblar su base de datos con los registros que sern
desplegados en su aplicacin.

Figura 22. Pgina de bienvenida de la


aplicacin r4rejemplo. Listado de cursos.

Seleccionando alguno de los cursos disponibles, se tendr acceso al


listado de estudiantes inscritos en dicho curso.

Figura 23. Listado de estudiantes


inscritos en un curso.

Finalmente al seleccionar algn estudiante del listado se navegar


hacia la vista que muestra el detalle de dicho estudiante.

Figura 23. Detalle de un estudiante

Para finalizar es interesante resaltar la facilidad con que se pueden


empezar a ver los resultados del proceso de desarrollo a travs del
uso de Ruby On Rails. An cuando en el ejemplo descrito
anteriormente se enfatiz en las tareas de listado y detalle de la
informacin, ser igualmente sencillo empezar a desarrollar la
funcionalidad de Creacin, Bsqueda y Actualizacin de entidades.
Por otro lado, si se toma un par minutos para enriquecer la apariencia
grfica de las vistas generadas mediante el uso de hojas de estilo
CSS 4 , la aplicacin rpidamente tendr una apariencia mucho ms
atractiva al usuario, sin embargo el objetivo principal de esta
investigacin es el de incentivar al lector a profundizar en el
aprendizaje de este interesante framework de desarrollo.

CSS es el acrnimo para Cascade Style Sheet. Su principal objetivo


es el de permitir desacoplar la parte de diseo grfico en una pgina
HTML de la estructura lgica del documento de inters.

8. Ruby On Rails vs Java (Caso de estudio)


Teniendo en cuenta que gran parte de la motivacin para la
realizacin de este trabajo de investigacin fue tener la oportunidad de
comparar mtricas asociadas a dos artefactos de software con igual
funcionalidad, pero desarrollados sobre plataforma diferentes (en
nuestro caso Java y Ruby on Rails); el grupo de trabajo plante un
experimento que se describe a continuacin.
8.1 Descripcin del Caso
La Consola de Administracin de Usuarios Qualdev fue un proyecto
desarrollado por el Grupo de Seguridad - Qualdev en el semestre
2007-II. El propsito principal del mismo fue implementar una
consola web que permitiera administrar la informacin relevante a los
usuarios que integran el grupo Qualdev. De este modo, el alcance del
proyecto en su primer ciclo de desarrollo debera ofrecer
funcionalidad CRUD sobre las entidades: Usuario, Rol y Herramientas.
La herramienta fue desarrollada utilizando componentes JSF para la
capa de presentacin y EJB3.0 para la manipulacin de entidades de
negocio. El contenedor de aplicaciones utilizado para el despliegue de
la aplicacin es Glassfish v. 2.0. El grupo de trabajo estuvo
conformado por 5 desarrolladores.
8.2 Resultados
El propsito del experimento es comparar las principales mtricas que
arrojadas al final del proceso de implementacin, bajo las condiciones
(posibilidades y limitaciones) que cada ambiente de ejecucin del
proyecto propone.
Consola de Administracin de Usuarios Qualdev
Plataforma
Arquitectura
Capa de Negocio
Capa de Presentacin
Contenedor/Servidor
Aplicaciones
Nmero de
Desarrolladores

Nmero de Entidades
Funcionalidad
implementada

Java
JEE
EJB 3.0
Java Server Faces

Ruby On Rails
Patrn MVC
Ruby
Ruby for HTML

Glassfish

Mongrel/Rails

3 (Usuario, Rol, Herramienta)


CRUD

Tabla No. 1. Variables que caracterizan


la implementacin de la consola en Java y Ruby On Rails

La tabla 2 relaciona las principales mtricas asociadas a la


implementacin de la herramienta sobre los dos ambientes utilizados.

Plataforma

Mtricas Consola de Administracin de


Usuarios Qualdev
JAVA
Ruby On Rails

Lneas de Cdigo Capa


Presentacin
Lneas de Cdigo Capa
Negocio
Lneas de Cdigo Capa
Persistencia
TOTAL

Comprende (JSPs,
BackingBean y Business
Delegate) - 2346
Lneas
Comprende (Session
Beans, BOs) 582
Lneas
Comprende (Entities)
251 Lneas
3179 Lneas

Comprende (Entities Views,


Layouts) 472 Lneas (95%
auto generado)
Comprende (Controllers y
Routes) 176 Lneas
Comprende (SQL Statements
y Model) - 14 Lneas (45%
Generado)
662 Lneas

Tabla No. 2. Lneas de cdigo implementadas


divididas por componentes

La relacin existente entre el tamao total del proyecto Java y Ruby


On Rails es 3179/662 = 4.80, lo que plantea una relacin aproximada
de 5:1, es decir, por cada lnea de cdigo presente en el proyecto
Ruby On Rails, se presentaron 5 lneas en el proyecto Java.
Con el fin de contar con criterios adicionales de medicin, a
continuacin se relacionan las mtricas de tiempo obtenidas al
finalizar ambos proyectos.

Plataforma

Mtricas Consola de Administracin de


Usuarios Qualdev
JAVA
Ruby On Rails

Tiempo requerido de
Implementacin

84 Horas Aprox.

3 Horas 45 Minutos Aprox.

Tabla No. 3. Tiempos empleados en


la implementacin de la consola

Adicional a los resultados obtenidos, hay que tener en cuenta que el


grupo de trabajo involucrado en el proyecto plataforma JAVA fueron
estudiantes de ltimo semestre que contaban con una amplia
experiencia en este tipo de desarrollos. Por el contrario, los
integrantes del proyecto Ruby On Rails son estudiantes que apenas
comienzan el proceso de aprendizaje de este framework de
aplicaciones.

8.3 Conclusiones y Aspectos a Analizar


El proceso de investigacin y los resultados obtenidos con las
prcticas realizadas han dado surgimiento a un listado de aspectos
que se consideran interesantes para su anlisis.
Un porcentaje considerable del tiempo de implementacin
invertido en el desarrollo JAVA est asociado a procesos de
empaquetamiento y despliegue (deployment) de la aplicacin.
Una de las grandes ventajas de Ruby On Rails es el hecho de no
tener que recurrir a procesos de despliegue. Con slo actualizar
el navegador los cambios realizados sobre el modelo, vistas y
controladores se vern reflejados.
Ruby On Rails ofrece persistencia de informacin totalmente
transparente en la implementacin de aplicaciones con
caractersticas similares a las de la aplicacin desarrollada, lo que
resulta muy atractivo, pues el desarrollador solo se debe
encargar de la lgica de negocio involucrada en los
controladores.
La utilizacin de herramientas Rails (helpers) tales como
Scaffold5 incrementan notablemente los niveles de produccin del
desarrollador, al contar con un alto porcentaje de cdigo
funcional auto generado y de fcil modificacin. Para el caso de
Java, slo a travs de la utilizacin de frameworks de generacin
de cdigo se pueden alcanzar niveles similares de productividad a
los de Ruby On Rails, en las etapas inciales de desarrollo.
Tenga en cuenta que en la actualidad este tipo de frameworks de
generacin no estn disponibles para la gran mayora de
desarrolladores. Qualdev Group cuenta en la actualidad con este
tipo de artefactos, de hecho el 90% de la capa de negocio del
proyecto desarrollado en JAVA fue autogenerado.
Para el desarrollo de la aplicacin sobre Ruby On Rails no
necesario un conocimiento profundo del framework ni
lenguaje de programacin, lo cual sugiere la existencia
tcnicas de desarrollo que aumenten an ms los niveles
productividad.

fue
del
de
de

Los casos de xito de aplicaciones empresariales desarrolladas


sobre Ruby On Rails, demuestra la capacidad con que cuenta el
framework para responder a necesidades mucho ms exigentes.

5
Scaffold es un script de generacin de cdigo Ruby y Rails con funcionalidad CRUD presente en el
modelo, vista y controladores de la aplicacin.

Es necesario tener en cuenta que aunque Ruby On Rails presenta


grandes ventajas, es una propuesta reciente y que an no cuenta
con un nivel de madurez suficiente para abordar el desarrollo de
las aplicaciones ms exigentes del mercado. Por el momento
JAVA y otras tecnologas tiene esto a favor (libreras ms
completas y eficientes). Analistas de la industria concuerdan en
que las principales debilidades del framework Rails radican en su
falta de madurez en la implementacin de seguridad, XML y Web
Services.
Funcionalidades como la de mensajera aunque resultan
relevantes a la hora de hablar de aplicaciones empresariales,
salen del dominio para el cual fue diseado Rails.

9. Trabajo Futuro
El concepto de metodologas agiles de desarrollo se constituye como
un tema que dada la tendencia del mercado, es necesario conocer y
dominar. El caso Ruby On Rails es solo una de las propuestas que
plantea la industria, sin embargo es una realidad el impacto que ha
tenido durante los ltimos aos a nivel mundial, en especial en
grandes organizaciones del continente europeo. Por ello, el proceso
de aprendizaje de estos temas debe ser impulsado de manera activa
no solo en la empresa privada sino en el mbito acadmico.
El mercado colombiano atraviesa por una etapa de grandes cambios
en lo que refiere a metodologas de desarrollo de software. Las
empresas se enfrentan da a da a restricciones de tiempo y costos
mucho mas fuertes, y solo alineando sus procesos de investigacin y
desarrollo hacia temticas que contemplen el entendimiento de
nuevos paradigmas con sus posibilidades y limitaciones, se podr
estar a la par con la estrategia de los grandes lideres de la industria.
Dado que el gran nmero de componentes de una aplicacin Rails son
generados, es necesario definir un proceso de levantamiento de
mtricas que permitan determinar el esfuerzo real (lneas de cdigo,
nmero de artefactos, tiempo invertido) empleado en un proyecto de
este tipo.
En la actualidad existen un gran nmero de plug-ins para Rails los
cuales enriquecen notablemente la calidad del software generado, por
ejemplo, Ajax. Es importante estudiar las ventajas ofrecidas por estos
componentes.

10. Bibliografa
[1] Black, David A. Ruby For Rails. Ruby Techniques For Rails
Developers. Manning, 2006.
[2] Ruby Language Programming. Home: http://www.rubylang.org/en/. ltima visita Diciembre 2007.
[3] Rails. Home: http://www.rubyonrails.org/. ltima visita:
Diciembre 2007.
[4] Martin Fowler. Home: http://www.martinfowler.com. ltima
visita: Diciembre 2007.
[5] Agile Software Development.
http://agilesoftwaredevelopment.com/blog/artem/how-use-agilemethods-fixed-price-co. ltima visita: Diciembre 2007.
[6] Ruby on Rails Wiki. Home: http://wiki.rubyonrails.org/rails/.
ltima visita: Diciembre 2007.
[7] Domain Specific Languages y Ruby. Home:
http://www.infoq.com/interviews/jay-fields-zak-tamsen-on-dsls.
ltima visita: Diciembre 2007.
[8] Java Boutique. Home:
http://javaboutique.internet.com/reviews/ruby/. ltima visita:
Diciembre 2007.