funktionale Anforderungen - Formulierung basierend auf Verben verwenden?

8

Frage

Sollten die funktionalen Anforderungen in einem Anforderungsdokument einen auf Verben basierenden Wortlaut verwenden?

Kontext

Schulaufgabe, Teamarbeit, SDLC-Arbeit. Das Anforderungsdokument wurde erstellt und wir befassen uns jetzt mit dem Design.

Problem

Das Anforderungsdokument enthält eine Auflistung der Funktionen der App - der funktionalen Anforderungen. In dieser Liste sind Dinge enthalten, die ich eher als "Wie" als als "Was" bezeichnen würde. Wenn ich jetzt versuche, an Design zu arbeiten, habe ich das Gefühl, dass ein Teil des Designs vorzeitig diktiert wurde.

Ich habe das noch nie gemacht! Für mich sollte ich mich streng mit Dingen befassen, die "was" beschreiben.

Beispiel für Strom

Stellen Sie sich vor, es sei die Aufgabe, ein Omelett zuzubereiten. Auflistung: Ei knacken, in Schüssel brechen, rühren usw.; überquert die Linie in das Gebiet wie. Entlang dieser Spur finden sich auch Formulierungen wie: Erstellen, Generieren, Auflisten, Berechnen, Bestimmen, Validieren usw. - Verben im Grunde. Im Moment habe ich eine Liste von Anforderungen, die teilweise in Verben verwurzelt sind.

Meine Vorstellung von einem Anforderungsdokument für ein Omelett wäre eher wie: Hat zwei Eier, x Unzen Schinken, x Unzen Speck, x Unzen Montery-Jack-Käse, x Unzen Koriander usw. - nichts als was (Substantive) .

Ich hätte mich möglicherweise vor dem Abschluss des Anforderungsdokuments zu Wort melden können, wenn ich Erfahrung gehabt hätte.

yas
quelle
1
zwei Eier, Schinken, Speck, Käse ... das muss Ofenkäse mit bestreutem Speck und garniert mit rohem Ei sein ... ja, ich glaube, ich habe es bekommen
Pop Catalin
Ihre Vorstellung von einem Anforderungsdokument hat ein Verb: "hat". Es sind nicht nur Substantive.
niemand

Antworten:

10

Sie können und sollten Verben in Ihren Anforderungen verwenden. Wichtig ist, dass jede Anforderung wie folgt lautet:

  • Eindeutig - jede Anforderung kann nur eines bedeuten und nur in eine Richtung interpretiert werden.
  • Atomic - Jede Anforderung kann nicht in mehrere Anforderungen unterteilt werden.
  • Testbar - Es kann nachgewiesen werden, dass jede Anforderung durch irgendeine Form von Test erfüllt oder nicht erfüllt wurde.

Sie wären überrascht, wie gut Ihre Anforderungen ausfallen, wenn Sie diese drei Richtlinien um jeden Preis befolgen.

Stellen Sie außerdem sicher, dass Sie für jede Anforderung eine Begründung schreiben . Dies ist sehr wichtig und nützlich, wenn sich jemand fragt, warum eine bestimmte Anforderung erstellt wurde.

Und ja, Sie haben Recht, die Anforderungen sollten beschreiben, WAS die Software tun wird, nicht WIE sie es tun wird.

CFL_Jeff
quelle
U / A / T: Es gibt einige Hausaufgaben für mich! Es ist beruhigend, eine Bestätigung zu erhalten, dass WAS das Ziel ist. Das Zeigen von Gründen erfordert möglicherweise etwas Arbeit. Vielen Dank.
YAS
PS - danke, dass Sie das allgemeine Konzept und den Kontext erkannt haben, anstatt sich auf das "Omelett" -Szenario zu konzentrieren, das nur angeboten wurde, um zu vereinfachen, etwas Konkretes bereitzustellen und keine Details preiszugeben; es war aus meinem Kopf; wirklich spontan.
Ja,
@yas Kein Problem, gut, dass Sie sich die Mühe gemacht haben, die Anforderungen zu verbessern, nachdem Sie festgestellt haben, dass sie zu designorientiert sind!
CFL_Jeff
Es ist normal, höhere und niedrigere Anforderungen zu haben, bei denen die höheren in niedrigere Anforderungen unterteilt werden. In einem Projekt, bei dem es nicht nur um das Codieren, sondern auch um Design geht, würde ich einen Baum von Anforderungen erwarten, nicht nur die atomaren Anforderungen der niedrigsten Ebene.
Pete Kirkham
2

"Sollten die funktionalen Anforderungen in einem Anforderungsdokument einen auf Verben basierenden Wortlaut verwenden?"

Die kurze Antwort lautet "Ja", aber der Weg dorthin ist kurvenreich.

Wenn das Anforderungsdokument eine Sammlung von "soll" -Anweisungen ist, die als englische Sätze geschrieben sind, müssen Sie eine Verbalphrase haben. Und diese Verbalphrase wird das "soll xxx" wie in "das System soll xxx". Der Teil "xxx" ist eine von drei Arten von Verben: "be", "do" und "have". Diese Sätze müssen das System als Black Box beschreiben und nur die Dinge aufzeichnen, die von außen gesehen werden können. Wie Sie sagten, "das Was statt das Wie". Wenn es von außen sichtbar ist, ist es ein "Was".

Die einzig mögliche Funktion, die einem digitalen System zur Verfügung steht, besteht darin, den Wert einer Variablen zu ändern. Daher müssen alle funktionalen Anforderungen angeben, welche Variable geändert wird und welche Berechnungen für die Änderung verwendet werden. Dies sind die "do" -Anforderungen.

Die "be" -Anforderungen beschreiben eher Merkmale als Funktionen. "Das System muss in der Lage sein ...". Sie beschreiben einen "Seinszustand".

Die "Haben" -Anforderungen sind die Substantive, über die Sie gesprochen haben. "Das System soll ..." Sie liefern die Substantive für die funktionalen Anforderungssätze.

Auf hohem Niveau gibt es nur sehr wenige funktionale Anforderungen. Die meisten Anforderungen sind entweder Funktionsanforderungen, Leistungsanforderungen oder Anforderungen an die Zusammensetzung.

Alle Anforderungen auf hoher Ebene, die Kinder benötigen, sind per Definition nicht eindeutig. Wenn sie eindeutig wären, würden sie keine Kinder brauchen, um sie zu definieren. Darüber hinaus ist eine Anforderung nur dann eindeutig, wenn die Mehrheit der Personen in einer Anforderungsüberprüfung erklärt, dass dies der Fall ist. Das heißt, Mehrdeutigkeit ist subjektiv. Die nächstgelegene Definition für eine mir bekannte eindeutige FUNKTIONSANFORDERUNG finden Sie bei BarBaraBea.com auf der Seite "Eindeutige funktionale Anforderungen". Grundsätzlich heißt es, dass alle Substantive in einer funktionalen Anforderung aus den Systemeingaben über eine Kette eindeutiger funktionaler Anforderungen abgeleitet werden müssen und dass die Aussage der Berechnung in der Anforderung einen Algorithmus beschreiben muss. Die Definition von "Algorithmus" ist viel weniger subjektiv als die Definition von "eindeutiger Anforderung".

Jim
quelle
Ich stimme dieser Antwort eigentlich ziemlich zu. Wir haben sogar das folgende Muster verwendet, um funktionale Anforderungen auszudrücken (und dieses Muster hilft sehr): Ein gegebenes System soll (gegeben, erschaffen, kochen ...) etwas in einem gegebenen Zustand mit diesen Leistungen tun.
Marc-Emmanuel Coupvent des Gra
1

... Stellen Sie sich vor, es sei die Aufgabe, ein Omelett zuzubereiten. Auflistung: Ei knacken, in Schüssel brechen, rühren usw.; überquert die Grenze in das Gebiet, wie ...
...
meine Vorstellung von einem Anforderungsdokument für ein Omelett wäre eher wie: hat zwei Eier, x Unzen Schinken, x Unzen Speck, x Unzen Montery-Jack-Käse , x Unzen Koriander usw. - nichts als was (Substantive) ...

Nun, für Omelett würde ich die Anforderungen der ersten Version der zweiten vorziehen, einfach weil die zweite Version das Risiko birgt, zwei Eier, x Unzen Schinken usw. zu bekommen - nichts als das, weder gebraten noch Rührei.

Die zweite Version garantiert, dass ich das bekomme, was ich brauche, aber es ist auch etwas scheiße - nur weil der einzige Weg, um sicherzustellen, dass die Anforderungen erfüllt werden, darin besteht, in der Küche zu bleiben und jeden Schritt einer Mahlzeit genau zu beobachten.

Sie sehen, ich würde Anforderungen bevorzugen, die es mir irgendwie ermöglichen würden , das Ergebnis zu testen / zu verifizieren, ohne gezwungen zu sein, zu beobachten, wie Sie das Essen zubereiten.

Eine Möglichkeit, dies zu erreichen, besteht darin, Anforderungen als bestandenen Vergleich mit der Referenz anzugeben. Am Beispiel eines Omeletts würde ich mein eigenes "Referenz" -Omelett nach denselben Anweisungen wie Sie erstellen und dann Ihr Omelett vergleichen, um nahe genug daran zu sein.

  • Ich habe diesen Ansatz verwendet, als ich eine stark optimierte Version eines bestimmten Algorithmus testen musste. "Referenzomelett" wurde in diesem Fall durch einen vereinfachten, nicht optimierten Algorithmus dargestellt. Ich führe dieselbe Eingabe mit zwei Arten von Algorithmen aus und überprüfe dann, ob die von der optimierten Version erzeugte Ausgabe nahe genug an der Referenz liegt.

Eine andere Möglichkeit wäre, Anforderungen anzugeben, damit diese das Ergebnis beschreiben. Für Omelett wäre das wie "4 Unzen Eier, Rührei und gebraten, etc ...". Ich habe mich hauptsächlich mit solchen Anforderungen befasst - ich denke, das ist der typischste Weg.

  • Der Vollständigkeit halber muss ich wahrscheinlich noch eine andere Art von spezifizierenden Anforderungen beschreiben, mit denen ich mich befasst habe - testbasiert. Ich kann mir keinen Weg vorstellen, der für ein Omelett-Beispiel nicht lahm klingt - so etwas wie "Wenn ein Experte es betrachtet und schmeckt, sagt er OK" -, muss ich zugeben, in dem einzigen Fall, in dem ich es für Software verwendet habe Es fühlte sich auch nicht besonders klug an.
Mücke
quelle
0

Ein Funktionsprogramm besteht aus Funktionen. Was sind Funktionen? Sie sind Methoden, die Aktionen ausführen. Was sind Aktionswörter? Verben.

Wenn Sie objektorientiert programmieren würden, würden Sie mit Substantiven arbeiten. Eigentlich würden Sie sowohl mit Substantiven als auch mit Verben arbeiten.

Funktionsstil:

crack(egg)

Objektorientierter Stil:

egg.Crack();

Auf der Anforderungsebene bin ich mir nicht sicher, ob dies von Bedeutung ist, obwohl es sicherlich hilfreich wäre, wenn die Anforderungen in Form von Aktionen angegeben würden, da Funktionen das sind, was Sie schreiben werden.

Robert Harvey
quelle
Habe diese Antwort nicht erwartet; Wir haben nie über funktionale oder Objektstile gesprochen. Die angegebene Sprache ist Java und ich / wir (?) Vermuteten den Objektstil. Es scheint, dass das Auslassen von Java als Sprache ein Versehen von meiner Seite war. Ihre Antwort gibt mir einen Einblick, den ich nicht erwartet hatte! Danke für die Antwort.
Ja,
Die funktionalen Anforderungen eines Systems hängen nicht damit zusammen, ob seine Softwarekomponenten in einem funktionalen Programmierstil implementiert sind, sondern mit den Anforderungen, die den Fluss oder die Umwandlung von Materie, Energie oder Informationen regeln (siehe Pahl und Beitz '1988' Engineering Design ', John Gero's) Funktions-Verhaltens-Struktur-Modell des Entwurfs oder zahlreiche andere technische Anforderungen oder Entwurfspapiere und Bücher).
Pete Kirkham
@ PeteKirkham: Ich habe diese Behauptung nicht gemacht.
Robert Harvey
Warum sprechen Sie überhaupt über funktionale Programmierung?
Pete Kirkham
@ PeteKirkham: Du hast mich ... Querdenken, nehme ich an.
Robert Harvey
0

Alle Anforderungen können im Wesentlichen auf eine Sammlung von Aussagen reduziert werden, die sich um die Verwendung von Verben drehen. Ja, Sie können ein paar Substantive und Adjektive einfügen, aber es sind die Verben, die beschreiben, wie sich ein System verhält und was der Kunde von der Software erwartet. Sogar ein Großteil der zustandsspezifischen Funktionen eines Programms kann als Verhalten betrachtet werden, wenn Sie den Zustand durch Getter- und Setter-Methoden darstellen.

Genau wie CFL_Jeff in seiner Antwort erwähnt , möchten Sie, dass Ihre Anforderungen beschreiben, was ein System tun wird, und nicht, wie es getan werden soll. Dies ist möglicherweise der Grund, warum ich die verhaltensgesteuerte Entwicklung so überzeugend finde , weil sie die Verwendung von Verben fördert, die Anforderungen beschreiben, und die Verwendung von Verben beim Schreiben von Komponententests, um Anforderungen als zu testende Verhaltensweisen zu beschreiben.

Betrachten Sie für einen Moment die folgenden Anforderungen und Szenariovorlagen:

  • As an {actor} I want to {do something} in order to {achieve an outcome}
  • Given {an initial context} When {something is done} Then {expect an outcome}

In BDD sind Features immer das Bit, das im Abschnitt "Ich möchte" der Vorlage beschrieben ist, und sie werden immer mit Verben geladen, die beschreiben, was das Feature tut. Beim Testen wird eine Given-When-ThenVorlage verwendet, um bestimmte Szenarien zu validieren, die sich auf das Feature beziehen, und der Abschnitt "Wann" der Vorlage wird immer durch die verwendeten Verben definiert, die sich in gewisser Weise auf die in der Feature-Spezifikation verwendeten Verben beziehen.

Anhand Ihres Omelett-Beispiels ist es sehr sinnvoll, eine Reihe von Verhaltensweisen als Serie zu definieren. Sie haben eine Sammlung von Verhaltensweisen und Ergebnissen, und als Serie bilden sie einen Workflow. Wenn Sie stattdessen eine Liste von Zutaten definieren, beschreiben Sie die Architektur effektiv sehr locker, es bleiben jedoch viele Fragen offen. Was ist der Workflow? Wie sind die Zutaten zu verwenden? Ihnen fehlt im Grunde der "Kleber", der Ihre Entscheidungen darüber, wie Sie Ihr System zusammenbauen und wie sich Ihr System verhalten soll, leitet.

Indem Sie Anforderungen in Bezug auf Verhalten und Ergebnisse definieren, können Sie ein sehr klares Bild davon liefern, was die Software erreichen soll, ohne sich Gedanken darüber machen zu müssen, wie solche Ergebnisse in der Software konkret erzielt werden können.

S.Robins
quelle
Derzeit fällt eines der Softwareprodukte bei der Arbeit aus, da es zu viel CPU für den spritzwassergeschützten Fall des Systems verwendet, auf dem es ausgeführt wird, um die Wärme abzuleiten. Obwohl Sie einige dieser Anforderungen als Verben definieren können - "das tragbare Überwachungssystem muss in einem Gehäuse geliefert werden, das den IP 4-Wassereintrittsstandards entspricht" -, scheint das einzige Verb "kommen" zu sein und kein Verhalten der Komponente, das ein Risiko dafür verursacht Die Anforderung, die nicht erfüllt wird, ist in der Anforderung des Kunden enthalten.
Pete Kirkham
@PeteKirkham Sie haben ein Hardwareproblem beschrieben. Insbesondere eine Spezifikation der Form, nicht der Funktion. Dies macht meine Antwort auf die Frage des OP, die sich auf die Funktionsspezifikation bezieht, nicht ungültig. Wenn Sie sich jedoch mit dem von Ihnen beschriebenen Fall befassen, lautet Ihre Funktionsspezifikation möglicherweise "Bei gegebener 'Softwarekonfiguration X', wenn die CPU-Auslastung überschritten wird (eine vorgegebene Einschränkung und Zeit), dann erwarten Sie einen Systemfehler". Besser noch, ersetzen Sie "Systemfehler" durch einen "Wiederherstellungsprozess", um anzugeben, wie ein Fehler vermieden werden kann. Manchmal müssen wir ein wenig kreativ denken, um bestimmte Verhaltensweisen aufzudecken. :-)
S.Robins