2010-08-21 6 views
12

Obviamente las diferencias en el impacto para los equipos, clientes, ROI, etc. de la aplicación de los dos enfoques son enormes y es el tema de muchos libros y debates y conferencias interminables.¿La frecuencia de lanzamiento es la única diferencia real entre Agile y Waterfall?

Pero a medida que pienso más en ello, me está costando encontrar una diferencia entre los dos que, en última instancia, no se correlaciona con una única diferencia de raíz que es la frecuencia de lanzamiento.

Waterfall pasa tiempo en un diseño, luego escribe el código, luego lo prueba y finalmente lo suelta. Pero Agile hace exactamente el mismo conjunto de pasos, es solo que cada uno es más pequeño.

Una pieza clave del enfoque Agile consiste en aprender de cada lanzamiento y usarlo para que surja un diseño más grande en lugar de intentar predecirlo al principio.

Pero Waterfall también lo hace. Es solo que en lugar de aprender cada 3 o 4 semanas, el equipo de Waterfall solo aprende cada 6 o 9 meses. Pero el diseño de Waterfall aún emerge. Es decir, la versión 2 de la cascada reflejará lo que se aprendió en la versión 1. Por lo tanto, el proceso no es diferente, es solo que se ejecuta a una velocidad diferente.

Agile se centra en la estrecha colaboración con el cliente. Pero Waterfall también lo hace. Es solo que dado que la cascada tiene un tiempo de iteración más largo, una lista enumerada de requisitos en la forma de un contrato es más necesaria para mantener a todos en la misma página durante un largo período de tiempo. Pero, de nuevo, esto es solo un artefacto de frecuencia. Cuanto mayor es la frecuencia de la entrega, menor es la necesidad de un contrato.

¿Hay alguna otra diferencia primitiva que me falta, o es realmente solo la frecuencia?

+6

Temas de discusión como este deberían ser wikis. –

+3

Hablar de las diferencias con respecto al modelo de cascada es una tontería: desde el primer día ha sido un chapuzón para las personas contrastar con lo que defienden. Creo que la primera descripción del modelo de cascada fue en: http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf, que lo describe solo como un contraste con el oh tan inevitablemente superior método defendido por el autor. –

+0

No me repito en una respuesta: debe distinguir entre las versiones y estar listo para ser lanzado: http://www.andybrandt.net/637/to-release-or-not-to-release – Andy

Respuesta

8

Cascada:

  • a diseñar el producto
  • lo construyes
  • lo prueba
  • documentarlo
  • que lo suelte cuando se han desarrollado todos los requisitos

ágil:

  • a diseñar la característica más valiosa (o user story) primero
  • lo pruebas (TDD;))
  • la construyó
  • documentarlo
  • repites el proceso con la siguiente característica más valiosa
  • puede liberarla en cualquier momento

(después de cada función que completaron o después del período de tiempo en caja (normalmente llamados sprint o iteration))

La diferencia es bastante claro para mí.

Con Agile, puede adaptar qué compilar entregando una pequeña porción del software con frecuencia. Puedes parar cuando tengas suficiente.

+0

Ese es un buen punto: con Agile, comienza a probar cuando la * característica * está lista. Con Waterfall, comienza a probar cuando se completa * todo el producto *, lo que hace que los ciclos de extremo a extremo sean más largos. –

+2

Si fuera a dudar, podría querer cambiar la prueba/construir, ser el defensor de TDD que soy :-) También documentaría solo si la documentación era necesaria. Y diseñaría as-I-went en lugar de todo en primer plano :-) – adrianh

+1

¡jaja! déjame cambiar esto –

2

Una diferencia es la transparencia: si las personas ajenas al equipo de desarrollo, durante el ciclo de desarrollo, tienen alguna visibilidad del proceso, el progreso, los obstáculos y cómo será el resultado final.

La cascada no implica transparencia. A menudo (aunque no necesariamente) se implementa como "los programadores entran a su cueva y emergen n semanas/meses después con un producto 'terminado'". Los expertos en negocios escriben las especificaciones por adelantado, y ese puede ser el final de su participación; es posible que ya no estén disponibles cuando los programadores tengan preguntas durante la implementación. Los programadores pueden no mostrar ningún producto a nadie hasta el final del ciclo.

Agile requiere transparencia: es parte del tejido básico. Las personas fuera del equipo serán (o al menos pueden) ver lo que el equipo está haciendo. (De lo contrario, el equipo está mintiendo acerca de ser ágil.) Esta podría ser las reuniones diarias de Scrum, o las Big Visible Charts y los radiadores de información, o la demostración al final de la iteración. Podría ser el requisito de XP que el cliente tome todas las decisiones comerciales, en lugar de dejar que los programadores se rasquen la cabeza y escojan ciegamente una opción cuando los requisitos no son claros. Podría ser el hecho de que los evaluadores, y el Cliente, se consideran parte del equipo, no equipos separados.

Seguramente podría ejecutar Cascada con transparencia, y en una tienda de Cataratas bien gestionada, probablemente lo haría. Pero con Agile, es un hecho.

5

Comentarios más rápidos: en todas las escalas, no solo en las versiones, es sin duda un factor común en muchas prácticas ágiles. Pero realmente no creo que sea la diferencia principal entre la cascada ágil &. Por ejemplo:

  • Los equipos de cascada tienden a construirse alrededor de un grupo de especializaciones estrechas. Los analistas/arquitectos/diseñadores/codificadores/evaluadores tienden a ser grupos separados de personas que trabajan solos. Los equipos ágiles trabajan juntos.

  • Los procesos de cascada dependen de una gran cantidad de documentación y traspasos. Los equipos ágiles están orientados en torno a códigos/productos de trabajo.

  • No estoy de acuerdo con que la cascada se centre en la colaboración del cliente. Hay un único punto de contacto, con un pequeño grupo del equipo de desarrollo general, a menudo solo al comienzo del proceso. Agile se basa en colaboración continua durante todo el proceso de desarrollo. Muy diferente.

  • Los procesos de cascada se basan en la idea de que puede definir completamente la arquitectura del producto & antes de que comience el desarrollo. Los procesos ágiles se basan en la idea de descubrir el producto/arquitectura sobre la marcha.

3

Cascada pasa tiempo en un diseño, a continuación, escribir el código, luego las pruebas y, finalmente, la liberación. Pero Agile hace exactamente el mismo conjunto de pasos, es solo que cada uno es más pequeño.

Agile no es una entidad única, sino un paraguas para muchas metodologías diferentes.

En al menos algunos de ellos, como han notado otros, estas "fases" se superponen mucho más y están en un orden normal algo diferente.

De hecho, en XP, el orden es más o menos:

  • pruebas (TDD/prueba primero)
  • código
  • diseño (refactoring)
  • de repetición y, finalmente, liberar

que tipo invierte la mayor parte de la secuencia.

Y la prueba, el código y el diseño se realizan en una calidad más fina que la versión.

Una pieza clave del enfoque Agile consiste en aprender de cada lanzamiento y utilizarlo para dejar que el diseño más grande emerja en lugar de tratar de predecirlo al principio.

Pero Waterfall también lo hace. Es solo que en lugar de aprender cada 3 o 4 semanas, el equipo de Waterfall solo aprende cada 6 o 9 meses. Pero el diseño de Waterfall aún emerge. Es decir, la versión 2 de la cascada reflejará lo que se aprendió en la versión 1. Por lo tanto, el proceso no es diferente, es solo que se ejecuta a una velocidad diferente.

Esto depende en gran medida de la práctica. Como se describe en DOD-STD-2167A, (Sección 4.1.1), el modelo de cascada sí permite que las fases del proceso de desarrollo se superpongan e iteren (en resumen, sean algo ágiles). Pero la práctica más real se perdió eso, y no hubo aprendizaje hasta el final del proyecto.

Agile se centra en la estrecha colaboración con el cliente. Pero Waterfall también lo hace. Es solo que dado que la cascada tiene un tiempo de iteración más largo, una lista enumerada de requisitos en la forma de un contrato es más necesaria para mantener a todos en la misma página durante un largo período de tiempo. Pero, de nuevo, esto es solo un artefacto de frecuencia. Cuanto mayor es la frecuencia de la entrega, menor es la necesidad de un contrato.

De nuevo dependiente de la práctica. No veo en la especificación mencionada anteriormente mucha mención de las responsabilidades del cliente, y mucho menos continuamente.

Como señaló Jerry Coffin en un comentario, Waterfall es de hecho un hombre de paja que solía argumentar a favor de Agile (como de hecho lo estoy usando ahora ...), pero vale la pena mirar este documento y pensar en qué implica y cómo se ha aplicado.

Lo que muestra esta especificación es un enfoque intenso en contratos, entregas y mantenimiento de planos y documentos, y siguiendo el plan. Y creo que que sí se llevó a la práctica.

El contraste con ágil no es el timeboxing, sino un cambio en los valores.

Como The Agile Manifesto proclama:

estamos descubriendo mejores formas de desarrollar software por hacerlo y ayudar a que otros lo hagan. A través de este trabajo hemos llegado a valorar:

Individuos e interacciones sobre procesos y herramientas

de software que trabajan sobre una amplia documentación

Colaboración con el cliente durante la negociación del contrato

Respondiendo al cambio sobre seguir un plan

Es decir, mientras haya valor en los artículos en a la derecha, valoramos los artículos a la izquierda m mineral.

Curiosamente, esta declaración de valores no dice nada sobre la frecuencia de entrega (aunque la siguiente sección "Principios" lo hace). Es hace Sin embargo, cambia el sistema de valores de planes, documentos y contratos y vuelve a donde pertenece, en realidad la entrega de software en funcionamiento.

La liberación frecuente es un mecanismo para cumplir estos valores.

Si trabajó en "mini-cascadas" sería de hecho un poco más ágil que la cascada BDUF de paja. Pero la frecuencia de la entrega ciertamente no es toda la historia.

1

Marcos,

Como se señaló, ambos enfoques comparten "cosas buenas" que deben estar en todo buen proyecto. Por ejemplo, tome estos dos: retroalimentación temprana y transparencia. Si bien es cierto que Agile tiene una estructura que fomenta esto, estas dos "cosas buenas" pueden (y deberían) estar en cualquier proyecto de cascada, también.

Sin embargo, tiendo (¡respetuosamente!) A estar en desacuerdo con la idea de que la frecuencia de publicación es la única diferencia. Una diferencia sustancial es la siguiente:

Cascada pasa tiempo en un diseño, luego escribir el código, luego las pruebas y, finalmente, la liberación. Pero Agile hace exactamente el mismo conjunto de pasos: es solo que cada uno es más pequeño.

No lo creo. En Agile, intenta hacer todas estas cosas al mismo tiempo, con un equipo multidisciplinario. Digo "intento" porque no es algo que se pueda hacer fácilmente ... pero al menos intentar ayuda.

En la cascada tradicional, por el contrario, espera tener equipos separados (investigación/análisis, control de calidad, diseño, marketing, etc.) y transferencias entre ellos. Mezcla disciplinas y forma un equipo especial solo en casos excepcionales, o cuando necesita realizar una investigación exploratoria o un análisis de riesgo en un proyecto complejo.

Sólo mis dos centavos ...

0

me gusta mucho esta pregunta.

He trabajado el mantenimiento con malos ejemplos de proyectos de cascada masiva. Los entregables para los desarrolladores iniciales fueron varios conjuntos de documentos y una base de código. Una vez que se completó el documento de diseño de alto nivel, se entregó y nunca se actualizó nuevamente. Ditto SRS, diseño detallado, etc. Hay documentación, que no es fiable ni sospechosa.

Con Agile, hay un código. Los desarrolladores de hace tiempo desaparecidos pensaron que era autodocumentado, porque estaban al día con el proyecto cuando se escribió. (¿Alguna vez ha corregido sus propios memorandos? Siempre tienen sentido para el autor.) Trataré de discernir la arquitectura de mirar 1500-2000 módulos. Del mismo modo, tratando de descubrir el diseño de alto nivel. Tomaré notas copiosas. Tal vez incluso carpetas completa. Al mirar el código de "auto-documentación", me dirá qué se está haciendo (en ese módulo), pero no por qué. Ah sí, el personal que colaboró ​​con los desarrolladores se promovió (o se asustó) y ya no está disponible.

Mal ágil no es mejor que una mala cascada. De hecho, el mal ágil puede ser peor que la mala cascada. ¿Es mejor ágil que una buena cascada?

El manifiesto no dice nada sobre la documentación. El verdadero peligro aquí es que "ágil" significa para muchos desarrolladores y clientes una justificación de un modelo heroico rápido y barato. ¿Cree que el cliente disfrutó leyendo los tres gruesos archivadores de tres anillos del diseño de alto nivel? Todos escuchamos en Computer Science 100 que la mayoría del costo del software es mantenimiento, no desarrollo. ¿Soy incorrecto al pensar que el aspecto de mantenimiento es totalmente ignorado en esta discusión?

La diferencia puede ser que los clientes modernos no pueden darse el lujo de no especificar "ágil" porque temen que se los considere retrógrados.

Cuestiones relacionadas