Scrum XP
Scrum XP
Scrum XP
1.2 SCRUM
HISTORIA
Ken Schwaber y Jeff Sutherland presentaron conjuntamente por primera vez Scrum en la
12
conferencia OOPSLA en 1995 . Scrum es un marco de trabajo para el desarrollo y el
mantenimiento de productos complejos que ha sido utilizado desde los años 90, en el cual las
personas pueden afrontar complejos problemas adaptativos, a la vez que entregan productos del
máximo valor posible de forma productiva y creativa. Scrum es:
Ligero
Fácil de entender
Extremadamente difícil de llegar a dominar
El marco de trabajo de Scrum consiste en los equipos Scrum y en sus roles, eventos, artefactos y
reglas asociadas. Cada componente dentro del marco de trabajo sirve a un propósito específico y
es esencial para el éxito de Scrum y para su uso.
Figura 0.3 Proceso Scrum
Transparencia.
Se refiere a que los aspectos significativos del proceso deben ser claramente
entendidos por los responsables del resultado, es decir, los responsables deben
de compartir un lenguaje común para referirse al proceso.
Inspección.
Todo el equipo en Scrum debe inspeccionar frecuentemente los artefactos y
monitorear el avance para detectar variaciones no deseables.
Adaptación.
Si un inspector detecta que algún aspecto del proceso se desvía de los límites
aceptables, y que el producto resultante no será aceptable, el proceso o el
material que están siendo procesados deberán ser ajustados para minimizar
desviaciones mayores.
ROLES.
El equipo Scrum consiste en un dueño del producto (Product Owner), El equipo de
Desarrollo (Development Team), y un Scrum Master. En Scrum los equipos deben ser
auto-organizados y multifuncionales. Los equipos auto-organizados toman decisiones y
eligen la mejor forma para llevar a cabo su trabajo en lugar de ser dirigidos por otros
externos al equipo. Los equipos multifuncionales tienen todas las competencias
necesarias para llevar a cabo el trabajo. Este modelo de trabajo está diseñado para
optimizar la flexibilidad, la creatividad y la productividad.
Los equipos en Scrum realizan entregas incrementales del producto, asegurando que se
tiene una versión potencialmente útil y funcional del producto.
• Dueño del Producto (Product Owner).
Es el responsable de maximizar el valor del producto y del trabajo del equipo de
desarrollo. El Product Owner es el único responsable de gestionar el Product
Backlog o listado de Requerimientos funcionales. Esta gestión incluye:
o Describir de manera clara los requerimientos.
o Definir el valor de negocio y la prioridad de cada requerimiento para que el
equipo de desarrollo conozca que requerimientos atender primero.
o Asegurar que el equipo de desarrollo entiende de manera clara cada
requerimiento.
• Scrum Master.
Es el responsable de que el proceso de Scrum se entienda y que se aplican las
reglas correctamente. Es un líder servil al servicio del equipo Scrum.
Eventos.
En Scrum existen eventos prescritos, con el fin de crear regularidad y minimizar la
necesidad de reuniones no definidas en Scrum. Se utilizan eventos en la forma de
bloques de tiempo (time-boxes), de modo que todos tienen una duración máxima. Esto
asegura que se emplee una cantidad apropiada de tiempo en la planificación, de forma
que no se admita desperdicio en este proceso de planificación.
Además del propio Sprint, que es un contenedor del resto de eventos, cada uno de los
eventos de Scrum constituye una oportunidad para la inspección y adaptación de algún
aspecto. Estos eventos están específicamente diseñados para habilitar la vital
transparencia e inspección. La falta de alguno de estos eventos da como resultado una
reducción de la transparencia y constituye una oportunidad perdida para inspeccionar y
adaptarse.
• Sprint.
El corazón de Scrum es el Sprint, un bloque de tiempo (time-box) de un mes o
menos durante el cual se crea un incremento de producto “Hecho”, utilizable y
potencialmente entregable.
Los Sprints contienen y consisten en la Reunión de Planificación del Sprint
(Sprint Planning Meeting), los Scrums Diarios (Daily Scrum), el trabajo de
desarrollo, la Revisión del Sprint (Sprint Review), y la Retrospectiva del Sprint
(Sprint Retrospective). Los Sprints habilitan la predictibilidad al asegurar la
inspección y adaptación del progreso hacia un objetivo, al menos en cada mes
de calendario. Los Sprints también limitan el riesgo al incurrido en el coste de un
mes de calendario.
El Scrum Master debe alentar el equipo, para que mejore en el proceso Scrum,
su procesos de desarrollo y sus prácticas para hacerlos más efectivos. Al final de
esta reunión el Equipo Scrum debe haber identificado mejoras para aplicar en el
siguiente Sprint.
Artefactos de Scrum.
Los artefactos de Scrum representan trabajo o valor en diversas formas que son útiles
para proporcionar transparencia y oportunidades para la inspección y adaptación.
• Product Backlog
Es una lista ordenada de todos los requerimientos funcionales del producto. El
Product Owner es el responsable de elaborar este documento. Un Product
Backlog nunca es estático, durante el proceso de construcción en cada
incremento la lista puede ir cambiando y evolucionando para tener un producto
más adecuado, competitivo y útil. El product Backlog tiene como atributos su
descripción, su priorización y el valor de negocio que aporta. Los cambios en los
requerimientos de negocio, las condiciones de mercado o la tecnología podrían
generar cambios sobre el Product Backlog.
La definición a detalle de cada elemento del Product Backlog se lleva a tiempo
parcial dentro el Sprint entre el Product Owner y el Equipo de Desarrollo. El
equipo de desarrollo es el responsable de proporcionar todas las estimaciones
para cada elemento de la lista.
HISTORIA
El origen Extreme Programming (XP) inicio en los 90’s cuando Kent Beck trabajando en un
13
proyecto para Chrysler buscaba una mejor forma de crear software . Una de las
características principales de este método que lo diferencia del modelo en cascada es que se
basa en la adaptabilidad en lugar de la predictibilidad. La razón de este enfoque se basa en
que el desarrollo de software es un proceso muy fluido y cambiante, donde no se puede
prever la totalidad de los requisitos desde el principio ya que estos van cambiando durante el
proyecto. Por lo tanto el desarrollo de software requiere de una metodología que sea capaz
de adaptarse a los constantes cambios de los requerimientos.
CICLO DE VIDA.
El enfoque de esta metodología es generar el más alto valor al cliente de la manera más
rápida posible. A diferencia del modelo en cascada que tiene que seguir de manera
secuencial las etapas de planeación, análisis y diseño, en XP los programadores hacen
todas estas actividades en cada iteración del desarrollo.
La metodología Extreme Programming o XP inicia con la planeación y todas las
iteraciones consisten de cuatro fases básicas: Planear, Diseñar, Codificar y Probar. Los
valores primordiales para llevar este ciclo de vida son la comunicación continua entre el
cliente y los programadores, la simplicidad para diseñar la solución, la retroalimentación
de las pruebas de aceptación y el coraje para enfrentar los problemas proactivamente y
para aceptar los cambios en la fase de desarrollo.
• DISEÑO (DESIGNING).
La iteración en XP inicia con el diseño, un buen diseño es lo que te permite
realizar cambios de manera simple al software sin afectar la funcionalidad. La
idea principal del diseño incremental es la simplicidad, es decir, hacer solo lo
necesario sin agregar funcionalidad extra que no se necesita en ese momento,
emplear buenas prácticas para el diseño de las clases, como estándares de
nombres y usar las tarjetas de responsabilidades y colaboración de clases (CRC),
esto permite que los miembros del equipo contribuyan con ideas y considerarlas
en el diseño. No es una actividad que se realiza una sola vez en el proyecto, sino
que es una actividad de todo el tiempo. El equipo de desarrollo se reúne en
sesiones rápidas de diseño antes de la iteración y revisiones de diseño durante
la iteración a través de la refactorización de código. Extreme Programming
emplea técnicas como la integración continua de código, las pruebas unitarias y
la refactorización de código.
• CODIFICACIÓN (CODING)
Uno de los elementos más importantes en un proceso de desarrollo de software
es el código, sin él no existirá un producto funcional. En XP Codificar es una
forma de aprendizaje, es tener un pensamiento y luego probarlo para saber si
fue una buena idea.
La programación en pares (Pair Programming) por dos programadores
trabajando juntos en un solo equipo, permite la generación de código de alta
calidad. El código da la oportunidad de comunicar de una forma clara y
consistente una idea, esta comunicación se transforma en aprendizaje y reduce
la probabilidad de malas interpretaciones.
• ESCUCHAR (LISTENING)
Los Desarrolladores deben estar preparados para escuchar a la gente del
negocio o al Cliente, para entender las necesidades y los requerimientos. La
actividad de escuchar debe ser recíproca y básicamente se basa en la
retroalimentación del cliente durante la fase de desarrollo y sobre todo de las
pruebas de aceptación. Cada retroalimentación del cliente se convierte en la
base para volver a entrar al ciclo de diseño, código, prueba y escuchar, si el
cliente está satisfecho con los resultados la iteración termina en ese momento y
el diseño de la nueva iteración comienza.
ROLES.
CLIENTE (CUSTOMER).
Los clientes en XP son los responsables de definir que funcionalidades debe tener el
software. Su principal actividad es en la planificación de la liberación (reléase planning).
Son los encargados de transmitir la visión, identificar y describir las historias de usuario,
determinar cómo agrupar las funcionalidades en pequeñas liberaciones, gestionar
riesgos y realizar el plan del juego (Planning Game). Adicionalmente el cliente es
responsable de proporcionar a los programadores detalles sobre los requisitos cuando
se lo soliciten, también ayudan a comunicar los requisitos, a través, de la creación de
pantallas prototipo, en la revisión de los trabajos en curso y creando pruebas de usuario
detalladas para clarificar reglas de negocio complejas.
PROGRAMADORES (PROGRAMMERS).
Los programadores son los responsables de encontrar la forma más efectiva de entregar
las historias dentro el plan. Para lograr esto, los programadores deben realizar
estimaciones de esfuerzo, sugieren alternativas y ayudan a los clientes a crear un plan
alcanzable para el juego de planificación (Planning Game). Los programadores invierten
la mayoría del tiempo haciendo programación en parejas, codificando, realizando
pruebas unitarias, refactorización y generando incrementalmente el diseño y la
arquitectura de la aplicación. Otras actividades son la corrección de fallas, la
preparación de las liberaciones y de realizar integración continua. Los programadores
tienen que trabajar en conjunto con el cliente para aclarar dudas sobre lo que se tiene
que construir.
VERIFICADORES (TESTERS).
Los Testers ayudan a los equipos XP a producir aplicaciones de calidad. Los Tester deben
colaborar con el Cliente para generar buenos casos de prueba e identificar posibles
mejoras al producto. Los Testers deben realizar pruebas exploratorias para identificar
proactivamente posibles fallas antes de que se finalice la codificación y deben
proporcionar información sobre exploraciones que se apliquen a requerimientos no
funcionales como son el rendimiento, la escalabilidad y estabilidad. Cuando los testers
encuentran fallas deben de apoyar a todo el equipo a averiguar la causa, así todo el
equipo puede prevenir que la falla se repita en el futuro.
ENTRENADORES (COACHES).
Los Coaches o Entrenadores son básicamente las personas que se encargan de motivar
al equipo a alcanzar su potencial en lugar de estar asignando tareas. El concepto
principal es que los Equipos XP sean auto-organizados, es decir que tomen sus propias
decisiones para ser eficientes. Los coaches ayudan al equipo a iniciar su proceso
facilitándoles un espacio de trabajo compartido y de asegurarse de que el equipo
cuenta con la gente correcta para realizar el trabajo. Ayudan a crear las condiciones
para que el equipo sea productivo. Una de las actividades más importantes del Coach es
ayudar al equipo a interactuar con el resto de la organización. Pero sobre todo los
coaches ayudan a los miembros del equipo a ser disciplinados, ayudándolos a que sigan
las prácticas de gestión de riesgos, desarrollo orientado a pruebas y el uso de diseño
incremental.
PRÁCTICAS.
Extreme Programming tiene 12 prácticas agrupadas en cuatro áreas, derivadas de las
mejores prácticas de la ingeniera de software:
METAFORA (METAPHOR).
✔ Los equipos XP deben desarrollar una visión común del sistema
✔ Asegurar que todos entiendan como el sistema debe trabajar.
COMUNICACIÓN.
Una de las causas de que los proyectos fracasen se deben a una mala comunicación del
equipo, XP a través de las prácticas como la programación por parejas y el desarrollo
dirigido por pruebas permite que programadores y clientes estén siempre comunicados,
por otro lado XP usa el rol de Coach quien tiene la función de detectar cuando no haya
una buena comunicación y establecer canales claros de comunicación entre el equipo.
SIMPLICIDAD.
La simplicidad en XP se enfoca en el diseño y la codificación de las necesidades que se
tengan en el presente y no preocuparse por hacer algo por las futuras. Por otra parte el
emplear un diseño y codificación simple, ayuda a dar claridad y entendimiento del
producto a todo el equipo.
RETROALIMENTACIÓN.
En XP la retroalimentación ocurre durante todo el ciclo de vida, por ejemplo durante la
planeación del juego, durante las pruebas unitarias y de aceptación y en general
durante todo el proyecto las mismas prácticas impulsan a tener una clara
retroalimentación del estado del sistema. Una buena retroalimentación se basa en una
buena comunicación y en la simplicidad.
CORAJE.
El coraje es un valor que todo el equipo debe usar constantemente en el proyecto, para
enfrentar los retos y los problemas que se presenten, los programadores por ejemplo
deben tener el coraje para aceptar que el código se puede mejorar siempre, para
reconocer cuando algo no funciona y se debe cambiar, coraje para apoyarse de otro
miembro del equipo y resolver un problema.