Enunciado Práctica

Transcripción

Enunciado Práctica
Práctica de Análisis y Diseño Orientado a Objetos: Mashup
2º Ciclo – Ingeniería Informática / Master en Informática
Curso académico 2008-2009
1 Introducción
La práctica consistirá en la aplicación de tecnologías de Servicios Web (REST y SOAP)
y técnicas de diseño por capas para el desarrollo de una aplicación Web de tipo “Mashup” y
un pequeño conjunto de servicios. “Mashup” es un término que hace referencia a una
aplicación que se apoya en un conjunto de servicios remotos (no necesariamente Servicios
Web) para proporcionar su funcionalidad. Las aplicaciones Web de tipo Mashup son
características de la denominada Web 2.0 [WEB2.0], que hace referencia a una serie de
elementos que caracterizan a las nuevas aplicaciones Web. El uso de servicios REST
también es característico de la Web 2.0. Para facilitar el desarrollo de la práctica, se ha
implementado una versión inicial que incluye la interfaz gráfica completamente
implementada. Esta versión inicial está disponible en la página web de la asignatura. La
distribución incluye un fichero README.txt con instrucciones de instalación y
configuración.
2 Integración de Aplicaciones Heterogéneas con Servicios Web
2.1
Visión global
Para fijar el contexto de la práctica, se supondrá que trabajamos en una empresa que por
razones históricas mantiene la información de sus clientes en dos CRMs. Hace años la
empresa decidió comprar un CRM para gestionar la información de sus clientes. Este CRM
es una aplicación Web instalada en una de las máquinas de la empresa, y utiliza una base de
datos (quizás instalada en otra máquina) para almacenar la información de los clientes.
Como para cualquier otra aplicación Web, los empleados de la empresa acceden a este
CRM desde un navegador. El personal del departamento TIC de la empresa se encarga de
administrar el CRM, lo que conlleva mantenimiento software (e.g. nuevas versiones y
parches para el CRM y la base de datos, backups, etc.) y mantenimiento hardware (sobre
las máquinas en las que corre el CRM y su base de datos).
Sin embargo, los tiempos han cambiado. Ahora existen compañías que ofrecen servicios
de CRM vía Internet, como por ejemplo, Salesforce o SugarCRM. Con este tipo de CRMs,
el CRM no corre en la empresa, sino en la compañía que ofrece este servicio. Normalmente
ofrecen una interfaz Web para que los empleados de la empresa puedan acceder a la
funcionalidad del CRM (equivalente a la de un CRM “clásico”) desde un navegador, y un
conjunto de Servicios Web para poder construir aplicaciones que accedan a los datos de los
clientes. Este tipo CRMs liberan a las empresas de los costes de mantenimiento software y
hardware asociados a un CRM clásico, dado que el CRM está fuera de la empresa.
1
En particular, nuestra empresa acaba de adquirir otra empresa de un área de negocio
afín. Esta empresa había contratado un servicio de CRM con Salesforce, de manera que los
datos sobre los clientes de esta nueva empresa los gestiona Salesforce.
En este momento la empresa se encuentra con que tiene datos sobre clientes en dos
CRMs: en el interno y en Salesforce. Para determinadas funcionalidades (seguramente para
muchas), sería deseable disponer de una aplicación que ofrezca una vista unificada de los
datos de los clientes, evitando así que los empleados tengan que utilizar explícitamente los
dos CRMs, lo que sería muy tedioso. En particular, nuestra empresa decide construir una
aplicación Web (Figura 1) que permite recuperar la información de los clientes de tipo
“Lead” (clientes potenciales). La información de los clientes incluirá además la latitud y
longitud correspondientes a la ubicación geográfica de los clientes, de manera que la
aplicación pueda posicionar a los clientes sobre un mapa, para facilitar su localización. Esta
información no está disponible en ninguno de los CRMs, por lo que la aplicación utilizará
el servicio de geolocalización (“geocoding”) de Google Maps, que permite obtener la
latitud y longitud a partir de una dirección (e.g. “Facultad de Informática, Elviña, 15071, A
Coruña, A Coruña, España”). Este tipo de clientes son muy interesantes para los
comerciales de la empresa, que sin duda querrán visitar para intentar convertirlos en
clientes reales.
Figura 1. Interfaz gráfica de la aplicación Web Mashup.
La aplicación Web permite que los comerciales localicen los clientes potenciales
mediante un formulario en el que especifican el tipo de ganancia anual (“High”, “Medium”
o “Low”) que esperan de los clientes y el nombre de la provincia en el que están ubicados.
La Figura 1 muestra los primeros 10 clientes con tipo de ganancia (“revenue”) “High” que
están ubicados en A Coruña. Si el usuario selecciona uno de los clientes, sus datos se
muestran en un mapa (Google Maps), justo sobre su ubicación geográfica. El mapa dispone
de controles de navegación y zoom, así como la posibilidad de usar el ratón para
“arrastrarlo” a otra posición.
2
La Figura 2 muestra una visión global de la arquitectura de la mashup a implementar. El
código de partida de la práctica está estructurado en dos módulos: “ui” y “virtualcrm”. El
módulo “ui” implementa la interfaz Web que muestra la Figura 1. Se trata de una interfaz
Web rica, con un nivel de interactividad similar al de una aplicación de escritorio. Para ello,
la interfaz se ha implementado con enfoque AJAX [AJAX] (AJAX = Asynchronous
JavaScript + XML). Bajo este enfoque, la interfaz consta de dos partes: parte cliente y parte
servidora. La parte cliente implementa la interfaz gráfica en sí y es en su mayor parte
JavaScript, y en consecuencia corre en el navegador. Cada vez que la interfaz gráfica tiene
que realizar una comunicación con la parte servidora, realiza una invocación asíncrona por
HTTP. Cuando se recibe la respuesta, el código JavaScript modifica el árbol DOM de la
página HTML que muestra el navegador para presentar la nueva información. La parte
servidora recibe las peticiones HTTP, y si es necesario, devuelve datos en algún formato
(no necesariamente en XML como sugiere el acrónimo AJAX). En consecuencia, a
diferencia de una aplicación Web convencional, las interacciones que causan una
comunicación con el servidor, no devuelven una nueva página HTML completa, sino sólo
los nuevos datos (en algún formato) que se deben mostrar. El enfoque AJAX es otro de los
elementos que suele estar presente en las aplicaciones Web 2.0.
uestra empresa
Navegador
(Interacciones sobre el mapa)
(1)
Aplicación Web Mashup
Internet
UI
(2)
VirtualCRMService
(5)
Google Maps
Salesforce
(4)
VirtualCRM
(3)
InternalCRM
Figura 2. Arquitectura de la Mashup.
En la interfaz que muestra la Figura 1, cuando el usuario hace clic en el botón “Search”,
se comprueba que se ha especificado un valor en el campo “State”, y en caso afirmativo, el
código JavaScript invoca por HTTP, de manera asíncrona, un servicio proporcionado por la
aplicación Web que devuelve los datos de los clientes (los datos se devuelven en JSON, que
es un formato específico de JavaScript). Cuando llega la respuesta, el código JavaScript
muestra los datos de los clientes en un componente gráfico que permite visualizarlos en
bloques de 10, con botones para avanzar y retroceder. Cuando el usuario hace clic sobre un
cliente, los datos de éste se muestran sobre el mapa de Google Maps, en la ubicación
geográfica del cliente.
3
La interfaz se ha implementado con GWT (Google Web Toolkit) [GWT] y las APIs de
Google Maps [GMAPSAPI]. GWT es un framework Java Open Source liberado por
Google para la implementación de aplicaciones Web AJAX. GWT permite implementar
toda la interfaz gráfica en Java. Para ello, GWT dispone de un compilador (traductor) que
genera el código JavaScript automáticamente a partir del código Java correspondiente a la
interfaz gráfica, y un pequeño framework para recibir las peticiones asíncronas procedentes
del código JavaScript. Google Maps ofrece un API JavaScript para visualizar el mapa
terrestre, posicionar objetos sobre él y gestionar eventos sobre ellos. El código de la
práctica no usa directamente el API JavaScript de Google Maps, sino que lo hace mediante
Google Maps GWT [GMAPSGWT], una librería de componentes GWT que encapsulan el
API JavaScript de Google Maps. Las interacciones con los controles del mapa pueden
causar peticiones a Google Maps para recuperar la información geográfica que muestra el
mapa. Estas peticiones las realiza automáticamente el API JavaScript de Google Maps.
<<interface>>
VirtualCRMService
+ findLeads(lowAnnualRevenue : double, highAnnualRevenue : double , state : String) : List<LeadTO>
LeadTO
- firstName : String
- lastName : String
- company : String
- annualRevenue : double
- phone : String
- street : String
- postalCode : String
- city : String
- state : String
- country : String
- creationDate : Calendar
- geographicPointTO : GeographicPointTO
GeographicPointTO
0..1
- latitude : double
- longitude : double
+ constructor y métodos “get”
+ constructor y métodos “get”
Figura 3. Interfaz VirtualCRMService.
La única interacción del usuario que causa una petición a la aplicación Web es la
correspondiente al clic sobre el botón “Search”. El resto de eventos se resuelven localmente
en el navegador o causan peticiones a Google Maps para recuperar nuevas zonas del mapa.
Cuando el usuario hace clic en “Search”, el código JavaScript invoca el servicio de
búsqueda (1), que a su vez invoca (2) la operación findLeads del interfaz
VirtualCRMService (Figura 3), proporcionado por módulo “virtuacrm”. La operación
findLeads recibe tres parámetros. Los dos primeros representan el intervalo de ganancia
anual que deben tener los clientes (lowAnnualRevenue <= ganancia < lowHighRevenue), y
4
el tercero el nombre de la provincia en la que están ubicados. La operación devuelve la
información sobre los clientes que concuerdan con esos criterios de búsqueda. Por cada
cliente (LeadTO), se devuelve su nombre, apellidos, empresa en la que trabaja, ganancia
anual esperada, teléfono, calle, código postal, ciudad, provincia, país, la fecha de alta en el
CRM y su posición geográfica (GeographicPointTO). Si el servicio de geolocalización no
es capaz de devolver la posición de un cliente, el atributo geographicPointTO debe ser null.
La aplicación Web mantiene una única instancia (Singleton) de la clase que implementa el
interfaz
VirtualCRMService,
que
se
puede
obtener
mediante
VirtualCRMServiceFactory.getVirtualCRMService().
La
implementación
de
VirtualCRMService puede mantener estado global. En ese caso, la implementación de este
interfaz debe inicializar el estado en el constructor y no debe modificarlo nunca durante la
ejecución de las operaciones del interfaz.
La implementación del interfaz VirtualCRMService debe invocar los servicios de
búsqueda del CRM interno (3) y Salesforce (4) para obtener los datos de los clientes
potenciales, y al servicio de geolocalización de Google Maps (5) para obtener su posición
geográfica. Finalmente la implementación del interfaz debe devolver la información de los
clientes, ordenados por la ganancia potencial (de mayor a menor).
En la práctica se deberá implementar:
•
Una implementación ficticia del servicio de búsqueda del CRM interno (se añadirá
el módulo “internalcrm”·a la distribución fuente).
•
El interfaz VirtualCRMService (módulo “virtualcrm”), usando una arquitectura por
capas que oculte las APIs reales de los servicios que se invocan (los servicios de
búsqueda del CRM interno y Salesforce, y el servicio de geolocalización de Google
Maps). Esta arquitectura por capas facilita la implementación del interfaz
VirtualCRMService (la clase de implementación puede trabajar con APIs más
sencillas que las de los servicios) y minimiza el impacto en el software cuando se
decide reemplazar un servicio por otro alternativo (e.g. en el futuro quizás se desee
usar el servicio de geolocalización de Yahoo! Maps en vez del de Google Maps).
•
Un servicio que devuelve información de clientes recientes en RSS 2.0 (se añadirá
el módulo “leadnews”·a la distribución fuente). Este servicio será de utilidad para
poder estar al tanto de clientes recientes desde un lector de RSS (e.g. Firefox,
Internet Explorer, Thunderbird, Outlook, etc.).
Los siguientes apartados especifican de manera detallada la funcionalidad a
implementar en cada uno de los componentes de la práctica.
2.2
Servicio de búsqueda del CRM interno
Se implementará un servicio SOAP que ofrece una operación de búsqueda que devuelve
información sobre los clientes gestionados por el CRM interno. Por sencillez, la operación
será del estilo de la operación findLeads del interfaz VirtualCRMService, es decir, a
partir del intervalo de ganancia anual (mediante dos parámetros) y el nombre de la
5
provincia, devuelve la información de los clientes que concuerdan con esos criterios de
búsqueda. Una peculiaridad a mencionar es que el servicio CRM interno devolverá el
nombre y el apellido de cada contacto en un único campo siguiendo el formato Apellidos,
ombre (e.g. Pérez López, Juan). Nótese que la clase LeadTO del módulo “virtualcrm”
asume dos campos diferentes para el apellido y para el nombre. Además, para dar soporte al
servicio RSS, el servicio SOAP también proporcionará otra operación que devuelve los
clientes añadidos entre dos fechas.
En un caso real (e.g. Salesforce), la operación de búsqueda seguramente sería más
general, y en consecuencia, más complicada de usar. También por sencillez, la
implementación del servicio podrá tener cableada una lista de clientes con información
ficticia, que en un caso real, provendrían de un repositorio de información (e.g. una base de
datos).
2.3
Servicio de búsqueda de Salesforce
Salesforce (http://www.salesforce.com) ofrece a sus clientes un Servicio Web SOAP
para que sus aplicaciones puedan obtener fácilmente la información contenida en su CRM
online. Para poder desarrollar y probar fácilmente aplicaciones que accedan a sus datos,
Salesforce permite a los desarrolladores crear cuentas de “prueba” que son idénticas a las
reales pero que contienen datos ficticios. En la práctica, accederemos a la información de
una empresa ficticia creada de esta manera. Para ello cada grupo creará su propia cuenta de
prueba en Salesforce.
El modelo de datos lógico de Salesforce se compone de una serie de entidades de datos,
cada una de las cuáles contiene diversos tipos de información. En nuestro caso,
utilizaremos la entidad “Lead” (en español, “Candidato”) que contiene diversos datos sobre
clientes potenciales. Entre estos datos, se encuentran los diversos elementos que componen
su dirección como: Street (calle y número), State (provincia), PostalCode (código postal) o
Country (pais), y la facturación anual de la empresa a la que pertenece el contacto
(AnnualRevenue).
Para consultar los datos de una entidad, es necesario utilizar el método query del API
del servicio Web. Este método recibe entre sus parámetros una expresión de consulta
escrita en un lenguaje llamado SOQL, que es una versión muy simplificada de SQL.
Previamente a la invocación de la consulta, es necesario autenticarse en el servicio
mediante el método login de la API.
La documentación detallada del API de Salesforce se encuentra en
http://www.salesforce.com/us/developer/docs/api/index.htm.
Además,
en
https://wiki.apexdevnet.com/index.php/API y desde http://www.salesforce.com/developer
pueden encontrarse diversos ejemplos y recursos de interés. En clase de prácticas,
comentaremos también de forma detallada un ejemplo de acceso a la información de
Salesforce.
6
2.4
Servicio de geolocalización de Google Maps
Google Maps además de ofrecer un API JavaScript para visualizar el mapa terrestre,
posicionar objetos sobre él y gestionar eventos sobre ellos, proporciona también un servicio
REST, invocable por GET, de geolocalización. El servicio devuelve una lista priorizada (de
más a menos precisión) de puntos geográficos en los hay una dirección que coincide con la
pasada por parámetro. El servicio permite devolver la información en varios formatos. En
la práctica se invocará al servicio de manera que devuelva la información en formato CSV
(Comma Separated Value), y se considerará sólo la información que aparece en la primera
línea (la más precisa). La documentación de este servicio puede encontrarse en
http://www.google.com/apis/maps/documentation/ (sección “Geocoder Examples”).
2.5
Servicio RSS
Se utilizará JDOM para la generación del XML necesario partiendo de los datos de los
clientes. Se creará un feed llamado “Last potential clients” con link
http://www.acme.com/potentialclients.rss y una descripción adecuada.
Por cada cliente reciente (añadido hace menos de 24 horas) se generará un item RSS
con los siguientes elementos:
•
title. Nombre y apellidos del contacto, concatenado con el nombre de la empresa,
separados por el carácter “-“ (e.g. José Pérez López – Acme consulting).
•
description. Concatenación de todos los campos del contacto (formato
ombreCampo: ValorCampo) separados por el carácter “-“.
•
pubDate. Fecha de alta del cliente.
3 Diseño de flujos inter-aplicación: Servicio de Atención de
Incidencias
La empresa objeto de esta práctica tiene también la necesidad de atender las incidencias
de sus clientes. En este apartado se utilizará el lenguaje BPEL para modelar (de forma muy
simplificada) una parte de este proceso de negocio. El proceso consiste en lo siguiente:
•
A la entrada el proceso recibe una incidencia, que consta de los siguientes datos: cif
del cliente que ha abierto la incidencia, un código numérico que identifica el tipo de
incidencia y una descripción de la misma.
•
A continuación, se comprueba si el cliente es de tipo VIP o no. Los clientes VIP
son aquellos que facturan más de 3.000.000 euros anuales. Esta información puede
obtenerse a través del servicio web del CRM interno (en esta parte de la práctica,
por simplicidad, no nos ocuparemos de los clientes de Salesforce).
•
Si el cliente que ha abierto la incidencia es de tipo “VIP”, entonces hay que generar
una alerta al departamento comercial. Estas alertas son manejadas por una
7
herramienta de comunicación corporativa, que ofrece un API de Servicio Web. Para
crear la alerta, debe invocarse una operación llamada sendAlert del servicio web.
Esta operación recibe como parámetros el cif del cliente y un texto obtenido
concatenando el tipo de incidencia y la descripción de la misma. Devuelve un
código textual con el resultado de la operación.
•
A continuación es necesario dar la incidencia de alta en la aplicación de asignación
de recursos para incidencias. Esto se realiza invocando una operación llamada
manageIncidence del servicio web ofrecido por dicha aplicación. Recibe como
parámetros los datos de la incidencia y, además, la indicación de si el cliente es VIP
o no. Devuelve un mensaje en formato texto con la fecha estimada en la que la
incidencia será atendida.
•
Como resultado de su ejecución, el flujo devuelve la fecha estimada en que la
incidencia será atendida.
3.1
Parte obligatoria: Objetivo
La parte obligatoria de la práctica de flujos inter-aplicación consiste en definir (NO en
implementar):
• La especificación de los formatos de mensaje intercambiados entre los diferentes
Servicios Web, así como los tipos de enlace a socios necesarios.
• La especificación WSDL (sólo definición de tipos de datos y operaciones) de los
diversos Servicios Web involucrados.
• La especificación BPEL que implementa el flujo definido.
• Cualquier otra especificación que sea necesaria para el funcionamiento del proceso.
!OTAS:
•
No hay una única solución correcta para traducir este problema en BPEL.
•
Se entregarán en formato electrónico los ficheros con las especificaciones precisas.
•
Debido a que esta parte de la práctica no será probada en un entorno de ejecución
real con el que se pueda depurar convenientemente, no se será estricto con los
posibles errores menores de sintaxis, siempre que estos no sugieran algún fallo de
concepto.
•
Para facilitar la creación del flujo BPEL puede utilizarse, si se desea, el editor
gráfico Eclipse BPEL Designer.
8
3.2
Parte Opcional: Objetivo
Utilizando el motor BPEL ActiveBPEL, implementar realmente la aplicación BPEL
especificada al comienzo de la sección 3. Más concretamente será necesario:
• Implementar servicios web auxiliares (“mock”) necesarios:
o Aplicación de comunicación corporativa. No tiene que ser capaz de
enviar realmente las alertas. Basta con que escriba por la salida estándar
los datos de las alertas recibidas.
o Aplicación de asignación de recursos para incidencias. No tiene que
realizar ningún procesamiento real de las incidencias. Basta con que
escriba por la salida estándar los datos de las incidencias recibidas y
devuelva un plazo diferente para las incidencias VIP que para las no VIP.
o CRM interno. Se añadirá una operación al servicio existente que permita
comprobar si un cliente es de tipo VIP a partir de su cif.
• Implementar todas las especificaciones WSDL y BPEL necesarias para implementar
el flujo especificado utilizando el motor ActiveBPEL. Para facilitar la creación del
flujo BPEL, se utilizará el editor gráfico Eclipse BPEL Designer.
4 Normativa y evaluación
4.1
Composición de los grupos
La práctica se realizará en grupos de 2 personas (preferentemente) o de manera
individual.
4.2
Estándar de codificación
Con objeto de escribir código de calidad y fácilmente legible, se seguirá un sistema de
codificación común, que define reglas para nombrar clases, atributos y métodos, normas de
identación, etc. Esto permite que en un equipo de desarrollo el aspecto del código sea el
mismo, independientemente de qué programador lo haya escrito, lo que facilita el
mantenimiento. Para la práctica se utilizará el estándar de codificación [JAVACON. Los
ejemplos de la asignatura siguen estas sencillas convenciones de nombrado. Para no alargar
la práctica, no será necesario realizar documentación de las clases (e.g. JavaDoc).
4.3
Formato de entrega de la versión final
Se entregará una distribución .tar.gz o .zip con los fuentes de la aplicación y una
memoria impresa.
9
El formato de la distribución fuente será similar al del código de partida, es decir,
constará sólo de los ficheros fuente (e.g. .java, pom.xml, ficheros de configuración,
etc.), y no de los ficheros objeto (e.g. .class, .war, etc.).
A continuación se detalla el formato de la memoria. Como normal general, los
diagramas emplearán la notación UML. Los diagramas deben ser de calidad (y no hechos
por reingeniería inversa; ¡el diseño precede a la implementación!) y estar explicados de
manera breve, pero clara. Es importante destacar que no se pretende que se haga un
documento grande, sino un documento que explique breve, pero claramente, cada uno de
los apartados que a continuación se describen. La calidad de la memoria será vital para la
corrección de la práctica.
1. Introducción
Cita las partes opcionales que se han implementado.
2. Diseño
2.1 Arquitectura global
Explica brevemente los módulos que se han diseñado e implementado. Para
apoyar la explicación se usarán dos diagramas UML de “alto nivel”:
•
Un diagrama de clases que ilustre las principales abstracciones (interfaces,
factorías, clases de implementación de interfaces, etc.) de los distintos
módulos que intervienen en la implementación del interfaz
VirtualCRMService. Este diagrama no tendrá que mostrar los nombres de
operaciones y atributos en las interfaces y clases. Se trata de ilustrar las
dependencias entre las principales abstracciones.
•
Un diagrama de secuencia que ilustre el procesamiento de una invocación a
la operación findLeads del interfaz VirtualCRMService, en términos de
las abstracciones mostradas en el anterior diagrama de clases.
2.2 Módulo i-ésimo
Por cada módulo (excepto para las partes que ya venían implementadas en el
módulo “ui”) se incluirá un apartado que explique su diseño. Para apoyar la
explicación se incluirá:
•
•
La estructura global de paquetes del módulo. o es necesario emplear la
notación UML. Tampoco es necesario mostrar todos los paquetes, sino sólo
los paquetes de más alto nivel que reflejen la arquitectura del módulo y sus
principales subpaquetes. Por cada paquete se explicará brevemente qué
contiene.
Uno o varios diagramas que ilustren la arquitectura del módulo. En
particular, los diagramas deberán especificar detalladamente las
10
operaciones de los interfaces y las clases Transfer Object. Para el resto de
abstracciones (clases concretas) sólo será necesario especificar las
operaciones y atributos que se consideren relevantes para poder entender la
explicación del módulo (e.g. algún atributo importante para comprender la
implementación de algún interfaz). Es decir, los diagramas UML no tienen
que recoger todas las abstracciones implementadas, sino sólo las relevantes,
y para cada una de ellas mostrar sólo lo necesario para poder comprender
el diseño del módulo.
3. Compilación e instalación de la aplicación
Se explicará claramente cómo compilar e instalar la práctica, asumiendo un
entorno correctamente configurado (e.g. servidor de aplicaciones instalado y
configurado, paquetes software instalados en los mismos directorios que en el
laboratorio, etc.), y que en consecuencia, no es preciso documentar. La
instrucciones de instalación deberían ser lo más sencillas posibles. En particular,
deberán especificar:
•
Cómo desempaquetar la distribución de los fuentes.
•
Algún aspecto particular de configuración que sea preciso resaltar.
•
La práctica debe poder ser compilada y ejecutada usando maven.
En la corrección de la versión final de cada aplicación se seguirán estas
instrucciones de instalación.
4. Problemas conocidos
Lista los errores que se conoce que tiene el código.
4.4
Iteraciones y entregas
Para la realización de cada aplicación se seguirá un enfoque basado en iteraciones, de
manera que cada iteración incorpora más funcionalidad sobre la anterior, hasta que en la
última iteración se termina con un software que implementa toda la funcionalidad. En
particular, cada aplicación se hará en dos iteraciones. La corrección de la primera
iteración no llevará una nota asociada ni será necesario entregar una memoria.
Bastará con mostrar los diagramas relativos a esta iteración mediante la herramienta
MagicDraw instalada en el laboratorio. El objetivo de la corrección de esta primera
iteración es intentar detectar errores importantes, y en ese caso, orientar al alumno hacia su
resolución. En la segunda iteración se completará la práctica. En la corrección de la
segunda iteración se pondrá una nota y se deberá entregar el código y la memoria
impresa.
En particular, para los alumnos de Ingeniería Informática, se realizarán las siguientes
iteraciones:
11
•
Primera iteración. Se implementará el Servicio Web ficticio del CRM interno,
el interfaz VirtualCRMService sin hacer uso de Salesforce (pero con una
arquitectura que prevea su uso) y el servicio RSS. Plazo de entrega: finales de
Mayo y principios de Junio (a mediados de Mayo se publicará día y hora
para cada grupo).
•
Segunda iteración. Se implementará el resto de la práctica. Los alumnos que lo
deseen pueden implementar la parte opcional descrita en la sección 3.2. Plazo
de entrega: principios de Julio (a finales de Junio se publicará día y hora
para cada grupo).
Para los alumnos del Master, se realizarán las siguientes iteraciones:
•
Primera iteración. Se implementará el Servicio Web ficticio del CRM interno,
el interfaz VirtualCRMService sin hacer uso de Salesforce (pero con una
arquitectura que prevea su uso) y el servicio RSS. Plazo de entrega: finales de
Mayo y principios de Junio (a mediados de Mayo se publicará día y hora
para cada grupo).
•
Segunda iteración. Se corregirán los errores de la iteración anterior, y los
alumnos que lo deseen, implementarán el acceso a Salesforce y realizarán la
especificación descrita en el apartado 3.1. Plazo de entrega: principios de
Julio (a finales de Junio se publicará día y hora para cada grupo).
A efectos de planificación debe tenerse en cuenta que cada iteración debe estar lista
para el primer día posible de su plazo de entrega. La entrega de cada iteración es obligatoria
y deben estar presentes todos los miembros del grupo. En la entrega se realizará una demo
y se harán preguntas individualizadas sobre el diseño y la implementación.
4.5
Evaluación
La puntuación máxima de cada parte será como sigue:
•
Parte obligatoria: 8 puntos.
•
Parte opcional: 2 puntos.
Para la puntuación de cada parte, se tendrá en cuenta:
•
Su correcto funcionamiento.
•
La calidad del diseño.
•
La calidad del código.
•
La calidad de la memoria.
12
Una práctica copiada significará un suspenso para el grupo que ha dejado copiar y el
que ha copiado; a todos los efectos, no se hará ninguna distinción. Los suspensos por
práctica copiada tendrán que realizar una práctica distinta, que además deberán proponer (y
ser aceptada).
Para aprobar la asignatura en la convocatoria de Junio será preciso entregar cada
iteración en el plazo fijado y superar el examen tipo test. Para las convocatorias de
Septiembre y Diciembre se hará la misma práctica (excepto los suspensos por práctica
copiada), sin posibilidad de entregar o revisar la primera iteración.
5 Referencias
[AJAX] J. J. Garret, “Ajax: A New Approach to Web Applications”,
http://www.adaptivepath.com/publications/essays/archives/000385.php.
[GMAPSAPI] Google Maps API, http://code.google.com/apis/maps/index.html.
[GMAPSGWT] Google Maps GWT, http://sourceforge.net/projects/gwt.
[YAHOOMAPSAPI] Yahoo! Geocoding API
http://developer.yahoo.com/maps/rest/V1/geocode.html.
[GWT] Google Web Tookit: http://code.google.com/webtoolkit.
[JAVACON] Sun Microsystems, “Java Code Conventions”,
http://java.sun.com/docs/codeconv/index.html.
[WEB2.0]
T. O’Reilly, “What Is Web 2.0: Design Patterns and Business Models for the
Next Generation of Software”,
http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web-20.html.
13

Documentos relacionados