En mi software, muchos servicios esperan que el usuario sea autenticado antes de ejecutarse.
En escenarios positivos, tengo este tipo de contexto:
Given I am authenticated
When I create meeting X
Then meeting X is well created
Estoy acostumbrado a escribir un escenario simétrico como este para cada uno de mis servicios que se ocupa del requisito de autenticación del usuario:
Given I am not authenticated //note the 'not' word
When I create meeting X
Then meeting X is not created
And an authentication error should be thrown
Obliga al desarrollador a manejar la verificación de la autenticación del usuario en la parte superior de la implementación del servicio, para evitar que cualquier "pirata informático" potencial o código malicioso llame a la API (en este ejemplo, "creación de la reunión") directamente mientras no esté autenticado.
¿Es una práctica que debo mantener?
¿Tengo razón al considerar este escenario "defensivo" como una regla de negocios real que puedo discutir con el equipo de "Negocios"?
Tenga en cuenta que mis pruebas de aceptación no prueban a través de la parte de GUI, sino solo directamente a través de la parte de casos de uso (servicios/reglas comerciales).
Respuesta corta: sí, está perfectamente bien tener en cuenta los casos negativos.
Estoy acostumbrado a ver esto un poco diferente. Por lo general, una historia de usuario es un paso adelante como:
Como usuario, me gustaría poder agregar una reunión en el calendario para poder realizar un seguimiento de mi agenda para el día"
Entonces tendría ambos como criterios de aceptación en esa historia.
Sin embargo, esta recomendación es más una cuestión de estilo. Me gusta esto porque los agrupa mejor para que los casos comerciales importantes no se pasen por alto. Lo que estás haciendo ciertamente no está mal.
¿Es una práctica que debo mantener?
Quizás. Los casos de prueba negativos, como las condiciones límite, son cosas buenas para probar desde una perspectiva de control de calidad. Sin embargo, desde una perspectiva de ingeniería o gestión de productos, vale la pena preguntarse por qué necesita un escenario limitado como este en lugar de una función más completa o un esquema de escenario. Y desde una perspectiva comercial, los detalles de bajo nivel en las pruebas de aceptación son generalmente un antipatrón.
Por ejemplo, en lugar de tener todo tipo de puntos de entrada extraños como casos de uso separados, una característica más completa podría decir:
Given that a user is not authenticated
When the user performs any action
Then the user is redirected to the login page.
Esto captura el caso de negocio real mejor y más claramente, aunque probablemente desee pasos individuales o un esquema de escenario para probar todos los puntos de entrada posibles y poder informar fallas individuales de manera más efectiva.
El beneficio de este tipo de historia es que captura la lógica del negocio mucho mejor que una historia centrada en la implementación. Por otro lado, una falla dentro de uno de los pasos es mucho menos comunicativa y requiere el conocimiento de los pasos subyacentes para reducir las fallas específicas.
Hay un término medio: los contornos del senario.
El principal problema de expresar solo el dominio comercial sin definir también algún contexto o casos de uso específicos es que no puede determinar con especificidad dónde está fallando un grupo de prueba. Ahí es donde los esquemas de escenarios de Cucumber pueden ayudar.
Por ejemplo:
Scenario Outline: force authentication on all pages
Given an unauthenticated user
When the user connected to the <function> page
Then the user should be redirected to the login page.
Examples:
| function |
| meeting |
| calendar |
| profile |
| launch thermonuclear warheads |
Con este tipo de esquema, el objetivo comercial es claro y también tiene un conjunto de pruebas de alto nivel que pueden pasar o fallar independientemente unas de otras. Los informes de nivel superior son granulares y cohesivos, al tiempo que evitan el tipo de "expansión de prueba" que obtendría al agregar escenarios negativos para cada comportamiento.
La prueba es más una forma de arte que una ciencia, por lo que su kilometraje puede variar. Sin embargo, las pruebas ágiles deben funcionar como un comportamiento de autodocumentación en lugar de detalles de bajo nivel, y los criterios de aceptación deben centrarse más en la lógica comercial o el comportamiento visible del usuario que en los detalles de implementación subyacentes.
TL; DR: Sí, puede mantenerlo de esta manera.
Respuesta larga
Dependiendo de para qué esté utilizando los escenarios o las reglas comerciales , hay varias formas de escribirlos.
Primer caso: el escenario se utiliza para los criterios de aceptación
Historia
Como usuario, quiero crear reuniones, para...
Criterios de aceptación
Primer caso: el escenario se utiliza para pruebas de aceptación / regresión , que son instrucciones fragmentadas para hacer clic en la aplicación. Todas estas pruebas deben pasar después de cada historia (o al menos antes de cada lanzamiento).
Ejemplo incompleto:
camino feliz
sin autenticación
Nota al margen
Recomendaría hacer las pruebas de regresión a través de la GUI por parte de un usuario. Si están bien escritos, pueden implementarse en código y ejecutarse automáticamente.
Como han escrito otros, dar cuenta de los casos negativos es bueno. Sin embargo, la estructura de su caso negativo no lo es, porque contiene una contradicción interna.
El problema es que está describiendo los resultados como si fueran acciones del usuario. Pero en realidad son la acción que toma el software en respuesta a la acción del usuario. Las fallas tienen acciones del usuario, pero el resultado esperado nunca ocurre, porque la falla evita que suceda realmente, por lo que una historia basada en el evento nunca se satisface.
Malo:
Dado que estoy autenticado
Cuando creo la reunión X
Mejor:
Dado que estoy autenticado
Cuando envío una solicitud de "crear reunión"
Esto sigue funcionando a nivel de backend, no se refiere a elementos específicos de la interfaz de usuario, como menús o botones, y cubre la actividad de la red no generada por la interfaz aprobada (cubriendo la preocupación de "pirateo").
Todd A. Jacobs
Todd A. Jacobs