Alternativas metodológicas Carlos Reynoso UNIVERSIDAD DE BUENOS AIRES [email_address] http://www.microsoft.com/spanish/msdn/arquitectura/roadmap_arq/arquitectura_soft.mspx
Agenda Alternativas de peso completo vs ágiles Contexto de situación Manifiesto ágil Métodos ágiles eXtreme Programming (XP) Otros métodos ágiles Métodos ágiles & MSF 3.0 Críticas a Métodos Ágiles Conclusiones http://www.microsoft.com/spanish/msdn/arquitectura Paper
Tabla de Métodos SEI/CMU Architecture Tradeoff Analysis Method (ATAM) Quality Attribute Workshops (QAW) Attribute-Driven Design (ADD) Active Reviews for Intermediate Designs (ARID) Cost-Benefit Analysis Method (CBAM) Software Architecture Comparison Analysis Method (SACAM) Quality-Attribute-Driven Software Architecture Reconstruction (QADSAR) Architecture Based Design Method (ABD) Software Architecture Analysis Method (SAAM)
Métodos y frameworks Estándares de certificación (CMMI) Paraguas envolventes (MSF) Artefactos y disciplinas (RUP) Métodos puntuales (Evo) Metodologías basadas en arquitectura Anti-arquitecturas Frameworks diversos…
Contexto de situación Descrédito de los procesos en cascada DOD STD 2167    MIL STD 498 Crisis de confianza en los procesos regidos por metodologías prescriptivas con análisis completo de requerimientos y planificación detallada CMM, CMMI, Spice, Bootstrap, TickIt, ISO 9000 Legislación negativa sobre conformidad con estándares de calidad
Contexto de situación Surgimiento de ideas caórdicas No linealidad: El mítico hombre-mes (Brooks) Orden a partir del caos (Kauffman, Hock) Sistemas adaptativos complejos (Holland) Auto-organización (B. Boehm) Modelo y ciclo de vida en Estrategia del Caos (Raccoon, 1995)
Manifiesto ágil http://agilemanifesto.org Estamos poniendo al descubierto formas mejores de desarrollo de software, haciéndolo y ayudando a otros a que lo hagan. A través de este trabajo hemos llegado a valorar: Los individuos y la interacción  por encima de  los procesos y herramientas . El software que funciona  por encima de  la documentación abarcadora . La colaboración con el cliente  por encima de  la negociación contractual . La respuesta al cambio  por encima del  seguimiento de un plan . Aunque hay valor en los elementos a la derecha, valorizamos más los de la izquierda.
Manifiesto ágil http://agilemanifesto.org Kent Beck (XP), Mike Beedle, Arie van Bennekum (DSDM), Alistair Cockburn (Crystal), Ward Cunningham (XP), Martin Fowler (XP), James Grenning (XP), Jim Highsmith (ASD), Andrew Hunt (Pragmatic Programming), Ron Jeffries (XP), Jon Kern (FDD), Brian Marick, Robert C. Martin (XP), Steve Mellor, Ken Schwaber (Scrum), Jeff Sutherland (Scrum) y Dave Thomas (Pragmatic Programming)
Métodos ágiles
Híbridos Enterprise XP (DSDM + XP) - Mike Griffiths XP@Scrum - Scrum Xbreed (XP+Scrum) - Mike Beedle Industrial XP - Industrial Logic Dispersed Extreme Programming (DXP) - Michael Kircher, Siemens Dispersed Development - Alan Cameron Wills (MS), FastnLoose - Patrones para desarrollo ágil distribuido Grizzly (“large Agile”) - Ron Crocker, Motorola Evo+XP, Evo+UP, Evo+Scrum, XP+UP, UP+Scrum
Constantes de los métodos ágiles Metodología simple y fácil de aprender Valores, Principios, Prácticas, Roles, Artefactos Equipos no jerárquicos y auto-organizados Comunicación intensiva Minimalismo Prescindencia de arquitectura y modelado Proceso iterativo e incremental Entregas rápidas Capacidad adaptativa Rápida respuesta al cambio
Acrónimos y jerga Scrum , gallinas, cerdos, corridas ( sprints ), pre-juego, juego y pos-juego (Scrum) - Púas ( spikes ) (Scrum, XP) “ El minimalismo es esencial”, “Todo se puede cambiar”, “Mejor 80% hoy que 100% mañana” (LD), “Mirando basura (LSD), “Refactorización implacable” (XP) El Cono del Silencio, El Esqueleto Ambulante (CC) YAGNI  “ You Aren ’ t Gonna Need It ” ; TETCPB,  “ Test Everything That Can Possibly Broke ” ; DTSTTCPW,  “ Do The Simplest Thing That Can Possibly Work ” ; BUFD,  “ Big Upfront Design ” . GoF, POSA “ Lo lamento por su vaca; no sabía que era sagrada” (Ron Jeffries) “ Si funciona bien, arréglelo de todos modos” (Beck)
eXtreme Programming Método ágil basado en cuatro principios: simplicidad, comunicación, retroalimentación, valor Y varias prácticas: juego de planeamiento, entregas pequeñas, metáforas, diseño simple, pruebas continuas, refactorización, programación por pares, propiedad colectiva, integración continua, semana de 40 horas, cliente en el sitio, estándares de codificación
Programación por pares ( pair programming ) Todo el código es escrito por parejas de programadores una sola máquina con un teclado y un mouse No es un programador trabajando y el otro mirando No es una sesión de aprendizaje para un programador junior El que no está escribiendo piensa más estratégicamente  revisa el código en tiempo real Los roles se pueden cambiar varias veces durante el día Fundamentos: dos programadores trabajando juntos son más efectivos que por separado el conocimiento grupal crece más rápido trabajar es más divertido
Pruebas T est  D riven  D evelopment Diseño e implementación de las pruebas antes de programar la funcionalidad El programador crea sus propios tests de unidad Integración continua Integración diaria Disponer de una máquina para integración Tests funcionales Cliente
Semana de 40 horas El desarrollo de software es un ejercicio creativo hay que estar fresco y descansado Sin “héroes” Se reduce la rotación de personal Mejora la calidad del producto Se permiten excepciones, con cuidado más de una semana de horas extra: problema
Lugar de trabajo Sala amplia (mejor, sin divisiones) Centro: pares de programadores Periferia: máquinas individuales Ventajas del espacio abierto: mayor comunicación agenda dinámica
Juego de planificación ( planning game ) Determinar rápidamente el alcance de la próxima versión  prioridades de negocio (cliente) estimaciones técnicas (desarrolladores) ¿Por qué juego? Objetivo: maximizar el valor del software producido Estrategia: poner en producción las características más importantes lo antes posible Piezas:  story cards Jugadores: desarrolladores y cliente Movidas: Exploración, Selección y Actualización
Story Cards
Cliente en el sitio Interacción continua No siempre se consigue muy junior, no sirve muy senior, no quiere Actualmente se pide un “analista”
Propiedad colectiva del código Cualquier integrante del grupo tiene autoridad para cambiar cualquier parte del código fuente Todos son dueños del código Siempre se utilizan estándares Los tests siempre deben funcionar al 100% Se integra con todo el sistema permanentemente Manejo de configuración
Diseño simple, entregas pequeñas Se debe mantener el diseño lo mas simple posible (YAGNI): “No vas a necesitarlo” Tarjetas CRC Design for change vs Design for today Características útiles en términos del negocio No implementar características que no son necesarias Poner en producción lo antes posible Unas pocas semanas por entrega
Tarjetas CRC Clase – Responsabilidad – Colaboración
Refactorización Si el código se está volviendo complicado modificar el diseño, volver a uno más simple Refactoring : modificar la forma del código sin cambiar su funcionamiento Ejemplos: extraer método, renombrar (clase, método, variable, etc.), reemplazar Hay herramientas C#Refactory (Xtreme Simplicity)
Metáfora Reemplaza a la arquitectura “ Historia compartida sobre cómo funciona todo el sistema” Lenguaje común que todos puedan entender cliente desarrolladores La metáfora puede cambiar permanentemente
Ciclo de vida
XP - Síntesis Prácticas conjuntas Iteraciones Vocabulario Común – Reemplaza a Metáforas Espacio de trabajo abierto Retrospectivas  Prácticas de Programador Desarrollo orientado a pruebas Programación en pares Refactorización Propiedad colectiva Integración continua YAGNI (“No habrás de necesitarlo”) – Equivale a Diseño Simple Prácticas de Management  Responsabilidad aceptada Cobertura aérea para el equipo Revisión trimestral Espejo – El  manager  debe comunicar un fiel reflejo del estado de cosas Ritmo sostenible  Prácticas de Cliente Narración de historias Planeamiento de entrega Prueba de aceptación Entregas frecuentes
Scrum Primera referencia: Takeuchi-Nonaka, 1986,  The New Product Development Game En software, Jeff Sutherland, Ken Schwaber, 1995 Aplica principios de procesos de control industrial, junto con experiencias metodol ó gicas de Microsoft, Borland y Hewlett-Packard   No es método independiente, sino complemento de otras metodologías XP, MSF, RUP) Enfatiza valores y prácticas de gestión, no cuestiones técnicas de desarrollo
Principios de Scrum            Equipos auto-dirigidos y auto-organizados. No hay  manager  que decida, ni otros t í tulos que  “ miembros del equipo ”  o  “ cerdos ” ; la excepci ó n es el  Scrum Master  que debe ser 50% programador y que resuelve problemas, pero no manda. Los observadores externos se llaman  “ gallinas ” ; pueden observar, pero no interferir ni opinar.             Una vez elegida una tarea, no se agrega trabajo extra. En caso que se agregue algo, se recomienda quitar alguna otra cosa.             Encuentros diarios con las tres preguntas  …  Se realizan siempre en el mismo lugar, en c í rculo. El encuentro diario impide caer en el dilema se ñ alado por Fred Brooks:  “¿ C ó mo es que un proyecto puede atrasarse un a ñ o?: Un d í a a la vez ”  [Bro95].             Iteraciones de treinta d í as; se admite que sean m á s frecuentes.             Demostraci ó n a participantes externos al fin de cada iteraci ó n. Al principio de cada iteraci ó n, planeamiento adaptativo guiado por el cliente.
Ciclo de Scrum
Ciclo de Scrum (2)
Artefactos de Scrum Acumulación (backlog) de producto Acumulación de carrera
Prácticas de Scrum Al fin de cada iteraci ó n de treinta d í as hay una demostraci ó n a cargo del Scrum Master.  Las presentaciones en PowerPoint est á n prohibidas. En los encuentros diarios, las gallinas deben estar fuera del c í rculo.  Todos tienen que ser puntuales; si alguien llega tarde, se le cobra una multa que se destinar á  a obras de caridad.  Es permitido usar artefactos de los m é todos a los que Scrum acompa ñ e, p. Ej. Listas de Riesgos si se utiliza UP, Planguage si el m é todo es Evo, o los Planes de Proyecto sugeridos en la disciplina de Gesti ó n de Proyectos de MSF.  No es legal el uso de instrumentos como diagramas PERT, porque parten del supuesto de que las tareas de un proyecto se pueden identificar y ordenar El supuesto dominante es que el desarrollo es semi-ca ó tico, cambiante y tiene demasiado ruido como para que se le aplique un proceso definido.
Feature Driven Development (FDD)  [DeLuca, Coad] No FOP, pero sí Desarrollo por Rasgo El seguimiento del progreso se realiza mediante examen de pequeñas funcionalidades descompuestas y funciones valoradas por el cliente. Un rasgo 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 .
Feature Driven Development (FDD) 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
Feature Driven Development (FDD) Ciclo de vida
Feature Driven Development (FDD)
Feature Driven Development (FDD) 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 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.
Best practices  en otros métodos DSDM Prácticas escalables - Reglas MoSCoW  [Must, Should, Could, Want]
Adaptive Software Development James Highsmith III, consultor de Cutter Consortium, desarroll ó  ASD hacia el a ñ o 2000 Alternativa a la idea, propia de CMM Nivel 5, de que la optimizaci ó n es la  ú nica soluci ó n para problemas de complejidad creciente.  Tercera v í a entre el  “ desarrollo monumental de software ”  y el  “ desarrollo accidental ” , o entre la burocracia y la adhocracia. Deber í amos buscar m á s bien, afirma Highsmith,  “ el rigor estrictamente necesario ” Para ello hay que situarse en coordenadas apenas un poco fuera del caos y ejercer menos control que el que se cree necesario.
Ciclo de ASD
Adaptive Software Development Auto-organizaci ó n, adaptaci ó n al cambio y orden emergente Analog í as con los sistemas adaptativos complejos por excelencia: los organismos vivientes (o sus an á logos digitales: redes neuronales auto-organizativas de Teuvo Kohonen y aut ó matas celulares Los proyectos de software son sistemas adaptativos complejos y la optimizaci ó n no hace m á s que sofocar la emergencia necesaria para afrontar el cambio.  Highsmith interpreta la organizaci ó n empresarial que emprende un desarrollo como si fuera un ambiente, sus miembros como agentes y el producto como el resultado emergente de relaciones de competencia y cooperaci ó n.  En los sistemas complejos no es aplicable el an á lisis, porque no puede  deducirse  el comportamiento del todo a partir de la conducta de las partes, ni sumarse las propiedades individuales para determinar las caracter í sticas del conjunto
Lean Development Lean: magro, enjuto – James Womack, 1990, La máquina que cambió al mundo Patrones organizacionales Herramientas de TQM( Edward Deming) Software: Bob Charette, 2001 No se limita al proceso de desarrollo – Hay que conocer el negocio de punta a punta
Principios de Lean Development 1.      Satisfacer al cliente es la máxima prioridad. 2.        Proporcionar siempre el mejor valor por la inversi ó n. 3.        El  é xito depende de la activa participaci ó n del cliente. 4.        Cada proyecto LD es un esfuerzo de equipo. 5.        Todo se puede cambiar. 6.        Soluciones de dominio, no puntos. 7.        Completar, no construir. 8.        Una soluci ó n al 80% hoy, en vez de una al 100% ma ñ ana. 9.        El minimalismo es esencial. 10.     La necesidad determina la tecnolog í a. 11.     El crecimiento del producto es el incremento de sus prestaciones, no de su tama ñ o. 12.     Nunca empujes LD m á s all á  de sus l í mites.
Reformulación de Darell Norton 1.        Eliminar basura (las herramientas son  Seeing Waste, Value Stream Mapping ). Basura es todo lo que no agregue valor a un producto, desde la  ó ptica del sistema de valores del cliente. Este principio equivale a la reducci ó n del inventario en manufactura. El inventario del desarrollo de software es el conjunto de artefactos intermedios. Un estudio del Standish Group revel ó  que en un sistema t í pico, las prestaciones que se usan siempre suman el 7%, las que se usan a menudo el 13%,  “ algunas veces ”  el 16%,  “ raras veces ”  el 19% y  “ nunca ”  el 45%. Esto es un claro 80/20: el 80% del valor proviene del 20% de los rasgos.  Concentrarse en el 20%  ú til es una aplicaci ó n del mismo principio que subyace a la idea de YAGNI.
Lean Development Igual que Agile Modeling, que cubr í a aspectos de modelado y documentaci ó n, LD y LSD han sido pensados como complemento de otros m é todos, y no como una metodolog í a excluyente. LD prefiere concentrarse en las premisas y modelos derivados de Lean Production (canon de la Escuela de Negocios de Harvard).  Para las t é cnicas concretas de programaci ó n, LD promueve el uso de otros MAs que sean consistentes con su visi ó n, como XP
Evo Competitive Engineering – Tom & Kai Gilb Planguage Vincula todas las disciplinas de SE Expresa objetivos, estrategia, diseño y riesgo Basado en Plan-Do-Study-Act (Deming, Juran, Shewhart) Lenguaje de especificación Planguage Descripción de requerimientos, diseños y planes Métodos Planguage Especificación de requerimiento, con atributos cuantificados Estimación de impacto: implementación vs requerimiento y evaluación de progreso Control de calidad de especificación (SQC - Excel) Evolutionary Project Management: pasos pequeños (2%) evolutivos de alto valor
Evo
Planguage CUSTOMER.SATISFACTION SCALE: evaluación promedio de la satisfacción de un cliente, de 1 a 5, siendo 1 la peor y 5 la mejor PAST [2003] 2.5 GOAL [2004] 3.5 Evo
Agile Modeling Diagrama de artefactos
Métodos ágiles en MSF Fuerte tradición de desarrollo ágil en MS Steve McConnell,  Code Complete  (1993) Programación en pares Steve McConnell,  Rapid Development  (1996) Modelo de ciclo de vida evolutivo, encuentros y talleres de equipo, revisiones frecuentes, diseño para el cambio, entrega evolutiva, reutilización, prototipado evolutivo, comunicación intensa, desarrollo iterativo e incremental No ágil : recomendación de establecer metas fijas de antemano, contratar a terceros para realizar parte del código ( outsourcing ), trabajar en oficinas privadas, ofrecerse a permanecer horas extraordinarias - Oposición de McConnell a XP Ron Jeffries & Ward Cunningham
Métodos ágiles en MSF Microsoft Solutions Framework En evolución desde 1994 “ Conjunto de principios, modelos, disciplinas, conceptos, lineamientos y prácticas probadas” http://www.microsoft.com/technet/itsolutions/techguide/msf/msfovrvw.mspx Explícitamente definido como framework apto para métodos ágiles  Modelo de Procesos iterativo e incremental, con participación activa del cliente Probado en combinación con métodos ágiles Agile Modeling (Ambler) DSDM - Documento conjunto de coordinación RUP Evolutionary Project Management - Best practices
Métodos ágiles en MSF 8 principios: Alentar comunicaciones abiertas (Brooks) Trabajar hacia una visión compartida (Highsmith) Otorgar poder a los miembros del equipo Establecer responsabilidad clara y compartida Concentrarse en la entrega de valor de negocios Permanecer ágil, esperar el cambio (Highsmith) Invertir en calidad Aprender de todas las experiencias
Críticas a Métodos Ágiles Rakitin, 2001 – Argumento hacker Pete McBreen, 2002 – Questioning XP McConnell, 2002 – Hipnosis colectiva,  one size fits all , programación sin diseño Stephens-Rosenberg, 2003 – XP Refactored Ed Berard, 2003 – “Falacias” Gerold Keffer, 2003 –  XP considered harmful. . (Escalabilidad, casos, programación de garage, TDD caro, reusabilidad, pero no COTS) Mellor, Smith – Consignas estridentes, artefactos no reconocidos
Herramientas para desarrollo ágil Patterns & Practices Prueba de Unidad COMUnit - SourceForge, VB.NET & C# Nunit 2.1.4 csUnit vbUnit 3 - Visual Basic .NET .TEST - Parasoft Software - Soporta NUnit HarnessIt™ - UnitTesting.com - Prueba de unidad para lenguajes CLR Unite.NET - Ascentiv - Prueba de unidad e integración - Independiente de lenguaje
Herramientas para desarrollo ágil Refactorización C# Refactoring Tool 1.5.1 Opnieuw - SourceForge, C# Extreme Simplicity C# Refactory - VB Refactory ReSharper - JetBrains! C# Refactoring Tool C# 2.0 Whidbey - Refactoring nativo GeneXus
Conclusiones Distintas categorías de métodos ágiles Los métodos ágiles son fundamentalmente combinables MSF marco general, Planguage como lenguaje de especificación de requerimiento, Scrum (con sus patrones organizacionales) como método de management, XP (con patrones de diseño, programación guiada por pruebas y refactorización) como metodología de desarrollo, RUP como abastecedor de artefactos, ASD como cultura empresarial y (si se requiere) CMM como metodología de evaluación de madurez Desarrollo de conceptos y técnicas de uso general Patrones organizacionales (Scrum, Lean Software Development), refactorización, TDD, Testing Patterns Democratización de las metodologías - Ahora los métodos son  mainstream
Vínculos y referencias Reynoso/Kicillof en MSDN en Español: http://www.microsoft.com/spanish/msdn/arquitectura Martin Fowler, Kent Beck, John Brant, William Opdyke y Don Roberts.  Refactoring: Improving the design of existing code . Addison Wesley, 1999 Kent Beck.  Extreme Programming Explained: Embrace Change . Addison Wesley, 1999
Vínculos y referencias Ron Jeffries -  Extreme Programming adventures in C#.  MS Press, 2004 Tom Gilb.  Competitive Engineering , 2003. Will Stott, James Newkirk - “Test-driven C#”.  MSDN Magazine , Abril de 2004. Andy Hunt, Dave Thomas -  Pragmatic Unit Testing in C# with NUnit , 2004.
¿Preguntas? Billy Reynoso UNIVERSIDAD DE BUENOS AIRES [email_address]

Alternativas metodológicas

  • 1.
    Alternativas metodológicas CarlosReynoso UNIVERSIDAD DE BUENOS AIRES [email_address] http://www.microsoft.com/spanish/msdn/arquitectura/roadmap_arq/arquitectura_soft.mspx
  • 2.
    Agenda Alternativas depeso completo vs ágiles Contexto de situación Manifiesto ágil Métodos ágiles eXtreme Programming (XP) Otros métodos ágiles Métodos ágiles & MSF 3.0 Críticas a Métodos Ágiles Conclusiones http://www.microsoft.com/spanish/msdn/arquitectura Paper
  • 3.
    Tabla de MétodosSEI/CMU Architecture Tradeoff Analysis Method (ATAM) Quality Attribute Workshops (QAW) Attribute-Driven Design (ADD) Active Reviews for Intermediate Designs (ARID) Cost-Benefit Analysis Method (CBAM) Software Architecture Comparison Analysis Method (SACAM) Quality-Attribute-Driven Software Architecture Reconstruction (QADSAR) Architecture Based Design Method (ABD) Software Architecture Analysis Method (SAAM)
  • 4.
    Métodos y frameworksEstándares de certificación (CMMI) Paraguas envolventes (MSF) Artefactos y disciplinas (RUP) Métodos puntuales (Evo) Metodologías basadas en arquitectura Anti-arquitecturas Frameworks diversos…
  • 5.
    Contexto de situaciónDescrédito de los procesos en cascada DOD STD 2167  MIL STD 498 Crisis de confianza en los procesos regidos por metodologías prescriptivas con análisis completo de requerimientos y planificación detallada CMM, CMMI, Spice, Bootstrap, TickIt, ISO 9000 Legislación negativa sobre conformidad con estándares de calidad
  • 6.
    Contexto de situaciónSurgimiento de ideas caórdicas No linealidad: El mítico hombre-mes (Brooks) Orden a partir del caos (Kauffman, Hock) Sistemas adaptativos complejos (Holland) Auto-organización (B. Boehm) Modelo y ciclo de vida en Estrategia del Caos (Raccoon, 1995)
  • 7.
    Manifiesto ágil http://agilemanifesto.orgEstamos poniendo al descubierto formas mejores de desarrollo de software, haciéndolo y ayudando a otros a que lo hagan. A través de este trabajo hemos llegado a valorar: Los individuos y la interacción por encima de los procesos y herramientas . El software que funciona por encima de la documentación abarcadora . La colaboración con el cliente por encima de la negociación contractual . La respuesta al cambio por encima del seguimiento de un plan . Aunque hay valor en los elementos a la derecha, valorizamos más los de la izquierda.
  • 8.
    Manifiesto ágil http://agilemanifesto.orgKent Beck (XP), Mike Beedle, Arie van Bennekum (DSDM), Alistair Cockburn (Crystal), Ward Cunningham (XP), Martin Fowler (XP), James Grenning (XP), Jim Highsmith (ASD), Andrew Hunt (Pragmatic Programming), Ron Jeffries (XP), Jon Kern (FDD), Brian Marick, Robert C. Martin (XP), Steve Mellor, Ken Schwaber (Scrum), Jeff Sutherland (Scrum) y Dave Thomas (Pragmatic Programming)
  • 9.
  • 10.
    Híbridos Enterprise XP(DSDM + XP) - Mike Griffiths XP@Scrum - Scrum Xbreed (XP+Scrum) - Mike Beedle Industrial XP - Industrial Logic Dispersed Extreme Programming (DXP) - Michael Kircher, Siemens Dispersed Development - Alan Cameron Wills (MS), FastnLoose - Patrones para desarrollo ágil distribuido Grizzly (“large Agile”) - Ron Crocker, Motorola Evo+XP, Evo+UP, Evo+Scrum, XP+UP, UP+Scrum
  • 11.
    Constantes de losmétodos ágiles Metodología simple y fácil de aprender Valores, Principios, Prácticas, Roles, Artefactos Equipos no jerárquicos y auto-organizados Comunicación intensiva Minimalismo Prescindencia de arquitectura y modelado Proceso iterativo e incremental Entregas rápidas Capacidad adaptativa Rápida respuesta al cambio
  • 12.
    Acrónimos y jergaScrum , gallinas, cerdos, corridas ( sprints ), pre-juego, juego y pos-juego (Scrum) - Púas ( spikes ) (Scrum, XP) “ El minimalismo es esencial”, “Todo se puede cambiar”, “Mejor 80% hoy que 100% mañana” (LD), “Mirando basura (LSD), “Refactorización implacable” (XP) El Cono del Silencio, El Esqueleto Ambulante (CC) YAGNI “ You Aren ’ t Gonna Need It ” ; TETCPB, “ Test Everything That Can Possibly Broke ” ; DTSTTCPW, “ Do The Simplest Thing That Can Possibly Work ” ; BUFD, “ Big Upfront Design ” . GoF, POSA “ Lo lamento por su vaca; no sabía que era sagrada” (Ron Jeffries) “ Si funciona bien, arréglelo de todos modos” (Beck)
  • 13.
    eXtreme Programming Métodoágil basado en cuatro principios: simplicidad, comunicación, retroalimentación, valor Y varias prácticas: juego de planeamiento, entregas pequeñas, metáforas, diseño simple, pruebas continuas, refactorización, programación por pares, propiedad colectiva, integración continua, semana de 40 horas, cliente en el sitio, estándares de codificación
  • 14.
    Programación por pares( pair programming ) Todo el código es escrito por parejas de programadores una sola máquina con un teclado y un mouse No es un programador trabajando y el otro mirando No es una sesión de aprendizaje para un programador junior El que no está escribiendo piensa más estratégicamente revisa el código en tiempo real Los roles se pueden cambiar varias veces durante el día Fundamentos: dos programadores trabajando juntos son más efectivos que por separado el conocimiento grupal crece más rápido trabajar es más divertido
  • 15.
    Pruebas T est D riven D evelopment Diseño e implementación de las pruebas antes de programar la funcionalidad El programador crea sus propios tests de unidad Integración continua Integración diaria Disponer de una máquina para integración Tests funcionales Cliente
  • 16.
    Semana de 40horas El desarrollo de software es un ejercicio creativo hay que estar fresco y descansado Sin “héroes” Se reduce la rotación de personal Mejora la calidad del producto Se permiten excepciones, con cuidado más de una semana de horas extra: problema
  • 17.
    Lugar de trabajoSala amplia (mejor, sin divisiones) Centro: pares de programadores Periferia: máquinas individuales Ventajas del espacio abierto: mayor comunicación agenda dinámica
  • 18.
    Juego de planificación( planning game ) Determinar rápidamente el alcance de la próxima versión prioridades de negocio (cliente) estimaciones técnicas (desarrolladores) ¿Por qué juego? Objetivo: maximizar el valor del software producido Estrategia: poner en producción las características más importantes lo antes posible Piezas: story cards Jugadores: desarrolladores y cliente Movidas: Exploración, Selección y Actualización
  • 19.
  • 20.
    Cliente en elsitio Interacción continua No siempre se consigue muy junior, no sirve muy senior, no quiere Actualmente se pide un “analista”
  • 21.
    Propiedad colectiva delcódigo Cualquier integrante del grupo tiene autoridad para cambiar cualquier parte del código fuente Todos son dueños del código Siempre se utilizan estándares Los tests siempre deben funcionar al 100% Se integra con todo el sistema permanentemente Manejo de configuración
  • 22.
    Diseño simple, entregaspequeñas Se debe mantener el diseño lo mas simple posible (YAGNI): “No vas a necesitarlo” Tarjetas CRC Design for change vs Design for today Características útiles en términos del negocio No implementar características que no son necesarias Poner en producción lo antes posible Unas pocas semanas por entrega
  • 23.
    Tarjetas CRC Clase– Responsabilidad – Colaboración
  • 24.
    Refactorización Si elcódigo se está volviendo complicado modificar el diseño, volver a uno más simple Refactoring : modificar la forma del código sin cambiar su funcionamiento Ejemplos: extraer método, renombrar (clase, método, variable, etc.), reemplazar Hay herramientas C#Refactory (Xtreme Simplicity)
  • 25.
    Metáfora Reemplaza ala arquitectura “ Historia compartida sobre cómo funciona todo el sistema” Lenguaje común que todos puedan entender cliente desarrolladores La metáfora puede cambiar permanentemente
  • 26.
  • 27.
    XP - SíntesisPrácticas conjuntas Iteraciones Vocabulario Común – Reemplaza a Metáforas Espacio de trabajo abierto Retrospectivas Prácticas de Programador Desarrollo orientado a pruebas Programación en pares Refactorización Propiedad colectiva Integración continua YAGNI (“No habrás de necesitarlo”) – Equivale a Diseño Simple Prácticas de Management Responsabilidad aceptada Cobertura aérea para el equipo Revisión trimestral Espejo – El manager debe comunicar un fiel reflejo del estado de cosas Ritmo sostenible Prácticas de Cliente Narración de historias Planeamiento de entrega Prueba de aceptación Entregas frecuentes
  • 28.
    Scrum Primera referencia:Takeuchi-Nonaka, 1986, The New Product Development Game En software, Jeff Sutherland, Ken Schwaber, 1995 Aplica principios de procesos de control industrial, junto con experiencias metodol ó gicas de Microsoft, Borland y Hewlett-Packard No es método independiente, sino complemento de otras metodologías XP, MSF, RUP) Enfatiza valores y prácticas de gestión, no cuestiones técnicas de desarrollo
  • 29.
    Principios de Scrum         Equipos auto-dirigidos y auto-organizados. No hay manager que decida, ni otros t í tulos que “ miembros del equipo ” o “ cerdos ” ; la excepci ó n es el Scrum Master que debe ser 50% programador y que resuelve problemas, pero no manda. Los observadores externos se llaman “ gallinas ” ; pueden observar, pero no interferir ni opinar.           Una vez elegida una tarea, no se agrega trabajo extra. En caso que se agregue algo, se recomienda quitar alguna otra cosa.           Encuentros diarios con las tres preguntas … Se realizan siempre en el mismo lugar, en c í rculo. El encuentro diario impide caer en el dilema se ñ alado por Fred Brooks: “¿ C ó mo es que un proyecto puede atrasarse un a ñ o?: Un d í a a la vez ” [Bro95].           Iteraciones de treinta d í as; se admite que sean m á s frecuentes.           Demostraci ó n a participantes externos al fin de cada iteraci ó n. Al principio de cada iteraci ó n, planeamiento adaptativo guiado por el cliente.
  • 30.
  • 31.
  • 32.
    Artefactos de ScrumAcumulación (backlog) de producto Acumulación de carrera
  • 33.
    Prácticas de ScrumAl fin de cada iteraci ó n de treinta d í as hay una demostraci ó n a cargo del Scrum Master. Las presentaciones en PowerPoint est á n prohibidas. En los encuentros diarios, las gallinas deben estar fuera del c í rculo. Todos tienen que ser puntuales; si alguien llega tarde, se le cobra una multa que se destinar á a obras de caridad. Es permitido usar artefactos de los m é todos a los que Scrum acompa ñ e, p. Ej. Listas de Riesgos si se utiliza UP, Planguage si el m é todo es Evo, o los Planes de Proyecto sugeridos en la disciplina de Gesti ó n de Proyectos de MSF. No es legal el uso de instrumentos como diagramas PERT, porque parten del supuesto de que las tareas de un proyecto se pueden identificar y ordenar El supuesto dominante es que el desarrollo es semi-ca ó tico, cambiante y tiene demasiado ruido como para que se le aplique un proceso definido.
  • 34.
    Feature Driven Development(FDD) [DeLuca, Coad] No FOP, pero sí Desarrollo por Rasgo El seguimiento del progreso se realiza mediante examen de pequeñas funcionalidades descompuestas y funciones valoradas por el cliente. Un rasgo 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 .
  • 35.
    Feature Driven Development(FDD) 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
  • 36.
    Feature Driven Development(FDD) Ciclo de vida
  • 37.
  • 38.
    Feature Driven Development(FDD) 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 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.
  • 39.
    Best practices en otros métodos DSDM Prácticas escalables - Reglas MoSCoW [Must, Should, Could, Want]
  • 40.
    Adaptive Software DevelopmentJames Highsmith III, consultor de Cutter Consortium, desarroll ó ASD hacia el a ñ o 2000 Alternativa a la idea, propia de CMM Nivel 5, de que la optimizaci ó n es la ú nica soluci ó n para problemas de complejidad creciente. Tercera v í a entre el “ desarrollo monumental de software ” y el “ desarrollo accidental ” , o entre la burocracia y la adhocracia. Deber í amos buscar m á s bien, afirma Highsmith, “ el rigor estrictamente necesario ” Para ello hay que situarse en coordenadas apenas un poco fuera del caos y ejercer menos control que el que se cree necesario.
  • 41.
  • 42.
    Adaptive Software DevelopmentAuto-organizaci ó n, adaptaci ó n al cambio y orden emergente Analog í as con los sistemas adaptativos complejos por excelencia: los organismos vivientes (o sus an á logos digitales: redes neuronales auto-organizativas de Teuvo Kohonen y aut ó matas celulares Los proyectos de software son sistemas adaptativos complejos y la optimizaci ó n no hace m á s que sofocar la emergencia necesaria para afrontar el cambio. Highsmith interpreta la organizaci ó n empresarial que emprende un desarrollo como si fuera un ambiente, sus miembros como agentes y el producto como el resultado emergente de relaciones de competencia y cooperaci ó n. En los sistemas complejos no es aplicable el an á lisis, porque no puede deducirse el comportamiento del todo a partir de la conducta de las partes, ni sumarse las propiedades individuales para determinar las caracter í sticas del conjunto
  • 43.
    Lean Development Lean:magro, enjuto – James Womack, 1990, La máquina que cambió al mundo Patrones organizacionales Herramientas de TQM( Edward Deming) Software: Bob Charette, 2001 No se limita al proceso de desarrollo – Hay que conocer el negocio de punta a punta
  • 44.
    Principios de LeanDevelopment 1.      Satisfacer al cliente es la máxima prioridad. 2.       Proporcionar siempre el mejor valor por la inversi ó n. 3.       El é xito depende de la activa participaci ó n del cliente. 4.       Cada proyecto LD es un esfuerzo de equipo. 5.       Todo se puede cambiar. 6.       Soluciones de dominio, no puntos. 7.       Completar, no construir. 8.       Una soluci ó n al 80% hoy, en vez de una al 100% ma ñ ana. 9.       El minimalismo es esencial. 10.   La necesidad determina la tecnolog í a. 11.   El crecimiento del producto es el incremento de sus prestaciones, no de su tama ñ o. 12.   Nunca empujes LD m á s all á de sus l í mites.
  • 45.
    Reformulación de DarellNorton 1.       Eliminar basura (las herramientas son Seeing Waste, Value Stream Mapping ). Basura es todo lo que no agregue valor a un producto, desde la ó ptica del sistema de valores del cliente. Este principio equivale a la reducci ó n del inventario en manufactura. El inventario del desarrollo de software es el conjunto de artefactos intermedios. Un estudio del Standish Group revel ó que en un sistema t í pico, las prestaciones que se usan siempre suman el 7%, las que se usan a menudo el 13%, “ algunas veces ” el 16%, “ raras veces ” el 19% y “ nunca ” el 45%. Esto es un claro 80/20: el 80% del valor proviene del 20% de los rasgos. Concentrarse en el 20% ú til es una aplicaci ó n del mismo principio que subyace a la idea de YAGNI.
  • 46.
    Lean Development Igualque Agile Modeling, que cubr í a aspectos de modelado y documentaci ó n, LD y LSD han sido pensados como complemento de otros m é todos, y no como una metodolog í a excluyente. LD prefiere concentrarse en las premisas y modelos derivados de Lean Production (canon de la Escuela de Negocios de Harvard). Para las t é cnicas concretas de programaci ó n, LD promueve el uso de otros MAs que sean consistentes con su visi ó n, como XP
  • 47.
    Evo Competitive Engineering– Tom & Kai Gilb Planguage Vincula todas las disciplinas de SE Expresa objetivos, estrategia, diseño y riesgo Basado en Plan-Do-Study-Act (Deming, Juran, Shewhart) Lenguaje de especificación Planguage Descripción de requerimientos, diseños y planes Métodos Planguage Especificación de requerimiento, con atributos cuantificados Estimación de impacto: implementación vs requerimiento y evaluación de progreso Control de calidad de especificación (SQC - Excel) Evolutionary Project Management: pasos pequeños (2%) evolutivos de alto valor
  • 48.
  • 49.
    Planguage CUSTOMER.SATISFACTION SCALE:evaluación promedio de la satisfacción de un cliente, de 1 a 5, siendo 1 la peor y 5 la mejor PAST [2003] 2.5 GOAL [2004] 3.5 Evo
  • 50.
  • 51.
    Métodos ágiles enMSF Fuerte tradición de desarrollo ágil en MS Steve McConnell, Code Complete (1993) Programación en pares Steve McConnell, Rapid Development (1996) Modelo de ciclo de vida evolutivo, encuentros y talleres de equipo, revisiones frecuentes, diseño para el cambio, entrega evolutiva, reutilización, prototipado evolutivo, comunicación intensa, desarrollo iterativo e incremental No ágil : recomendación de establecer metas fijas de antemano, contratar a terceros para realizar parte del código ( outsourcing ), trabajar en oficinas privadas, ofrecerse a permanecer horas extraordinarias - Oposición de McConnell a XP Ron Jeffries & Ward Cunningham
  • 52.
    Métodos ágiles enMSF Microsoft Solutions Framework En evolución desde 1994 “ Conjunto de principios, modelos, disciplinas, conceptos, lineamientos y prácticas probadas” http://www.microsoft.com/technet/itsolutions/techguide/msf/msfovrvw.mspx Explícitamente definido como framework apto para métodos ágiles Modelo de Procesos iterativo e incremental, con participación activa del cliente Probado en combinación con métodos ágiles Agile Modeling (Ambler) DSDM - Documento conjunto de coordinación RUP Evolutionary Project Management - Best practices
  • 53.
    Métodos ágiles enMSF 8 principios: Alentar comunicaciones abiertas (Brooks) Trabajar hacia una visión compartida (Highsmith) Otorgar poder a los miembros del equipo Establecer responsabilidad clara y compartida Concentrarse en la entrega de valor de negocios Permanecer ágil, esperar el cambio (Highsmith) Invertir en calidad Aprender de todas las experiencias
  • 54.
    Críticas a MétodosÁgiles Rakitin, 2001 – Argumento hacker Pete McBreen, 2002 – Questioning XP McConnell, 2002 – Hipnosis colectiva, one size fits all , programación sin diseño Stephens-Rosenberg, 2003 – XP Refactored Ed Berard, 2003 – “Falacias” Gerold Keffer, 2003 – XP considered harmful. . (Escalabilidad, casos, programación de garage, TDD caro, reusabilidad, pero no COTS) Mellor, Smith – Consignas estridentes, artefactos no reconocidos
  • 55.
    Herramientas para desarrolloágil Patterns & Practices Prueba de Unidad COMUnit - SourceForge, VB.NET & C# Nunit 2.1.4 csUnit vbUnit 3 - Visual Basic .NET .TEST - Parasoft Software - Soporta NUnit HarnessIt™ - UnitTesting.com - Prueba de unidad para lenguajes CLR Unite.NET - Ascentiv - Prueba de unidad e integración - Independiente de lenguaje
  • 56.
    Herramientas para desarrolloágil Refactorización C# Refactoring Tool 1.5.1 Opnieuw - SourceForge, C# Extreme Simplicity C# Refactory - VB Refactory ReSharper - JetBrains! C# Refactoring Tool C# 2.0 Whidbey - Refactoring nativo GeneXus
  • 57.
    Conclusiones Distintas categoríasde métodos ágiles Los métodos ágiles son fundamentalmente combinables MSF marco general, Planguage como lenguaje de especificación de requerimiento, Scrum (con sus patrones organizacionales) como método de management, XP (con patrones de diseño, programación guiada por pruebas y refactorización) como metodología de desarrollo, RUP como abastecedor de artefactos, ASD como cultura empresarial y (si se requiere) CMM como metodología de evaluación de madurez Desarrollo de conceptos y técnicas de uso general Patrones organizacionales (Scrum, Lean Software Development), refactorización, TDD, Testing Patterns Democratización de las metodologías - Ahora los métodos son mainstream
  • 58.
    Vínculos y referenciasReynoso/Kicillof en MSDN en Español: http://www.microsoft.com/spanish/msdn/arquitectura Martin Fowler, Kent Beck, John Brant, William Opdyke y Don Roberts. Refactoring: Improving the design of existing code . Addison Wesley, 1999 Kent Beck. Extreme Programming Explained: Embrace Change . Addison Wesley, 1999
  • 59.
    Vínculos y referenciasRon Jeffries - Extreme Programming adventures in C#. MS Press, 2004 Tom Gilb. Competitive Engineering , 2003. Will Stott, James Newkirk - “Test-driven C#”. MSDN Magazine , Abril de 2004. Andy Hunt, Dave Thomas - Pragmatic Unit Testing in C# with NUnit , 2004.
  • 60.
    ¿Preguntas? Billy ReynosoUNIVERSIDAD DE BUENOS AIRES [email_address]