Wie verbessert die verhaltensgesteuerte Entwicklung die Klarheit, wenn natürliche Sprachen nicht eindeutig sind?

9

Ich erforsche derzeit BDD- Test-Frameworks wie Gurke und finde es merkwürdig, wenn Leute sagen

Da die Feature-Dateien in einfacher natürlicher Sprache vorliegen, verbessert dies die Klarheit und gibt eine klare Sicht

Aber ist natürliche Sprache nicht die Ursache für die meisten Probleme, die wir im Software-Engineering haben?

Die natürliche Sprache ist nicht eindeutig und das ist der Grund, warum viele Softwareprojekte aufgrund der Fehlinterpretation der Kundenanforderungen und des Verständnisses des Entwicklers scheitern. Ich verstehe die Nische hier nicht.

Ja, die Aufteilung der Tests in winzige, einfach durchführbare Aktionen ist sinnvoll und bietet ein gewisses Maß an Klarheit. Verbessert dies jedoch die Produktivität insgesamt?

PS: Ich bin kein Experte und mache hier keine Meinung. Ich bin nur neugierig, das Konzept zu verstehen.

Raghuram8892
quelle
1
Sehr gute Frage. Ich muss sagen, dass ich noch nie Dinge wie das gesehen habe, was Gurken in der Praxis vorschlagen. Die natürliche Sprache eignet sich nicht für präzise technische Aufgaben wie das Spezifizieren von Tests.
Andres F.
Der Sprachgebrauch von BDD soll die vorhandene Sprache des Geschäftsbereichs widerspiegeln, die für das Unternehmen bereits eindeutig sein sollte. Der Wikipedia-Artikel gibt dies früh im Text an.
Martin Spamer

Antworten:

8

Du hast Recht. BDD beseitigt keine Probleme mit Sprachmehrdeutigkeiten - überhaupt nicht. Wie andere betonten, müssen die zu übersetzenden Snippets durch ordnungsgemäße Definition abgeglichen werden, dies behebt jedoch auch nicht das zugrunde liegende Mehrdeutigkeitsproblem.

Warum lohnt sich BDD eigentlich, obwohl dieses Problem nicht gelöst wurde? Es gibt einige Gründe und diese Liste ist sicherlich nicht vollständig.

Mehrdeutigkeit wurde nicht gelöst

Dies ist weder ein Grund für BDD noch dagegen. Wenn Sie es jedoch anderen Ansätzen wie User Stories oder Anforderungen gegenüberstellen, leiden alle SW-Entwicklungsansätze unter Sprachmehrdeutigkeiten, da sie alle auf die eine oder andere Weise mit einer natürlichen Sprachformulierung beginnen.

Technisch gesehen wurde das Problem der Sprachmehrdeutigkeit mit künstlichen Sprachen wie Lojban gelöst , aber andererseits werden Ihre Kunden und Entwickler diese Sprache höchstwahrscheinlich nicht kennen.

Allgegenwärtige Sprache

BDD geht Hand in Hand mit der Idee einer allgegenwärtigen Sprache. Durch die Möglichkeit, Szenarien zusammen mit allen Kunden, Testern und Entwicklern festzulegen, hat BDD nur einen Vorteil gegenüber anderen Ansätzen.

Stellen Sie sich einen traditionellen Anforderungsingenieur vor, der alle Anforderungen aufschreibt. Sobald Sie als Tester oder Kunde dieses 300-seitige Dokument mit den zu überprüfenden Anforderungen erhalten, werden Sie viel dringlichere Probleme haben als die dort verwendete Terminologie.

User Stories schneiden in dieser Hinsicht etwas besser ab, da sie auch alle Stakeholder in ihre Erstellung einbeziehen. In Bezug auf die allgegenwärtige Sprache würde ich nicht sagen, dass entweder BDD- oder User Stories besser sind - obwohl sie sich im nächsten Punkt erheblich unterscheiden.

Testbarkeit

Ein Hauptaspekt von BDD ist, dass Ihre Spezifikationen tatsächlich ausführbar sind (über Cucumber oder dergleichen). Weder Anforderungen noch User Stories bieten diese Funktion. Für mich persönlich ist das das Hauptverkaufsargument für BDD.

Vergleichen Sie dies mit herkömmlichen Anforderungen - wir sagen Anforderungsingenieuren seit Ewigkeiten, dass ihre Anforderungen überprüfbar sein sollten. Bei jedem Projekt gibt es jedoch einen Fall, in dem Tester irgendwann feststellen, dass sie keine Ahnung haben, wie sie eine bestimmte Anforderung testen sollen.

Wenn User Stories richtig gemacht werden, beziehen sie Tester in ihre frühe Erstellungsphase ein, um dies sicherzustellen. Leider ist dies ein Fall von theoretischer Kollision mit der realen Welt, in der ich zahlreiche Geschichten gesehen habe, die noch kein Tester gesehen hat.

BDD hingegen gibt Ihnen automatisch ein ausführbares Testszenario. Es gibt keine Ausreden und keinen Weg daran vorbei (es sei denn, Sie ignorieren die Automatisierungsebenen vollständig und schreiben nur Szenarien für die ausgefallene Poesie auf).

Im Allgemeinen ist Test First ein Prinzip, das sich in allen Phasen der Softwareentwicklung als sehr lohnend erwiesen hat, und BDD ist seine Anwendung auf die äußerste Ebene der Entwicklung (im Vergleich zu z. B. TDD auf Einheitenebene).

Zusammenfassung

Zusammenfassend lässt sich sagen, dass BDD Sie nicht von den Problemen der Mehrdeutigkeit natürlicher Sprachen abhebt. Es hilft Ihnen jedoch, dieses Problem über zwei wichtige Punkte anzugehen: Konzentrieren Sie sich auf eine allgegenwärtige Sprache, um die Mehrdeutigkeiten zu verringern (sie werden nicht vollständig beseitigt, aber es hilft einer Menge!) Und indem Sie gezwungen werden, ausführbare Dateien zu schreiben Spezifikationen. Der letztere Punkt hilft dabei, Mehrdeutigkeitsprobleme anzugehen, vor allem, weil an diesem Punkt Mehrdeutigkeiten ansonsten als Probleme auftreten.

Frank
quelle
Das ist eine großartige Antwort. Nachdem ich diese Frage gestellt habe, habe ich ein wenig nachgeforscht, und ich sollte den meisten Ihrer Punkte zustimmen. Ein Hauptproblem bei der Verwendung von Tools wie Gurke oder anderen BDD-Tools besteht darin, dass der Entwickler die Idee von BDD auf Zen-Ebene nicht versteht . Hier ist ein interessanter Artikel von Elizabeth Keogh.
Raghuram8892
4

Wenn etwas in „natürlicher Sprache“ geschrieben ist, kann dies eine Reihe von Dingen bedeuten:

  • Das ist buchstäblich Englisch. Da Englisch eine sehr mehrdeutige und ungenaue Sprache ist, ist dieser Eingabemodus im Kontext der Softwareentwicklung unbefriedigend.

  • Dies ist Englisch, aber relevante Begriffe sind genau definiert. Diese Sprache wird in juristischen Dokumenten oder mathematischen Texten verwendet.

  • Dies ist eine formale Sprache, aber die Sprache ist sehr eng an Konventionen der natürlichen Sprache angelehnt. Dies beschreibt bis zu einem gewissen Grad alle Programmiersprachen. Je englischer die formale Sprache ist, desto leichter ist es für ungeschulte Leser zu verstehen. Bemerkenswerte Beispiele für Programmiersprachen mit diesem Ziel sind COBOL und SQL: select id, name from persons where age > 18ist sofort offensichtlich. Der Nachteil dieser Sprachen ist, dass Sie die formale Sprache verstehen müssen, um Arbeitscode zu schreiben . Auch diese Sprachen sind oft sehr ausführlich.

DDD schlägt vor, dass das Projekt eine allgegenwärtige Sprache verwendet , um die Domäne zu beschreiben. Dies ist im Wesentlichen Fall 2: Definieren Sie relevante Begriffe, damit Sie präzise in natürlicher Sprache kommunizieren können.

Gurke selbst ist Fall 3: eine formale Sprache, die die Absicht hat, dem normalen Englisch sehr nahe zu kommen. Genauer gesagt: Cucumber ist ein Framework, mit dem Sie eine einfache formale Sprache definieren können, mit der Anforderungen / Tests ausgedrückt werden können. Der Punkt hier ist, dass dasselbe Dokument die Anforderungen in natürlicher Sprache und automatisch ausführbare Tests darstellt, sodass die beiden immer synchron sind. Sie können ein Gurkenszenario lesen und überprüfen, ob es Ihre Anforderungen korrekt ausdrückt, ohne verstehen zu müssen, wie dies alles funktioniert.

Gurke vergleicht das Dokument mit bekannten Ausschnitten natürlicher Sprache. Diese Schnipsel müssen zuerst definiert werden. Um ein Szenario in Cucumber zu schreiben, müssen Sie die verfügbaren Snippets kennen - die Software liest Ihre Gedanken nicht. Diese Snippets sind auch eine Quelle möglicher Probleme: Wenn Sie das Verhalten eines Text-Snippets implementieren, kann Ihr Code etwas anderes tun, als der Snippet-Text vorschlägt. Es ist unwahrscheinlich, dass dies ein Problem darstellt, wenn dasselbe Snippet mehrmals verwendet wird. Gurke ist daher gut geeignet, um Geschäftsregeln zu beschreiben, die aus einem kleineren Satz von Bedingungen, Aktionen und Ergebnissen bestehen. Andere Test-Frameworks könnten besser sein, wenn jedes Snippet nur ein- oder zweimal verwendet würde, z. B. weil das Setup für jeden Testfall eindeutig ist.

amon
quelle
danke für die ausführlichen info. Ich habe das Gefühl, dass sich Gurke etwas in der Grauzone zwischen Fall 2 und Fall 3 befindet. Im Gegensatz zu SQL, wo man eigentlich keinen "freien Willen" haben und sich an die strenge formale Syntax halten kann. Erlaube Gurke meines Wissens keine Textform nach den Schlüsselwörtern "Gegeben", "Wann" für das Szenario? Es mag so einfach sein, aber ich komme aus einem nicht englischen Heimatland und es ist höchstwahrscheinlich schwierig, Leute dazu zu bringen, präzise Schnipsel zu geben.
Raghuram8892
1
Ja, Sie können nach dem Given/ When/ alles setzen, was Sie wollen Then, aber a) Sie und Ihr Team definieren genau, was das bedeutet, und b) Sie definieren die Bedeutung der Matcher im Code , dh einer formalen Sprache.
Jörg W Mittag
0

@ Raghuram8892, der Text nach den Schlüsselwörtern Given / When / Then / And muss mit dem "Snippet" übereinstimmen, andernfalls schlägt der Schritt als undefiniert oder "ausstehend" fehl. Als solches fällt es genau in Fall 3.

In Bezug auf "Englisch", Gurke und seine Sprache sind Gurken für den internationalen Gebrauch konzipiert. Sie können den Befehl aufrufen, cucumber --i18n helpum die Liste der derzeit unterstützten Sprachen anzuzeigen und cucumber --i18n $CODEdie Schlüsselwörter für einen bestimmten Sprachcode anzuzeigen. Gibt beispielsweise cucumber --i18n eodie Schlüsselwörter für Esperanto an.

Knusprig
quelle