Ist BDD tatsächlich für Nicht-Programmierer beschreibbar?

24

Behaviour-Driven Development mit seiner emblematischen Syntax von „Given-When-Then“ -Szenarien wurde in letzter Zeit wegen seiner möglichen Verwendung als Grenzobjekt für die Bewertung der Softwarefunktionalität hoch geschätzt.

Ich stimme definitiv zu, dass Gherkin , oder welches Feature-Definitionsskript Sie bevorzugen, ein geschäftlich lesbares DSL ist und bereits einen Wert als solches bietet.

Aber ich stimme nicht , dass es beschreibbar durch Nicht-Programmierer (wie auch Martin Fowler ).

Hat jemand Berichte über Szenarien, die von Nicht-Programmierern geschrieben und dann von Entwicklern instrumentiert wurden?

Wenn es tatsächlich ein Konsens über den Mangel an Beschreibbarkeit, dann würden Sie ein Problem mit einem Werkzeug sehen , die, statt beginnend mit den Szenarien und instrumentieren sie wären generieren Geschäft lesbare Szenarien von den tatsächlichen Tests?

Update: In Bezug auf das „Szenario-Generator“ -Tool würde es die Geschäftssprache natürlich nicht auf magische Weise erraten;) Aber genau wie wir derzeit Regexp-Matcher verwenden, um Tests in einem Top-Down-Ansatz (in Bezug auf die Abstraktionsdimension) zu erstellen, könnten wir sie verwenden String-Builder zum Erstellen von Szenarien in einem Bottom-up-Ansatz.

Ein "nur eine Idee geben" Beispiel:

Given I am on page ${test.currentPage.name}
And I click on element ${test.currentAction.element}
…
MattiSG
quelle
Es wird lange dauern, bis Menschen in der Lage sind, eine für andere Menschen genau lesbare gemeinsame Sprache zu verwenden, auch wenn Computer bereits Code für Computer schreiben können.
Ironischerweise hat JBehave 1 (das erste BDD-Tool) damit begonnen, geschäftslesbare Szenarien zu generieren. Wir haben Englisch erst mit Gurke analysiert. Ich denke, JBehave 1 war nützlich, um die Leute tatsächlich daran zu erinnern, dass sie zuerst über sie sprechen mussten ...
Lunivore

Antworten:

20

Ich habe es gesehen. Ist nicht gut gelaufen.

Ich denke, dass Gurke umständlich (<- lol: D) Abstraktion aus genau diesem Grund ist. Zu schwer für Nicht-Techniker, um selbst zu schreiben; zu wortreich für technische Leute.

Nichttechniker haben einfach nicht gelernt, wie Programmierer zu denken. Es ist unser Privileg, abstraktes Wissen zu verstehen, abzubauen, neu aufzubauen und dennoch erfolgreich vor Mehrdeutigkeiten davonlaufen zu können. Dafür werden wir bezahlt.

Wenn es in der Tat einen Konsens über die mangelnde Beschreibbarkeit gibt, würden Sie dann ein Problem mit einem Tool sehen, das, anstatt mit den Szenarien zu beginnen und sie zu instrumentieren, aus den tatsächlichen Tests geschäftslesbare Szenarien generiert?

Das Tool selbst kann sie nicht generieren. Der Computer weiß nichts über die Geschäftsdomäne. Am Ende - der Programmierer wäre dafür verantwortlich, zu zeichnen, was ohnehin generiert werden muss, und selbst dann - wären diese Szenarien wahrscheinlich zu ausführlich / kryptisch für ihre Endbenutzer.

Arnis Lapsa
quelle
20
Non technical people just haven't learned to think like programmers. Die Wahrheit. Dasselbe Konzept wurde in den letzten 20 Jahren mehrmals hochgespielt und neu erfunden und führt fast immer zu schlechten Ergebnissen. Unternehmen mögen das Konzept, Software zu beschaffen, ohne diese gierigen Blutsauger-Softwareentwickler bezahlen zu müssen, aber sie vergessen, dass der schwierigste Teil der Softwareentwicklung meist darin besteht, die Geschäftsregeln tiefer und komplexer zu verstehen als die Geschäftsleute selbst.
maple_shaft
2
"Nicht-technische Leute haben einfach nicht gelernt, wie Programmierer zu denken." Ja, die Fähigkeit, Probleme zu zerlegen und sie in bestimmten atomaren logischen Begriffen auszudrücken, ist wahrscheinlich das, was einen zu einem Programmierer / Analytiker macht. Die Vorstellung, dass Gherkin so aussieht wie Englisch, dass es von jedem benutzt werden kann, kommt mir unglaublich naiv vor. Vielen Dank für die Bestätigung :) Computer knows nothing about business domain.Natürlich. Ich habe meine Idee nicht sehr deutlich gemacht, tut mir leid. Ich werde der Frage Informationen hinzufügen.
MattiSG
8
@maple_shaft: Die letzten 20 Jahre? Probieren Sie die letzten 60 Jahre. Ein Teil des frühen Hype um COBOL war, dass Geschäftsleute es schreiben konnten, wodurch die Notwendigkeit für Programmierer beseitigt wurde. Als dies nicht gelang, kamen die Leute auf eine Reihe von Sprachen der vierten Generation, die dasselbe tun sollten.
David Thornley
11

Ein Teil der Schwierigkeit beim Schreiben eines Spezifikationsdokuments durch den Kunden besteht darin, dass der Kunde häufig nicht weiß, wie er die vom Kunden gewünschten Dinge in eine Sprache übersetzen kann, die tatsächlich beschreibt, was der Kunde benötigt. Der Kunde kann zwar sagen, dass er möchte, dass ein bestimmtes Verhalten in einem System vorhanden ist, er ist jedoch im Allgemeinen nicht so sehr mit den Details befasst, bis er die Software so gesehen, verwendet und erlebt hat, dass sie nach Ansicht des Kunden nicht ganz zu seiner Arbeitsweise passt braucht.

Wenn Kunden einen Geschäftsprozess beschreiben, lassen sie oft viele relevante Informationen aus. Häufig beziehen sich diese Informationen auf Dinge über einen Prozess, die üblicherweise in der jeweiligen Domäne des Kunden verstanden werden und die daher als selbstverständlich angesehen und häufig nicht an den Programmierer weitergegeben werden. In anderen Fällen weiß der Kunde nicht, wie er mit allen Randbedingungen innerhalb eines Systems umgehen soll, und bittet den Programmierer um Anleitung. Manchmal ist alles ein einfacher Fall von Benutzerfreundlichkeit, bei dem der Kunde denkt, er möchte, dass etwas auf eine Weise funktioniert, aber später seine Meinung ändert, wenn klar wird, dass die Dinge anders funktionieren sollten.

Ok, also genug von "Kundenbeziehungen 101 für Programmierer". Die Frage ist, ob es noch sinnvoll ist, wenn der Kunde ein geschäftslesbares DSL verwendet, um zu definieren, wie eine Spezifikation definiert werden soll. Ich glaube, dass die Antwort unter Anleitung ein vorläufiges "Ja" ist, und ich sage vorläufiges "Ja", weil die nächste Frage, die mir in den Sinn kommt, lautet: Warum sollte ein Kunde ein DSL herstellen, wenn es für einen Programmierer einfacher ist, ein solches zu definieren? Einem Kunden eine einfache und dennoch umfangreiche Sprache zur Verfügung stellen, um zu definieren, wie ein System funktionieren soll.

Wenn Sie einem Kunden eine Sprache zur Verfügung gestellt haben, in der beschrieben wird, wie ein System funktionieren soll, erhalten Sie Aussagen, die sich wie folgt äußern:

"for a given 'subsystem', as a 'business entity' I want 'some feature' so that I might achieve 'some result'".

Diese Art von Aussage beschreibt eine Anforderung auf sehr klare Weise und liefert die Gesamtform, die der Kunde grundsätzlich vom System annehmen möchte, oder eine andere Sichtweise ist, dass der Kunde beschreibt, was das System ist. Wenn Sie möchten, dass Ihr Kunde etwas genauer über die Dinge nachdenkt, können Sie ihn bitten, die Regeln, denen die Funktion entsprechen muss, mit einer Reihe von Anweisungen zu beschreiben, die etwa den folgenden ähneln:

"Given 'some system state', When 'some action occurs', Then expect 'some result'

Wieder sehr klare Beschreibungen, diesmal wieDas System sollte sich verhalten. Die Sache ist, dies ersetzt nicht die Notwendigkeit für einen Softwareentwickler, alle Lücken auszufüllen und weitere Details herauszuarbeiten, die dem Kunden möglicherweise nur am Rande bekannt sind. Während der Kunde möglicherweise vom Programmierer "geschult" werden kann, um Funktionen und Verhaltensweisen in einem netten programmiererfreundlichen Format zu beschreiben, verfügt er nicht wirklich über die Fähigkeiten oder das Wissen, um aussagekräftige Testfälle zu generieren oder die Implementierung bereitzustellen Code. Dies war meines Erachtens der Punkt des Artikels von Martin Fowler, auf den sich das OP bezogen hat. Also ja, die Software selbst ist nicht vom Kunden beschreibbar, aber die Beschreibung der Software kann - und sollte IMHO - mit Sicherheit vom Kunden geschrieben werden. Für das, was es wert ist, habe ich Fowlers Artikel nicht so gelesen, als würde er sagen, dass der Kunde nicht

Ich habe das Gefühl, dass wir Programmierer manchmal vergessen können, dass unsere Kunden in Bezug auf ihr Verständnis ihrer Unternehmen und Geschäftsprozesse im Allgemeinen sehr klug sind, sicherlich viel besser als wir. Wenn sie keinen Programmierer haben, der ihnen erklärt, wie sie ein Softwaresystem erstellen, greifen die Kunden im Allgemeinen auf andere - möglicherweise weniger effiziente - Mittel zurück, um ihre jeweiligen betriebswirtschaftlichen Probleme zu lösen. Damit meine ich einfache Datenbanken (Think Access) oder Tabellenkalkulationen oder sogar handschriftliche Hauptbücher mit genau definierten Regeln und Verfahren zur Verwaltung dieser Prozesse. Was viele Kunden fehlen , ist nicht ein Mittel , um zu bestimmen , wie ein System braucht , um Arbeit, sondern vielmehr , wie es sein sollte gebaut , und was noch wichtiger ist, wie effizient die Verhaltensregeln eines Systems für die Menschen beschreibt,Sie verfügen über die Fähigkeiten, um das System tatsächlich aufzubauen.

Wenn es in der Tat einen Konsens über die mangelnde Beschreibbarkeit gibt, würden Sie dann ein Problem mit einem Tool sehen, das, anstatt mit den Szenarien zu beginnen und sie zu instrumentieren, aus den tatsächlichen Tests geschäftslesbare Szenarien generiert?

Ich denke, dass dies das Problem falsch herum betrachtet. Ich würde ein großes Problem mit einem Tool sehen, das Dokumentation aus Tests generiert, wenn diese Dokumentation in irgendeiner Weise eine Spezifikation darstellen soll. Um ein Szenario zu testen, müssen Sie es verstehen. Daher muss das Szenario bereits vorhanden sein, damit Sie beide einen Test definieren können. Wenn Sie das Szenario in einer BDD-Syntax beschreiben, haben Sie es bereits angegeben und können daher die Szenarien erst nachträglich instrumentieren. Wenn Sie andererseits ein Tool hätten, mit dem der Kunde ein System in einem netten, programmierfreundlichen DSL beschreiben könnte, und wenn dieses Tool zum Generieren der Codevorlagen verwendet werden könnte, die als Testsuite verwendet werden würden, dann würde ich Ich würde sagen, dass ein solches Tool von großem Wert ist. Es würde nicht dazu führen, dass der Kunde Programmierer aus der Gleichung herausnimmt, und es würde dazu beitragen, den Aufwand zu verringern, der erforderlich ist, um die Kundenwünsche zu berücksichtigen und testcodierte Anforderungen auf BDD-Weise zu generieren, und würde möglicherweise das Verständnis der Kundenwünsche erleichtern. Es wäre jedoch kein Ersatz dafür, einen erfahrenen Softwareentwickler zur Hand zu haben, der dem Kunden hilft, die Bedürfnisse des Kunden von den Wünschen des Kunden zu trennen.

S.Robins
quelle
„Um ein Szenario zu testen, muss man es verstehen, daher muss das Szenario bereits vorhanden sein, damit Sie beide einen Test dafür definieren können.“ Ich stimme zu. Was ich in Frage stelle, ist, ob die Durchsetzung von Sprachbeschränkungen irgendetwas wert ist. Ich behaupte nicht, wir sollten nur Tests schreiben; aber ich frage mich, ob wir die Tatsache nicht akzeptieren sollten, dass Geschäftsbeschreibungen immer einfache Beschreibungen in freier Form sein werden (und wahrscheinlich sollten) . Wir hätten also reine Geschäftsabläufe und hätten lesbare Szenarien erstellt, in denen die Menschen entscheiden könnten, ob sie zusammenpassen. Anstatt so zu tun, als würden wir tatsächliche Descs zum Testen verwenden.
MattiSG
@MattiSG ...whether enforcing language constraints is worth anything. Das ist eine gute Frage. Freiformbeschreibungen sind für den Verfasser ausdrucksvoller und natürlicher, führen jedoch zu weitläufigen Kommentaren, bei denen eine Analyse erforderlich ist, um eine nützliche Spezifikation abzuleiten. Indem Sie formale "Regeln" (auch als DSL bezeichnet) für das Schreiben von Anforderungen und Spezifikationen definieren, haben Sie eine gemeinsame Sprache, die sowohl der Kunde als auch der Programmierer verstehen können, wodurch Missverständnisse begrenzt werden. Wenn Sie die Beschreibungen richtig verstehen, können sie wörtlich als Vorlage für Ihre Tests verwendet werden. Es sind also keine komplexen Werkzeuge erforderlich, um etwas zu "generieren".
S.Robins
@MattiSG FWIW, mit DSL und BDD ist das System, das ich selbst benutze. Anforderungen werden als Entity-Feature-Benefit-Anweisungen definiert und mit einer Spezifikation ergänzt, die die anfänglichen Anforderungsanweisungen mithilfe von AAA-Anweisungen (dh Given-When-Then-Anweisungen) erweitert. Dies sind im Wesentlichen Szenarioanweisungen. Die Schwierigkeit beim Versuch, freien Text zu dekodieren, besteht darin, dass Sie ohne DSL nicht leicht einen Algorithmus definieren können, der sinnvolle Erfassungsszenarien erzeugen kann. Mein Punkt war, dass die Verwendung der Tests als Ausgangspunkt zum Generieren von Szenarien rückwärts ist.
S.Robins
5

Ich habe gesehen, wie Entwickler Szenarien geschrieben haben. Tester schreiben Szenarien und sogar ein Product Owner schreibt Szenarien. Ich habe auch Gespräche geführt, die explizit darauf abzielten, Szenarien herauszubringen - "Wenn <dieser andere Kontext> gegeben ist, wann sollte was dann passieren?" - und notieren Sie die Wörter, die das Unternehmen verwendet.

Die besten Ergebnisse hatte ich, als ich mich mit dem Produktbesitzer unterhielt, während er im Büro war, sie in einem Wiki aufzeichnete und an ihn sendete, damit er sie korrigieren und weitere hinzufügen konnte. Er fand ein Paar, das wir in unseren Gesprächen verpasst hatten. Das hat gerockt.

Die schlimmsten Szenarien, die ich gesehen habe, sind die, die Entwickler selbst geschrieben haben, ohne sich mit dem Unternehmen zu unterhalten. Ich kann sagen, weil sie Begriffe wie "Wenn ich eine Suche durchführe" oder "Wenn ich das Formular mit einem Datum von heute + 3 abschicke" verwenden. Es handelt sich in der Regel nicht um sehr interessante Szenarien, viel zu viele, zu wenig detailliert und daher völlig unerreichbar. Das Geschäft liest diese auch nicht.

Viel besser auf die Gespräche IMO zu konzentrieren. Ich habe einige Teams gesehen, die dies nun seit einigen Monaten mit enormen Qualitätsverbesserungen durchgeführt haben, unabhängig von der Automatisierung. Ein Team schaffte es einige Wochen später, die Automatisierung in einem sehr schwierigen Umfeld zum Laufen zu bringen, sehr zur Freude des Testers! Aber wirklich, solange das Team die Gespräche führt und Szenarien verwendet, um andere Szenarien zu zeichnen, denke ich nicht, dass es wichtig ist, wer sie aufschreibt.

Lunivore
quelle
+1 Kommunikation ist wirklich der Schlüssel, und die Szenarien müssen wirklich so aussehen, wie es die Geschäftsleute tun. Wenn wir also ein DSL einrichten, muss dies im Einklang mit der Frage des OPs wirklich in der Lage sein, enger zusammenzupassen zu dem, was der Kunde sagen wird, und nicht zu dem, was der Kunde nach Meinung der Programmierer sagen sollte.
S.Robins
0

Ich habe die Erfahrung gemacht, dass es am besten dem BA (Business Analyst) überlassen ist, die GWT ( Given-When-Then ) zu schreiben (Erfahrung mit SpecFlow). Der BA kann die Kundenanforderungen in das GWT übersetzen und das Unternehmen kann es lesen. Kunden verstehen die Systeme, aber sie haben nicht das technische Denken, um die Anforderungen so zu schreiben, wie wir sie verwenden können.

Idealerweise würde die BA eine GWT schreiben, ich würde einige Revisionen vornehmen, die BA würde die Wiederholung überprüfen / revidieren, bis die BA und das Unternehmen von der Berichterstattung überzeugt waren. Praktisch würde der BA mir einen groben Entwurf geben, den ich aufräumen und arbeiten lassen würde. The Business zuckt mit den Schultern und fragt sich dann, warum es nicht einige Bereiche abdeckt, an die niemand gedacht hat.

SoylentGray
quelle
Könnten Sie bitte erläutern, was GWT für Sie bedeutet? :)
MattiSG
@MattiSG: denke, es ist für Given-When-Then (siehe OP).
sleske
@MattiSG - Der gute Fang des Beitrags wurde aktualisiert.
SoylentGray