BDD: Erste Schritte

9

Ich fange mit BDD an und das ist meine Geschichte:

Feature: Months and days to days
    In order to see months and days as days
    As a date conversion fan
    I need a webpage where users can enter
    days and months and convert them to days.

Ich habe Zweifel ...

Soll ich meine Szenarien schreiben, bevor ich etwas codiere, oder sollte ich zuerst ein Szenario schreiben und dann Code schreiben, ein Szenario erneut schreiben und dann Code schreiben und so weiter ...?

Wenn ich meine Szenarien vorher schreiben sollte, können meine Schritte genehmigt werden und der Produktionscode wird immer noch nicht ausgeführt?

Wann sollte ich meinen Code umgestalten? Nach Abschluss der Funktion oder nach jeder Szenarioimplementierung?

thom
quelle
"Können meine Schritte genehmigt werden und der Produktionscode wird immer noch nicht ausgeführt?" Was bedeutet das? Bitte erkläre.
S.Lott

Antworten:

12

Aus der Geschichte schließe ich, dass Sie selbst codieren.

Normalerweise besteht der Zweck von BDD darin, Gespräche zu ermöglichen, insbesondere zwischen dem Unternehmen und den Entwicklern, damit das Team sicher sein kann, dass sie ein gemeinsames Verständnis erreicht haben. Wir schließen auch gerne Tester ein, da diese erkennen können, wenn wir Szenarien verpasst haben.

Wenn Sie dies alleine tun, schnappen Sie sich eine Gummiente und erklären Sie der Ente das Verhalten Ihrer Anwendung. Geben Sie einige Beispiele, wie es funktionieren sollte. Das werden Ihre Szenarien sein.

Zunächst würde ich vorschlagen , diese Szenarien nicht zu automatisieren. Sie können sie aufschreiben, wenn Sie möchten. Denken Sie daran, dass die Geschäftsergebnisse, die Sie mit der Ente geteilt haben, ungefähr die richtige Ebene sind, um sie auszudrücken. Sie sollten jetzt eine Vorstellung davon haben, wie sich die App verhält, und Sie können die Szenarien manuell durchgehen. Ich mag es, alles, was noch nicht funktioniert, wie einen Fehler zu behandeln . Ich habe manchmal mit der Automatisierung begonnen, aber nur wenn ich sehr gut weiß, wie das System funktioniert, bin ich mit den Tools vertraut und die Benutzeroberfläche ist gut verstanden. Selbst dann muss ich es oft ein bisschen überarbeiten, wenn ich den Code geschrieben habe.

Sagen Sie Ihrer Ente auf einer niedrigeren Ebene, wie sich jede Klasse verhalten wird. Geben Sie einige Beispiele an. Gummienten sind perfekt in der Lage, die Fachsprache zu verstehen. Jetzt haben Sie Ihr BDD auf Einheitenebene, auch bekannt als Unit-Tests. Hier findet der Rot-Grün-Refaktor-Zyklus statt. (Ich muss nicht mehr so ​​viel umgestalten, weil ich über die Verantwortlichkeiten meiner Klassen nachdenke, sie in einer geschäftsorientierten Sprache formuliere und sie sowieso ziemlich schön herausfallen. Aber ich Ich mache das jetzt schon eine Weile. Es ist in Ordnung, wenn du das tust.)

Refactor es nicht zu viel. Wir möchten immer noch Feedback zu unserem Code erhalten, da es immer Dinge gibt, die wir nicht wissen und die wir nicht kennen . Perfektion ist hier dein Feind. Machen Sie es gut genug, machen Sie es lesbar und fahren Sie dann fort. Wenn Sie etwas perfekt machen müssen, um weitere Änderungen vorzunehmen, tun Sie dies, wenn Sie weitere Änderungen vornehmen.

Wenn Sie die Möglichkeit haben, Feedback zu Ihren Szenarien von Geschäftsinteressenten zu erhalten, diese jedoch nicht bei Ihnen sitzen, können Sie ihnen Szenarien senden, sobald Sie dies geschrieben haben und bevor Sie sie automatisieren. Möglicherweise möchten Sie auch ein Modell der Benutzeroberfläche senden, damit diese Wörter mit Aktionen korrelieren können. Gehen Sie damit der Codierung nicht zu weit voraus. Arbeiten Sie mit der Annahme, dass das, was Sie bereits getan haben, falsch ist , und Sie müssen Feedback einholen, um herauszufinden, wie.

Als letzten Hinweis sollten Sie Geschichten im Allgemeinen nicht aus der Sicht eines Benutzers formulieren (Szenarien, ja, aber keine Geschichten). Sie sind keine User Stories. Es sollte wahrscheinlich so etwas wie lesen:

In order to attract people to my website
As @thom
I want users to easily convert months and days to days.

Es gibt sowieso ein höheres Ziel, das Sie suchen. Auf diese Weise können Sie auch die Funktionen ermitteln, die Sie benötigen. Viel Glück damit und Entschuldigung für den extra langen Beitrag.

Lunivore
quelle
1
Das "Gummiente" Teil ist großartig. Ich dachte, ich wäre der einzige, der daran denken würde!
NoChance
3

Soll ich meine Szenarien schreiben, bevor ich etwas codiere, oder sollte ich zuerst ein Szenario schreiben und dann Code schreiben, ein Szenario erneut schreiben und dann Code schreiben und so weiter ...?

Beides wird funktionieren. Wähle eins.

Es macht nicht viel aus.

Je mehr Szenarien Sie haben, desto mehr Design können Sie im Voraus ausführen.

Je mehr Szenarien Sie haben, desto länger dauert es, bis etwas erledigt ist.

Wann sollte ich meinen Code umgestalten? Nach Abschluss der Funktion oder nach jeder Szenarioimplementierung?

Nein. Sie überarbeiten, wenn es schwierig wird, das nächste Szenario zu entwerfen .

S.Lott
quelle
Ich habe eine neue Frage gestellt ... "Wenn ich meine Szenarien vorher schreiben sollte ...". Können Sie bitte einen Blick darauf werfen? Vielen Dank.
thom
1
@ S.Lott Gute Antwort, aber ein Problem: Aufgrund der Nützlichkeit des Rot-Grün-Refaktor-Zyklus würde ich empfehlen, das Refactoring während des BDD-Prozesses direkt nach jedem Grüntest kontinuierlich durchzuführen.
Rein Henrichs
@Rein Henrichs: Eine Alternative wäre zu beachten, dass Refactoring, um alle Tests für eine Story abzuschließen, ein unvermeidlicher und unausweichlicher Teil der Codierung ist. Selbst ein großartiges Design kann nicht alle Basen abdecken. Dieses Refactoring schien nicht erwähnenswert zu sein. Sie haben jedoch gut darauf hingewiesen. Das Refactoring zwischen Storys ist jedoch eine schwerwiegendere und zeitaufwändigere Operation, da sich der Funktionsumfang durch die Akkretion von Storys entwickelt.
S.Lott
3

Verwenden Sie beschreibende Verben

Feature: CONVERT Months and days to days

Treffen Sie keine Designentscheidungen in Geschichten ["Ich brauche eine Webseite" ist eine Designentscheidung]

As a date conversion fan
I want to convert days and months into days

Verwenden Sie Business-Value-Ziele in Geschichten

So that [some business reason]

Schreiben Sie so viele Funktionen und Geschichten wie möglich, bevor Sie mit dem Codieren beginnen. Geschichten informieren sich gegenseitig , beeinflussen die Funktionen und informieren das Design.

Refactor nach jeder Geschichte. Rot-Grün-Refaktor.

Steven A. Lowe
quelle
+1, gute Antwort. Aber ist der "BDD-Weg" zum Refactor nicht eher Teil des inneren Unit-Test-Zyklus als des äußeren Accept-Test-Zyklus?
pdr
@pdr: das habe ich gemeint, Refactor nach jeder Geschichte. BDD / TDD-Tests skalieren von Einheit zu Akzeptanz, es gibt nur einen Zyklus (in meinen Augen) ;-)
Steven A. Lowe
Warum ist "Ich brauche eine Webseite" eine Designentscheidung? Vielen Dank!
thom
@thom: User Stories sollten ausdrücken, was der Benutzer tun möchte, nicht wie es implementiert wird. Mit anderen Worten, Features, Storys und Szenarien sind Anforderungen und Funktionsspezifikationen. Treffen Sie keine Designentscheidungen, bis Sie das vollständige Bild haben. In diesem (vermutlich künstlichen) Beispiel können die Geschäftsanforderungen des Benutzers insgesamt darauf hinweisen, dass eine Webseite möglicherweise nicht die bequemste Lösung ist - ein Desktop-Widget oder eine mobile App sind möglicherweise besser, je nachdem, wie / wann sie verwendet werden müssen. Implementierungsdetails überladen die Storys und können Sie zu früh an ein bestimmtes Design binden.
Steven A. Lowe