unit testing - Was sind die Hauptunterschiede zwischen TDD und BDD?

Translate

Test Driven Development war in den letzten Jahren der letzte Schrei in der .NET-Community. Kürzlich habe ich in der ALT.NET-Community Murren über BDD gehört. Was ist es? Was unterscheidet es von TDD?

This question and all comments follow the "Attribution Required."

Alle Antworten

Translate

Ich verstehe, dass BDD mehr istSpezifikationalstesten. Es ist mit Domain Driven Design verknüpft (lieben Sie diese * DD-Akronyme nicht?).

Es ist mit einer bestimmten Art verbunden, User Stories zu schreiben, einschließlich Tests auf hoher Ebene. Ein Beispiel vonTom 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

(In seinem Artikel führt Tom diese Testspezifikation direkt in Ruby aus.)

Der Papst von BDD istDan North. Sie finden eine großartige Einführung in seinerEinführung in BDDArtikel.

Hier finden Sie einen Vergleich von BDD und TDDVideo. Auch eine Meinung zu BDD als "TDD richtig gemacht" vonJeremy D. Miller

Update vom 25. März 2013

Das obige Video fehlt seit einiger Zeit. Hier ist eine aktuelle von Llewellyn Falco,BDD vs TDD (erklärt). Ich finde seine Erklärung klar und auf den Punkt.

Quelle
Translate

Für mich ist der Hauptunterschied zwischen BDD und TDD der Fokus und der Wortlaut. Und Worte sind wichtig, um Ihre Absicht zu kommunizieren.

TDD konzentriert sich auf das Testen. Und da in der "alten Wasserfallwelt" Tests nach der Implementierung stattfinden, führt diese Denkweise zu falschem Verständnis und Verhalten.

BDD konzentriert sich auf Verhalten und Spezifikation, sodass Wasserfallgeister abgelenkt werden. BDD wird daher leichter als Entwurfspraxis und nicht als Testpraxis verstanden.

Quelle
Abraham Lee
Translate

Es scheint zwei Arten von BDD zu geben.

Der erste ist der ursprüngliche Stil, den Dan North diskutiert und der zur Erstellung der xBehave-Stil-Frameworks geführt hat. Für mich gilt dieser Stil hauptsächlich für Abnahmetests oder Spezifikationen für Domänenobjekte.

Der zweite Stil ist das, was Dave Astels populär gemacht hat und was für mich eine neue Form von TDD ist, die einige ernsthafte Vorteile hat. Es konzentriert sich eher auf das Verhalten als auf das Testen und auch auf kleine Testklassen, um zu dem Punkt zu gelangen, an dem Sie im Grunde eine Zeile pro Spezifikationsmethode (Testmethode) haben. Dieser Stil eignet sich für alle Teststufen und kann mit jedem vorhandenen Unit-Test-Framework durchgeführt werden. Neuere Frameworks (xSpec-Stil) helfen jedoch dabei, das Verhalten zu fokussieren, anstatt es zu testen.

Es gibt auch eine BDD-Gruppe, die Sie möglicherweise nützlich finden:

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

Quelle
Translate

Testgetriebene Entwicklungist eine Test-First-Softwareentwicklungsmethode, bei der Testcode geschrieben werden muss, bevor der eigentliche Code geschrieben wird, der getestet werden soll. In Kent Becks Worten:

Der Stil hier besteht darin, ein paar Codezeilen zu schreiben, dann einen Test, der ausgeführt werden sollte, oder noch besser, einen Test zu schreiben, der nicht ausgeführt werden soll, und dann den Code zu schreiben, der ihn ausführen lässt.

Nachdem wir herausgefunden haben, wie man einen kleinen Code schreibt, möchten wir jetzt, anstatt nur zu codieren, sofortiges Feedback erhalten und üben, "ein wenig zu codieren, ein wenig zu testen, ein wenig zu codieren, ein wenig zu testen". Also schreiben wir sofort einen Test dafür.

TDD ist also eine einfache technische Methode, mit der Programmierer sauberen Code erstellen, der funktioniert.

Verhaltensorientierte Entwicklungist eine Methodik, die auf TDD basiert, sich jedoch zu einem Prozess entwickelt hat, der nicht nur Programmierer und Tester betrifft, sondern sich mit dem gesamten Team und allen wichtigen technischen und nichttechnischen Stakeholdern befasst. BDD begann mit ein paar einfachen Fragen, die TDD nicht gut beantwortet: Wie viele Tests sollte ich schreiben? Was soll ich eigentlich testen - und was soll ich nicht? Welche der Tests, die ich schreibe, sind tatsächlich wichtig für das Geschäft oder die Gesamtqualität des Produkts, und welche sind nur meine Überentwicklung?

Wie Sie sehen, erfordern solche Fragen die Zusammenarbeit zwischen Technologie und Unternehmen. Geschäftsinteressenten und Domänenexperten können Ingenieuren häufig sagen, welche Art von Tests nützlich erscheinen - aber nur, wenn es sich bei den Tests um Tests auf hoher Ebene handelt, die sich mit wichtigen Geschäftsaspekten befassen. BDD nennt solche geschäftsmäßigen Tests "Beispiele", wie in "Sagen Sie mir ein Beispiel, wie sich diese Funktion korrekt verhalten soll", und reserviert das Wort "Test" für technische Überprüfungen auf niedriger Ebene wie Datenvalidierung oder Testen von API-Integrationen. Der wichtige Teil ist, dass währendTestskann nur von Programmierern und Testern erstellt werden,Beispielekann vom gesamten Lieferteam gesammelt und analysiert werden - von Designern, Analysten usw.

In einem Satz eine der besten Definitionen von BDD, die ich habegefundenBisher geht es bei BDD darum, „Gespräche mit Domain-Experten zu führen und anhand von Beispielen ein gemeinsames Verständnis des gewünschten Verhaltens zu erlangen und Unbekanntes zu entdecken“. Der Entdeckungsteil ist sehr wichtig. Je mehr Beispiele das Lieferteam sammelt, desto mehr verstehen sie den Geschäftsbereich und verringern so die Unsicherheit über einige Aspekte des Produkts, mit dem sie sich befassen müssen. Mit abnehmender Unsicherheit nehmen Kreativität und Autonomie des Lieferteams zu. Zum Beispiel können sie jetzt ihre eigenen Beispiele vorschlagen, die die Geschäftsanwender aufgrund ihres Mangels an technischem Fachwissen nicht für möglich hielten.

Gespräche mit Geschäfts- und Domain-Experten klingen jetzt großartig, aber wir alle wissen, wie oft dies in der Praxis endet. Ich habe meine Reise mit Technik als Programmierer begonnen. Als Programmierer werden wir unterrichtetCode schreiben- Algorithmen, Entwurfsmuster, Abstraktionen. Oder wenn Sie Designer sind, wird Ihnen das beigebrachtDesign- Informationen organisieren und schöne Schnittstellen erstellen. Aber wenn wir unsere Einstiegsjobs bekommen, erwarten unsere Arbeitgeber von uns, dass wir "den Kunden einen Mehrwert bieten". Und unter diesen Kunden kann zum Beispiel ... eine Bank sein. Aber ich konnte so gut wie nichts über Bankgeschäfte wissen - außer wie ich meinen Kontostand effizient senken kann. Also müsste ich irgendwie das, was von mir erwartet wird, in Code übersetzen ... Ich müsste eine Brücke zwischen dem Bankgeschäft und meinem technischen Know-how schlagen, wenn ich irgendeinen Wert liefern will. BDD hilft mir, eine solche Brücke auf einer stabilen Grundlage für eine flüssige Kommunikation zwischen dem Lieferteam und den Domain-Experten zu bauen.

Mehr erfahren

Wenn Sie mehr über BDD lesen möchten, habe ich ein Buch zu diesem Thema geschrieben."Schreiben großartiger Spezifikationen"Erfahren Sie mehr über die Kunst, Anforderungen zu analysieren, und lernen Sie, wie Sie einen großartigen BDD-Prozess erstellen und Beispiele als Kernbestandteil dieses Prozesses verwenden. Das Buch spricht über die allgegenwärtige Sprache, das Sammeln von Beispielen und das Erstellen sogenannter ausführbarer Spezifikationen (automatisierte Tests) aus den Beispielen - Techniken, die BDD-Teams dabei helfen, großartige Software pünktlich und im Rahmen des Budgets bereitzustellen.

Wenn Sie daran interessiert sind, "Writing Great Specifications" zu kaufen,Sie können 39% sparenmit dem Promo-Code39nicieja2:) :)

Quelle
Translate

Ich habe ein wenig mit dem BDD-Ansatz experimentiert und meine vorzeitige Schlussfolgerung ist, dass BDD gut für die Implementierung von Anwendungsfällen geeignet ist, jedoch nicht für die zugrunde liegenden Details. TDD rockt immer noch auf diesem Level.

BDD wird auch als Kommunikationsmittel verwendet. Ziel ist es, ausführbare Spezifikationen zu schreiben, die von den Domain-Experten verstanden werden können.

Quelle
Translate

Es scheint mir, dass BDD ein breiterer Bereich ist. Es bedeutet fast, dass TDD verwendet wird, dass BDD die umfassende Methode ist, die die Informationen und Anforderungen sammelt, um unter anderem TDD-Praktiken zu verwenden, um ein schnelles Feedback sicherzustellen.

Quelle
Greg Lee
Translate

Mit meinen neuesten Kenntnissen in BDD im Vergleich zu TDD konzentriert sich BDD darauf, anzugeben, was als nächstes passieren wird, während sich TDD darauf konzentriert, eine Reihe von Bedingungen festzulegen und dann die Ausgabe zu betrachten.

Quelle
Translate

Behavior Driven Development scheint sich mehr auf die Interaktion und Kommunikation zwischen Entwicklern sowie zwischen Entwicklern und Testern zu konzentrieren.

Der Wikipedia-Artikel hat eine Erklärung:

Verhaltensorientierte Entwicklung

Ich übe BDD allerdings nicht.

Quelle
Translate

Betrachten Sie den Hauptvorteil von TDD als Design. Es sollte Test Driven Design heißen. BDD ist eine Teilmenge von TDD und wird als verhaltensgesteuertes Design bezeichnet.

Betrachten Sie nun eine beliebte Implementierung von TDD - Unit Testing. Die Einheiten in Unit Testing sind normalerweise ein Stück Logik, das die kleinste Arbeitseinheit darstellt, die Sie ausführen können.

Wenn Sie diese Einheiten auf funktionale Weise zusammensetzen, um das gewünschte Verhalten für die Maschinen zu beschreiben, müssen Sie das Verhalten verstehen, das Sie für die Maschine beschreiben. Behavior Driven Design konzentriert sich auf die Überprüfung des Verständnisses der Implementierer für die Anwendungsfälle / Anforderungen / Was auch immer und überprüft die Implementierung der einzelnen Funktionen. BDD und TDD dienen im Allgemeinen dem wichtigen Zweck, das Design zu informieren, und dem zweiten Zweck, die Richtigkeit der Implementierung zu überprüfen, insbesondere wenn sie sich ändert. Richtig gemachtes BDD beinhaltet biz und dev (und qa), während Unit-Tests (möglicherweise fälschlicherweise als TDD und nicht als eine Art von TDD angesehen) normalerweise im dev-Silo durchgeführt werden.

Ich würde hinzufügen, dass BDD-Tests als Lebensgrundlage dienen.

Quelle
Translate

BDD ist weitgehend TDD richtig gemacht. BDD bietet jedoch einen zusätzlichen Wert. Hier ist ein Link dazu:

BDD ist mehr als "TDD richtig gemacht"

Quelle
Translate

Unterschied zwischen testgetriebener Entwicklung (TDD) und verhaltensgetriebener Entwicklung (BDD)

  • BDD konzentriert sich eher auf den Verhaltensaspekt des Systems als auf den
    Implementierungsaspekt des Systems, auf das sich TDD konzentriert.

  • BDD gibt ein klareres Verständnis dafür, was das System tun sollte
    aus Sicht des Entwicklers und des Kunden. Nur TDD
    gibt dem Entwickler ein Verständnis dafür, was das System tun sollte.

  • Mit BDD können sowohl Entwickler als auch Kunde gemeinsam an einer Anforderungsanalyse arbeiten, die im Quellcode des Systems enthalten ist.

Quelle
Translate

Kurz gesagt, es gibt einen großen Unterschied zwischen TDD und BDD. Bei TDD konzentrieren wir uns hauptsächlich auf Testdaten. Bei BDD liegt unser Hauptaugenmerk auf dem Verhalten des Projekts, damit jede nicht programmierende Person die Codezeile im Namen des Titels von verstehen kann diese Methode

Quelle
Translate

Hier ist der kurze Schnappschuss:

  • TDD ist nur der Prozess des Testens von Code vor dem Schreiben!

  • DDD ist der Prozess, bei dem vor jedem Zyklus des Berührens von Code über die Domain informiert wird!

  • BDD ist eine Implementierung von TDD, die einige Aspekte von DDD einbezieht!

Quelle
Translate

Es gibt keinen Unterschied zwischen TDD und BDD. außer Sie können Ihre Tests besser lesen und sie als Anforderungen verwenden. Wenn Sie Ihre Anforderungen mit denselben Worten schreiben wie BDD-Tests, können Sie von Ihrem Kunden einige Ihrer Tests definieren, die zum Schreiben von Code definiert sind.

Quelle