Soy propietario de un producto en un equipo ágil. Cuando hago pruebas de aceptación de pedidos, generalmente tomo nota para probar algunos casos extremos. No es raro que descubra algo y luego lo devuelvo a los desarrolladores. Estoy rechazando uno de los desarrolladores cuando rechazo sus historias. Él dice que es injusto ya que no especifico los casos extremos y cómo el programa debe responder en los criterios de aceptación, ya que tiende a codificar solo lo que describo en la historia. Lo he alentado a que me pregunte mientras se topa con cualquier caso de borde mientras codifica, pero piensa que no es su trabajo pensar en los casos de borde, es mío y debería hacer nuevas historias para el próximo sprint.
En mi defensa, no conozco su diseño para la historia hasta después de que la implementa, por lo que es difícil iterar a través de todas las posibilidades (¿la configuración estará en un DB o archivo de propiedades?). Por simplicidad, digamos que tenemos una historia para agregar división a una aplicación de calculadora. En el mundo SCRUM ideal, ¿me incumbiría agregar un "escenario de división de manejar por cero" a los criterios de aceptación o debería estar trabajando en esos casos a medida que se desarrolla para que la aplicación no implosione en 5/0? Para ser claros, en este caso no aceptaría si la aplicación se bloqueó con fuerza en 5/0, pero pasaría si registra, imprime DIV0 o cualquier otra forma de manejar el error ... siempre y cuando no No te estrelles.
Respuestas:
Creo que la respuesta es que ambos deberían estar pensando en su propio conjunto de casos extremos. Él como el desarrollador debe manejar casos extremos que son específicos de los datos, como la aplicación se bloquea por cualquier entrada del usuario, 5/0 ciertamente cae en esta parte del espectro. El desarrollador debe preguntarle sobre lo que cree que sería un mensaje de error apropiado cuando la entrada dada como parte de la interacción del usuario conduce a algo no válido.
Su porción del espectro es el lado comercial de las cosas. ¿Cómo debe comportarse la calculadora si la cuenta del usuario no puede usar el botón dividir? ¿Cómo debería comportarse cuando la cuenta puede usar la operación Mod pero no tiene acceso a la función de división?
El mensaje importante que creo que debe transmitir, y para que todos los miembros del equipo lo acepten, es que todos están en el mismo equipo. Si el producto no está completo, el producto no está completo y el equipo tiene la culpa, no cualquier miembro dado.
fuente
El equipo necesita trabajar juntos en lugar de tener un tipo de actitud / mantra "No es mi trabajo, no es mi responsabilidad".
Los criterios de aceptación se presentan en forma de:
Por lo general, la aceptación comercial suele responder la pregunta:
La función tendrá una serie de requisitos orientados a los negocios, por ejemplo, si presiono este botón, espero que ocurra esta acción. Enumerará los escenarios comerciales esperados y el comportamiento esperado, pero no cubrirá todos los casos posibles.
Se espera que los requisitos comerciales se definan antes de una iteración para que el aseguramiento de la calidad pueda desarrollar cualquier requisito técnico sobre los no comerciales. El aseguramiento de la calidad debe desarrollar casos destructivos, así como casos extremos, según sea necesario.
Ambos conjuntos de requisitos deben revisarse antes de comenzar cualquier trabajo de historia para que pueda producirse una estimación formal y un compromiso para la unidad de trabajo. Una vez hecho esto, se puede trabajar en la función / historias. En este punto, todos tienen claro lo que se debe entregar tanto desde el punto de vista comercial como técnico.
La historia llega a la aceptación final una vez que los miembros del equipo de negocios y garantía de calidad firman la historia. Esto debería suceder durante la iteración tanto para la aceptación comercial como para la aceptación del control de calidad. Esta es la definición de hecho (DoD) que indica que se puede comenzar un trabajo de historia adicional.
Cualquier hallazgo nuevo puede registrarse como defectos o picos de historia adicionales. En un mundo perfecto, esto nunca sucedería, pero en realidad generalmente hay una cierta cantidad de "descubrimiento" que ocurre cuando se trabaja en una característica / historia. Esto es natural
El equipo debe trabajar en conjunto (empresa, control de calidad, desarrollador) para resolver cualquier tipo de requisitos de descubrimiento nebuloso. Si esto es ágil, todos deberían estar sentados en la misma mesa para fomentar la comunicación y la resolución rápida de cualquier pregunta que pueda surgir. Debería ser algo como esto:
QA:
DEV:
NEGOCIO:
DEV:
O si es mucho trabajo, se agrega una nueva historia a la cartera de pedidos. El equipo aún puede aceptar la historia original, ya que cumple con todos los requisitos originales, y luego retomar la historia de la espiga en la próxima iteración.
fuente
Escribir software que se comporte de manera robusta frente a una entrada incorrecta o ambigua es una parte esencial del trabajo de un desarrollador de software.
Si sus desarrolladores no lo ven de esa manera, incluya requisitos no funcionales adicionales en la especificación de requisitos que establezca este requisito explícitamente, y proporcione a sus desarrolladores un ejemplo de su proceso de prueba para que puedan aplicar ese proceso ellos mismos antes de enviar su versión final. Código para revisión.
Las pruebas de aceptación deben ser una parte vital de cualquier documento de requisitos de todos modos. Si un requisito no establece también sus criterios de aceptación, en realidad no es un requisito; Es un deseo.
fuente
Lo que ha sucedido aquí es que has descubierto valor . No se pensó el valor de entrada cuando se escribió la historia (y los criterios de aceptación) o cuando se escribió el código. Si no es parte del criterio de aceptación, realmente no tienes una base para rechazar la historia.
Lo que haríamos en mi equipo es:
El beneficio aquí es que se ve obligado a considerar si corregir o no este error es la siguiente cosa más importante que hacer. Puede o no ser lo suficientemente importante como para solucionarlo, pero es importante que se considere su valor.
Por supuesto, aún necesita encontrar una manera de alentar a los desarrolladores (y a usted mismo) a explorar estos casos límite por adelantado. Si su equipo de desarrollo no está pasando el tiempo analizando historias, aliéntelos a tener una sesión de planificación detallada antes de comenzar a trabajar en ellos.
fuente
Algunas observaciones
No conozco su cultura o proceso de trabajo, pero para mí rechazar una historia es un paso severo. Si yo fuera el desarrollador, también generaría un retroceso en eso, ya que es una acción grabada que se refleja mal en mí y en el equipo.
Es injusto de su parte esperar que conozca todos los casos límite. Pero al mismo tiempo, es injusto que esperes eso de él. Cada cambio tiene riesgo y, a medida que se descubren problemas, todos deben trabajar juntos como un equipo para abordarlos.
No deberías tener que conocer el diseño. Puede ser útil conocer el diseño para hacer conjeturas educadas iniciales sobre qué historias son más fáciles o más difíciles para la gestión de la cartera de pedidos. Pero evite atrapar al desarrollador en su diseño cuando escriba historias. Es muy divertido cuando eres simplemente un teclado activado por voz para el PO.
Parece que ustedes deberían trabajar en la mejora de procesos y hacer algo de trabajo en equipo. Algunas cosas que podría sugerir para el proceso:
fuente
Los requisitos deben ser claros y concisos. Si no lo son, entonces sucede exactamente lo que te sucedió. Es su culpa, y lo peor que puede hacer al especificar los requisitos es asumir las cosas.
Usted ejemplo específico, sobre la división por cero. Si no especificó que desea registrar el error, no se queje si el desarrollador imprime 100 como resultado.
Pero en tales casos, simplemente llenaría los vacíos faltantes y los pasaría al desarrollador. Después de todo, ocurren errores en los requisitos.
fuente