Jakie są podstawowe różnice między TDD i BDD?

[[0]}Test Driven Development od kilku lat jest szalonym trendem w społeczności. NET. Ostatnio słyszałem narzekania w ALT.NET społeczność o BDD. O co chodzi? Czym różni się od TDD?

Author: NotMyself, 2008-08-05

15 answers

Rozumiem, że BDD jest bardziej o specyfikacji niż o testowaniu . Jest powiązany z Domain Driven Design (nie kochasz tych *DD akronimów?).

Jest powiązany z pewnym sposobem pisania historii użytkowników, w tym testów wysokiego poziomu. Przykład autorstwa 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

(w swoim artykule Tom kontynuuje bezpośrednie wykonanie tej specyfikacji testowej w Rubim.)

Papieżem BDD jest Dan North . Znajdziesz świetne wprowadzenie w jego wprowadzenie BDD artykuł.

Znajdziesz porównanie BDD i TDD w tym wideo . Również opinia o BDD jako "TDD done right" przez Jeremy D. Miller

25 marca 2013 Aktualizacja

Powyższy filmik zaginął jakiś czas temu. Oto najnowszy Llewellyn Falco, BDD vs TDD (wyjaśnione). Uważam, że jego wyjaśnienie jest jasne i do rzeczy.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-07 13:04:47

Dla mnie podstawową różnicą między BDD a TDD jest skupienie i sformułowanie. A słowa są ważne dla przekazania intencji.

TDD skupia się na testowaniu. A ponieważ w" Starym Świecie wodospadu " testy przychodzą po wdrożeniu, to ten sposób myślenia prowadzi do niewłaściwego zrozumienia i zachowania.

BDD skupia się na zachowaniu i specyfikacji, a więc umysły są rozproszone. Tak więc BDD jest łatwiej rozumiane jako praktyka projektowania, a nie jako praktyka testowania.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-08 18:36:06

Istnieją dwa rodzaje BDD.

Pierwszy to oryginalny styl, który omawia Dan North I który spowodował powstanie frameworków stylu xBehave. Dla mnie ten styl ma zastosowanie przede wszystkim do testów akceptacyjnych lub specyfikacji przeciwko obiektom domeny.

Drugi styl jest tym, co spopularyzował Dave Astels i który, dla mnie, jest nową formą TDD, która ma poważne korzyści. Skupia się na zachowaniu, a nie na testowaniu, a także na małych klasach testowych, starając się uzyskać do punktu, w którym zasadniczo masz jedną linię na specyfikację (test) metody. Ten styl pasuje do wszystkich poziomów testowania i może być wykonany przy użyciu dowolnego istniejącego frameworka testowania jednostkowego, chociaż nowsze frameworki (styl xSpec) pomagają skupić się na zachowaniu, a nie na testowaniu.

Istnieje również grupa BDD, która może okazać się przydatna:

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/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-10 16:00:43

Test-Driven Development jest metodologią tworzenia oprogramowania test-first, co oznacza, że wymaga napisania kodu testowego przed napisaniem kodu, który będzie testowany. W słowach Kenta Becka:

Styl tutaj jest napisać kilka linijek kodu, a następnie test, który powinno się uruchomić, a nawet lepiej napisać test, który się nie uruchomi, a następnie napisać kod, który sprawi, że będzie działać.

Po zastanowieniu się, jak napisać jeden mały kawałek kodu, teraz, zamiast tylko kodowanie włączone, chcemy uzyskać natychmiastową informację zwrotną i ćwiczyć " kod trochę, przetestuj trochę, kod trochę, przetestuj trochę."Więc od razu piszemy dla niego test.

Więc TDD jest niskopoziomową, techniczną metodologią, którą programiści używają do tworzenia czystego kodu, który działa.

Behavior-Driven Development jest metodologią, która została stworzona w oparciu o TDD, ale ewoluowała w proces, który nie dotyczy tylko programistów i testerów, ale zamiast tego zajmuje się całym zespołem i wszystkimi ważne zainteresowane strony, techniczne i nietechniczne. BDD zaczęło się od kilku prostych pytań, na które TDD nie odpowiada dobrze: ile testów powinienem napisać? Co właściwie powinienem testować-a czego nie powinienem? Które z testów, które napiszę, będą w rzeczywistości ważne dla firmy lub ogólnej jakości produktu, a które są po prostu moją nadmierną inżynierią?

Jak widać, takie pytania wymagają współpracy między technologią a biznesem. Interesariusze biznesowi i eksperci w dziedzinie często może powiedzieć inżynierom, jaki rodzaj testów brzmi, jakby były przydatne-ale tylko wtedy, gdy testy są testami wysokiego poziomu, które dotyczą ważnych aspektów biznesowych. BDD nazywa takie testy biznesowe "przykładami", jak w" powiedz mi przykład, jak ta funkcja powinna zachowywać się poprawnie "i zastrzega słowo" test " dla niskopoziomowych, technicznych kontroli, takich jak walidacja danych lub testowanie integracji API. Ważne jest to, że podczas gdy testy mogą być tworzone tylko przez programistów i testerów, przykłady mogą być zbierane i analizowane przez cały zespół dostaw - przez projektantów, analityków i tak dalej.

W zdaniu jedną z najlepszych definicji BDD, jaką znalazłem jest jak dotąd to, że BDD polega na "rozmowach z ekspertami od domen i wykorzystywaniu przykładów, aby uzyskać wspólne zrozumienie pożądanego zachowania i odkryć niewiadome."Część discovery jest bardzo ważna. Ponieważ zespół ds. dostawy zbiera więcej przykładów, zaczyna rozumieć domenę biznesową coraz bardziej i tym samym zmniejszają swoją niepewność co do niektórych aspektów produktu, z którym mają do czynienia. Wraz ze zmniejszaniem się niepewności wzrasta kreatywność i autonomia zespołu dostawczego. Na przykład, mogą teraz zacząć sugerować własne przykłady, które użytkownicy biznesowi nie sądzili, że są możliwe z powodu ich braku wiedzy technicznej.

Teraz rozmowy z ekspertami od biznesu i domen brzmi świetnie, ale wszyscy wiemy, jak często kończy się to w praktyce. Zacząłem moja podróż z technologią jako programista. Jako programiści uczymy się pisać kod - algorytmy, wzorce projektowe, abstrakcje. Lub, jeśli jesteś projektantem, uczysz się design - organizować informacje i tworzyć piękne interfejsy. Ale kiedy otrzymujemy nasze podstawowe miejsca pracy, nasi pracodawcy oczekują od nas " dostarczania wartości klientom."A wśród tych klientów może być, na przykład... bank. Ale o bankowości nie mogłem nic wiedzieć-poza tym, jak skutecznie zmniejszyć moją saldo konta. Więc musiałbym jakoś przetłumaczyć to, czego się ode mnie oczekuje na kod... Musiałbym zbudować pomost między bankowością a moją wiedzą techniczną, jeśli chcę zapewnić jakąkolwiek wartość. BDD pomaga mi zbudować taki most na stabilnym fundamencie płynnej komunikacji między zespołem dostawczym a ekspertami domeny.

Dowiedz się więcej

Jeśli chcesz przeczytać więcej o BDD, napisałem książkę na ten temat. "pisanie świetnych specyfikacji" eksploruje Sztuka analizy wymagań i pomoże Ci dowiedzieć się, jak zbudować świetny proces BDD i użyć przykładów jako podstawowej części tego procesu. Książka opowiada o wszechobecnym języku, zbieraniu przykładów i tworzeniu tzw. specyfikacji wykonywalnych (testów automatycznych) z przykładów-technik, które pomagają zespołom BDD dostarczać świetne oprogramowanie na czas i na budżet.

Jeśli jesteś zainteresowany kupnem "pisanie wspaniałych specyfikacji", możesz zaoszczędzić 39% z kodem promocyjnym 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-12 16:43:55

Trochę eksperymentowałem z podejściem BDD i mój przedwczesny wniosek jest taki, że BDD dobrze nadaje się do implementacji przypadków użycia, ale nie na podstawowych szczegółach. TDD wciąż rządzi na tym poziomie.

BDD jest również używany jako narzędzie komunikacji. Celem jest napisanie specyfikacji wykonywalnych, które mogą być zrozumiałe przez ekspertów domeny.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-27 20:59:59

Wydaje mi się, że BDD ma szerszy zakres. Oznacza to prawie, że stosuje się TDD, że BDD jest metodologią obejmującą, która gromadzi informacje i wymagania dotyczące stosowania, między innymi, praktyk TDD w celu zapewnienia szybkiego sprzężenia zwrotnego.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-05 16:11:02

Z moją najnowszą wiedzą w BDD w porównaniu do TDD, BDD skupia się na określeniu, co będzie dalej, podczas gdy TDD skupia się na ustawieniu zestawu warunków, a następnie spojrzeniu na wynik.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-21 18:26:45

BDD jest w dużej mierze TDD zrobione dobrze. Istnieje jednak dodatkowa wartość, którą oferuje BDD. Oto link na ten temat:

BDD jest czymś więcej niż"TDD done right"

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-27 12:29:01

Behaviour Driven Development wydaje się skupiać bardziej na interakcji i komunikacji między programistami, a także między programistami i testerami.

Artykuł w Wikipedii ma Wyjaśnienie:

Behavior-driven development

Sam nie ćwiczę 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/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-27 12:29:27

Główną zaletą TDD jest projektowanie. Powinno to być nazywane Test Driven Design. BDD jest podzbiorem TDD, nazwij to Behavior Driven Design.

Rozważmy teraz popularną implementację TDD-Unit Testing. Jednostki w testowaniu jednostkowym są zazwyczaj jednym bitem logiki, który jest najmniejszą jednostką pracy, jaką możesz wykonać.

Kiedy połączysz te jednostki w funkcjonalny sposób, aby opisać pożądane zachowanie maszyn, musisz zrozumieć zachowanie, które jesteś opisywanie maszyny. Behavior Driven Design skupia się na weryfikacji zrozumienia przez implementatorów przypadków użycia/wymagań/cokolwiek i weryfikuje implementację każdej funkcji. BDD i TDD w ogólności służą ważnemu celowi informowania o projekcie, a drugim celowi weryfikacji poprawności implementacji, zwłaszcza gdy się zmienia. BDD done right obejmuje biz i dev( i qa), podczas gdy testy jednostkowe (prawdopodobnie błędnie postrzegane jako TDD, a nie jeden typ TDD) zazwyczaj odbywa się w silosie dev.

Dodam, że testy BDD służą jako wymagania życiowe.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-28 22:36:21

Oto szybka migawka:

  • TDD to tylko proces testowania kodu przed jego napisaniem!

  • DDD to proces informowania o domenie przed każdym cyklem dotykania kodu!

  • BDD jest implementacją TDD, która wprowadza pewne aspekty DDD!

Mam nadzieję, że to pomoże!

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-18 03:01:02

Różnica między Test-driven development (TDD) i behavior-driven development (BDD)

  • BDD koncentruje się na behawioralnym aspekcie systemu, a nie na
    aspekt wdrożenia systemu, na którym koncentruje się TDD.

  • BDD daje jaśniejsze zrozumienie, co system powinien zrobić
    z perspektywy dewelopera i klienta. Tylko TDD
    daje deweloperowi zrozumienie, co system powinien zrób.

  • BDD pozwala zarówno deweloperowi, jak i Klientowi współpracować na analiza wymagań zawarta w kodzie źródłowym system.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-09 23:49:30

Nie ma różnicy między TDD a BDD. z wyjątkiem tego, że możesz lepiej czytać swoje testy i możesz używać ich jako wymagań. Jeśli piszesz swoje wymagania tymi samymi słowami, co piszesz testy BDD, możesz przyjść do swojego klienta z niektórymi testami zdefiniowanymi gotowymi do napisania kodu.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-07 08:52:06

Wybór pomiędzy TDD i BDD jest skomplikowany. Zależy to od tego, czy istnieje odpowiednia platforma testowa dla danego języka docelowego, z czym współpracownicy są zadowoleni, a czasami inne czynniki.

Niektórzy twierdzą, że BDD jest zawsze lepsze niż TDD, ponieważ ma możliwość wyeliminowania problemów, które mogą pojawić się podczas korzystania z TDD.

Kluczem do BDD jest to, że może zapobiegać problemom; nie jest gwarantowane. Problemy takie jak zła organizacja kodu, zły design praktyki itp. nadal będzie trwać. Będziesz miał po prostu mniej prawdopodobny kaptur pisania złych testów, a tym samym masz bardziej solidne funkcje.

 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/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-18 09:59:57

Ten blog dostarcza interesującego punktu widzenia na różnice między TDD, BDD i 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/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-20 18:32:23