¿Cuáles son las principales diferencias entre TDD y BDD?


El desarrollo basado en pruebas ha estado de moda en la comunidad.NET durante los últimos años. Recientemente, he oído murmuraciones en el ALT.NET comunidad acerca de BDD. ¿Qué es eso? ¿Qué lo hace diferente del TDD?

Author: NotMyself, 2008-08-05

15 answers

Entiendo que BDD es más acerca de especificaciónque pruebas. Está vinculado al Diseño impulsado por el Dominio (¿no te encantan estos acrónimos *DD?).

Está vinculado con una cierta forma de escribir historias de usuario, incluidas las pruebas de alto nivel. Un ejemplo de Tom ten Thij :

Story: User logging in
  As a user
  I want to login with my details
  So that I can get access to the site

Scenario: User uses wrong password

  Given a username 'jdoe'
  And a password 'letmein'

  When the user logs in with username and password

  Then the login form should be shown again

(En su artículo, Tom pasa a ejecutar directamente esta especificación de prueba en Ruby.)

El papa de BDD es Dan North. Usted encontrará una gran introducción en su Introducción del artículo BDD.

Encontrará una comparación de BDD y TDD en este video. También una opinión sobre BDD como "TDD hecho bien" por Jeremy D. Miller

Actualización del 25 de marzo de 2013

El video de arriba ha estado desaparecido por un tiempo. He aquí uno reciente de Llewellyn Falco, BDD vs TDD (explicado) . Encuentro su explicación clara y al grano.

 97
Author: Christian Lescuyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-07 13:04:47

Para mí, la principal diferencia entre BDD y TDD es el enfoque y la redacción. Y las palabras son importantes para comunicar tu intención.

TDD dirige el enfoque en las pruebas. Y dado que en el" viejo mundo de la cascada " las pruebas vienen después de la implementación, entonces esta mentalidad conduce a una comprensión y un comportamiento erróneos.

BDD dirige el enfoque en el comportamiento y la especificación, por lo que las mentes en cascada se distraen. Por lo tanto, el BDD se entiende más fácilmente como práctica de diseño y no como práctica de prueba.

 17
Author: Juha Pohjalainen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-08 18:36:06

Parece que hay dos tipos de TDC.

El primero es el estilo original que Dan North discute y que causó la creación de los marcos de estilo xBehave. Para mí, este estilo es principalmente aplicable para pruebas de aceptación o especificaciones contra objetos de dominio.

El segundo estilo es lo que Dave Astels popularizó y que, para mí, es una nueva forma de TDD que tiene algunos beneficios serios. Se centra en el comportamiento en lugar de pruebas y también pequeñas clases de prueba, tratando de obtener hasta el punto en que básicamente tiene una línea por método de especificación (prueba). Este estilo se adapta a todos los niveles de pruebas y se puede hacer utilizando cualquier marco de pruebas unitarias existente, aunque los marcos más nuevos (estilo xSpec) ayudan a enfocar uno el comportamiento en lugar de las pruebas.

También hay un grupo BDD que puede ser útil:

Http://groups.google.com/group/behaviordrivendevelopment /

 13
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-10 16:00:43

El desarrollo basado en pruebas es una metodología de desarrollo de software basada en pruebas, lo que significa que requiere escribir código de prueba antes de escribir el código real que se probará. En palabras de Kent Beck:

El estilo aquí es escribir unas pocas líneas de código, luego una prueba que debe ejecutar, o incluso mejor, para escribir una prueba que no se ejecutará, a continuación, escribir el código que lo hará funcionar.

Después de averiguar cómo escribir un pequeño fragmento de código, ahora, en lugar de solo codificando, queremos obtener retroalimentación inmediata y practicar " codificar un poco, probar un poco, codificar un poco, probar un poco."Así que inmediatamente escribimos una prueba para ello.

Así que TDD es una metodología técnica de bajo nivel que los programadores utilizan para producir código limpio que funciona.

El desarrollo basado en el comportamiento es una metodología que se creó basada en TDD, pero que evolucionó hasta convertirse en un proceso que no solo concierne a los programadores y probadores, sino que se ocupa de todo el equipo y de todos partes interesadas importantes, técnicas y no técnicas. BDD comenzó con unas pocas preguntas simples que TDD no responde bien: ¿cuántas pruebas debo escribir? ¿Qué debería probar en realidad y qué no debería? ¿Cuáles de las pruebas que escribo serán de hecho importantes para el negocio o para la calidad general del producto, y cuáles son solo mi sobreingeniería?

Como puede ver, tales preguntas requieren la colaboración entre la tecnología y el negocio. Partes interesadas del negocio y expertos en dominios a menudo puede decirle a los ingenieros qué tipo de pruebas suenan como que serían útiles, pero solo si las pruebas son pruebas de alto nivel que tratan aspectos importantes del negocio. BDD llama "ejemplos" a estas pruebas de tipo empresarial, como "dime un ejemplo de cómo esta función debe comportarse correctamente", y reserva la palabra "prueba" para comprobaciones técnicas de bajo nivel, como la validación de datos o las integraciones de API de prueba. La parte importante es que mientras las pruebas solo pueden ser creadas por programadores y probadores, los ejemplos pueden ser recopilados y analizados por todo el equipo de entrega: diseñadores, analistas, etc.

En una oración, una de las mejores definiciones de BDD que he encontrado hasta ahora es que BDD se trata de "tener conversaciones con expertos en dominios y usar ejemplos para obtener una comprensión compartida del comportamiento deseado y descubrir incógnitas."La parte del descubrimiento es muy importante. A medida que el equipo de entrega recopila más ejemplos, comienzan a comprender el dominio del negocio cada vez más y, por lo tanto, reducen su incertidumbre sobre algunos aspectos del producto con el que tienen que lidiar. A medida que disminuye la incertidumbre, aumenta la creatividad y la autonomía del equipo de entrega. Por ejemplo, ahora pueden comenzar a sugerir sus propios ejemplos que los usuarios de negocios no creían que fueran posibles debido a su falta de experiencia en tecnología.

Ahora, tener conversaciones con los expertos en negocios y dominios suena genial, pero todos sabemos cómo a menudo termina en la práctica. Yo empecé mi viaje con la tecnología como programador. Como programadores, se nos enseña a escribir código -algoritmos, patrones de diseño, abstracciones. O, si usted es un diseñador, se le enseña a diseño -organizar la información y crear interfaces hermosas. Pero cuando conseguimos nuestros trabajos de nivel de entrada, nuestros empleadores esperan que " entreguemos valor a los clientes."Y entre esos clientes puede estar, por ejemplo... banco. Pero yo podría saber casi nada acerca de la banca-excepto cómo disminuir de manera eficiente mi saldo. Así que tendría que traducir de alguna manera lo que se espera de mí en código... Tendría que construir un puente entre la banca y mi experiencia técnica si quiero ofrecer algún valor. BDD me ayuda a construir un puente sobre una base estable de comunicación fluida entre el equipo de entrega y los expertos en el dominio.

Más información

Si quieres leer más sobre BDD, escribí un libro sobre el tema. "Escribir Grandes Especificaciones" explora el arte de analizar los requisitos y le ayudará a aprender cómo construir un gran proceso BDD y utilizar ejemplos como parte central de ese proceso. El libro habla sobre el lenguaje ubicuo, la recopilación de ejemplos y la creación de las llamadas especificaciones ejecutables (pruebas automatizadas) a partir de los ejemplos, técnicas que ayudan a los equipos de BDD a entregar un excelente software a tiempo y dentro del presupuesto.

Si está interesado en comprar "Escribir grandes especificaciones", puede ahorrar un 39% con el código de promoción 39nicieja2 :)

 7
Author: thion,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-12 16:43:55

He experimentado un poco con el enfoque BDD y mi conclusión prematura es que BDD es muy adecuado para la implementación de casos de uso, pero no en los detalles subyacentes. TDD todavía rock en ese nivel.

BDD también se utiliza como herramienta de comunicación. El objetivo es escribir especificaciones ejecutables que puedan ser entendidas por los expertos en el dominio.

 6
Author: Thomas Eyde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-27 20:59:59

Me parece que el BDD es un ámbito más amplio. Casi implica que se usa TDD, que BDD es la metodología que abarca que recopila la información y los requisitos para usar, entre otras cosas, prácticas de TDD para garantizar una retroalimentación rápida.

 2
Author: palehorse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-05 16:11:02

Con mis últimos conocimientos en BDD cuando se compara con TDD, BDD se centra en especificar lo que sucederá a continuación, mientras que TDD se centra en establecer un conjunto de condiciones y luego mirar la salida.

 2
Author: yoozer8,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-21 18:26:45

El TDD es en gran medida TDD hecho bien. Sin embargo, BDD ofrece un valor adicional. Aquí hay un enlace sobre eso:

BDD es más que"TDD hecho correctamente"

 2
Author: Neel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-27 12:29:01

El desarrollo impulsado por el comportamiento parece centrarse más en la interacción y la comunicación entre Desarrolladores y también entre Desarrolladores y probadores.

El artículo de Wikipedia tiene una explicación:

Desarrollo impulsado por el comportamiento

No estoy practicando BDD.

 2
Author: Michael Stum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-27 12:29:27

Considere que el principal beneficio del TDD es el diseño. Debe llamarse Diseño impulsado por pruebas. BDD es un subconjunto de TDD, lo llaman Diseño impulsado por el Comportamiento.

Ahora considere una implementación popular de Pruebas de Unidad TDD. Las Unidades en las Pruebas unitarias son típicamente un poco de lógica que es la unidad más pequeña de trabajo que puede hacer.

Cuando se juntan esas Unidades de una manera funcional para describir el Comportamiento deseado a las máquinas, es necesario comprender el Comportamiento que se está describiendo a la máquina. El diseño basado en el comportamiento se centra en verificar la comprensión de los implementadores de los Casos de Uso / Requisitos / Lo que sea y verifica la implementación de cada característica. BDD y TDD en general sirven al importante propósito de informar el diseño y el segundo propósito de verificar la corrección de la implementación, especialmente cuando cambia. BDD hecho correctamente implica biz y dev (y qa), mientras que las pruebas unitarias (posiblemente vistas incorrectamente como TDD en lugar de un tipo de TDD) normalmente se realiza en el silo dev.

Añadiría que las pruebas de BDD sirven como requisitos de vida.

 2
Author: phil v,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-28 22:36:21

Aquí está la instantánea rápida:

  • ¡TDD es solo el proceso de probar el código antes de escribirlo!

  • DDD es el proceso de ser informado sobre el Dominio antes de cada ciclo de tocar el código!

  • BDD es una implementación de TDD que trae en algunos aspectos de DDD!

Espero que eso ayude!

 1
Author: Snehal Masne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-18 03:01:02

Diferencia entre el desarrollo impulsado por pruebas (TDD) y el desarrollo impulsado por el comportamiento (BDD)

  • BDD se centra en el aspecto conductual del sistema en lugar de la
    aspecto de implementación del sistema en el que se enfoca TDD.

  • BDD da una comprensión más clara de lo que el sistema debe hacer
    desde la perspectiva del desarrollador y del cliente. Solo TDD
    le da al desarrollador una comprensión de lo que el sistema debe hacer.

  • BDD permite que tanto el desarrollador como el cliente trabajen juntos para análisis de requisitos que está contenido en el código fuente de la sistema.

 1
Author: rahul patil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-09 23:49:30

No hay diferencia entre TDD y BDD. excepto que puedes leer tus pruebas mejor, y puedes usarlas como requisitos. Si escribes tus requisitos con las mismas palabras que escribes pruebas BDD entonces puedes venir desde tu cliente con algunas de tus pruebas definidas listas para escribir código.

 0
Author: Mihai,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-07 08:52:06

La elección entre TDD y BDD es complicada. Depende de si hay un marco de prueba apropiado para su idioma de destino dado, con qué se sienten cómodos sus compañeros de trabajo y, a veces, otros factores.

Algunos argumentan que BDD siempre es mejor que TDD porque tiene la posibilidad de eliminar los problemas que podrían surgir al usar TDD.

La clave de BDD es que podría evitar problemas; no se garantiza que lo haga. Problemas como mala organización del código, mal diseño prácticas, etc. todavía persistirá. Solo tendrá un capó más bajo de escribir malas pruebas y, por lo tanto, tendrá características más robustas.

 0
Author: Bhushan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-18 09:59:57

Este blog ofrece un punto de vista interesante sobre las diferencias entre TDD, BDD y ATDD: http://assertselenium.com/2012/11/05/difference-between-tdd-bdd-atdd /

 -1
Author: user3632158,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-20 18:32:23