¿Cómo manejas el diseño en Scrum?

26

¿Cómo manejas el diseño en Scrum? ¿Todavía tiene documentos de diseño bien escritos para cada iteración de scrum? ¿Acabas de hacer notas de diseño con diagramas UML? ¿O simplemente tienes un código bien comentado?

Cada iteración puede implicar un cambio de diseño, por lo que solo quería saber cómo las personas capturan esto para que los nuevos desarrolladores tengan un trabajo fácil de entender el dominio y participar lo más rápido posible.

Seth
fuente
El diseño debe ser tratado de forma incremental por el equipo, tanto antes de un sprint como durante. La mayoría de los equipos incorporan el refinamiento de la cartera como una actividad continua para revisar los próximos elementos de la cartera. Este es un momento perfecto para que el equipo diseñe y diseñe la solución suficiente para estimar el esfuerzo. Cualquier artefacto creado debe adjuntarse a la historia. Durante el sprint, se deben realizar actividades de arquitectura y diseño más detalladas. Adjunte estos artefactos también. Cuando se completa la historia, debe haber una gran cantidad de información sobre la solución provista.
treefiddy

Respuestas:

11

¡solo porque sea scrum no significa que todo cambie cada sprint!

Scrum se trata de hacer lo necesario (pero no más) . Aún necesita hacer el diseño y aún debe documentar. Es solo que la cantidad no está fijada ni cómo hacerlo.

Parte de la planificación de cada sprint es decidir qué se debe hacer. Si hay que diseñar algo en la cartera de pedidos porque afecta a otras cosas, entonces debe agregar una tarea específica para los procesos de diseño y hacerlo antes de la tarea de implementación.

Martin York
fuente
9

Tengo mucho que decir sobre este tema. He visto muchos casos en los que las empresas / equipos / personas dicen que están utilizando un enfoque ágil para el software, pero en realidad, quieren cosechar las recompensas que prometen los métodos ágiles sin cumplir con los principios.

Para que funcione la iteración rápida, debe hacer un desarrollo basado en pruebas (me detuve antes de decir que tiene que hacer TDD de mala gana). En TDD, sus pruebas expresan el diseño y la intención del código (cuando dicen "el código es la documentación", lo que deberían decir es "las pruebas son la documentación"). Al escribir pruebas unitarias que expresan su comprensión de la función en cuestión, está declarando explícitamente lo que cree que debe hacer el código. Luego escribes el código que lo hace. Luego refactoriza ese código para que se adhiera a los principios arquitectónicos buenos "Red-Green-Refactor".

La ejecución de las pruebas unitarias con cada registro (o incluso antes de cada registro) verifica que el nuevo código que ha escrito no rompe la funcionalidad esperada en alguna otra área de la aplicación. Esto proporciona una red de seguridad que le permite cambiar el código con abandono sin control. A medida que aumenta su comprensión de los requisitos disponibles, puede modificar la prueba para reflejar ese nuevo conocimiento. El diseño real reside en las pruebas unitarias. Todo lo demás (incluido el código que no está cubierto) es una mentira.

Aquí hay algunas lecturas recomendadas

Estos son buenos lugares para comenzar a buscar y aprender cómo abordar verdaderamente el desarrollo ágil.

Michael Brown
fuente
44
@Murph: La idea es que la arquitectura es emergente, que debes encontrarla a través de pruebas en lugar de definirla por adelantado.
Martin Wickman
55
@ Martin, más o menos lo veo, pero todavía hay problemas horribles de escala allí. Me siento cómodo con eso hasta cierto nivel, pero más allá de eso ... bueno, supongo que probablemente deberías haber hecho eso (o al menos tener una estructura inicial) antes de llegar al nivel de desarrollo scrum (en el que uno podría esperar el equipo para refinar y evolucionar tanto la arquitectura de alto nivel como la baja).
Murph
2
@Murph: Sí, el bootstrapping es un problema. Debe seleccionar al menos el lenguaje de programación. Los requisitos no funcionales como la escalabilidad y el rendimiento influyen mucho en la arquitectura y deben tenerse en cuenta lo antes posible. Pero aparte de eso, me gusta comenzar de la manera más simple posible, luego agregar de manera incremental e iterativa características de trabajo (yagni) rebanada por rebanada. Concéntrese en refactorizar para mantener limpia la base del código y extraer cosas hasta que aparezca el diseño.
Martin Wickman
1
La razón por la que Scrum es iterativo es que la naturaleza misma del software significa que nunca lo hacemos bien la primera vez. En muchos casos, las partes interesadas no saben lo que realmente quieren hasta que tienen algo frente a ellos. Lo que es mejor: pasar horas creando un diseño para una característica (que tendrá que ser refinada o probablemente desechada cuando la goma golpee el pavimento) y comunicar ese diseño al implementador; o pasar esas horas implementando un primer paso en la función y refinándolo a través de pruebas y refactorización.
Michael Brown
3
Por cierto, nunca te darás cuenta del verdadero valor de TDD hasta que tengas una prueba INESPERADAMENTE en rojo. Ese fue mi gran momento "ajá" con TDD. Al observar la prueba que acaba de ponerse roja, me di cuenta de que sin la prueba, el error habría sido muy difícil de localizar después de que el código estuviera en manos de los evaluadores. Si necesita ver una arquitectura de arriba hacia abajo de alto nivel, existen muchas herramientas que pueden generar diagramas de secuencia y clase a partir de su código. Úselos para obtener un informe de instantánea y deséchelos porque no son la ley.
Michael Brown
2

Scrum es una metodología de gestión de proyectos, no una metodología de desarrollo de software. Scrum se usa generalmente junto con una metodología ágil. Ahí está tu respuesta.

Steven A. Lowe
fuente
44
Scrum es una metodología ágil y se centra en el equipo de desarrollo y los interesados ​​y en obtener entregas iterativas de código de trabajo. La gestión de proyectos de arriba abajo y Scrum son como el petróleo y el agua.
Michael Brown
1
@Mike estuvo de acuerdo, pero siempre sentí que Scrum es la metodología ágil de un gerente de proyecto, mientras que Extreme Programming es la metodología ágil de un desarrollador. Dicho esto, he visto a Scrum aplicado a muchos proyectos distintos al software. Curiosamente, Wikipedia proporciona esta definición de Scrum: Scrum es una metodología iterativa e incremental para la gestión de proyectos que a menudo se ve en el desarrollo de software ágil, un tipo de ingeniería de software: en.wikipedia.org/wiki/Scrum_(development) .
ahsteele
2
Me acabo de dar cuenta de que accidentalmente rechacé tu comentario ... no fue mi intención. No me dejarán eliminar ese voto a menos que hagas una edición menor. Nunca había visto a Scrum descrito como un método de gestión de proyectos antes. Interesante. Dicho esto, creo que esperar que scrum funcione para el software sin aplicar TDD es la razón por la cual fracasan muchos intentos de "hacer ágilmente".
Michael Brown
1

No hay tanto diseño inicial como los requisitos cambian con frecuencia. Por lo tanto, diseñar hasta el nivel de clase suele ser una pérdida de tiempo. Sin embargo, puede valer la pena esbozar decisiones arquitectónicas de alto nivel.

El problema con hacer documentos de diseño pesado es que son obsoletos casi tan pronto como se crean. Entonces, lo que funciona mejor es, por lo general, la documentación de alto nivel que es poco probable que cambie por completo en un corto período de tiempo.

Vadim
fuente
1
No diría que los requisitos cambian constantemente. De hecho, durante un sprint, los requisitos son estáticos y sin cambios. Después de cada sprint, se puede reevaluar la prioridad de los requisitos. Compre su objetivo general no cambiará.
Martin York
@Martin buen punto. Creo que debería reformular que están cambiando de scrum a scrum.
Vadim
1

Scrum es un modelo iterativo e incremental basado en valores ágiles . Eso significa que no tiene una fase de diseño separada. La idea es que debe estar constantemente lidiando con el diseño, así como constantemente con el análisis, la implementación, las pruebas y la integración a lo largo del proyecto.

Necesita un poco de planificación para que esto funcione. Ingrese a la reunión de planificación del sprint , donde el equipo estima las tareas para el sprint que le espera. La mayoría de las personas no se dan cuenta de que esto no es solo una reunión de estimación, sino también un esfuerzo de diseño. Por ejemplo, una tarea podría ser "Agregar código para el nuevo modelo de automóvil". Todavía no puede estimar esto, necesita saber un poco más. Por lo tanto, el equipo discute el diseño y presenta una solución amplia ("¿subclase de automóvil?") Y agrega eso como un recordatorio de la tarea. Raramente necesitas más formalidad que eso. Ahora tiene una idea de cómo resolver el problema. Todavía no tiene todos los detalles y eso está bien, conoce lo suficiente del diseño para poder hacer una estimación cómoda. Sin tener que crear ningún diagrama en absoluto (en este punto).

Para obtener documentación física real , recomiendo crear un diagrama general de sistemas en una pared para que todos lo vean. El resumen solo necesita tener las clases y módulos más importantes incluidos y rara vez debe actualizarse. Además, crear algunos diagramas de estado para las clases más importantes del sistema es muy útil. Espolvorea con algunos diagramas de secuencia seleccionados de casos de uso típicos para que sea más fácil para las personas ver rápidamente cómo están conectadas las cosas. Supongo que puede generar diagramas de jerarquía de clases a partir de su código, por lo que ese problema se resuelve fácilmente.

Tenga en cuenta que todos los diagramas se crean después de la implementación real. Esto se mantiene con el "software de trabajo sobre la documentación completa" y el diseño justo a tiempo.

Y sí, el código legible es definitivamente documentación.

Martin Wickman
fuente
1

La arquitectura general del proyecto y el diseño de alto nivel se realizarían fuera de los equipos scrum cuando los propietarios del proyecto estén creando las historias.

Es necesario que haya un diseño general suficiente escrito de cualquier forma para ayudar a ver la relación entre las historias y las expectativas del cliente.

Parte del diseño necesario para cada historia se haría en la planificación y negociación con el propietario del producto durante la planificación.

La mayor parte del esfuerzo de diseño para una historia se haría en el sprint.

Si la historia no está lo suficientemente definida como para estimar, entonces se podría reservar un cuadro de tiempo en el sprint actual para hacer el trabajo de diseño suficiente para que se pueda crear una historia adecuada para un sprint posterior.

Blake
fuente
0

Tengo entendido que usted hace un diseño de nivel superior con los requisitos iniciales que reúne al comienzo del proyecto. Usted documenta bien este diseño.

Luego, cuando vaya a implementar el requisito, cambiará el diseño de nivel inferior según lo necesite, pero evitará cambiar el diseño de nivel superior.

Bueno, así es como me lo explicaron hace cinco minutos ...

indyK1ng
fuente
0

Hoy existe una división dentro de la comunidad Eclipse entre las herramientas UML tradicionales centradas en MDD en las que el modelo impulsa el código / desarrollo y Omondo que considera que las iteraciones deberían impulsar el proceso de desarrollo y ciertamente no solo el modelo.

Estoy de acuerdo con ellos porque MDD es una mierda, mientras que UML es realmente una excelente manera porque se estandariza para comunicarse con otros miembros del equipo. texto alternativo

UML_GURU
fuente