In jeder Website, die Sie über BDD (Behaviour Driven Development) lesen, finden Sie ein sehr einfaches, schönes Beispiel, das Ihnen zeigt, wie offensichtlich und einfach es ist, Ihre Anforderungen zu definieren. Der Versuch, diesen Prozess in einem großen Produkt (kein Taschenrechner-Beispiel) zu implementieren, hat mir gezeigt, dass die Dinge ziemlich komplex und unlesbar werden können (oder werden). vor allem Änderungswünsche zu einem späteren Zeitpunkt bedeuten einen hohen Aufwand, um die Integrationstests hierfür zu korrigieren.
Ich frage mich also, ob BDD das wirklich wert ist. Löst es ein Problem, das andere Techniken nicht lösen?
Antworten:
Ich denke, eine der besten Quellen für BDD ist das Specification by Example- Buch. Hier erfahren Sie viel darüber, wie BDD-Tests organisiert werden und wie sie geschrieben werden sollten, damit sie bei Änderungen der Anforderungen nicht zu überarbeitet werden.
Wenn die Dinge in Ihren Tests komplex oder zu kompliziert werden, machen Sie wahrscheinlich etwas falsch. Das gleiche gilt für BDD und TDD. Gute Tests zu schreiben ist schwer und es dauert Monate, um es zu lernen.
quelle
Es könnte hilfreich sein zu erkennen, dass der BDD-Fokus auf den Gesprächen liegt . BDD ist wirklich ein Analysewerkzeug, das zufällig einige Regressionstests als gutes Nebenprodukt liefert.
Ich habe im Gespräch Szenarien auf allen Ebenen verwendet. Von der Identifizierung verschiedener Stakeholder, um zu sehen, ob eine Veröffentlichung wahrscheinlich gut ankommt, bis hin zur Festlegung des Verhaltens eines Moduls oder einer Klasse .
Es gibt ein paar Tipps und Tricks, die ich vorschlagen kann, um dies zu vereinfachen.
Wenn Sie es noch nie getan haben, wird es sich ändern.
Alles, was für die Domäne oder das Geschäft neu ist, wird sich wahrscheinlich ändern. Möglicherweise stellen Sie fest, dass Sie sich in diesem Bereich befinden, wenn Sie die Szenarien durchgehen, sie in Frage stellen und das Unternehmen sagt: "Oh, ich bin nicht sicher." Dies ist ein gutes Zeichen, um nicht mehr versuchen zu müssen, BDD zu betreiben, sondern um schnelleres Feedback zu erhalten, damit das Unternehmen herausfinden kann, was es will. Sobald sich die Ideen stabilisiert haben, können im Nachhinein Szenarien geschrieben werden.
Alle Projekte haben einen Aspekt, der neu ist, sonst würdest du das nicht tun.
Wenn Sie es schon einmal gemacht haben, ist es langweilig.
Neben neuen, differenzierenden Aspekten weisen Projekte in der Regel auch einige kommodifizierte Aspekte auf, die denen ähneln, die bereits durchgeführt wurden. Wenn ich zum Beispiel ein neues Mobiltelefon produzierte, musste es immer noch telefonieren. "Tätigen Sie einen Anruf" ist ein so bekanntes Szenario, dass wir nicht darüber sprechen müssten. Ebenso sind Dinge wie "Login" oder auch "Benutzerregistrierung" langweilig.
Verwenden Sie für diese nach Möglichkeit Bibliotheken, und Sie müssen dann keine Szenarien um sie herum schreiben. Außerdem tun die anderen Bits zuerst - haben ein bereits angemeldeten Benutzer und herausfinden, was er die Protokollierung in für . Es ist unwahrscheinlich, dass sich diese Bereiche ändern. Daher können Sie möglicherweise ohnehin manuelle Tests durchführen.
Wenn es schon einmal jemand gemacht hat, kann es hilfreich sein, Szenarien durchzusprechen.
Es gibt eine gewisse Differenz zwischen domänenspezifischen Anforderungen, Informationen, die von jemandem relativ gut verstanden werden , und der tatsächlichen Unsicherheit, die sich eher auf den Umfang als auf das tatsächliche Verhalten des Systems bezieht.
Das Durchsprechen von Szenarien kann dem Entwicklerteam helfen, Verhalten zu erkennen, das Wissen eines Experten zu nutzen und sicherzustellen, dass das bekannte, wertvolle Verhalten erfasst wird.
Dies ist der Punkt, an dem BDD am besten funktioniert. Mein Tipp ist, die interessantesten Szenarien oben in der Feature-Datei (oder im Wiki, wenn Sie nicht automatisieren) zu schreiben und alle Szenarien zu löschen, die dupliziert oder als Ergebnis leicht abzuleiten sind.
Verwenden Sie die Szenarien nach Möglichkeit nur als Beispiele für die Funktionsweise der Anwendung . Wenn Sie beispielsweise zeigen möchten, wie die Validierung funktioniert, zeigen Sie einige Beispiele, wie die Anwendung dem Benutzer hilft, ein Formular auszufüllen. Überprüfen Sie mithilfe von Komponententests, dass die Validierung streng ist. Dies ist viel einfacher zu warten und schneller auszuführen.
Weitere Lektüre
Wenn Sie daran interessiert sind, hier sind einige Dinge, die ich geschrieben habe, die helfen könnten.
BDD im Großen
Cynefin für Entwickler , das diese drei Bereiche ausführlicher behandelt
Meine Tutorial-Folien , die alle nett und mit Anmerkungen versehen sind, decken auch den gesamten Stapel ab.
quelle
Wir haben im letzten Herbst ein ziemlich komplexes ( Domain-Komplexitäts- ) Projekt erstellt, und ich kann ehrlich sagen, dass das Projekt gerettet wurde, indem die Vorarbeiten in BDD übernommen wurden. Ich habe eine starke Korrelation zwischen der Domänenkomplexität und den Vorteilen von BDD gesehen.
Lassen Sie mich eines aus dem Weg räumen: Das Testen komplexer Geschäftsregeln ist schwierig. Die Frage ist, ob Sie versuchen möchten, sich bei jeder Änderung an alle verrückten Szenarien zu erinnern, oder ob Sie über dieses Sicherheitsnetz informiert werden möchten, wenn Sie die Spezifikation gebrochen haben. Nehmen Sie sich die Zeit, um alle Szenarien zu erarbeiten, sie aufzuschreiben und schließlich alle Tests für sie zu schreiben.
Und wenn Sie später wiederkommen und versuchen, einen Sinn für die Dinge zu finden, ist es lebensrettend, diese testbare Spezifikation zu haben.
quelle
BDD ist ein auf TDD (Test Driven Development) basierender Entwicklungsprozess. Hier sind einige meiner persönlichen Vor- und Nachteile von TDD:
Nachteile:
Ich arbeite an einem Projekt mit mehr als 900.000 Codezeilen. Und ich verfolge immer noch BDD. Eine wichtige Sache, die Sie berücksichtigen müssen, ist die Anzahl der möglichen Fehler, die Sie möglicherweise nur aufgrund der Testfälle abfangen. Ein paar Jahre später werden Sie bei BDD schwören!
quelle