jueves, 20 de mayo de 2010

Metodología de desarrollo

La metodología de desarrollo adoptada para el proyecto Groupware fue XP (programación extrema), ya que, de acuerdo con las características en las que se enmarcaba el proyecto, como poco tiempo de desarrollo y un grupo de trabajo con numero par de personas (cuatro personas para el caso), se observo que una metodología como XP la cual presenta iteraciones cortas de pocas semanas o incluso días y además se trabaja en parejas, representaba una de la mejores, sino, la mejor alternativa ante un desarrollo que de antemano se planteaba con objetivos extremos, es decir, una gran cantidad de trabajo el cual implicaba aprendizaje de la tecnología y framework (en esta caso tecnología java manejada con Adobe Flex) en poco tiempo. Otra de las ventajas que tiene XP en un desarrollo de poco tiempo, es que requiere el manejo de pocos artefactos (historias de usuario, tareas de ingeniería y tarjetas CRC), mientras que una metodología como RUP, como que presenta un gran numero de artefactos generaría mucho más esfuerzo en el desarrollo del proyecto, en la parte de gestión, diseño y desarrollo, claro que en un proyecto más grande tal vez XP no sea la mejor opción.


En qué consiste XP
Las cuatro variables:
- Coste: Máquinas, especialistas y oficinas
- Tiempo: Total y de Entregas
- Calidad: Externa e Interna
- Alcance: Intervención del cliente

Premisas XP:
- Revisar el código todo el tiempo (programación en parejas)
- Probar constantemente
- Diseñar todo el tiempo
- Siempre se dejara el sistema con el diseño más sencillo que soporte la funcionalidad

XP toma prácticas y principios de sentido común a niveles extremos

- Reduce el riesgo en el proyecto, está sujeto a cambios sin entrar en costos excesivos
- Mejora la productividad
- Como XP es tan dinámico se necesita una participación activa del usuario/cliente, de este modo se podría integrar con el diseño centrado en el usuario.

Roles

- Programador: corazón de XP, tomar decisiones que cuidadosamente equilibren las prioridades a corto y largo plazo [1]. (Todos en el equipo tomamos este rol)
- Cliente: Segundo elemento fundamental en XP, el cliente conoce que hay que hacer.
- Encargado de pruebas: está centrado en el cliente, ayuda al cliente al escoger y escribir pruebas funcionales. (Todos en el equipo tomamos este rol)
- Controlador: Conciencia del equipo, hace buenas estimaciones y observa como la realidad como van con la realidad.(Yeison Vega)
- Preparador: observa cómo la gente se está desviando del proceso y llama la atención del equipo sobre esto.(Hanner Orejuela)
- Consultor: Ayuda con problemas técnicos que se quieran resolver, es el que tiene grandes conocimientos de la tecnología.(Alejandro Mosquera)
- El gran jefe: Examinar lo que está haciendo el equipo de desarrollo para que continúen por el camino correcto, sino lo hacen debe intervenir y plantear alternativas.(Luis F Carvajal)

En el trabajo realizado para el proyecto, la metodología se adopto de la siguiente manera:
- En primer lugar se escogieron los roles, pensando en que potencialidades presentaba cada persona y así pudiera desempeñarlo lo mejor posible.
- Se definió un cronograma de trabajo realista, para de esta forma poder alcanzar los objetivos planteados para el desarrollo del proyecto.
- Se definieron las parejas de programadores, teniendo en cuenta que estuviesen de distribuidas de manera que el trabajo realizado fuera el correcto.
- Se realizo la definición de la arquitectura y tecnologías a trabajar.
- Que se realizo un entrenamiento con la tecnología para dar inicio ahora si al proyecto.
- Comienzo del trabajo, este se dio en franjas definidas por todo el grupo de trabajo, en las cuales se reunían a diseñar, programar y probar la aplicación desde las primeras iteración. Este trabajo se hizo siempre en parejas con la retroalimentación de todo el equipo ante una posible dificultad en la codificación de alguna historia de usuario.

Cronograma del Proyecto:


Semana en que nos encontramos semana 9 (Como lo indica la linea Verde)

Tecnologías usadas

La arquitectura MVC (Modelo Vista Controlador) funciona como base de organización para el desarrollo del proyecto. El patrón que se ha utilizado en primeras iteraciones ha sido Front Controller (Controlador de frente), aunque se espera que para la versión final se encuentren algunos otros como Page Controller para el inicio de sesión y la realización de algunos otros servicios.

Uppm groupware es una aplicación cliente servidor que combina potentes tecnologías como java, adobe flex y postgresql. El siguiente esquema muestra la comunicación entre las diferentes tecnologías usadas.

Existen archivos Flash (.swf) embebidos en paginas JSP combinando así la potencia y fiabilidad de ambas tecnologías para obtener una mayor eficacia, usabilidad y un mejor “look and feel“.

Postgresql proporciona mayor estabilidad y disponibilidad de datos del proyecto Uppm Groupware, que combinado con la potencia de los servlets de Java hace que realmente, el trabajo concurrente sea una ventaja a la hora de utilizar software colaborativo.


Experiencia Obtenida

EN GENERAL


El software colaborativo o Groupware es una aplicación Web de desarrollo exigente, que obliga a utilizar una buena metodología e ingeniería para poder cumplir con los requisitos de una buena aplicación, que ofrezca servicios útiles a aquellas personas que trabajan conjuntamente en un fin común, el mismo desarrollo de éste hace que el grupo de desarrollo del proyecto UPPM funcioné también como un sistema colaborativo, gestionando calendario, compartiendo información e intercambiando datos.

La experiencia alcanzada en este trabajo ha sido de especial importancia, ya que no habíamos trabajado algunos de los integrantes con algunas de las tecnologías utilizadas en el proyecto, tales como Adobe Flex, y postgres. La integración de estas tecnologías nos ha tomado bastante esfuerzo, pero mucho conocimiento e innovación en las nuevas herramientas.

El trabajo en grupo apoyado de la metodología XP, cumpliendo con sus roles y su cronograma, nos ha llevado a un nivel mas real de lo que es desarrollar una aplicación Web trabajada con ingeniería de desarrollo de aplicaciones Web, aplicando patrones de diseño, arquitecturas, reglas de usabilidad y logrando un objetivo grupal.

Experiencias personales

Hanner Orejuela:

Con respecto al trabajo en grupo en general nos fue bien ya que adoptamos roles desde un principio, se tuvieron dificultades en varios temas pero al final fueron superadas con éxito, con respecto a las herramientas me gusto Adobe Flex, me parece que ayuda al programador a hacer aplicaciones muy parecidas a las de escritorio, además que gráficamente tienen un buen look and feel, ofrece arrastrar y soltar, columnas ordenables, efectos de animación, etc… además son basadas en capas y en flash que es una tecnología ahora bastante usada, por lo cual nos fue de gran ayuda. Me pareció complejo el manejo y la integración con los JSP en un principio, pero después era lo mismo para cada servlet y broker utilizado, también fue difícil el manejo de los archivos xml en la aplicación.

Yeison Fernando Vega Gómez:

El haber trabajo en este grupo me ofreció una valiosa y enriquecedora experiencia, de como es el trabajar en un proyecto real, se ven problemas y conjuntamente soluciones; se encuentran desacuerdos, malentendidos y gracias a ello le encontré un nuevo valor a la comunicación, la herramienta me pareció excelente, muy fácil de usar, es como utilizar Visual Studio, los entornos que genera son excelentes, lo que le da valor a la usabilidad de la aplicación, además integrarla con el servidor de netbeans es muy fácil también es como armar un rompecabezas; igual se tuvo que investigar y leer lo suficiente para poder utilizarla de una manera eficiente. Cabe nombrar que se trabajo bastante en el entorno grafico de la aplicación, teniendo en cuenta las pautas de usabilidad que se estudiaron, y otras que se investigaron también como decía un artículo: "Una cosa es una aplicación web en donde el usuario interactúa con muchas funciones, y otra cosa es un sitio comercial de un producto o servicio que se tiene que destacar por cómo se presenta.".

Además el mismo articulo decía que si desde un principio era un requisito que la parte funcional estuviera corriendo, había que preocuparse más por lo que no se cumpliría concretamente, como la parte grafica del sistema. Nuestro equipo se preocupo por que el proyecto estuviera equilibrado en los dos aspectos, centrándonos de forma conjunta en la funcionalidad y en la usabilidad, sin dejar de lado la los demás aspectos como la seguridad.

Alejandro Mosquera:

Uno de nuestros objetivos fue velar siempre porque la aplicación tuviera una buena presentación y por eso decidimos trabajar con Flash a través del IDE Flex Builder. No queríamos dejar la eficiencia a un lado y por ello integramos la parte del lado del servidor con tecnología Java. Creo que este par de herramientas permiten desarrollar aplicaciones muy potentes y con bastantes atributos de calidad tal como: usablidad, eficiencia, confiablidad e integridad entre otras.

El trabajo en equipo es de vital importancia para proyectos con tan poco tiempo de duración. La comunicación es un valor indiscutible y que de ninguna forma debe ser sustituido por algún tipo de artefacto. Creo que el equipo de trabajo aportó valiosas enseñanzas entre si y que seguramente da un tanto mas de experiencia para futuros proyectos.

Aspectos de Usabilidad

En el proyecto UPPM estamos abarcando la usabilidad partiendo de que es una aplicación para varios usuarios, y que tiene que alcanzar un alto grado de eficiencia, satisfacción y efectividad, además de lo más importante deberá ser fácil de utilizar y aprender.

Nuestra interfaz desarrollada con adobe Flex tiene incorporado unos iconos prácticos que guían al usuario a través de las diferentes pantallas, logrando una consistencia en cada una de ellas, además estamos manejando algunas excepciones con mensajes al usuario con solo arrastrar el ratón, previniendo la aparición de errores antes que generar mensajes de alerta, lo cual nos garantiza un aspecto importante en la usabilidad que es la robustez.

Con respecto a los colores, estamos utilizando una interfaz bastante sencilla en este aspecto, sin sobrecargas de colores, y con un tamaño de fuente adecuada, al principio la teníamos muy pequeña, pero ya lo corregimos. Los campos obligatorios tiene un color rojo que los indica como campos obligatorios que vienen acompañados de mensajes al usuario, logrando una buena interacción con el cliente.

Integrando Flex y Java

Esta unión permite realizar aplicaciones con la potencia de java mas la elegancia de Flash/Flex.

Flex es un framework de desarrollo que permite crear RIA's
(Aplicaciones de Internet Enriquecidas), las cuales permiten tener una aplicación web con casi todas las ventajas como si se tratara de una aplicación de escritorio, además de que agregan características tradicionales de las aplicaciones como las conocemos y una ventaja es que pueden ejecutar tareas en la maquina donde se ejecuten sin la necesidad de refrescar la pagina un beneficio de programar en Flex y ligarlo con Java es que éste último es un poderoso lenguaje de programación que por si solo(o con frameworks) puede crear aplicaciones útiles sean web o sean de escritorio, sin embargo, en cuanto a interfaz se refiere no son muy usables, puede que para la mayoría de los usuarios eso esté bien pero no estaría acorde con las nuevas tecnologías como la web 2.0 y la nueva web 3.0 por esta razón, las nuevas aplicaciones web deben ser además de potentes bonitas. Pero java como lo conocemos no cuenta con esta característica, a pesar de JavaFX que simplemente no funcionó.

Por otro lado Flex este es todo lo contrario de Java, pues genera aplicaciones muy bonitas bien adornadas, con efectos muy llamativos, pero tiene un punto débil y es que no pude acceder a bases de datos por si mismo “para garantizar la seguridad” y esto le quita mucho poder sin embargo las interfaces que genera son simplemente geniales, por esa razón se decidió unir lo bonito de Flex con la potencia de Java, y así se completó a java lo feo de sus interfaces con Flex y a Flex la potencia que le falta con Java; de esta manera se asegura tener en el Core todo el poder JAVA y en la vista toda la elegancia de aplicaciones Flash.

Una de las características de Flex es basicamente que a diferencia de otros entornos de programación basados en Flash da todas las posibilidades de crear un proyecto de programación Action Script pero sin la línea del tiempo.

Un breve ejemplo:

El clásico “Hola mundo” desde Java integrado con Flex:

Aquí vemos como se llama la Clase Java mediante un Objeto Remoto:

Aquí vemos la ejecución y que al pulsar el botón nos muestra en la caja de texto el mensaje del método en la clase Java

EJEMPLO 2:

Diferencias entre Flex y Java Applet;

La primera calculadora fue hecha con Java, la segunfa es una aplicacion en Flex:

Ejemplo 3:

En código: como comunicarse desde un proyecto Flex con un proyecto Java en NetBeans

En Flex:

<mx:HTTPService

id="delContact"

useProxy="false"

url="http://localhost:8084/UPPM/ServletContact?action=2"

result="result_deleteContact(event)"

fault="faultHandler(event)"

method="POST"

showBusyCursor="true"

resultFormat="text">

<mx:request xmlns="">

<email>

{delEmail.text}

email>

mx:request>

mx:HTTPService>

Explicación:

HTTPService id="delContact"        

// delContact es el identificador del mx, con el cual se llama desde un método en el mxml para que realice la operación que se le asigne.

http://localhost:8084/UPPM/ServletContact?action=2

// dirección http del servlet con el que conectara para realizar la acción que se le ha asignado en este caso será la acción 2.

result="result_deleteContact(event)"

// la respuesta de la acción 2 que se ha enviado será enviada como el parámetro “event” a la función result_deleteContact(event).

fault="faultHandler(event)" method="POST" showBusyCursor="true" resultFormat="text"

// parámetros para el resto del funcionamiento del proyecto; se dejan igual.

<mx:request xmlns="">

<email>

{delEmail.text}

email>

mx:request>

//La petición se envía con el parámetro <email> que incluye el dato contenido en una caja de texto llamada delEmail

En NetBeans:

protected void processRequest(HttpServletRequest request, HttpServletResponse response){

//método al que llega la petición enviada por el proyecto Flex

int Action = Integer.parseInt(request.getParameter("action"));

//la acción que se envió

switch(Action)

{

case 1: …

case 2: //Eliminar un usuario

out.print(delUser(request, response)); //meter dentro de response lo que devuelva el método delUser

break;

}

}

public String delUser(HttpServletRequest request, HttpServletResponse response) //método delUser

{

String email = request.getParameter("email"); //obtener el parámetro que se envio (email)

ConnectToDatabase(); //conectar con la base de datos

Res=DB.delete(email); //método eliminar (delete) dentro de una clase llamada DB, teniendo como parámetro el dato enviado

this.contactB.disconnect(); //desconectar de la base de datos

return res; //retornar res para que ese dato se lleve al proyecto Flex y éste lo utilice y lo envie al método result_deleteContact

}