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}
…
Antworten:
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.
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.
quelle
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.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.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.
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.
quelle
...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".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.
quelle
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.
quelle