Como siempre, primero Depende de lo que creas que significa BDD, tu definición para que estemos seguros de que todos están en la misma página antes de hablar de BDD contigo. Así que dinos qué piensas que es la BDD … entonces podemos responder.
Pero…
Primero lea esto a continuación.
Alejarse de las herramientas
- ¿Qué programas deberíamos hacer después de completar Duolingo?
- Cómo aprender algo nuevo y evitar olvidarte.
- Cómo encontrar la verdad por mí mismo cuando estoy aprendiendo constantemente nuevos temas sobre una base diaria.
- Cómo aprender acerca de los softwares de computadora modernos.
- ¿Cuál es la mejor manera de aprender marketing?
y
¿Cuál es la diferencia entre escribir casos de prueba para BDD y TDD?
luego esto
Algunos dicen que “BDD es solo un estilo de hacer TDD”. Sin embargo, creo que esto es pintar un pincel demasiado ancho para decir que eso es todo. Esa línea no te dice nada, y puede interpretarse de manera diferente según la persona a la que le preguntes o lo que realmente significa que significa. Claro, los nombres de las pruebas sonarán y estarán más directamente relacionados con la función que está creando, pero es mucho más que eso.
Así que esto es lo que pienso para las aplicaciones con una interfaz de usuario :
Digo que sí, porque lo obliga a comenzar afuera cuando se realiza una prueba de manejo de una aplicación guiada por las características . Pero esa es solo la parte técnica de BDD . BDD incluye una parte más grande que es la comunicación y el descubrimiento de características junto con la empresa, luego las pruebas de aceptación reducen las pruebas TDD de nivel inferior.
BDD le obliga a codificar solo lo que necesita guiado por una característica en la que está trabajando y sus escenarios subyacentes ( si escribe escenarios), tarjeta o lo que sea que use. Lo guía para que sepa dónde comenzar y cuándo termina de escribir el código para esa función. TDD es un subconjunto de BDD. De todos modos, estará haciendo TDD, pero BDD lo obliga a pensar qué comportamiento existe y cuándo caer en las pruebas unitarias de nivel inferior de TDD para probar ese comportamiento y su código de producción (SUT).
La mayoría de las personas en estos días se centran en un enfoque orientado desde afuera hacia adentro guiado por la comunicación y las características (y los escenarios subyacentes de cada característica … requisitos de negocio más detallados que completan la característica).
Me gusta el comentario de Melvin Pérez-Cedano “BDD es TDD bien hecho”. Eso realmente lo resume.
La comunidad basada en pruebas ya no piensa “voy a comenzar con las pruebas TDD”. Lo que significa que ya no comienza con la idea de que “voy a comenzar con una prueba”, creo que tal vez quiera comenzar pero que realmente no sé y que el enfoque de mis pruebas sea solo sobre la creación de clases y métodos “. Esta ya no es la forma aceptable de probar el código de la unidad, ya que podría estar creando las pruebas incorrectas, creando demasiadas pruebas y creando pruebas frágiles cuando lo use como la forma de probar sus aplicaciones. BDD asegura que las características conducen la creación de pruebas.
En estos días, la comunidad basada en pruebas piensa: “¿En qué característica estoy trabajando y cuáles son los escenarios a su alrededor?”. Entonces … Bueno, lo tengo como punto de partida (después de la parte de comunicación), ahora manejamos nuestro código según sus escenarios como guía, para que sepamos dónde empezar y cuando terminemos “. Una vez has implementado toda la funcionalidad para cada escenario para esa característica, ¡entonces ya has terminado!
Puede o no comenzar con las pruebas de aceptación (antes de pasar a las pruebas unitarias de nivel inferior). Y puede o no puede automatizarlos, pero en su mayor parte, creo que la mayoría de los TDD manejan primero las pruebas de aceptación y luego las pruebas de comportamiento de nivel inferior. Algunos no terminan automatizando esas pruebas de aceptación y simplemente las usan para forzar el flujo y los pensamientos y para eliminar conceptos iniciales. Y algunos piensan que automatizarlos es el camino a seguir … solo depende.
Cuando digo comportamiento, me refiero a la lógica de negocios (y posiblemente al estado, pero no sé si eso se considera “comportamiento” ). Tan pronto como comienza a ver el código que escribe que es impulsado primero por las pruebas de aceptación, se vuelve más complejo que para introducir el comportamiento (lógica de negocios), ese es el momento en que se despliega y crea pruebas unitarias de nivel inferior.
Para tener una mejor idea de esto recomiendo mirar:
Codificadores limpios – Construye una aplicación con Corey Haines
Codificadores limpios – Serie BDD con Uncle Bob
Ahora puedo estar un poco fuera de lo que digo arriba, y aquellos que tienen más experiencia que yo y lo han estado haciendo durante muchos más años de los que puedo tener algunas correcciones menores para sugerir en mis comentarios anteriores (si lo hace por todos los medios, por favor, agregue y comente bajo mis respuestas compañeros compañeros de TDD, pero creo que tengo la mayor parte.
Ahora me has dado ganas de exponer esta conversación que tuve con JB Rainsberger. Lo tenía ahí fuera, pero decidí bajarlo, pero me doy cuenta de que esto también podría ayudar a la gente a volver a ponerlo en marcha ( supongo que me divierto un poco al principio, así que sáltate eso: P).
JB también es una excelente fuente y te pondrá en orden como lo hizo abajo conmigo;). También tiene un buen entrenamiento.
Discusión de JB Rainsberger BDD – REST API
¿Qué pasa con un servicio web (API) ?
Entonces, para una API, si la empresa no está dispuesta a participar en la parte de comunicación de BDD y usted no está realmente “explorando conceptos”, no escribe pruebas de aceptación. BB Rainsberger Creo que no creo que el BDD sea adecuado para crear una API (vea mi conversación con él más arriba) … y JB, si lee esto, corríjame si me equivoco.
Sin embargo , creo que personas como Bob Martin, el “tío Bob” y los consultores de 8th Light, por ejemplo, realizan pruebas de aceptación incluso para un servicio web (corríjame si me equivoco en la UB). Por ejemplo, podrían usar Fitness para eliminar el enfoque de entrada y salida para probar la creación de sus contratos API y el código subyacente.
Pero si no va por el camino de crear pruebas de aceptación para la API, realmente solo IMO toma la historia y sus escenarios, y luego comienza a crear sus pruebas de nivel inferior pero en el estilo de BDD … las pruebas comienzan y terminan alrededor de los escenarios ( requisitos).
El primer escenario de una característica de esa API debería llevarlo a crear un código inicial de repetición (archivos, rutas, etc.). Se llama el “caso degenerado” y en realidad es una prueba de tiro, pero su propósito es asegurarse de que realmente está empezando en pasos de bebé (lo más simple posible) y lo obliga a conducir creando un código inicial, archivos, etc. para esa característica. Luego, los escenarios subsiguientes para esa característica deberían obligarlo a probar las variaciones en los requisitos. (Mira el video de Corey Haines arriba)
Tendría curiosidad por saber qué hacen los Pivots … espero que alguien para Pivotal Labs también responda a esto.