Las historias de usuario son porciones del comportamiento deseado de un sistema de software. Son muy utilizadas dentro del marco de desarrollo Ágil, y sirven para dividir una gran cantidad de funcionalidad en partes más pequeñas para facilitar la planificación. Este concepto también se lo puede llamar "característica", pero el término "historia" o "historia de usuario" se volvió muy popular dentro del marco Ágil.
Kent Beck fue quien introdujo este término como parte de Extreme Programming para fomentar una manera informal y conversacional para la toma de requerimientos (en lugar de especificaciones largas escritas). La esencia de una historia puede escribirse en una única tarjeta (Kent y Martin Fowler las prefieren de un tamaño de 3x5 pulgadas). De forma deliberada las historias no son detalladas hasta que están lista para ser desarrolladas; sólo se necesita el detalle necesario para permitir la priorización con otras historias.
Bil Wake inventó el acrónimo INVEST para describir las características de una buena historia:
- Independiente: las historias pueden completarse en cualquier orden.
- Negociable: los detalles de la historia son co-creados por los programadores y los clientes durante el desarrollo.
- Valiosa: la funcionalidad es valiosa para los clientes o los usuarios del software.
- Estimable: los pgoramadores pueden encontrar una estimación razonable para construir la historia.
- Pequeña: las historias deberían construirse en poco tiempo, generalmente alrededor de "días/persona". Se tienen que poder construir muchas historias en una iteración.
- Testeable: se debe poder escribir pruebas que verifiquen que el software de la historia funcione adecuadamente.
Una forma habitual de escribir las historias es "Como <rol>.... Quiero <característica>... Para <valor>". La parte del "Como..." se refiere a la persona que quiere la historia. La parte "Quiero..." describe la funcionalidad de la historia, y la parte "Para..." describe el motivo por el cual se pide esa funcionalidad.
Mike Cohn escribió el libro User Stories Applied: For Agile Software Development que contiene lo que hoy es un estándar para escribir historias de usuario.
Traducido de User Stories, por Martin Fowler.