¿Quién debería idealmente escribir la función (casos de prueba automatizados) en el desarrollo ágil: Tester o Developer?

Tengo dos reglas:

  1. Ninguna característica puede considerarse “terminada” hasta que haya pruebas automatizadas funcionales. La capacidad de ingeniería debe satisfacerlo. Las pruebas deben expresarse como criterios de aceptación y ejecutarse con una integración continua en cada confirmación. Las pruebas nunca se pueden enviar a otro equipo, en otra iteración de trabajo.
  2. Las pruebas funcionales no deben ser propiedad al 100% de los evaluadores. Las pruebas funcionales no deben ser propiedad al 100% de los desarrolladores. Los evaluadores aportan una mentalidad de “lo que se debe probar”. Los desarrolladores aportan una mentalidad de “cómo debemos implementar esta prueba”. Esa escala puede inclinarse hacia cualquier lado, dependiendo de cuán técnicos (y cercanos) sean los probadores, y cuán fuertes sean los mentes de prueba de los desarrolladores.

Creo en Test Driven Development, donde escribe los casos de prueba de antemano, incluso antes de comenzar cualquier desarrollo, deja que la prueba falle en un código repetitivo y luego comienza a desarrollarse para hacer que pasen esos casos de prueba.

Esta es una excelente manera de organizar los requisitos de software y el proceso de desarrollo. Al principio puede ser un poco doloroso, pero escribir los casos de prueba para su marco de prueba le dará una imagen clara de las especificaciones funcionales del producto. Todo esto lo hará el Desarrollador, por supuesto, de esta manera no hay necesidad de una comunicación adicional entre el probador y el desarrollador que mantenga el ciclo pequeño.