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.