trabajo fdd

36
DESARROLLO BASADO EN FUNCIONES (FDD)

Upload: drianda

Post on 26-Oct-2015

109 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Trabajo Fdd

DESARROLLO BASADO EN FUNCIONES (FDD)

Page 2: Trabajo Fdd

Índice

DESARROLLO BASADO EN FUNCIONES (FDD)

DEFINICIÓN 1

HISTORIA DEL MODELO DE CASCADA 1

PRINCIPIOS BÁSICOS DEL MODELO DE CASCADA 2

FASES DEL MODELO DE CASCADA 2

INGENIERÍA Y ANÁLISIS DEL SISTEMA: 3

ANÁLISIS DE LOS REQUISITOS DEL SOFTWARE: 3

DISEÑO: 4

LA ETAPA DE DISEÑO 4

CODIFICACIÓN: 4

PRUEBA: 4

MANTENIMIENTO: 5

MODELO EN CASCADA PURO O SECUENCIAL 6

Modelo en cascada realimentado para el ciclo de vida 7

Modelos Modificados de Cascada 7

El modelo Sashimi 8

Modelo en Cascada Bennington 1956: 8

La metodología en cascada es esencialmente: 9

Argumentos a favor del modelo de cascada 10

Ventajas 12

Desventajas 12

Problemas del modelo de cascada 13

El fracaso del modelo de cascada 14

Uso 14

La crítica del modelo de cascada 15

Conclusión 18

Page 3: Trabajo Fdd

Índice

MAPA CONCEPTUAL 19

CUESTIONARIO 20

BIBLIOGRAFIA 23

Page 4: Trabajo Fdd

Contenido

DESARROLLO BASADO EN FUNCIONES (FDD)

Introduccion

Esta metodología se basa en la definición de funcionalidades que deben

ser implementadas en el sistema. FDD está pensado para proyectos con

duración relativamente cortos, menores a un año.

En esta metodología se presenta una jerarquía de funcionalidades, la

primera en la jerarquía agrupa las propiedades relacionadas con

aspectos en común del negocio.

Una de las principales ventajas de trabajar centrado en las

funcionalidades del software es el de formar y fomentar un dialogo fluido

entre los clientes y desarrolladores y que ambos posean un modelo

común del negocio.

FDD constituye un proceso iterativo con iteraciones cortas (menores a

dos semanas) obteniendo como resultado un software funcional que la

dirección de la empresa cliente puede ver y monitorizar.

FDD (Feature-Driven Development) es un proceso de ingeniería de

software que se centra principalmente en la entrega frecuente de

software que trabaja para el cliente.

Al ser un desarrollo ágil de software centrado en el FDD incisiva favorece

la participación de los clientes (internos o externos) para el proceso de

planificación y desarrollo de software, ya que se basa en un proceso de

desarrollo de software de forma iterativa e incremental.

El FDD no se centró en la programación o el alcance de un modelo bien

definido, sino que hace uso de una planificación iterativo, que tiene

como objetivo abstracto y satisfacer las principales necesidades de la

empresa, que determinan la forma de desempeño del equipo de

desarrollo. Los pasos y el modelo utilizado para el desarrollo de

software EVOLUCIÓN SYS están definidas por los pasos a continuación e

incluyen los siguientes procesos:

Desarrollo Basado en Funcionalidades

1

Page 5: Trabajo Fdd

Contenido

FDD con sus siglas en inglés Feature Driven Development es un enfoque

á gil para el desarrollo de sistemas. Fue desarrollado por Jeff De Luca y

el viejo gurú de la Orientacióna Objetos Peter Coad. Como las otras

metodologías adaptables, se enfoca en iteraciones cortas que entregan

funcionalidad tangibleDicho enfoque no hace énfasis en la obtención de

los requerimientos sino en como se realizan las fases de diseño y

construcción. Sin embargo, fue diseñado para trabajar con otras

actividades de desarrollo de software y no requiere la utilización de

ningún modelo de proceso específico. Además, hace énfasis en aspectos

de calidad durante todo el proceso e incluye un monitoreo permanente

del avance del proyecto. Al contrario de otras metodologías, FDD afirma

ser conveniente para el desarrollo de sistemas críticos.

Definicion

FDD es un método de desarrollo de ciclos cortos que se concentra en la

fase de diseño y construcción. En la primera fase, el modelo global de

dominio es elaborado por expertos del dominio y desarrolladores; El

modelo de dominio consiste en diagramas de clases con clases,

relaciones, métodos y atributos. Los métodos no reflejan conveniencias

de programación sino rasgos funcionales.

2

Page 6: Trabajo Fdd

Contenido

Feature Oriented Programming (FOP) es una técnica de programación

guiada por rasgos o características (features) y centrada en el usuario,

no en el programador; su objetivo es sintetizar un programa conforme a

los rasgos requeridos [Bat03]. En un desarrollo en términos de FOP, los

objetos se organizan en módulos o capas conforme a rasgos. FDD, en

cambio, es un método ágil, iterativo y adaptativo. A diferencia de otros

MAs, no cubre todo el ciclo de vida sino sólo las fases de diseño y

construcción y se considera adecuado para proyectos mayores y de

misión crítica. FDD es, además, marca registrada de una empresa,

Nebulon Pty. Aunque hay coincidencias entre la programación orientada

por rasgos y el desarrollo guidado por rasgos, FDD no necesariamente

implementa FOP.

FDD no requiere un modelo específico de proceso y se complementa con

otras metodologías. Enfatiza cuestiones de calidad y define claramente

entregas tangibles y formas de evaluación del progreso.

Las primeras tres fases ocupan gran parte del tiempo en las primeras iteraciones,

siendo las dos últimas las que absorben la mayor parte del tiempo según va

avanzando el proyecto, limitándose las primeras a un proceso de refinamiento.

El trabajo (tanto de modelado como de desarrollo) se realiza en grupo, aunque

siempre habrá un responsable último (arquitecto jefe o jefe de programadores en

función de la fase en que nos encontremos), con mayor experiencia, que tendrá la

última palabra en caso de no llegar a un acuerdo. Al hacerlo en grupo se consigue

que todos formen parte del proyecto y que los menos inexpertos aprendan de las

discusiones de los mas experimentados, y al tener un responsable último, se

asignan las responsabilidades que todas las empresas exigen.

Las funcionalidades a implementar en una release se dividen entre los distintos

subgrupos del equipo, y se procede a implementarlas. Las clases escritas tienen

propietario (es decir, solo quién las crea puede cambiarlas), es por ello que en el

equipo que implementa una funcionalidad dada deberán estar todos los dueños de

las clases implicadas, pudiendo encontrarse un programador en varios grupos,

implementando distintas funcionalidades. Habrá también un programador jefe

3

Page 7: Trabajo Fdd

Contenido

(normalmente el más experimentado) que hará las funciones de lider del grupo

que implementa esa funcionalidad. En el proceso de implementar la funcionalidad

también se contemplan como partes del mismo (en otros métodos se describen

como actividades independientes) la preparación y ejecución de pruebas, así

como revisiones del código (para distribuir el conocimiento y aumentar la calidad)

e integración de las partes que componen el software.

Historia

Se lo reportó por primera vez en un libro de Peter Coad, Eric Lefebvre y

Jeff DeLuca Java Modeling in Color with UML [CLD00]; luego fue

desarrollado con amplitud en un proyecto mayor de desarrollo por

DeLuca, Coad y Stephen Palmer. Su implementación de referencia,

análogo al C3 de XP, fue el Singapore Project; DeLuca había sido

contratado para salvar un sistema muy complicado para el cual el

contratista anterior había producido, luego de dos años, 3500 páginas

de documentación y ninguna línea de código. Naturalmente, el proyecto

basado en FDD fue todo un éxito, y permitió fundar el método en un

caso real de misión crítica.

Fases

Las iteraciones son definidas en base a las funcionalidades, un proyecto

abordado con FDD presenta cinco fases:

1.-Desarrollo de un modelo general.

Esta fase se define por una reunión de la comprensión del problema

(Reunión de Planificación), donde los miembros del equipo (Scrum

Master y Team) y el cliente (Product Owner) definen lo que se producirá

durante el Sprint. En esta reunión, se establecen los requisitos para ser

tratada, dejando que el tiempo de la construcción de modelos,

artefactos y de negocios del usuario Historias. Los artefactos producidos

durante esta fase son: Visión de FBS (Estructura de Desglose de

funciones), Diagrama de Clase Ejecutiva, el establecimiento de los

criterios de aceptación.

4

Page 8: Trabajo Fdd

Contenido

2. Construcción de la lista de funcionalidades.

En esta etapa se construyen las listas de características que se

abordarán durante el sprint y su FBS (similar a la WBS) es refinado.

Después de obtener este punto de vista, los responsables de cada una

de las modelos, agrupados por características se denominan, de modo

que el trabajo de análisis y desarrollo se inició. Los artefactos

producidos durante esta fase son: FBS: estructura de los componentes

de averías y los diagramas de clases.

3. Plan de entregables en base a las funcionalidades a implementar. La

planificación de cómo las características se desarrollará marcar esta

fase, donde se define la secuencia en el desarrollo de las características

de las actividades empresariales, que se asignan a los responsables de

acuerdo con la clase de desarrollo. Los artefactos producidos durante

esta fase son: Visión de FBS (Estructura de Desglose de funciones),

diagrama de clases.

4. Diseñar en base a las funcionalidades.

El desglose por funcionalidad no es más que el análisis del sistema en sí

mismo. En esta etapa, se describe el desarrollo de documentos y

artefactos, junto con la documentación de las clases y sus diagramas de

clases y de secuencia. Los artefactos producidos durante esta fase son:

Perfeccionamiento de los diagramas de clases, diagramas de secuencia

(de actividad, la máquina del Estado y de la comunicación, si es

necesario), Diagrama de entidad-relación (DER) y Storyboard.

5. Implementar en base a las funcionalidades.

En esta etapa, se hace para implementar las clases y métodos. Como

buena práctica, que aprobó la revisión del código y la generación de

evidencia para las pruebas unitarias antes de que se apliquen los planes

de prueba y la profundidad integrada de la aplicación generada. Los

principales artefactos generados al final de esta etapa son el Código,

diagrama de clases (Final) Pantallas y Pruebas Funcionales Unidad.

5

Page 9: Trabajo Fdd

Contenido

El trabajo de modelado como el de desarrollo es realizado en grupo,

pero siempre se debe contar con la presencia de un jefe o arquitecto de

desarrolladores, en función a la fase en la que el proyecto se encuentre.

Las funcionalidades que se deben implementar son divididas entre los

subgrupos del equipo, cada clase escrita tiene un propietario, y se

restringe a que solo el propietario de la clase pueda cambiar el código

de esta, esto da como resultado que un programador puede integrar

varios subgrupos y estará implementando diferentes funcionalidades en

el proyecto.

Primera Fase

En la primera fase del FDD deben participar tanto expertos en el dominio

del negocio como los desarrolladores, mediante la colaboración de los

dos grupos se genera un conocimiento global de la aplicación a construir

y los primeros bosquejos de las funcionalidades del software.

Segunda Fase

La segunda fase de FDD es construir la lista de funcionalidades del

software a desarrollar, para esta fase se toma el bosquejo elaborado en

la fase anterior refinando las funcionalidades incluidas para ubicarlas en

una estructura organizada en forma jerárquica. El trabajo de desarrollo

es organizado en función de priorización de las funcionalidades

definidas, en caso de obtener actividades cuyo desarrollo implique más

de dos semanas, estas deben ser particionadas para ser ubicadas en

iteraciones.

Tercera Fase

La tercera fase de FDD establece tiempos de desarrollo a partir de la

lista priorizada de funcionalidades que se obtuvo en la fase anterior. Los

líderes de proyecto deben delinear los hitos de finalización de cada

iteración estableciendo responsabilidades.

La parte productiva en cuanto a desarrollo está contenida en las dos

últimas fases de FDD, en estas fases se construye en forma incremental

la aplicación.

6

Page 10: Trabajo Fdd

Contenido

Mediante la utilización de lenguaje UML, se diseña las clases atributos y

métodos requeridos para la implementación de la funcionalidad de la

aplicación.

La metodología FDD está orientada completamente a la funcionalidad

del software sobre las tareas. La metodología recomienda organizar

bloques de funcionalidades para ser construidos en forma incremental

mediante iteraciones de dos semanas de duración, cada subgrupo de

programación debe ser dirigido por un programador jefe.

Diseño por funcionalidades y Construcción por funcionalidades

En esta etapa se selecciona un conjunto de funcionalidades de la lista y

se procede a diseñar y construir la funcionalidad mediante un proceso

iterativo.

Una iteración puede tomar de unos pocos días a un máximo de dos

semanas. El proceso iterativo incluye inspección de diseño, codificación,

pruebas unitarias, integración e inspección de código.

Para cada una de estas iteraciones en la fase de diseño se debe generar:

• Diagrama de secuencia detallado

• Diagrama de clases actualizado

• Descripción de clases y métodos

• Notas adicionales

En la fase de construcción:

• Implementacion e inspeccion de metodos

• Testing unitarios para cada metodo

• Check in de las clases

• Main Build del sistema y testing de integración.

Roles

• Gerente de proyecto

• Arquitecto en jefe

7

Page 11: Trabajo Fdd

Contenido

• Gerente de desarrollo

• Programador en Jefe

• Experto del dominio

• Gerente del dominio

• Administrador de release

• Language Guru

• Ingeniero de construcción

• Administrador del sistema

• Tester

• Deployer

• Escritor Técnico

Procesos

FDD tiene cinco procesos. Los primeros tres se hacen al principio del

proyecto.

• Desarrollar un Modelo

• Global Construir una Lista de los Rasgos

• Planear por Rasgo

• Diseñar por Rasgo

• Construir por Rasgo

En las primeras tres fases se ocupa gran parte del tiempo al inicio del

proyecto, pero a medida que se avanza en las iteraciones las otras dos

van ocupando más tiempo, y las primeras solo son para el refinamiento

del release siguiente.

Los últimos dos se hacen en cada iteración. Cada proceso se divide en

tareas y se da un criterio de comprobación.

El Proceso

Dicho proceso consiste de cinco fases secuenciales durante las cuales el

diseño y la construcción del sistema se llevan a cabo.

La parte iterativa del proceso de FDD (Diseño y Construcción) soporta un

desarrollo ágil, con adaptaciones rápidas para cambios de último

momento en los requerimientos.

8

Page 12: Trabajo Fdd

Contenido

1- Develop an Overall Modell (desarrollar modelo general)

Cuando esta fase comienza, los expertos del dominio ya tienen una idea

del contexto y los requerimientos del sistema. Es probable que el

documento de especificación de requerimientos ya exista. Sin embargo,

FDD no hace énfasis en la recolección y administración de los

requerimientos. Los expertos del dominio presentan un informe llamado

walkthrough en el cual los miembros del equipo y el Chief Arquitect son

informados a través de una descripción de alto nivel del sistema.

El dominio global es dividido en diferentes áreas y se realiza un

walkthrough detallado para cada una de dichas áreas por parte de los

expertos del dominio. Luego de cada walkthrough, un grupo de

desarrolladores realizan un modelo de objetos para el área del dominio.

Además, el equipo de desarrollo discute y decide cual es el modelo de

objetos más apropiado para cada área del dominio. Simultáneamente, el

modelo global del sistema es construido.

2- Build a Features List (construir lista de rasgos)

Los walkthroughs, el modelo de objetos y los requerimientos existentes

ofrecen una buena base para construir una features list que resuma la

funcionalidad del sistema a ser desarrollado. En dicha lista, el equipo de

desarrolladores presenta cada una de las funcionalidades evaluadas por

el cliente. Las funcionalidades son presentadas por cada área del

dominio y éstas forman un Mejor List Sets. Dicha lista es divida en

subconjuntos en base a la funcionalidad. Estas representan diferentes

actividades con un área específica del dominio. La features list es

revisada por los usuarios y sponsors del sistema para su validación y

aprobación.

3- Plan by Feature (planear por rasgos)

En esta etapa se incluye la creación de un plan de alto nivel, en el cual

la features list es ordenada en base a la prioridad y a la dependencia

entre cada feature. Además, las clases identificadas en la primera etapa

son asignadas a cada programador.

9

Page 13: Trabajo Fdd

Contenido

4 y 5- Design and Build by Feature (diseñar y costruir por

rasgos)

Un conjunto de features es seleccionada de la features list.

El diseño y construcción de la funcionalidad es un proceso iterativo

durante el cual las features seleccionadas son producidas. Una iteración

puede llevar desde unos pocos días a un máximo de dos semanas. Este

proceso iterativo incluye tareas como inspección del diseño,

codificación, testing unitario, integración e inspección del código. Luego

que la iteración llega a su fin se realiza un main build de la funcionalidad

en el cual se integra la funcionalidad. Dicho main build se realiza

mientras la siguiente iteración comienza.

1 Feature : Son pequeñas funcionalidades que el cliente quiere.

2 Feature List : Lista que agrupa toda la funcionalidad del sistema

3 CMS : Es un repositorio en el cual se almacena toda la información del

proyecto como ser documentación, código fuente, etc.

CARACTERISTICAS FDD

No cubre todo el ciclo de vida del proyecto sino el diseño y

construcción.

Se considera apto para proyectos de misión crítica.

Metodología de desarrollo de centrado en ciclos cortos.

El modelo del dominio consta de diagramas de clases, relaciones

métodos y atributos.

Los métodos reflejan rasgos funcionales del software más no

conveniencias de programación.

Roles y Responsabilidades.

El FDD clasifica sus roles en las siguientes tres categorías:

Key roles

Project manager

Chief architect

Development manager

Chief programmer

10

Page 14: Trabajo Fdd

Contenido

Class owner

Expertos del dominio

Supporting roles

Realese manager

Language lawyer/language guru

Build engineer

Tool smith

System administrator

Additional roles

Deployers

Techical writers

Testers

Vale la pena aclarar que un miembro de un equipo puede ejercer varios

roles y un rol pude ser compartido por varias personas.

Project Manager Es el líder administrativo y financiero del proyecto. Una

de sus tareas principales es proteger al equipo de distracciones externas

y permitir que el equipo de pueda trabajar en las condiciones

apropiadas. En el FDD el Project Manager tiene la última palabra sobre

temas referidos al alcance, tiempo y personal.

Chief Architect Es el responsable por el diseño global del sistema y de la

ejecución de todas las etapas del diseño. También tiene la última

palabra sobre las decisiones del diseño de todo el sistema. Si es

necesario, este rol puede ser dividido en dos roles como ser Domain

Architect y Tecnical Architect.

Development Manager Lleva diariamente las actividades de desarrollo y

resuelve cualquier conflicto que pueda ocurrir con el equipo.Además,

este rol incluye la responsabilidad de resolver problemas referentes a los

recursos. Las tareas de este rol pueden ser combinadas con las del Chief

Architect o el Proyect Manager. Chief Programmer Es un desarrollador

con experiencia, el cual participa en el an á lisis de los requerimientos y

11

Page 15: Trabajo Fdd

Contenido

el diseño del proyecto. El Chief Programmer es el responsable de guiar a

pequeños equipos en el an á lisis, diseño y desarrollo de nuevas

Funcionalidades. Además, selecciona las funcionalidades a desarrollar de

la lista de funcionalidades de la próxima iteración en la última fase del

FDD, identifica las clases y el Class Owner que se necesita en el equipo

para la iteración. Con la ayuda de otros Chief Programmers resuelve

problemas técnicos y de recursos, y reporta el progreso del equipo

durante la semana.

Class Owner Trabaja bajo la guía del Chief Programmer en las tareas de

diseño, codificación, testing y documentación. Él es responsable del

desarrollo de las clases que se le asignaron como propias. Para cada

iteración los Class Owner participan en la decisión de que clase ser á

incluida en la lista de funcionalidades de la próxima iteración.

Expertos del dominio Los expertos del dominio pueden ser un usuario,

un cliente, un sponsor, un analista del negocio o una mezcla de estos.

Su tarea es poseer el conocimiento de los diferentes requerimientos del

sistema. El experto del dominio pasa el conocimiento a los

desarrolladores de manera tal que asegure que estos entreguen un

sistema completo.

Domain Manager Lidera al grupo de expertos del dominio y resuelve sus

diferencias de opini ó n concernientes a los requerimientos del sistema.

Realese Manager Controla el avance del proceso mediante la revisión de

los reportes del Chief Programmer y realiza pequeñas reuniones con é l.

Además, reporta el progreso del proyecto al gerente.

Language Lawyer/Language Guru Es un miembro del equipo responsable

de poseer un vasto conocimiento en, por ejemplo, un específico lenguaje

de programación o tecnología. Este rol es particularmente importante

cuando el equipo trabaja con una nueva tecnología.

Build Engineer Es la persona responsable de preparar, mantener y correr

el proceso de construcción, incluidas las tareas de mantenimiento de las

versiones y la publicación de la documentación.

12

Page 16: Trabajo Fdd

Contenido

Toolsmith Es un rol para la construcción de herramientas específicas

para el desarrollo, conversión de datos y testeo. Además, puede trabajar

en la preparación y mantenimiento tanto de bases de datos o sitios web

destinados al proyecto.

System Administrator La tarea del administrador del sistema es

configurar, administrar y reparar los servidores, estaciones de trabajo y

equipos de desarrollo y testeo utilizados por el equipo.

Tester Verifica que el sistema recién creado cumpla con los

requerimientos del cliente. Puede llegar a ser una persona

independiente del equipo del proyecto.

Deployer Es el encargado de convertir la información existente

requerida por el nuevo sistema y participa en el lanzamiento de los

nuevos productos.

Technical Writer Se encarga de preparar la documentación para los

usuarios, quienes pueden formar parte o no del equipo del proyecto.

Los principios de FDD

Los principios de FDD son pocos y simples:

• Se requiere un sistema para construir sistemas si se pretende escalar

a proyectos grandes.

• Un proceso simple y bien definido trabaja mejor.

• Los pasos de un proceso deben ser lógicos y su mérito

inmediatamente obvio para cada miembro del equipo.

• Vanagloriarse del proceso puede impedir el trabajo real.

• Los buenos procesos van hasta el fondo del asunto, de modo que los

miembros del equipo se puedan concentrar en los resultados.

• Los ciclos cortos, iterativos, orientados por rasgos (features) son

mejores.

Categorias de Rol en FDD

Hay tres categorías de rol en FDD: roles claves, roles de soporte y roles

adicionales. Los seis roles claves de un proyecto son: (1) administrador del

proyecto, quien tiene la última palabra en materia de visión, cronograma y

13

Page 17: Trabajo Fdd

Contenido

asignación del personal; (2) arquitecto jefe (puede dividirse en arquitecto de

dominio y arquitecto técnico); (3) manager de desarrollo, que puede combinarse

con arquitecto jefe o manager de proyecto; (4) programador jefe, que participa en

el análisis del requerimiento y selecciona rasgos del conjunto a desarrollar en la

siguiente iteración; (5) propietarios de clases, que trabajan bajo la guía del

programador jefe en diseño, codificación, prueba y documentación, repartidos por

rasgos y (6) experto de dominio, que puede ser un cliente, patrocinador,

analista de negocios o una mezcla de todo eso.

Proceso FDD

Los cinco roles de soporte comprenden (1) administrador de entrega, que controla

el progreso del proceso revisando los reportes del programador jefe y

manteniendo reuniones breves con él; reporta al manager del proyecto; (2)

abogado/guru de lenguaje, que conoce a la perfección el lenguaje y la tecnología;

(3) ingeniero de construcción, que se encarga del control de versiones de los

builds y publica la documentación; (4) herramientista (toolsmith), que construye

herramientas ad hoc o mantiene bases de datos y sitios Web y (5) administrador

del sistema, que controla el ambiente de trabajo o productiza el sistema cuando

se lo entrega.

Los tres roles adicionales son los de verificadores, encargados del despliegue y

escritores técnicos. Un miembro de un equipo puede tener otros roles a cargo, y

un solo rol puede ser compartido por varias personas.

14

Page 18: Trabajo Fdd

Contenido

Procesos secuenciales en FDD

FDD consiste en cinco procesos secuenciales durante los cuales se diseña y

construye el sistema. La parte iterativa soporta desarrollo ágil con rápidas

adaptaciones a cambios en requerimientos y necesidades del negocio. Cada fase

del proceso tiene un criterio de entrada, tareas, pruebas y un criterio de salida.

Típicamente, la iteración de un rasgo insume de una a tres semanas. Las fases

son:

Fases

1) Desarrollo de un modelo general. Cuando comienza este desarrollo, los

expertos de dominio ya están al tanto de la visión, el contexto y los

requerimientos del sistema a construir. A esta altura se espera que existan

requerimientos tales como casos de uso o especificaciones funcionales. FDD, sin

embargo, no cubre este aspecto. Los expertos de dominio presentan un ensayo

(walkthrough) en el que los miembros del equipo y el arquitecto principal se

informan de la descripción de alto nivel del sistema. El dominio general se

subdivide en áreas más específicas y se define un ensayo más detallado para

cada uno de los miembros del dominio. Luego de cada ensayo, un equipo de

desarrollo trabaja en pequeños grupos para producir modelos de objeto de cada

15

Page 19: Trabajo Fdd

Contenido

área de dominio. Simultáneamente, se construye un gran modelo general para

todo el sistema.

2) Construcción de la lista de rasgos. Los ensayos, modelos de objeto y

documentación de requerimientos proporcionan la base para construir una amplia

lista de rasgos. Los rasgos son pequeños ítems útiles a los ojos del cliente. Son

similares a las tarjetas de historias de XP y se escriben en un lenguaje que todas

las partes puedan entender. Las funciones se agrupan conforme a diversas

actividades en áreas de dominio específicas. La lista de rasgos es revisada por

los usuarios y patrocinadores para asegurar su validez y exhaustividad. Los

rasgos que requieran más de diez días se descomponen en otros más pequeños.

3) Planeamiento por rasgo. Incluye la creación de un plan de alto nivel, en el que

los conjuntos de rasgos se ponen en secuencia conforme a su prioridad y

dependencia, y se asigna a los programadores jefes. Las listas se priorizan en

secciones que se llaman paquetes de diseño. Luego se asignan las clases

definidas en la selección del modelo general a programadores individuales, o sea

propietarios de clases. Se pone fecha para los conjuntos de rasgos.

4) Diseño por rasgo y Construcción por rasgo. Se selecciona un pequeño

conjunto de rasgos del conjunto y los propietarios de clases seleccionan los

correspondientes equipos dispuestos por rasgos. Se procede luego iterativamente

hasta que se producen los rasgos seleccionados. Una iteración puede tomar de

unos pocos días a un máximo de dos semanas. Puede haber varios grupos

trabajando en paralelo. El proceso iterativo incluye inspección de diseño,

codificación, prueba de unidad, integración e inspección de código. Luego de una

iteración exitosa, los rasgos completos se promueven al build principal. Este

proceso puede demorar una o dos semanas en implementarse.

FDD consiste en un conjunto de “mejores prácticas” que distan de ser nuevas

pero se combinan de manera original. Las prácticas canónicas son:

• Modelado de objetos del dominio, resultante en un framework cuando se

agregan los rasgos. Esta forma de modelado descompone un problema mayor en

otros menores; el diseño y la implementación de cada clase u objeto es un

problema pequeño a resolver.

16

Page 20: Trabajo Fdd

Contenido

Cuando se combinan las clases completas, constituyen la solución al problema

mayor. Una forma particular de la técnica es el modelado en colores [CLD00], que

agrega una dimensión adicional de visualización. Si bien se puede modelar en

blanco y negro, en FDD el modelado basado en objetos es imperativo.

• Desarrollo por rasgo. Hacer simplemente que las clases y objetos funcionen no

refleja lo que el cliente pide. El seguimiento del progreso se realiza mediante

examen de pequeñas funcionalidades descompuestas y funciones valoradas por

el cliente. Un rasgo en FDD es una función pequeña expresada en la forma

<acción> <resultado> <por | para | de | a> <objeto> con los operadores

adecuados entre los términos. Por ejemplo, calcular el importe total de una venta;

determinar la última operación de un cajero; validar la contraseña de un usuario.

• Propiedad individual de clases (código). Cada clase tiene una sola persona

nominada como responsable por su consistencia, performance e integridad

conceptual.

• Equipos de Rasgos, pequeños y dinámicamente formados. La existencia de un

equipo garantiza que un conjunto de mentes se apliquen a cada decisión y se

tomen en cuenta múltiples alternativas.

• Inspección. Se refiere al uso de los mejores mecanismos de detección

conocidos.

FDD es tan escrupuloso en materia de inspección como lo es Evo.

• Builds regulares. Siempre se tiene un sistema disponible. Los builds forman la

base a partir de la cual se van agregando nuevos rasgos.

• Administración de configuración. Permite realizar seguimiento histórico de las

últimas versiones completas de código fuente.

• Reporte de progreso. Se comunica a todos los niveles organizacionales

necesarios.

FDD suministra un rico conjunto de artefactos para la planificación y control de los

proyectos. En http://www.nebulon.com/articles/fdd/fddimplementations.html se

encuentran diversos formularios y tablas con información real de

implementaciones de

FDD: Vistas de desarrollo, Vistas de planificación, Reportes de progreso,

17

Page 21: Trabajo Fdd

Contenido

Reportes de tendencia, Vista de plan (<acción><resultado><objeto>), etcétera.

Se han desarrollado también algunas herramientas que generan vistas

combinadas o específicas.

Feature Driven Development FDD, tiene un desarrollo dirigido por prestaciones

Se basa en implementar sistemas en forma iterativa

Descubrimiento de la lista de prestaciones (features)

• Desarrollo de un modelo global

• Lista priorizada de prestaciones

• Plan de desarrollo

Implementación de las prestaciones

• Diseño y revisión del diseño

Introducción a la Gestión de Calidad de Software

• Construcción y revisión de código

• Reunión de liberación

Los requisitos tienden a ser buenos porque incluyen el modelo que fue

desarrollado en conjunto con los clientes

Incluye un método de seguimiento cuantitativo del plan

Proceso de FDD

18

Page 22: Trabajo Fdd

Contenido

Las 8 mejores practicas

Elija FDD si

Está dispuesto a entregar cierta agilidad a cambio de un proceso

claramente escalable

Su organización tiene sólidas habilidades en UML

La mayoría de los requisitos son conocidos desde el

Comienzo o son más o menos estables

Usted no considera que los equipos auto-organizados son un factor crítico

de éxito

La comparación

RUP, XP y FDD tienen pocas similitudes entre si, aunque XP y FDD poseen

algunas más al ser ambos ligeros, orientados al cliente y de iteraciones cortas y

rápidas.

Tamaño de los equipos

FDD y XP se implementan mejor para proyectos cortos y equipos más pequeños,

siendo quizás FDD más escalable que XP, ya que a mayor tamaño de código y/o

equipo mayor es la necesidad de cierta organización.

Obtención de requisitos

19

Page 23: Trabajo Fdd

Contenido

RUP y XP crean como base UseCases y UserStories, ambos describen los

requerimientos de la aplicación desde el punto de vista del usuario. Ambos definen

los requisitos técnicos sin meterse con detalles de implementaclón. FDD por el

contrario no define explícitamente esa parte del proyecto sobre la adquisición de

requisitos, y solo define el proceder a partir del momento en que ya se han

recogido dichos requisitos, de la forma que queramos, dividiendo los requisitos (de

forma similar a las UserStories) en las tres primeras fases del proyecto.

Carga de trabajo

FDD es por su parte un proceso intermedio, en el sentido de que genera más

documentación que XP (donde apenas existe fuera del código fuente) pero menos

que RUP (que intenta documentar todo). Se entrega bastante libertad a los

desabolladores, pero siempre bajo cierto orden marcado por una jerarquía

(arquitecto, programador jefe, etc), que representa también en nivel de

responsabilidad existente en cada caso.

Relación con el cliente

En contrapartida, la aseguración de la calidad en XP y FDD no se basa en

formalismos en la documentación, si no en controles propios y una comunicación

fluida con el cliente. Tanto en XP como en FDD, el cliente recibe después de cada

iteración un pedazo funcional del programa. A través de un ciclo de iteración corto

(pocas semanas) el cliente está informado constantemente sobre la situación del

proyecto y puede intervenir rápidamente si el desarrollo se aleja de sus

necesidades.

En XP el desarrollo ve en que dirección debe ir gracias al feedback del cliente, sin

ningún tipo de restricción previa. En FDD sin embargo existe el modelo general

desarrollado en la primera fase, que si bien evoluciona a lo largo del proyecto,

provee un marco general dentro del cual evoluciona el proyecto (mientras no sea

necesario cambiarlo).

Desarrollo

Todos ellos se basan en un proceso iterativo. Esto permite acercarse poco a poco

a la solucion sin entrar demasiado rápido en detalles, aunque las iteraciones de

XP y FDD tienen por lo general una duración menor que en RUP, puesto que la

20

Page 24: Trabajo Fdd

Contenido

carga a llevar por los programadores a parte del desarrollo del propio software es

menor.

RUP y FDD se centran más en la organización global, y muchas de esas

actividades, como ejecución de pruebas, las asumen como obligatorias aunque sin

definirlas completamente, dejando libertad a las distintas subunidades del proyecto

para implementarlas a su manera (por ejemplo usar la programación por parejas

en partes complejas), aunque las directrices de la empresa suelen marcar el

camino a seguir.

En FDD sin embargo se usan las sesiones de trabajo conjuntas en fase de diseño

para conseguir una arquitectura sencilla y sin errores y las revisiones de código

guiadas por algún programador con más experiencia. Estas sesiones, habituales

en cada equipo e iteración, están más enfocadas al trabajo en conjunto que al

intercambio de impresiones y/o estado, como podría ser el caso de las daily

meetups de XP. En todo caso, como no podría ser de otra forma, todos los

métodos de desarrollo modernos ponderan la utilización frecuente de reuniones

entre los miembros del equipo, que pueden ir desde diarias, como propone

Evaluación del estado del proyecto

FDD es posiblemente el proceso más adecuado para definir métricas que definan

el estado del proyecto, puesto que al dividirlos en unidades pequeñas es bastante

sencillo hacer un seguimiento de las mismas. XP también define esos

componentes pequeños, pero la tarea del reporting recae solo en los jefes de

proyecto, mientras que en FDD esta más distribuida en la jerarquía.

Puntos flacos.

Por desgracia ningún proceso puede ser considerado perfecto, ni ser aplicado en

su totalidad en en la mayoría de los casos, por lo que también es necesario saber

donde están sus puntos débiles para corregirlos, si es necesario.

FDD presenta su talón de Aqulles en la necesidad de tener en el equipo miembros

con experiencia que marquen el camino a seguir desde el principio, con la

elaboración del modelo global, puesto que no es tan ágil como podría serlo XP. Es

en todo caso este requisito una necesidad en cualquier proyecto si queremos

llevarlo a buen puerto con éxito. Su punto intermedio entre la libertad de XP y la

21

Page 25: Trabajo Fdd

Contenido

rigurosidad de RUP lo hacen sin duda un proceso interesante, pero a pesar de

cambiar la forma de afrontar el problema, la jerarquía existente puede hacer que

las dependencias de esa gente experimentada sean grandes.

Conclusion

En síntesis, FDD es un método de desarrollo de ciclos cortos que se concentra en

la fase de diseño y construcción. En la primera fase, el modelo global de dominio

es elaboradopor expertos del dominio y desarrolladores; el modelo de dominio

consiste en diagramas de clases con clases, relaciones, métodos y atributos. Los

métodos no reflejan conveniencias de programación sino rasgos funcionales.

Algunos agilistas sienten que FDD es demasiado jerárquico para ser un método

ágil, porque demanda un programador jefe, quien dirige a los propietarios de

clases, quienes dirigen equipos de rasgos. Otros críticos sienten que la ausencia

de procedimientos detallados de prueba en FDD es llamativa e impropia. Los

promotores del método aducen que las empresas ya tienen implementadas sus

herramientas de prueba, pero subsiste el problema de su adecuación a FDD. Un

rasgo llamativo de FDD es que no exige la presencia del cliente.

FDD se utilizó por primera vez en grandes aplicaciones bancarias a fines de la

década de 1990. Los autores sugieren su uso para proyectos nuevos o

actualizaciones de sistemas existentes, y recomiendan adoptarlo en forma

gradual. En [ASR+02] se asegura que aunque no hay evidencia amplia que

documente sus éxitos, las grandes consultoras suelen recomendarlo incluso para

delicados proyectos de misión crítica.

No cubre todo el ciclo de vida, sino diseño y construcción Se considera apto para

proyectos mayores o de misión crítica Hay arquitectos en FDD Numerosos

artefactos para el control del proceso

Ligero

A medio camino entre el desarrollo y la organización

Existe un jerarquía dentro del equipo

El codigo fuente tiene propietario

Los equipos varían en función de la funcionalidad a implementar

22

Page 26: Trabajo Fdd

Contenido

El conocimiento de la aplicación se reparte a través de trabajo en equipo y

revisiones

Documentación aceptable

FDD es un proceso que ayuda al equipo a producir resultados periódicos y

tangibles.

Esta metodología utiliza pequeños bloques que contienen la funcionalidad

del sistema, llamados features.

Organiza los bloques que está n relacionados entre sí , en una lista llamada

feature set.

Hace énfasis en la obtención de resultados cada dos semanas.

Incluye estrategias de planificación que hacen que las features puedan

desarrollarse en dichos lapsos.

23

Page 27: Trabajo Fdd

Contenido

BIBLIOGRAFIA

http://www.neleste.com/modelo-vista-controlador-y-algunas-variantes/

http://rogue-development.com/uploads/model_adapter/ModelAdapterExample.html

http://www.comusoft.com/modelo-vista-controlador-definicion-y-caracteristicas

http://www.sgmweb.es/modelo.asp

http://www.leandroiriarte.com.ar/spanish/web_mvc.php

24