CODEV: UN GENERADOR DE APLICACIONES WEB MULTICAPA

Anuncio
CODEV: UN GENERADOR DE APLICACIONES WEB MULTICAPA
David A. Meza1,2, Sergio F. Ochoa2
1
Altura Soluciones
(593 9) 544-9563
david.meza@alturasoluciones.com
2
Departamento de Ciencias de la Computación, Facultad de Ciencias Físicas y Matemáticas,
Universidad de Chile.
{dmeza, sochoa}@dcc.uchile.cl
RESUMEN
Este artículo describe el diseño y la implementación de la herramienta CodEv (acrónimo de
Code Evolution), la cual genera parte de un sistema de información Web, en Java y utilizando
bases de datos relacionales. A partir del modelo de datos del sistema, CodEv genera la
funcionalidad necesaria para realizar las operaciones CRUD (Create, Read, Update y Delete)
sobre todas las tablas involucradas. Esta funcionalidad es estructurada a través de una
arquitectura multicapa, separando así las responsabilidades de presentación, negocio y datos
para cada componente. La herramienta es fácil de usar y genera un esqueleto funcional del
sistema de información en muy corto tiempo, evitando los errores más comunes, y
permitiendo tener ciclos de desarrollo más cortos. Así se hace factible realizar prototipos
rápidos, ayudando de esta manera a tener una mejor interacción con el cliente. En el artículo
se presentan la arquitectura y tecnologías de CodEv y de las soluciones generadas.
Palabras Clave: Generación de Código, Sistemas de Información Web.
1. INTRODUCCION
El desarrollo de software es un proceso laborioso,
exigente y altamente calificado. El diseño y
programación de estos sistemas es tan complejo y está
sujeto a tantos errores, que es subestimado por la
mayoría. Los clientes y usuarios de este software
generalmente no tienen idea del tamaño o la
complejidad del mismo. Tampoco saben cómo el
software va a ser diseñado, construido o inclusive cómo
va a funcionar. Por lo tanto, el desarrollo ocurre en una
frágil matriz de aplicaciones, usuarios, exigencias del
cliente, leyes, políticas internas, presupuestos,
dependencias organizacionales y requisitos que
cambian frecuentemente. 1
En el mundo de hoy, sigue creciendo la necesidad de
soportar un modelo de empresa con distribución
geográfica del trabajo, con flexibilidad y seguridad. Es
por eso que las empresas siguen optando por utilizar
1
Construido de la lógica de varios autores e ideas propias
sistemas de información que ayuden a automatizar sus
procesos y a soportar la distribución geográfica del
trabajo de sus empleados, clientes y proveedores.
Esto ha hecho que siga creciendo al mismo ritmo la
demanda por sistemas de información Web, y que
además estos sistemas requieran ser flexibles y
mantenibles al igual que los procesos que ellos
automatizan. La rápida adaptación al cambio es una
capacidad que las empresas, los procesos y los sistemas
de información deben mantener vigente desde el
momento de su concepción.
El valor estimado de inversión en proyectos de
tecnologías de información y comunicaciones (TICs) a
nivel mundial para el año 2006 fue de más o menos
US$ 900.000 millones, para un aproximado de un
millón de proyectos [StG94], [StG03]. Todos estos
valores cuentan todos los proyectos, a pesar de que
muchos de estos sistemas se terminen tarde o que ni
siquiera lleguen a terminarse [InfQ06].
El proceso de desarrollo de sistemas es aún un proceso
altamente artesanal, es decir que la calidad del producto
final va a depender fuertemente de las capacidades del
equipo de desarrollo. A pesar de los enormes avances
que se han hecho en el ámbito de la ingeniería de
software, el desarrollo de estos sistemas está aún lejos
de ser un proceso previsible.
En la actualidad si un cliente requiere previsibilidad en
los resultados de un software que desea desarrollar,
entonces necesitará contar con un equipo de altamente
calificado. Por otra parte, ese equipo altamente
calificado tendrá un costo superior al promedio, lo cual
se verá reflejado en el costo total del proyecto.
Típicamente los proyectos de software en
Latinoamérica tienden a contar con estrechos márgenes
presupuestarios.
Otro dato muy importante a considerar radica en que la
mayoría de los sistemas computacionales que se
producen actualmente, están relacionados con sistemas
de información. Es decir, son sistemas computacionales
organizados para facilitar el manejo (captura,
almacenamiento, procesamiento y presentación) de
información importante de la empresa cliente. Por
ejemplo sus procesos, productos, servicios, clientes,
proveedores y las relaciones entre ellos. Estos sistemas
computacionales
generalmente
almacenan
su
información en bases de datos relacionales.
Usualmente las empresas cliente necesitan que los
sistemas sean implantados rápidamente, y en la
mayoría de los casos no entienden por qué el proceso
de desarrollar estos sistemas se vuelve tan complejo y
costoso. En muchos casos se quejan de la alta inversión
y del ritmo demasiado lento de la implantación
tecnológica.
Por otro lado se encuentra la visión de las personas de
tecnología, quienes están encargados del desarrollo e
implantación de estos sistemas. Ellos usualmente están
restringidos por varios aspectos tecnológicos y no
tecnológicos como por ejemplo:
-
-
-
La tecnología para el desarrollo de sistemas Web y
las herramientas disponibles para hacerlo son
altamente cambiantes.
Usualmente existen restricciones sobre la
funcionalidad del sistema, y el ambiente de
ejecución.
Frecuentemente también existen restricciones en
tiempo y dinero para ejecutar los proyectos.
-
Los desarrolladores deberían seguir los estándares
y mejores prácticas de la empresa y del mercado.
Por último, una de las restricciones más
importantes que deben enfrentar los ingenieros de
software, es que los sistemas deben ser flexibles y
mantenibles, ya que se espera que sean usados por
un largo periodo de tiempo, y por lo tanto, lo más
probable es que sean modificados muchas veces
durante su tiempo de vida útil.
Últimamente se ha creado un fenómeno en el que los
sistemas se tratan de realizar con inversiones y tiempos
demasiado acotados para la realidad del proyecto. Por
lo tanto, lo que se sacrifica en la mayoría de casos, es
una buena definición de los requerimientos del sistema,
pieza fundamental para construir la funcionalidad
requerida del sistema final y/o asegurar un nivel
mínimo de calidad del producto final [Gla02].
Durante mucho tiempo se ha buscado la manera de
reducir el tiempo empleado en la producción de
sistemas, y se han tratado de implementar distintas
soluciones al problema. Una de las soluciones más
exitosas y masificadas en el tiempo se dio en el apogeo
de las aplicaciones cliente-servidor, en la década del
´90 [Mic01]. Allí los lenguajes y herramientas de
desarrollo destinados a crear cierto tipo de aplicaciones
específicas, como sistemas orientados a datos, habían
evolucionado y madurado hasta el punto de tener
capacidad de generación de código y el uso de
asistentes (wizards). Esto facilitaba las tareas
repetitivas, evitando los errores de programación o de
lógica, que en este tipo de tareas pueden costar gran
cantidad de tiempo al programador. Un ejemplo de este
tipo de herramientas fueron Visual Basic 6.0, Access u
Oracle Forms.
Los generadores de código y los asistentes facilitan el
trabajo y reducen el esfuerzo de desarrollo, permitiendo
a los desarrolladores concentrarse en las reglas de
negocio y en realizar una mejor solución, puesto que
para crear las aplicaciones no se requiere de un
conocimiento tan profundo del lenguaje de
programación y sus estructuras. De esa manera el
desarrollador pone toda su energía en lo relevante del
proyecto.
Con este tipo de herramientas se facilitó la
construcción de aplicaciones pequeñas y prototipos de
aplicaciones, simplificando el trabajo de la toma de
requerimientos y evolucionándolos a sistemas
completos. Los generadores de aplicaciones orientados
a manejo de datos, usualmente generan aplicaciones
CRUD (Create, Read, Update and Delete), de manera
simple y repetitiva. En otras palabras, mantenedores de
datos en base a tablas o joints entre tablas.
2. PROBLEMA A RESOLVER
Como se dijo anteriormente, la tendencia a acortar el
tiempo e inversión en la construcción de sistemas
provoca muchos problemas, generando una gran
cantidad de proyectos que no llegan a terminarse o que
no son usados puesto que no satisfacen los
requerimientos originales. Estos sistemas contienen
errores causados por fallas en la toma de
requerimientos, fallas en la comunicación o
entendimiento de estos requerimientos por parte los
ingenieros de software. Aún con todos los esfuerzos
para mejorar las técnicas y herramientas disponibles
para los desarrolladores, no se ha logrado que exista
una comunicación ágil con el cliente, y por tanto, una
definición clara y a tiempo de requerimientos
involucrados en el proyecto.
En muchos casos, y también por falta de tiempo, se
deja de lado el diseño de una buena arquitectura de
sistemas, considerando flexibilidad, seguridad,
capacidad de cambio y de crecimiento. Por ende,
muchos de estos sistemas presentan importantes
problemas debido a esta reducción de calidad,
específicamente
problemas
de
mantenibilidad,
extensibilidad y escalabilidad.
crean nuevos frameworks, mayores capacidades de las
herramientas de desarrollo y lenguajes de
programación, nuevas capas de abstracción y
funcionamiento de los sistemas. Todos estos avances y
cambios tecnológicos dificultan aún más el poder
establecer la infraestructura inicial para un proyecto
Web, ya que el tiempo se utilice en aprender a usar
estas tecnologías no necesariamente puede ser
amortizado en el período de toma de requerimientos o
entendimiento del problema de negocio del cliente.
Este artículo presenta y describe la herramienta CodEv
(Code Evolution), la cual pretende resolver los
siguientes problemas, para el dominio específico de los
sistemas de información Web en Java:
1) Reducir el tiempo de desarrollo por medio de la
automatización de las tareas repetitivas del
proyecto.
2) Facilitar y acelerar la definición de requerimientos
y funcionalidad del sistema en base al uso de
prototipos rápidos.
3) Ayudar a crear una arquitectura de sistemas
multicapa para que sea escalable, extensible y
mantenible.
Todo esto se logra por medio de la creación rápida de
prototipos evolutivos de aplicaciones Web multicapa.
3. SOLUCIÓN PROPUESTA
Los métodos ágiles son un esfuerzo por ayudar a
reducir el riesgo de construir el sistema equivocado, ya
que promueve una fuerte participación del cliente y la
asimilación de los cambios al sistema por medio de la
utilización de pequeñas iteraciones [Hem06]. Sin
embargo, cuando el cliente no puede o quiere participar
tan cercanamente en el proyecto, estos métodos de
desarrollo son poco aplicables. Este tipo de situación se
da especialmente cuando los ingenieros de software y
el cliente no se encuentran en el mismo lugar. Por
ejemplo, si éstos se encuentran en diferentes ciudades o
países, y la comunicación mediada por tecnología no es
eficiente para la ejecución normal del proyecto.
CodEv es un generador de aplicaciones Web Java,
orientadas a operaciones CRUD sobre a base de datos
relacionales. El código generado adhiere a una
arquitectura de sistemas multicapa, la cual representa
un esqueleto funcional de la aplicación. Esta estructura
básica usualmente representa el 40-50% de la
funcionalidad total del sistema de información. La
misma puede ser desarrollada en un tiempo muy corto
(dependiendo del sistema, no más de un par de horas),
se evitan los errores comunes, y permite tener ciclos de
desarrollo más cortos. De esta manera CodEv ayuda a
mantener una mejor interacción y trabajo conjunto con
el cliente.
Todos estos problemas están presentes en el desarrollo
de sistemas de información Web, y en muchos casos en
mayor medida que en el resto de los sistemas de
software, puesto que es el ámbito tecnológico en que
más avances se realizan actualmente. Por ejemplo, se
Al poder crear esqueletos de aplicaciones Web Java
muy rápidamente y al poder interactuar el usuario con
una aplicación funcional, el prototipo evolutivo se
convierte en un puente de comunicación entre el
usuario y el ingeniero de software, ayudando de esta
manera a definir los requerimientos más clara y
rápidamente. Esto ayuda además a reducir el tiempo de
desarrollo, ya que se parte con necesidades claras de
usuario y una aplicación con una arquitectura escalable
y mantenible, que puede ser evolucionada fácilmente.
Lo cual, visto de manera general, también ayuda a
reducir los costos.
El generador de código está orientado a un dominio
muy específico: los sistemas de información para el
Web con lenguaje Java. Por lo tanto, es en proyectos
nuevos, dentro de este dominio, donde se podrán ver
los beneficios planteados y podrá tener mayor utilidad
y aporte al ahorrar tiempo de setup y de programación.
En resumen, la ventaja de utilizar CodEv radica en que
será posible reducir el tiempo de desarrollo a partir de
la creación rápida de un esqueleto funcional de la
aplicación. De esta manera se eliminarán los posibles
errores que se puedan cometer y se reforzará la
arquitectura del sistema multicapas que promueve la
extensibilidad, escalabilidad y mantenibilidad [SEI00].
Esto facilitará además la especificación y validación de
los requerimientos.
4. CODE EVOLUTION
desarrollador dentro de la plataforma Eclipse, para
manejar así los datos del esquema de datos escogido.
CodEv fue creado sobre la base de una arquitectura de
componentes, y diseñado como un plug-in de la
plataforma Eclipse. De esa manera se pueden obtener
varias de las ventajas de estos plug-ins, como por
ejemplo: fácil de instalar, configurar y ejecutar. Las
aplicaciones que son generadas con CodEv también
están integradas dentro de Eclipse como proyectos Web
Java. Esto hace que las mismas obtengan todas las
ventajas de la plataforma, y que el proceso de
generación y edición de las aplicaciones sea
transparente para el usuario.
La contextualización de la generación del código se
basa en tomar los metadatos del esquema directamente
desde el repositorio de datos. El generador toma las
definiciones de las tablas, campos, tipos de datos, sus
relaciones, claves primarias y foráneas, los cuales
constituyen los metadatos procesables [Par07]. Con
esto construye una representación en memoria de estas
definiciones y genera los elementos necesarios (en base
a las plantillas), para que se pueda hacer el
mantenimiento CRUD avanzado de cada tabla con sus
respectivas relaciones.
La plataforma Eclipse entrega una arquitectura
extensible, con puntos de extensión claramente
definidos y documentados, llamados plug-ins. El
mecanismo básico de extensibilidad se basa en que los
nuevos plug-ins pueden añadir nuevos elementos de
procesamiento al ambiente y/o a los plug-ins existentes.
Cada plug-in tiene que estar de acuerdo con el contrato
o API definido para los plug-ins de Eclipse, para que de
esa manera pueda funcionar y trabajar con el ambiente
[ML05]. La instalación de CodEv dentro de Eclipse
sigue el proceso estándar de la instalación de plug-ins
(se debe tener J2SE y Eclipse IDE instalados
previamente para proceder con la instalación de
CodEv).
En la Figura 2 se pueden apreciar los 3 grandes
componentes de CodEv y su relación con la plataforma
Eclipse. También se puede apreciar la relación de la
plataforma con la aplicación generada, y sus capas de
presentación, negocio y persistencia. A continuación se
describen brevemente los tres componentes principales
de CodEv.
-
4.1. Arquitectura del Generador CodEv
La Figura 1 muestra un esquema de alto nivel
indicando cómo se integran CodEv y las aplicaciones
generadas, dentro del contexto de la plataforma
Eclipse. El desarrollador instala, ejecuta y configura
CodEv dentro de Eclipse para acceder a la información
de metadatos del esquema base, a partir del cual se
desea generar la aplicación Web Java. La aplicación
generada puede ser modificada y ejecutada por el
-
Manejador de Presentación: Es el componente
que se encarga de la integración con la plataforma
Eclipse; es decir, contiene la implementación de los
elementos visuales específicos de la plataforma,
para que el desarrollador pueda interactuar y
realizar la generación de manera sencilla. Además,
se encarga de la captura de información, de las
notificaciones al desarrollador y de las
actualizaciones necesarias a la plataforma Eclipse.
El tener un solo componente como punto de
integración con la plataforma Eclipse hace más
fácil la extensión y evolución de CodEv.
Manejador de BD: Este componente se encarga de
proveer el manejo de la conexión con el motor de
base de datos y la creación del modelo de
abstracción (o representación de metadatos) que
será usado por CodEv, para que el desarrollador
pueda configurar los elementos a generar. Por
medio de este componente se logra desacoplar el
generador, del lugar que se obtiene la
representación de los metadatos, pudiendo tener así
varias fuentes de datos e implementaciones de
acceso a los datos.
-
encuentra la implementación de la funcionalidad de
creación de todos los archivos necesarios para tener
una aplicación Web Java multicapa, en base a la
representación de metadatos y parámetros de
configuración. Este componente tiene lógica para
controlar la generación y regeneración de la
aplicación, creación o sobre-escritura de archivos y
directorios seleccionados.
Manejador de Generación: Es el componente que
se encarga de la generación de los archivos físicos
en base a plantillas. En este componente se
Configura
Modifica /
Ejecuta
Sistema Generador de
Aplicaciones Web
Multicapa - CodEv
Genera
Metadatos
DB
Maneja
Datos
Aplicación Web Java
generada
Figura 1. Integración de CodEv y las aplicaciones generadas con Eclipse
Figura 2. Arquitectura de CodEv
4.2.
Arquitectura de las Soluciones Generadas
La arquitectura de los sistemas generados es multicapa.
Cada capa es una partición lógica (no necesariamente
física) de los componentes de la aplicación, por lo tanto
se requiere que el programador de mantenga el
encapsulamiento de las capas y las invocaciones en el
orden adecuado, en base a la definición de la jerarquía
de capas de la arquitectura. Si eso no se respeta,
entonces se perderán todas las ventajas de contar con
una arquitectura multicapa.
Se recomienda separar la aplicación en un mínimo de 3
capas: presentación, negocio y persistencia [Fow03A],
ya que éstas representan los macro-componentes
mínimos para separar las responsabilidades en un
sistema de información Web. Dentro de estas se capas
podrán implementar otros patrones, o también tener
varias capas que la compongan. Por esa razón a este
tipo de arquitecturas se la llama multicapa.
Se dice que este tipo de arquitectura es inherentemente
más mantenible y escalable, ya que cada una de las
capas es independiente, y de esta manera se aíslan los
detalles de implementación específicos de cada una de
ellas. Cualquier cambio que se requiera realizar estará
focalizado y aislado a una capa, haciendo más fácil y
simple el cambio posterior de lógica, o inclusive, de
capas completas. Para mantener la separación de
responsabilidades e independencia entre capas, se
utilizan varios patrones de diseño muy conocidos
[GHJV98].
Client
Presentation Layer
La capa de presentación (Figura 3) se encarga de toda
la lógica de despliegue y envío de información a los
clientes. Esta capa es implementada por medio de JSP’s
y Struts2. Este últomo es un framework que incentiva
el uso del clásico patrón de diseño Model-ViewControler (MVC) [Rou07].
La capa de negocio se encarga de aislar y centralizar la
lógica de las validaciones y restricciones de la
aplicación. Esta capa es implementada por medio de
Managers, que siguen las reglas del patrón de diseño
Facade. Este patrón provee una interfaz unificada a un
grupo de funcionalidades de un subsistema o
componente.
La capa de persistencia se encarga del acceso y manejo
de datos sean locales o remotos. Esta capa es
implementada por medio de clases que siguen las
reglas del patrón de diseño DAO (Data Access Objects)
y el framework de persistencia objeto relacional
Hibernate [BK06].
4.3. Proceso de Generación
Los procesos de generación o regeneración de código
son guiados y son bastante simples. Por lo tanto,
dependiendo de las opciones de configuración
deseadas, estos procesos pueden durar tan poco como 5
minutos para generar la aplicación Web Java completa.
Después de esto se puede editar o ejecutar la aplicación
generada directamente desde el ambiente Eclipse.
* Código genérico multi-browser
* MVC con Struts2 + JSP’s +
Javascript (AJAX)
Business Layer
* Manejadores > reglas de negocio
Persistence Layer
* Persistores + Hibernate
Any convencional DB
* Mysql
Figura 3. Componentes y conexiones de la capa de presentación basada en Struts2
Existen dos modelos conocidos para la regeneración de
código: 1) comparación de archivos, es decir que se
compara archivo por archivo para ver si hay
diferencias, permitiendo al desarrollador combinar los
cambios. 2) herencia o extensión de clases base, en el
cual las clases base no son modificadas por el
desarrollador y pueden ser regeneradas en cualquier
momento. En este caso, el desarrollador puede
modificar las clases extendidas sin riesgo de perder sus
cambios por el proceso de regeneración.
CodEv ha sido construido para permitir la evolución de
la aplicación generada siguiendo un proceso no
destructivo en base a herencia. Para esto se tienen que
respetar una serie de lineamientos y prácticas de
modificación de la aplicación generada, pero que
permitirán realizar la evolución y la regeneración de la
aplicación en cualquier momento.
Para el proceso de generación se deben ingresar datos
de configuración a través de los asistentes (wizard),
como son: nombre de proyecto, paquete java, datos de
la conexión al esquema de datos. Posteriormente se
puede seleccionar las tablas y campos asociados a los
módulos CRUD que se desean generar. También se
permite seleccionar la tabla que servirá para la
autenticación de usuarios de la aplicación, además de
los campos de “nombre de usuario” y “clave” a través
de los cuales se efectuará la autenticación en sí.
El proceso de generación crea un proyecto Web Java
dentro de Eclipse, usando el nombre de proyecto
ingresado. Una vez creado, este proyecto contiene
todos los componentes necesarios y está listo para ser
probado (ejecutado). El proyecto generado tiene la
estructura presentada en la Figura 4. También, se debe
notar que las clases son creadas dentro del directorio
que representa al paquete Java, ingresado en las
opciones de configuración.
Figura 4. Estructura de un proyecto Web Java creado
con CodEv
4.4.
Se almacena la definición de los parámetros de
configuración ingresados por el usuario para la
generación, lo que da la capacidad de regeneración de
la aplicación. Para la regeneración se presentan los
datos de configuración ya cargados en un editor. Aquí
también se presentarán las nuevas tablas y campos para
que el usuario los pueda seleccionar para la
regeneración de la aplicación.
Proceso de Desarrollo Recomendado
CodEv podrá ser usado en conjunto con cualquier
metodología de desarrollo, con sus debidas limitaciones
y ajustes. Sin embargo, en el caso que se obtiene un
mejor aprovechamiento para la creación de prototipos
(o de programas funcionales finales), será con una
metodología evolutiva o iterativa-incremental. De esta
manera, la funcionalidad que se genere se podrá ir
aumentando y refinando, en base a los ajustes en los
requerimientos del cliente.
Por el lado del equipo de desarrollo, el uso de CodEv
también debe ir acompañado de un proceso de
capacitación al personal. Principalmente en lo que se
refiere al uso de las tecnologías involucradas, y
también en el uso adecuado del generador, como
herramienta y como instrumento de apoyo al proceso
de desarrollo. Esto ayudará a asegurar el éxito del
proyecto y un mejor aprovechamiento de la
herramienta.
4.5.
Figura 5. Modelo iterativo de desarrollo con generación
de código
Como se muestra en la Figura 5, primeramente se debe
realizar un análisis y diseño del dominio y de la
solución, para posteriormente crear un modelo de datos
en base al dominio de aplicación y crear el esquema de
base de datos. El generador se ejecutará contra este
esquema de datos para obtener la aplicación funcional.
Por lo tanto, se alterará la aplicación antigua para poder
obtener la nueva funcionalidad de acuerdo a las
necesidades del cliente.
Una vez finalizados estos cambios se revisa la
aplicación con el cliente y se reinicia el ciclo de
análisis y diseño de las modificaciones (o aumentos) a
la aplicación. Se altera el modelo de datos y se ejecuta
el generador el cual no dañará la programación ya
realizada en el sistema, sino que se generará la
aplicación y sus cambios, en base al nuevo modelo de
datos. En este punto puede ser necesario refactorizar
partes de la aplicación, para que funcionen con el
nuevo modelo de datos generado.
Esto formará un ciclo de iteraciones y evolución de la
aplicación que ayudará al desarrollador a cumplir sus
objetivos de aclarar y satisfacer las necesidades del
cliente de una manera rápida, al poder presentar
elementos funcionales que dan al cliente una visión
mucho más clara de lo que desea y lo que obtendrá.
El proceso descrito se asimila al modelo espiral creado
por Barry W. Bohem, que basa sus características en
sucesivas iteraciones (ciclos) que contienen una serie
de pasos, los cuales permiten la evolución del producto
deseado [Boh88].
Bosquejo de la Solución Generada en
Ejecución
A continuación se presenta un esquema general de las
páginas (elementos de presentación) que son generados
por cada una de las tablas, con sus respectivas
relaciones en el modelo de datos. Estas páginas serán
los puntos de interacción del usuario con el sistema.
Todos los elementos son páginas Web estándares
(XHtml, CSS y Javascript) que serán procesados en el
servidor dinámicamente, por medio de páginas JSP. Se
generan elementos de presentación que serán generales
para la aplicación, y otros que serán para la
visualización y administración de datos por cada tabla.
El sistema generará una pantalla de login en base a una
tabla que es seleccionada por el usuario. Esta será la
página principal y representará el punto de ingreso al
sistema desde donde se podrá acceder a las
funcionalidades del mismo. El sistema contará con
control y validación de datos para todas sus pantallas.
Esta validación se hace utilizando Struts2 en el
servidor.
Para cada tabla se genera una página de listado con los
elementos de datos. A través de esta pantalla se tendrá
acceso a las funciones para: crear, modificar y eliminar
datos de la tabla listada. Al hacer click en un elemento
de menú para la tabla que se desea revisar, se
presentará la página de listado de elementos para esa
tabla (Figura 6).
La página de listado cuenta con la capacidad de
búsqueda o filtrado de datos por cada uno de los
campos de la tabla, excepto por la clave primaria. Se
podrá colocar todas las opciones por las que se desee
filtrar el listado de elementos, y este filtro se mantendrá
para las siguientes interacciones. Los resultados que se
obtengan siempre se presentarán paginados.
Figura 6. Página con listado de datos
Además se podrán generar varios tipos de elementos de
filtrado, dependiendo del tipo de dato en la base de
datos que se esté utilizando. Para los elementos de
filtro de tipo “texto” o “numérico”, se crea una caja de
texto en donde se debe llenar el string de texto a
buscar. Para todos los campos que sean de tipo fecha,
se crea una caja de texto que al seleccionarla, aparece
una ventana flotante para la selección de la fecha a
buscar.
Para los elementos de búsqueda que representan una
relación 1-N, existe la capacidad de buscar por
elementos pertenecientes a la tabla padre (lado 1 de la
relación). Para ello aparecerá una pantalla flotante con
el listado de elementos padre que pueden ser filtrados,
para que se pueda seleccionar el elemento deseado.
Una vez seleccionado el elemento, se cierra la ventana
flotante y se actualiza la caja de selección de listado,
utilizando el nombre del elemento padre seleccionado.
Al hacer click en el enlace para la creación de un nuevo
elemento, se presentará la página para agregar un
nuevo elemento de datos a la tabla, con capacidad de
búsqueda sobre datos de la tabla padre.
5. DISCUSIÓN
Los problemas que inicialmente se plantearon, fueron
resueltos en mayor o menor grado con CodEv. Esta
herramienta permite la generación de aplicaciones Web
Java, en base a una arquitectura multicapa. Estas
aplicaciones son ricas en funcionalidad y pueden ser
generadas en muy rápidamente. Además, CodEv apoya
al desarrollador en la tarea de crear prototipos
evolutivos o aplicaciones completas, las cuales pueden
evolucionar de manera sencilla. Estas aplicaciones (o
prototipos) funcionan dentro de un ambiente de
desarrollo integrado y se pueden poner en
funcionamiento con mínimo esfuerzo.
Esto permite la interacción temprana del usuario con un
prototipo del sistema real, y de esa manera se puede
obtener retroalimentar muy valiosa, especialmente en
las primeras etapas del proyecto. La claridad y rapidez
en la definición de los requerimientos depende en gran
medida del uso de CodEv.
La herramienta cumple varios requisitos funcionales,
como son la generación en base a plantillas, la
integración con una plataforma robusta, abstracción del
modelo de metadatos y capacidad de regeneración de
las aplicaciones. También, cumple en gran medida con
diversos atributos de calidad, como son:
-
-
-
Instalabilidad, ya que el proceso de instalación del
ambiente y del generador son sencillas y rápidas.
Usabilidad, ya que el proceso de generación de los
componentes CRUD es muy fácil, es guiado, y
dependiendo de la configuración de la generación
deseada puede tomar menos de 5 minutos.
Portable, ya gracias a su integración con Eclipse,
CodEv puede ejecutar en múltiples sistema
operativos (todos los sistemas operativos para los
que exista un J2SE 5.0 o superior).
Extensible y mantenible, ya que el sistema está
diseñado para que cada componente aísle su propia
lógica y función (separación de responsabilidades)
por medio de interfaces claras de comunicación
entre ellos. La estrategia de generación de código
en base a plantillas, también ayuda a que los
sistemas sean más fácil de cambiar y extender.
Se concluyó que las herramientas de generación de
código son mejores o peores dependiendo del objetivo
que tenga el proceso de generación. Típicamente estas
herramientas pueden caracterizarse es: fáciles de usar,
con buenas capacidades de generación, o fácilmente
configurables. Sin embargo, es muy difícil el poder
crear una herramienta que pueda cumplir con todas
estas características, y por lo tanto esperar que sea útil
en todos los contextos de generación.
6. CONCLUSIONES Y TRABAJO FUTURO
La mayoría de generadores son usados por un grupo
reducido de personas que incluye a sus creadores,
empresa en la que trabajan y los grupos con
conocimientos similares. Dado que los generadores
generalmente son creados para un dominio y un
proceso específico de desarrollo, no es fácil trasladarlos
a otras empresas o contextos sin cambios o una amplia
capacitación. Por otra parte, es relativamente sencillo el
crear o usar una herramienta de generación de código,
si se tiene una base sólida de conocimiento previo. El
gran problema, como en todo cambio organizacional,
es el poder lograr el equilibrio entre las herramientas,
las personas y los procesos.
En el caso de CodEv, se empezó con el plan de crear un
generador genérico, y se terminó realizando un
generador muy ajustado al proceso de trabajo de una
empresa específica. La puesta en producción de CodEv
en dicha empresa involucró procesos de capacitación y
entrenamiento, modificación de los procesos de análisis
y diseño (para incluir prototipos evolutivos), y en
general involucró agilizar la metodología de desarrollo,
para poder sacar ventaja de la interacción con el
cliente. También, se incorporaron algunas herramientas
nuevas como plug-ins de eclipse y otras herramientas
de soporte al trabajo de la empresa.
Una de las conclusiones sacadas a partir este trabajo
indica que es mucho más fácil incorporar un ambiente
de generación de código dentro de una empresa con
procesos maduros. Esto se debe a que los proyectos se
llevan a cabo de manera similar, por lo tanto la
capacitación resulta ser más sencilla. De esa manera,
las experiencias obtenidas en un proyecto pueden ser
usadas en los siguientes. Además, el uso de CodEv en
proyectos reales, crea la retroalimentación necesaria
para realizar sus correspondientes ajustes. Como para
todo software, un generador de código y sus plantillas
de generación requerirán mantenimiento y mejoras que
involucran un tiempo no despreciable. Por lo tanto, es
muy importante seleccionar o crear herramientas que
vayan en la línea de conocimiento del personal, y del
funcionamiento de la empresa en sí. No se puede
esperar, que la empresa cambie sus procesos para poder
ajustarse al paradigma que ofrece una herramienta
específica.
También, para que la creación o el uso de una
herramienta de generación de código sea en cierta
medida exitoso, debe venir acompañado de ajustes en
la metodología de trabajo, en la capacitación al
personal y en las herramientas complementarias usadas
por la empresa. De lo contrario se corre el riesgo de
que la generación de código se convierta en una traba
más que en una ayuda. Existen muchas mejoras que se
pueden realizar a la herramienta, pero entre las más
importantes, están las siguientes:
-
-
-
-
-
-
Incorporar soporte para nuevos motores de base de
datos, por ejemplo, Oracle y SQLServer, ya que
son de los más populares en el mercado. Por el
momento CodEv sólo se tiene soporte para
MySQL.
Crear nuevas plantillas de presentación, con
colores y menús, para que se pueda seleccionar
variedad de estilos gráficos. Por el momento sólo
existe una plantilla de presentación.
Incorporar capacidades de internacionalización
para Struts2. Esto permitiría que el generador sea
usado en aplicaciones para múltiples idiomas, y
extendería la base de usuarios de la herramienta. La
aplicación generada está actualmente en castellano.
Incorporar las capacidades de generación de código
de Spring, que es un framework de Inversión de
Control (IoC) y otros servicios populares en
aplicaciones Java empresariales. Esto permitiría
que las aplicaciones generadas sean más fácilmente
configurables y mantenibles, haciéndolas más
cercanas a nivel empresarial.
Incorporar capacidad de comparación de cambios
para los archivos base que son regenerados y que
pueden ser alterados por el usuario de CodEv.
Permitir un mejor control de generación de código,
por medio de la selección de campos de relación y
de tablas que rompen relaciones de muchos a
muchos (M-N).
7. REFERENCIAS
[BK06] Bauer Christian, King Gavin, Java Persistence
with Hibernate. USA, Manning, 2006.
[Boh88] Bohem Barry. Paper. A Spiral Model of
Software Development and Enhancement,
1988,
<http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?t
p=&arnumber=59&isnumber=6>
[Fow03A] Fowler Martin, Patterns of Enterprise
Application Architecture. Boston, USA,
Addison-Wesley, 2003.
[GHJV98] Gamma Erich, Helm Richard, Johnson
Ralph, Vlissides John, Elements of Reusable
Object-Oriented Software. USA, AddisonWesley, 1998.
[Gla02] Glass Robert L., Facts and Fallacies of
Software Engineering. USA, Addison-Wesley,
2002.
[Hem06] Hemrajani Anil , Agile Java Development
with Spring, Hibernate and Eclipse. USA,
Sams, 2006.
[InfQ06] InfoQueue. Article. Interview: Jim Johnson of
the
Standish
Group,
2006,
<http://www.infoq.com/articles/InterviewJohnson-Standish-CHAOS>.
[Mic01] Microsoft. Microsoft Hails 10 Years of
Publisher,
2001,
<http://www.microsoft.com/presspass/press/20
01/oct01/10-15TenYearsPublisherPR.mspx>.
[ML05] Mcaffer Jeff, Lemieux Jean-michel, Eclipse
Rich Client Platform: Designing, Coding, And
Packaging Java Applications. USA, AddisonWesley, 2005.
[Par07] Parsian Mahmoud, JDBC Metadata, MySQL,
and Oracle Recipes: A Problem-Solution
Approach. NYC, USA, Apress, 2006.
[Rou07] Roughley Ian. Starting Struts 2, 2007,
<http://www.infoq.com/minibooks/startingstruts2>.
[SEI00] SEI, Three Tier Software Architectures, 2000,
<http://www.sei.cmu.edu/str/descriptions/threet
ier.html>.
[StG94] Standish Group. The CHAOS Report, 1994,
<http://www.standishgroup.com/sample_resear
ch/chaos_1994_1.php>.
[StG03] Standish Group. Press Release. Latest Standish
Group CHAOS Report Shows Project Success
Rates Have improved by 50%, 2003,
<http://www.standishgroup.com/press/article.p
hp?id=2>.
[Sun07] Sun Microsystems, The Java EE Tutorial.
2007,
<http://java.sun.com/javaee/5/docs/tutorial/doc/
bnbly.html>.
[Wik06] Wikipedia. Lista de países ordenados por PIB
(Producto
Interno
Bruto),
2006,
<http://en.wikipedia.org/wiki/List_of_countries
_by_GDP_%28nominal%29>.
Descargar