Al momento de escribir esta respuesta, me di cuenta de que no se trata de pruebas, sino de documentación. Primero debes leer el manifiesto ágil :
[Valoramos] el software de trabajo sobre la documentación completa
Por lo tanto, debe hacer que sus especificaciones sean ejecutables, es decir, escribirlas como un conjunto de pruebas totalmente automatizado.
¿Es una buena idea escribir especificaciones basadas en historias?
Sí, en mi opinión. Se llama "desarrollo impulsado por el comportamiento" o "especificación por ejemplo". En ruby hay una gran herramienta de pepino que ayuda mucho.
El problema ahora es que debido a que hay tantas historias, no está claro de inmediato para ninguna parte del sistema qué historias se relacionan con él.
¿Por qué quieres que quede claro? Quiero decir, ¿realmente necesitas una matriz de trazabilidad de "prueba / código"? La ventaja de escribir pruebas como especificación es que no necesita una trazabilidad separada de "requisitos / pruebas", porque las pruebas se convierten en requisitos. A los fines de las pruebas de integración, debe tratar su software como un todo, no como partes separadas.
Es posible que necesite una herramienta de cobertura para ver si hay módulos "muertos", partes de su sistema no cubiertas por sus pruebas de especificación. Pero realmente no debería importarle a qué especificación corresponde este código en particular. Debería ser al revés: a partir de una especificación particular, debe saber qué parte del sistema le corresponde. No debe preocuparse por alguna duplicación en sus especificaciones. Y si aplica un principio DRY a su código, habría docenas de especificaciones ejecutando el mismo código.
Funciona en el momento de los desarrolladores, cada sprint los desarrolladores solo obtienen una especificación que describe lo que necesitan hacer y los cambios que deben hacer. Pero en términos de mantener esta lista de historias y para las pruebas, está comenzando a tener errores de seguimiento realmente duros y, en general, solo mantiene las especificaciones, porque una pieza de funcionalidad en la pantalla podría haberse documentado en varios lugares diferentes debido a que es dividido por historia.
No es raro que cientos de pruebas de integración se rompan con un pequeño cambio en un módulo crítico. Ahí es donde entran las pruebas unitarias.
Debe estructurar sus pruebas como tales para que pueda saber si una prueba en particular cubre un requisito de alto nivel, o solo un detalle sutil del mismo. Si es lo último, debe separar esta prueba de su conjunto de pruebas de integración. El propósito de las pruebas unitarias es localizar errores. De modo que si introduce un error, habrá una y solo una falla de prueba.
¿Hemos escrito las historias de manera incorrecta?
Creo que solo necesita organizar sus historias en épicas, ya sea por usuario, por ejemplo, "Cliente", "Asistente" o por funciones / pantallas / flujos de trabajo ("Compra", "Reembolso").
Y nuevamente, las pruebas de especificación no son un reemplazo de las pruebas unitarias. Lee mas