Pasar de una historia de usuario a código mientras se usa TDD (scrum)

8

Me estoy metiendo en scrum y TDD y creo que tengo cierta confusión sobre la que me gustaría recibir sus comentarios. Supongamos que tengo una historia de usuario en mi cartera de pedidos, para poder comenzar a desarrollarla como parte de TDD. Necesito tener requisitos, ¿hasta ahora?

¿Es cierto decir que el gerente de producto y el control de calidad deberían ser responsables de tomar la historia del usuario y desglosarla en pruebas de aceptación?

Creo que lo anterior es cierto ya que las pruebas de aceptación deben ser formales, para que puedan usarse como pruebas, pero también legibles por humanos para que el producto pueda aprobar que son los requisitos, ¿verdad?

¿Es también cierto que luego tomo estas pruebas de aceptación y las uso como mis requisitos, es decir, son un conjunto de casos de uso que implemento (a través de TDD)? Espero no estar haciendo un gran desastre, pero ese es el flujo de corriente que tengo en mente en este momento.

Actualización
Creo que mis intenciones iniciales no estaban claras, así que intentaré reformular. Quiero saber más detalles sobre el flujo de scrum de convertir una historia de usuario en código mientras uso TDD.
El punto de partida es obvio, un usuario muestra una necesidad (o el representante del usuario como producto), que es una breve descripción de 1-2 líneas en el formato conocido y que se agrega a la cartera de pedidos del producto.
Cuando hay una reunión de planificación de primavera, las historias de usuarios se toman del trabajo atrasado y se asignan a los desarrolladores.
Para que un desarrollador escriba código, necesita requisitos (especialmente en TDD, ya que los requisitos son de los que se derivan las pruebas).
¿Cuándo, por quién y con qué formato se compilan los requisitos?
Lo que tenía en mente era que el producto y el control de calidad definen los requisitos a través de pruebas de aceptación (estoy pensando en usar automáticamente FitNesse o algo así, pero creo que ese no es el núcleo) que ayudan a cumplir 2 propósitos al mismo tiempo:

  1. Definen "Hecho" correctamente.
  2. Le dan a un desarrollador algo de lo que derivar pruebas.

No estaba seguro de cuándo se escribieron (antes del sprint que se seleccionaron, entonces eso podría ser un desperdicio ya que llegará información adicional o la historia no se elegirá, durante la iteración, entonces el desarrollador podría quedarse atrapado esperándolos. ..)

Ittai
fuente
1
Escribe pruebas a medida que codifica, las pruebas de aceptación no son las pruebas que escribe durante TDD.
CaffGeek
Lo sé, pero escribo TDD contra algunos requisitos, ¿verdad? ¿en qué forma deberían entrar?
Ittai
44
Le ruego que difiera: las pruebas de aceptación ciertamente pueden impulsar su desarrollo. Puede definir una serie de pruebas (unidad, integración, sistema y aceptación) para indicar cuándo una aplicación funciona y si es aceptable. Luego puede codificar la aplicación hasta que pase las pruebas. Eso ciertamente es un desarrollo basado en pruebas.
Matthew Flynn el
1
@Ittai: Creo que lo que Chad está tratando de decir es que TDD comienza con pruebas unitarias, que el desarrollador se define a sí mismo. A medida que el desarrollador traduce el caso de uso / requisitos en un diseño de código de nivel inferior, está trabajando en una clase a la vez y escribiendo pruebas unitarias para esa clase. En ese nivel, es "ad hoc" porque el desarrollador está creando las pruebas según sea necesario para demostrar la validez del código.
Sam Goldberg el
1
"¿de dónde saco los requisitos"? Cuentos. No está claro por qué esto no es suficiente como respuesta. ¿Puedes explicar por qué las historias son mágicamente diferentes de estos "requisitos" que quieres ver?
S.Lott

Respuestas:

11

¿Es cierto decir que el gerente de producto y el control de calidad deberían ser responsables de tomar la historia del usuario y desglosarla en pruebas de aceptación?

Principalmente. Es posible que en realidad no escriban la prueba de aceptación real. Pueden aprobar algo que usted escribió. Pero aprueban las pruebas de aceptación. Si.

las pruebas de aceptación deben ser formales, para que puedan usarse como pruebas, pero también legibles por humanos para que el producto pueda aprobar que son los requisitos, ¿verdad?

Irrelevante. Pueden formalizarse como pruebas automatizadas. O pueden ser informales y puede ser su trabajo crear pruebas automatizadas a partir de los criterios de prueba de aceptación informal.

También. Los "requisitos" son la historia del usuario. No hay necesidad real de crear otra versión de la historia llamada "requisitos". A algunas personas les gusta elaborar la historia antes de codificar. Puede llamar a estos requisitos, pero "diseño" es una palabra mejor. "Elaboración" es la mejor palabra.

¿También es cierto que luego tomo estas pruebas de aceptación y las uso como mis requisitos, es decir, son un conjunto de casos de uso que implemento (a través de TDD)?

Si. La historia lleva a pruebas de aceptación. La historia es un comportamiento obligatorio (es decir, "requisitos"). La historia conduce a pruebas que impulsan el diseño y desarrollo de software.

ese es el flujo de corriente que tengo en mente en este momento.

Realmente no hay mucho "flujo" para esto.

Historia -> pruebas de aceptación.

Historia -> elaboración ("diseño", "requisitos") -> pruebas unitarias -> código.

Historia -> El usuario puede hacer algo de valor.

Historia -> Puntos de historia -> cálculo de velocidad.

Tenga en cuenta el patrón. La historia conduce en gran medida todo.


¿Cuándo, por quién y con qué formato se compilan los requisitos?

Primero. Definir "requisitos". ¿En qué se diferencian de la historia misma?

Lo que tenía en mente era que el producto y el control de calidad definen los requisitos mediante pruebas de aceptación.

No Usualmente.

durante la iteración, entonces el desarrollador podría quedarse atascado esperándolos.

Incorrecto. El desarrollador puede (y a menudo lo hace) ayudar a escribir esto. Ese es el punto de "desarrollo": elaborar la historia a un "hecho" bien definido.

De nuevo. Cuando tenga dudas o preguntas, debe leer el Manifiesto Ágil. El Manifiesto es bastante claro: los desarrolladores deben hablar con los propietarios de los productos, los usuarios, el control de calidad y todos los demás interesados. La interacción es en realidad lo más importante que puede suceder.

S.Lott
fuente
Gracias, ¿Puedes elaborar,;), un poco más sobre la etapa Story-> elaboration? Tenía la impresión de que una historia es más bien la forma de: "Yo, como usuario, quiero iniciar sesión en el sitio web para comprar el producto" Esto no incluye suficientes detalles para iniciar TDDing ya que necesito más detalles , más casos de uso. Más caminos, felices e infelices.
Ittai
"Necesito más detalles, más casos de uso. Más caminos, felices e infelices". Bueno. No entiendo qué más necesitas saber sobre la elaboración. Usted proporcionó una descripción completa de lo que debe suceder. ¿Que más quieres saber? ¿Cómo pedir información?
S.Lott
Más o menos, lo que estoy tratando de entender es si al comienzo del sprint solo hay una breve historia de usuario y luego el desarrollador necesita "cavar" la información del producto. Porque tenía la impresión (quizás por error) de que cuando comienza el sprint, el desarrollador tiene un conjunto de requisitos que no se cumplen pero que son del 80% (se derivan de una historia de usuario). Estoy tratando de reunir un flujo. ¿Cuándo va la transformación de una historia de usuario de una línea (de 2 líneas) a un conjunto detallado de especificaciones?
Ittai
1. No hay "flujo"; sin "pasos". Es más simple que eso. Escribe pruebas y código. 2. La fuente de información depende de su organización. La mayoría de las organizaciones entregan historias a los desarrolladores para elaborar. Algunos intentarán hacer parte de la elaboración durante la preparación al comienzo del sprint. 3. Lee el Manifiesto Ágil. agilemanifesto.org . Se espera que interactúes con el propietario del producto. Profundamente. Frecuentemente. El punto es que usted reúna los datos que necesita para poder construir código para respaldar la historia.
S.Lott
1
"Cuándo la transformación de una historia de usuario de una línea (de 2 líneas) va a un conjunto detallado de especificaciones". Constantemente. Si quieres hacer diseño, siéntete libre de hacerlo. Algunas personas escriben su diseño. Algunos no lo hacen. Si te gusta la idea de escribir muchas especificaciones, está bien. No te excedas. El punto es escribir pruebas y código. Si un diseño te ayuda a concentrarte, siéntete libre. Muchas personas encuentran que escribir las pruebas les ayuda a concentrarse. Si encuentra la necesidad de un documento de especificaciones grande y complejo, su historia es demasiado compleja.
S.Lott
2

Le responderé desde la perspectiva de Extreme Programming (XP) con respecto a las pruebas de aceptación.

Cuando me metí por primera vez (y leí los libros), leí que realmente es el rol del desarrollador trabajar con el cliente / usuario para desarrollar / documentar las pruebas de aceptación. Uno de los objetivos de XP es aumentar la comunicación directa entre el usuario / cliente y el desarrollador. Esto suele ser ideal, ya que reduce la posibilidad de errores de codificación debido a la falta de comunicación de los requisitos.

He estado haciendo TDD durante aproximadamente 8 años y he seguido el enfoque anterior. Creo que ha mejorado la velocidad de desarrollo y la satisfacción con el sistema porque los clientes / usuarios ven cómo influyen directamente en el desarrollo de la aplicación.

La principal dificultad con la que me he encontrado (con clientes más pequeños) es que es muy difícil lograr que participen en la especificación de pruebas de aceptación. (Por lo general, tengo que hacerlo por ellos y enviárselos para que los revisen). Los clientes más grandes con los que he trabajado suelen tener esta mentalidad, por lo que estaban preparados para proporcionar pruebas de aceptación específicas.

Por lo que he leído sobre scrum, no estoy seguro de que defina qué rol es responsable de definir / escribir las pruebas de aceptación. Supongo que puede variar de un equipo a otro.

Mi consejo es que, como desarrollador, debe participar tanto como sea posible en el proceso de definición de la prueba. Y el objetivo es obtener los resultados del sprint frente a los usuarios lo más rápido posible, para que puedan contarle todo lo que olvidaron (o lo que le dijeron incorrectamente) lo más rápido posible.

Sam Goldberg
fuente
1

¡La historia de usuario no es "Como usuario quiero XXX para que YYY" ! La historia del usuario es prometedora para futuras comunicaciones con PO. Eso resuelve tu problema con más detalles. Debe comunicarse con PO durante el sprint para obtener la información que necesita.

La historia del usuario también tiene más características que la frase corta que promete la comunicación. Parte necesaria de la historia del usuario son criterios de aceptación. Los criterios de aceptación deben conocerse antes de comprometerse con la historia del usuario (deben conocerse antes de estimar la historia del usuario). Los criterios de aceptación son la entrada para las pruebas de aceptación = las pruebas de aceptación deben probar los criterios de aceptación.

Entonces, cuando comience a trabajar en la historia del usuario con el enfoque TDD, usted (no el control de calidad) primero debe crear una prueba de aceptación automática basada en los criterios de aceptación para obtener una prueba fallida. Continuará implementando el código necesario utilizando TDD antes de la aprobación de la prueba de aceptación. Continuará con la próxima prueba de aceptación. Escribí sobre eso también en otra pregunta .

Ladislav Mrnka
fuente