extreme programming

107
www.menttes.com menttes Roberto Allende [email protected] Extreme Programming

Upload: roberto-allende

Post on 29-Nov-2014

9.290 views

Category:

Technology


3 download

DESCRIPTION

Introducción a la metodologia extreme programming

TRANSCRIPT

Page 1: Extreme Programming

www.menttes.commenttes

Roberto [email protected]

Extreme Programming

Page 2: Extreme Programming

   

¿ QUE ES XP ?

Page 3: Extreme Programming

   

metodología de desarrollo ágil

Page 4: Extreme Programming

   

PROMESAS

Page 5: Extreme Programming

   

promesas...

● Orientada a la satisfacción del cliente

Mejora el proceso de desarrollo en cuatro frentes:

comunicación, simplicidad, feedback, coraje

Page 6: Extreme Programming

   

promesas...

● Orientada a la satisfacción del cliente

● Mejora el proceso de desarrollo en:

comunicación, simplicidad y elegancia, feedback, coraje

Page 7: Extreme Programming

   

promesas...

● código que sea fácil de entender y extender

red de tests automáticos

productividad, menores costos

simple y sencillo

Page 8: Extreme Programming

   

promesas...

● código que sea fácil de entender y extender

● conjunto de tests automáticos

productividad, menores costos

simple y sencillo

Page 9: Extreme Programming

   

promesas...

● código que sea fácil de entender y extender

● conjunto de tests automáticos

● productividad, menores costos

simple y sencillo

Page 10: Extreme Programming

   

promesas...

● código que sea fácil de entender y extender

● conjunto de tests automáticos

● productividad, menores costos

● simple y sencillo

Page 11: Extreme Programming

   

CUANDO USAR XP

Page 12: Extreme Programming

   

cuando...

● cambios de requerimienos son constantes

proyectos con un gran margen de riesgo

Page 13: Extreme Programming

   

cuando...

● cambios de requerimienos son constantes

● proyectos con un gran margen de riesgo

Page 14: Extreme Programming

   

cuando...

desarrollo basado en

REUSABILIDADde componentes

Page 15: Extreme Programming

   

cuando...

aunque...

Extreme programming development methodology has a real influence in Zope 3

development process. Automated testing is a major strength of Zope 3.

http://wiki.zope.org/zope3/ZopeGuideIntroduction

Page 16: Extreme Programming

   

REQUERIMIENTOS

Page 17: Extreme Programming

   

requerimientos...

● equipos de 2 a 12 programadores (aunque se reportaron éxitos en equipos de 30...)

Involucrar al cliente en el equipo de desarrollo

Crear y correr tests de forma automática

Page 18: Extreme Programming

   

requerimientos...

● equipos de 2 a 12 programadores (aunque se reportaron éxitos en equipos de 30...)

● involucrar al cliente en el equipo de desarrollo

Crear y correr tests de forma automática

Page 19: Extreme Programming

   

requerimientos...

● equipos de 2 a 12 programadores (aunque se reportaron éxitos en equipos de 30...)

● involucrar al cliente en el equipo de desarrollo

● crear y correr tests de forma automática

Page 20: Extreme Programming

   

ELEMENTOS PRINCIPALES

Page 21: Extreme Programming

   

Page 22: Extreme Programming

   

elementos principales...

● user stories

● tarjetas crc

● escribir casos test antes de codificar

● refactoring

Page 23: Extreme Programming

   

planificación: user stories

similares a casos de uso pero:

● creadas para hacer estimaciones de tiempo

son breves y concretas, no son extensos documentos

son escritas por el cliente en vocabulario del cliente sin tecnicismos

Page 24: Extreme Programming

   

planificación: user stories

similares a casos de uso pero:

● creadas para hacer estimaciones de tiempo

● son breves y concretas, no son extensos documentos

son escritas por el cliente en vocabulario del cliente sin tecnicismos

Page 25: Extreme Programming

   

planificación: user stories

similares a casos de uso pero:

● creadas para hacer estimaciones de tiempo

● son breves y concretas, no son extensos documentos

● son escritas por el cliente en vocabulario del cliente y sin tecnicismos

Page 26: Extreme Programming

   

planificación: user stories

similares a casos de uso pero:

● expresadas en términos de las necesidades del cliente

duración sugerida: 1 a 3 semanas

definen los tests de aceptación

Page 27: Extreme Programming

   

planificación: user stories

similares a casos de uso pero:

● expresadas en términos de las necesidades del cliente

● duración sugerida: 1 a 3 semanas

definen los tests de aceptación

Page 28: Extreme Programming

   

planificación: user stories

similares a casos de uso pero:

● expresadas en términos de las necesidades del cliente

● duración sugerida: 1 a 3 semanas

● definen los tests de aceptación

Page 29: Extreme Programming

   

Page 30: Extreme Programming

   

Page 31: Extreme Programming

   

planificación: plan de release

● ~80 user stories (± 20)

● Definido en una reunión en la que participan técnicos y la gente de negocios. Conjuntamente acordan el plan de entregas.

Page 32: Extreme Programming

   

planificación: plan de release

1. El equipo de desarrollo estima la duración de cada user story.

El cliente decide que user story posee mayor importancia o prioridad

Se imprimen las user stories, se colocan las tarjetas en una mesa y se agrupan formando diferentes entregas

Page 33: Extreme Programming

   

planificación: plan de release

1. El equipo de desarrollo estima la duración de cada user story.

2. El cliente decide que user story posee mayor importancia o prioridad

Se imprimen las user stories, se colocan las tarjetas en una mesa y se agrupan formando diferentes entregas

Page 34: Extreme Programming

   

planificación: plan de release

1. El equipo de desarrollo estima la duración de cada user story.

2. El cliente decide que user story posee mayor importancia o prioridad

3. Se imprimen las user stories, se colocan las tarjetas en una mesa y se agrupan formando la próxima entrega

Page 35: Extreme Programming

   

planificación: plan de release

● Las metas de cada entrega son lograr un sistema usable, testeable, y entregado antes de tiempo

Los planes se pueden fijar por tiempo o alcance

Se emplea la velocidad de proyecto para determinar tiempo o alcance

Page 36: Extreme Programming

   

planificación: plan de release

● Las metas de cada entrega son lograr un sistema usable, testeable, y entregado antes de tiempo

● Los planes se pueden fijar por tiempo o alcance

Se emplea la velocidad de proyecto para determinar tiempo o alcance

Page 37: Extreme Programming

   

planificación: plan de release

● Las metas de cada entrega son lograr un sistema usable, testeable, y entregado antes de tiempo

● Los planes se pueden fijar por tiempo o alcance

● Se emplea la velocidad de proyecto para determinar tiempo o alcance

Page 38: Extreme Programming

   

planificación: plan de release

● Los lanzamientos son planeados antes de cada iteración y no con anticipación

Los plazos deben ser los fijados en la reunión de release. No se deben subestimar plazos.

En la reunión, el cliente, gestores de proyecto y desarolladores tienen que negociar hasta ponerse de acuerdo en el plan de release.

Page 39: Extreme Programming

   

planificación: plan de release

● Los lanzamientos son planeados antes de cada iteración y no con anticipación

● Los plazos deben ser los fijados en la reunión de release. No se deben subestimar plazos.

En la reunión, el cliente, gestores de proyecto y desarolladores tienen que negociar hasta ponerse de acuerdo en el plan de release.

Page 40: Extreme Programming

   

planificación: plan de release

● Los lanzamientos son planeados antes de cada iteración y no con anticipación

● Los plazos deben ser los fijados en la reunión de release. No se deben subestimar plazos.

● En la reunión, el cliente, gestores de proyecto y desarolladores tienen que negociar hasta ponerse de acuerdo en el plan de release.

Page 41: Extreme Programming

   

planificación: plan de release

● Las user stories de un plan son traducidas a tareas que deben ser implementadas

Las user stories también son traducidas en test de aceptación

Si el proyecto va muy rápido de acuerdo al plan, se reunen todos en una nueva reunión de release y se define un nuevo plan

Page 42: Extreme Programming

   

planificación: plan de release

● Las user stories de un plan son traducidas a tareas que deben ser implementadas

● Las user stories también son traducidas en test de aceptación

Si el proyecto va muy rápido de acuerdo al plan, se reunen todos en una nueva reunión de release y se define un nuevo plan

Page 43: Extreme Programming

   

planificación: plan de release

● Las user stories de un plan son traducidas a tareas que deben ser implementadas

● Las user stories también son traducidas en test de aceptación

● Si el proyecto va muy rápido de acuerdo al plan, se reunen todos en una nueva reunión de release y se define un nuevo plan

Page 44: Extreme Programming

   

regla:

HACER RELEASES FRECUENTES Y PEQUEÑOS

(release earlier, release often)

Page 45: Extreme Programming

   

planificación: velocidad de proyecto

● Mide cuanto del trabajo está hecho p/release

Total de user stories terminadas p/release

Total de tareas terminadas p/release

Page 46: Extreme Programming

   

planificación: velocidad de proyecto

● Mide cuanto del trabajo está hecho p/release

● Total de user stories terminadas p/release

Total de tareas terminadas p/release

Page 47: Extreme Programming

   

planificación: velocidad de proyecto

● Mide cuanto del trabajo está hecho p/release

● Total de user stories terminadas p/release

● Total de tareas terminadas p/release

Page 48: Extreme Programming

   

DESARROLLO ITERATIVO

Page 49: Extreme Programming

   

Page 50: Extreme Programming

   

Page 51: Extreme Programming

   

desarollo iterativo

● Dividir agenda de proyecto en iteraciones de 1 a 3 semanas de duración (~12 iteraciones p/proyecto)

Mantener duración de iteraciones constantes a lo largo de todo el proyecto

No agendes tareas de programación con anticipación

SE PROHIBE IMPLEMENTAR ALGO QUE NO ES REQUERIDO EN LA ITERACION ACTUAL

Page 52: Extreme Programming

   

desarollo iterativo

● Dividir agenda de proyecto en iteraciones de 1 a 3 semanas de duración (~12 iteraciones p/proyecto)

● Mantener duración de iteraciones constantes a lo largo de todo el proyecto

No agendes tareas de programación con anticipación

SE PROHIBE IMPLEMENTAR ALGO QUE NO ES REQUERIDO EN LA ITERACION ACTUAL

Page 53: Extreme Programming

   

desarollo iterativo

● Dividir agenda de proyecto en iteraciones de 1 a 3 semanas de duración (~12 iteraciones p/proyecto)

● Mantener duración de iteraciones constantes a lo largo de todo el proyecto

● No agendes tareas de programación con anticipación

SE PROHIBE IMPLEMENTAR ALGO QUE NO ES REQUERIDO EN LA ITERACION ACTUAL

Page 54: Extreme Programming

   

desarollo iterativo

● Dividir agenda de proyecto en iteraciones de 1 a 3 semanas de duración (~12 iteraciones p/proyecto)

● Mantener duración de iteraciones constantes a lo largo de todo el proyecto

● No agendes tareas de programación con anticipación

● SE PROHIBE IMPLEMENTAR CUALQUIER COSA QUE NO SEA REQUERIDA EN LA ITERACION ACTUAL

Page 55: Extreme Programming

   

desarollo iterativo, regla

NUNCA AGREGAR UNA FUNCIONALIDAD ANTES

DE TIEMPO

Page 56: Extreme Programming

   

desarollo iterativo, regla

SIMPLICIDAD ES LA CLAVE

mantener las cosas tan sencillas como sea posible,

refactoring soluciona las consecuencias

Page 57: Extreme Programming

   

desarollo iterativo

● Tomar en serio los plazos de cada iteración y si es necesario renegociar fechas de entrega.

● Concentrar esfuerzos en completar tareas mas importantes para el cliente

Page 58: Extreme Programming

   

planificación de iteraciones

Está formado por:

● User stories seleccionadas por el cliente ordenadas en importancia

● Tests de aceptación que fallaron, se convierten en tareas

Page 59: Extreme Programming

   

planificación de iteraciones

● Cada tarea debería tener una duración aproximada de entre 1 a 3 días

● El desarrollador que estima, es el que implementa la tarea

Page 60: Extreme Programming

   

SOLUCIONESDE PUNTOS

(SPIKE SOLUTIONS)

Page 61: Extreme Programming

   

soluciones de puntos

para encontrar soluciones técnicas y predecir duración,

aislar el problema y solucionarlo

fuera del contexto del sistema

Page 62: Extreme Programming

   

TARJETASCRC

Page 63: Extreme Programming

   

tarjetas crc

● CRC Clases, responsabilidad, colaboración

● Son tarjetas que permiten diseñar el sistema como si fuera un equipo

● Se sugiere que muchas personas trabajen en el diseño

Page 64: Extreme Programming

   

ESCRIBIR CASODE TEST PRIMERO

Page 65: Extreme Programming

   

Page 66: Extreme Programming

   

caso de test primero

import randomimport unittest

class TestSequenceFunctions(unittest.TestCase): def setUp(self): self.seq = range(10)

def testshuffle(self): # make sure the shuffled sequence does not lose any elements random.shuffle(self.seq) self.seq.sort() self.assertEqual(self.seq, range(10))

def testchoice(self): element = random.choice(self.seq) self.assert_(element in self.seq)

def testsample(self): self.assertRaises(ValueError, random.sample, self.seq, 20) for element in random.sample(self.seq, 5): self.assert_(element in self.seq)

if __name__ == '__main__': unittest.main()

Page 67: Extreme Programming

   

caso de test primero

● Facilita la codificación -> fuerza al programador que tiene que hacer antes de escribir código

Define el alcance de cada funcionalidad, sabiendo con precisión cuando se ha terminado y se posee un test para asegurarlo

Solo se va a implementar lo que satisface el test

Otros programadores pueden aprender sobre el código viendo los casos de test

Page 68: Extreme Programming

   

caso de test primero

● Facilita la codificación -> fuerza al programador que tiene que hacer antes de escribir código

● Define el alcance de cada funcionalidad, sabiendo con precisión cuando se ha terminado y se posee un test para asegurarlo

Solo se va a implementar lo que satisface el test

Otros programadores pueden aprender sobre el código viendo los casos de test

Page 69: Extreme Programming

   

caso de test primero

● Facilita la codificación -> fuerza al programador que tiene que hacer antes de escribir código

● Define el alcance de cada funcionalidad, sabiendo con precisión cuando se ha terminado y se posee un test para asegurarlo

● Solo se va a implementar lo que satisface el test

Otros programadores pueden aprender sobre el código viendo los casos de test

Page 70: Extreme Programming

   

caso de test primero

● Facilita la codificación -> fuerza al programador que tiene que hacer antes de escribir código

● Define el alcance de cada funcionalidad, sabiendo con precisión cuando se ha terminado y se posee un test para asegurarlo

● Solo se va a implementar lo que satisface el test

● Otros programadores pueden aprender sobre el código viendo los casos de test

Page 71: Extreme Programming

   

caso de test primero

● El tiempo que se ahorra al escribir un caso de test se paga muchas veces mas durante el desarollo de un sistema sin casos de test.

Arreglar pequeños problemas varias veces al día toma mucho menos tiempo que arreglar grandes problemas momentos previos a la entrega.

Page 72: Extreme Programming

   

caso de test primero

● El tiempo que se ahorra al escribir un caso de test se paga muchas veces mas durante el desarollo de un sistema sin casos de test.

● Arreglar pequeños problemas varias veces al día toma mucho menos tiempo que arreglar grandes problemas momentos previos a la entrega.

Page 73: Extreme Programming

   

caso de test primero

NO SE PUEDE ENTREGAR CODIGO SIN POSEER Y

APROBAR LOS CASOS DE TEST

Page 74: Extreme Programming

   

Page 75: Extreme Programming

   

Page 76: Extreme Programming

   

CUANDO SE ENCUENTRA UN

BUG

Page 77: Extreme Programming

   

cuando se encuentra un bug

● Se escribe el caso de test que lo detecta

● Se agrega a la proxima iteración

● Se soluciona el bug

● Se prueba la solución corriendo el test

Page 78: Extreme Programming

   

TEST DE ACEPTACION

Page 79: Extreme Programming

   

test de aceptación

● Creado en el momento en que se definen las user stories

● Diferentes escenarios de una user stories y sus resultados asociados

● User story no está completa hasta que paso el test de aceptación

Page 80: Extreme Programming

   

REFACTOREOSIN PIEDAD

Page 81: Extreme Programming

   

refactoreo sin piedad

● quitar redundancias, eliminar funcionalidades sin usar, actualizar diseños obsoletos de modo que el código sea fácil de entender, modificar y extender

● refactorización ahorra tiempo e incrementa calidad

Page 82: Extreme Programming

   

PAIR PROGRAMMING

Page 83: Extreme Programming

   

pair programming

● Evita dependencia de conocimiento y cuellos de botella

● Induce el entrenamiento cruzado

● El equipo es mas flexible si todos conocen el las partes del sistema

Page 84: Extreme Programming

   

STAND UPMEETINGS

(reuniones de pie)

Page 85: Extreme Programming

   

reuniones de pie

el equipo se reune al inicio de todos los dias, y de pie

forman un circulo

Page 86: Extreme Programming

   

reuniones de pie

es mas eficiente tener breves reuniones donde todos estan

obligados a atender, que muchas reuniones por

separado

Page 87: Extreme Programming

   

reuniones de pie

centradas en las necesidades de uno o mas desarrolladores y

quienes pueden contribuir

Page 88: Extreme Programming

   

Page 89: Extreme Programming

   

GENERALIDADES

Page 90: Extreme Programming

   

CLIENTE SIEMPREDISPONIBLE COMO

MIEMBRO DEL EQUIPO

Page 91: Extreme Programming

   

SEGUIR ESTANDARES

DE PROGRAMACION

Page 92: Extreme Programming

   

INTEGRAR SEGUIDO

REPOSITORIO COLECTIVO DE CODIGO

Page 93: Extreme Programming

   

INTEGRAR SEGUIDO

REPOSITORIO COLECTIVO DE CODIGO

SVN

Page 94: Extreme Programming

   

NO OVERTIME

Page 95: Extreme Programming

   

OPTIMIZAR ALULTIMO

Page 96: Extreme Programming

   

CUANDO XP NO FUNCIONA

ARREGLAR Y DOCUMENTAR

Page 97: Extreme Programming

   

IMPLEMENTACIONESCASERAS

Page 98: Extreme Programming

   

implementaciones

● listas de correo, dev y proyecto c/cliente

extreme managemente (producto plone)

comunicación con el cliente (telefono)

stand up meetings semanales (irc / voip)

toda disponibilidad posible del equipo en una sala común vía irc

Page 99: Extreme Programming

   

implementaciones

● listas de correo, dev y proyecto c/cliente

● extreme managemente (producto plone)

comunicación con el cliente (telefono)

stand up meetings semanales (irc / voip)

toda disponibilidad posible del equipo en una sala común vía irc

Page 100: Extreme Programming

   

implementaciones

● listas de correo, dev y proyecto c/cliente

● extreme managemente (producto plone)

● comunicación con el cliente (telefono)

stand up meetings semanales (irc / voip)

toda disponibilidad posible del equipo en una sala común vía irc

Page 101: Extreme Programming

   

implementaciones

● listas de correo, dev y proyecto c/cliente

● extreme managemente (producto plone)

● comunicación con el cliente (telefono)

● stand up meetings semanales (irc / voip)

toda disponibilidad posible del equipo en una sala común vía irc

Page 102: Extreme Programming

   

implementaciones

● listas de correo, dev y proyecto c/cliente

● extreme managemente (producto plone)

● comunicación con el cliente (telefono)

● stand up meetings semanales (irc / voip)

● toda disponibilidad posible del equipo en una sala común vía irc

Page 103: Extreme Programming

   

Page 104: Extreme Programming

   

Page 105: Extreme Programming

   

Page 106: Extreme Programming

   

ultima página

● la gente es tu recurso mas preciado

● como comenzar: www.extremeprogramming.org -> how to start

● Extreme Programming Exaplined Kent Beck et.al.

Page 107: Extreme Programming

www.menttes.commenttes

Muchas Gracias

Roberto Allende [email protected]

http://labs.menttes.com