sábado, 30 de noviembre de 2013

Unidad 3 Introducción al Desarrollo Ágil

Unidad 3

3.1 ¿Qué es la Agilidad?

Las metodologías de desarrollo ágiles y el Software Libre son enfoques muy conocidos para el desarrollo de software. Aunque son muy diferentes, presentan muchas concordancias como, por ejemplo, los principios y valores básicos. En particular, hay muchas analogías entre el desarrollo de Software Libre y la programación extrema (enfoque al código e inclusión de cambios, por citar algunas). Este artículo presenta estos principios y valores básicos e identifica las concordancias entre ambas metodologías.


3.2 Que es el proceso ágil

Las metodologías ágiles (AMS, Agile Methods) se han desarrollado con mucho éxito en los últimos años al igual que el Software Libre (SL). Aunque estos enfoques de desarrollo de software parecen muy diferentes, presentan muchas concordancias, como demostró Koch.
Tanto las AMs como el SL empujan hacia una organización menos formal y jerárquica en el desarrollo de software y más centrada en la persona, con un énfasis mayor en:
- centrarse en el objetivo principal del desarrollo — producir un sistema de gestión con la cantidad correcta de funcionalidades. Esto significa que el sistema final tiene que incluir sólo el mínimo número de características necesarias para satisfacer por completo al cliente real.
- eliminar actividades que se relacionaron con algunos documentos 'formales' de especificaciones que no tienen una relación directa clara con el resultado final del producto. Este enfoque está claramente vinculado a la "gestión ligera" ( Lean Management).
Las AMs reconocen explícitamente sus vínculos con la gestión ligera, mientras que el SL los mantiene implícitos. Más aún, el desarrollo de software mediante las AMs o el SL parecen similares bajo varios puntos de vista, como éstos:
1. Los orígenes de ambos enfoques son bastante antiguos, pero ahora se han revitalizado con renovado interés, como reconoce explícitamente Beck para las AMs (en particular la programación extrema — XP, eXtreme Programming) y prueba Fuggetta para el SL [10].
2. Ambos son rompedores, en el sentido de que alteran valores establecidos en la producción de software.
3. Ambos han tenido éxito, mientras que enfoques más tradicionales han fallado (el proyecto C3 para AMs y el navegador de Mozilla/Firefox para el SL).



3.3 Modelo Ágil

Los principios básicos compartidos por todas las AMs están enumerados en el llamado Agile Manifesto. La tabla 1 identifica los principios de las AMs en el SL.
En conjunto, es evidente que el SL adopta muchos de los valores fomentados por los partidarios de las AMs. Tales evidencias reclaman un análisis subsecuente para determinar el grado y la profundidad de dicha adopción. Por otra parte, las AMs y el SL son clases de métodos de desarrollo de software que incluyen un amplio número de métodos específicos.
Por tanto, es importante considerar los casos específicos para determinar cómo se dan realmente en la práctica las interacciones entre las AMs y el SL, más allá de consideraciones que, por sí solas, resultan bastante inútiles al final.

3.4 Principales metodologías

Los principios fundamentales son:
1. Retroalimentación rápida: volviendo al valor de la retroalimentación, ésta debería ocurrir tan pronto como fuera posible, tener el impacto más alto en el proyecto y limitar lo más posible las interrupciones potenciales.

2. Asumir la sencillez: según lo mencionado, la sencillez es un valor muy importante. Por lo tanto, la sencillez debería ser asumida en todas las fases del desarrollo.

3. Cambios incrementales: el cambio (en su mayor parte procedente de la retroalimentación) no debería hacerse todo de una vez. Por consiguiente debería ser un proyecto permanente e incremental, dirigido a crear un sistema evolutivo.

4. Adopción del cambio: el cambio debería ser manejado con valor y no ser evitado. El sistema en su totalidad, y el código, debería ser organizado para facilitar el cambio más amplio posible.

5. Calidad del trabajo: la calidad debería ser la principal preocupación. La carencia de calidad genera revisiones y derroches que deberían ser evitados en la mayor medida posible. Otros principios de XP son:
Enseñe a aprender: la identificación de requisitos es un proceso de aprendizaje global. Por lo tanto, el aprendizaje es de suma importancia en el sistema.

b. Inversión inicial pequeña: el trabajo previo debería ser lo más escaso posible, puesto que subsiguientes cambios pueden destruirlo.
Jugar a ganar: todos los desarrollos deberían ser guiados por la clara convicción de que lo que hacemos es realmente factible. Experimentos concretos: las ideas deberían no ser validadas a través de discusiones largas y teóricas sino vía experimentaciones concretas en el código base.
Comunicación abierta, honesta: la comunicación debería ser siempre simple y fácil. El cliente no debería ocultar sus prioridades ni los desarrolladores y directivos deberían ocultar el estado actual del trabajo.

3.4.1 Cristal

Primero hay que comprender que un cristal tiene la capacidad de recibir, almacenar y liberar una orden, o sea, una intención (ya sabemos que el mayor poder del Mago reside en su voluntad, en su intención).
También comentar que cuando se habla de cristales significa que hablamos de cuarzo y derivados (cuarzo ahumado, amatista, citrino… y minerales sobre todo cristalinos). Pero el mejor sin duda es el cuarzo hialino o cristal de roca. Preferiblemente debería ser una cristalización natural, con su extremo en punta, ya que su estructura molecular original actúa como amplificador de todo tipo de energía o, en este caso, intenciones que se desean canalizar a través de él.
Una vez purificado el mineral para eliminar todo tipo de energía residual que pueda tener, hay que seguir unos pasos:

DESPEJARLO:
Se tiene que despejar de toda clase de pensamiento: Se sostiene en la mano izquierda con la punta del cristal hacia arriba y con la mano derecha a poca distancia cubriéndolo pero sin tocarlo debes concentrarte. Imagina un haz de luz blanca que fluye a través de la mano hacia la base del cuarzo, que sube por su cuerpo y sale por la punta superior. Siente como esa luz pasa hacia los lados y se introduce en el interior de nuevo.
Así queda borrada cualquier otra programación previa.

PROGRAMARLO:
Hay que pensar en lo que deseamos que transmita ese cristal, en el bien deseado, preferiblemente visualizando a esa persona (o a uno mismo) bien, con el beneficio que le deseas. Hay que tener cuidado de que no se crucen imágenes negativas. De esta manera esas imágenes quedan instaladas en el cristal y luego se verán amplificadas por la vibración natural del cuarzo, por los triángulos espirales de su punta.

3.4.2 SCRUM

Scrum es un marco de trabajo para la gestión y desarrollo de software basada en un proceso iterativo e incremental utilizado comúnmente en entornos basados en el desarrollo ágil de software.
SCRUM es un modelo de referencia que define un conjunto de prácticas y roles, y que puede tomarse como punto de partida para definir el proceso de desarrollo que se ejecutará durante un proyecto. Los roles principales en Scrum son el ScrumMaster, que mantiene los procesos y trabaja de forma similar al director de proyecto, el ProductOwner, que representa a los stakeholders (interesados externos o internos), y el Team que incluye a los desarrolladores.

Durante cada sprint, un periodo entre una y cuatro semanas (la magnitud es definida por el equipo), el equipo crea un incremento de software potencialmente entregable (utilizable). El conjunto de características que forma parte de cada sprint viene del Product Backlog, que es un conjunto de requisitos de alto nivel priorizados que definen el trabajo a realizar. Los elementos del Product Backlog que forman parte del sprint se determinan durante la reunión de Sprint Planning. Durante esta reunión, el Product Owner identifica los elementos del Product Backlog que quiere ver completados y los hace del conocimiento del equipo. Entonces, el equipo determina la cantidad de ese trabajo que puede comprometerse a completar durante el siguiente sprint.2 Durante el sprint, nadie puede cambiar el Sprint Backlog, lo que significa que los requisitos están congelados durante el sprint.

Roles Principales

Product Owner

El Product Owner representa la voz del cliente. Se asegura de que el equipo Scrum trabaje de forma adecuada desde la perspectiva del negocio. El Product Owner escribe historias de usuario, las prioriza, y las coloca en el Product Backlog.
ScrumMaster (o Facilitador)
El Scrum es facilitado por un ScrumMaster, cuyo trabajo primario es eliminar los obstáculos que impiden que el equipo alcance el objetivo del sprint. El ScrumMaster no es el líder del equipo (porque ellos se auto-organizan), sino que actúa como una protección entre el equipo y cualquier influencia que le distraiga. El ScrumMaster se asegura de que el proceso Scrum se utiliza como es debido. El ScrumMaster es el que hace que las reglas se cumplan.

Equipo de desarrollo

El equipo tiene la responsabilidad de entregar el producto. Un pequeño equipo de 3 a 9 personas con las habilidades transversales necesarias para realizar el trabajo (análisis, diseño, desarrollo, pruebas, documentación, etc).

3.4.3 DSDM

El método de desarrollo de sistemas dinámicos (en inglés Dynamic Systems Development Method o DSDM) es un método que provee un framework para el desarrollo ágil de software, apoyado por su continua implicación del usuario en un desarrollo iterativo y creciente que sea sensible a los requerimientos cambiantes, para desarrollar un sistema que reuna las necesidades de la empresa en tiempo y presupuesto. 

Es uno de un número de métodos de desarrollo ágil de software y forma parte del alianza ágil.
DSDM fue desarrollado en el Reino Unido en los años 90 por un consorcio de proveedores y de expertos en la materia del desarrollo de sistemas de información (IS), el consorcio de DSDM, combinando sus experiencias de mejores prácticas. El consorcio de DSDM es una organización no lucrativa y proveedor independiente, que posee y administra el framework. La primera versión fue terminada en enero de 1995 y publicada en febrero de 1995. La versión actualmente en uso (abril de 2006) es la versión 4.2: El framework para el Negocio Centralizado Desarrollado lanzado en mayo de 2003.

Como extensión del Desarrollo rápido de aplicaciones (RAD), DSDM se centra en los proyectos de sistemas de información que son caracterizados por presupuestos y agendas apretadas. DSDM trata los problemas que ocurren con frecuencia en el desarrollo de los sistemas de información en lo que respecta a pasar sobre tiempo y presupuesto y otras razones comunes para la falta en el proyecto tal como falta de implicación del usuario y de la comisión superior de la gerencia.

DSDM consiste en 3 fases: fase del pre-proyecto, fase del ciclo de vida del proyecto, y fase del post-proyecto. La fase del ciclo de vida del proyecto se subdivide en 5 etapas:
·        
      estudio de viabilidad,
·         estudio de la empresa,
·         iteración del modelo funcional,
·         diseño e iteración de la estructura, e
·         implementación.

DSDM reconoce que los proyectos son limitados por el tiempo y los recursos, y los planes acorde a las necesidades de la empresa. Para alcanzar estas metas, DSDM promueve el uso del RAD con el consecuente peligro que demasiadas esquinas estén cortadas. DSDM aplica algunos principios, roles, y técnicas.

En algunas circunstancias, hay posibilidades para integrar contenido de otros métodos, tal como el Proceso Unificado de Rational (RUP), Programación Extrema (XP), y Proyectos en ambientes controlados (PRINCE2), para complementar el DSDM en la realización de un proyecto. Otro método ágil que tiene semejanzas proceso y concepto con DSDM es Scrum.

3.4.4 FDD

Desarrollo Basado en Funcionalidades
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ón a Objetos Peter Coad. Como las otras metodologías adaptables, se enfoca en iteraciones cortas que entregan funcionalidad tangible. Dicho enfoque no hace énfasis en la obtención de los requerimientos sino en cómo 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.

Los desarrolladores entran en dos tipos:

·         Dueños de clases
·         Programadores jefe

Los programadores jefe son los desarrolladores más experimentados. A ellos se les asignan rasgos a construir. Sin embargo ellos no los construyen solos. Sólo identifican qué clases se involucran en la implantación de un rasgo y juntan a los dueños de dichas clases para que formen un equipo para desarrollar ese rasgo. El programador jefe actúa como el coordinador, diseñador líder y mentor, mientras los dueños de clases hacen gran parte de la codificación del rasgo.

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 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.

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.



3.4.5 ASD

Adaptable Software Development (ASD) es un proceso de desarrollo de software que surgió de un rápido desarrollo de aplicaciones de trabajo por Jim Highsmith y Sam Bayer. Incorpora el principio de que la adaptación continua del proceso a la obra que nos ocupa es el estado normal de las cosas.

Adaptativa de desarrollo de software reemplaza la tradicional cascada ciclo con una serie repetida de especular, colaborar y aprender ciclos. Este ciclo dinámico ofrece para el aprendizaje continuo y la adaptación a la situación emergente del proyecto. Las características de un ciclo de vida de los TEA son que es misión se centró, función basada, iterativo, timeboxed , riesgo impulsada, y cambiar tolerante.

La palabra especular se refiere a la paradoja de la planificación - es más probable que asumir que todas las partes interesadas son comparativamente equivocado para algunos aspectos de la misión del proyecto, al tratar de definirlo colaboración se refiere a los esfuerzos para equilibrar el trabajo basado en las piezas predecibles. el medio ambiente (planificación y orientación de ellos) y la adaptación a la mezcla circundante incierta de los cambios causados ​​por diversos factores - la tecnología, requisitos, los interesados, los proveedores de software, etc Los ciclos de aprendizaje, desafiando a todas las partes interesadas, se basan en las iteraciones cortas con el diseño, construir y pruebas. Durante estas iteraciones el conocimiento se recoge haciendo pequeños errores basados ​​en suposiciones falsas y corregir esos errores, lo que conduce a una mayor experiencia y, finalmente, la maestría en el dominio del problema

No hay comentarios:

Publicar un comentario