Wie man eine großartige Funktionsspezifikation erstellt

9

Ich werde sehr bald ein kleines Nebenprojekt starten, aber dieses Mal möchte ich nicht nur das kleine UML-Domänenmodell und die Falldiagramme erstellen, die ich oft vor dem Programmieren mache. Ich habe darüber nachgedacht, eine vollständige Funktionsspezifikation zu erstellen. Gibt es jemanden, der Erfahrung mit dem Schreiben von Funktionsspezifikationen hat, die mir empfehlen könnten, was ich hinzufügen muss? Wie wäre der beste Weg, um mit der Vorbereitung zu beginnen? Hier werde ich die Themen aufschreiben, die ich für relevanter halte:

  • Zweck
  • Funktionsübersicht
  • Kontextdiagramm
  • Kritische Projekterfolgsfaktoren
  • Geltungsbereich (In & Out)
  • Annahmen
  • Akteure (Datenquellen, Systemakteure)
  • Anwendungsfalldiagramm
  • Prozessablaufdiagramm
  • Aktivitätsdiagramm
  • Sicherheitsanforderungen
  • Leistungsanforderungen
  • Besondere Anforderungen
  • Geschäftsregeln
  • Domänenmodell (Datenmodell)
  • Flussszenarien (Erfolg, Alternative…)
  • Zeitplan (Aufgabenverwaltung)
  • Tore
  • System Anforderungen
  • Erwartete Ausgaben

Was denkst du über diese Themen? Soll ich noch etwas hinzufügen? oder vielleicht etwas entfernen?

Ich bin jede einzelne Antwort gefahren und möchte mich bei Ihnen allen für die nützlichen Informationen bedanken.

Ich mache dieses Nebenprojekt für ein Unternehmen, und sie sehen von mir einen ständigen Kommunikationsfluss, und ich muss erklären, warum ich alles mache, weil ich die Ressourcen verwalten muss, die sie mir geben. Dies wird meine erste Funk-Spezifikation sein und wie gesagt, ich möchte, dass sie nützlich ist, nicht nur groß und nutzlos. Ich denke, das muss getan werden, aber ich möchte es auf eine Weise tun, die für mich und mein Team nützlicher ist. Es ist schlimm, dass wir keinen Manager haben, deshalb muss ich mich auch um einige administrative Aufgaben kümmern ...

In Bezug auf die agile Programmierung denke ich, dass dies 100% kompatibel mit dem agilen Ansatz ist. Ich bin selbst ein agiler Programmierer und ich bin ehrlich gesagt selbstbewusster geworden, als jemand bereits das Denken für mich getan hat. Ich bin immer noch Junnior, aber ich habe vorher als Tapestry-Webentwickler in anderen Projekten gearbeitet, wo die Organisation ein totales Chaos war.

Ich bin nicht der Meinung, dass ich einen Wasserfall-Ansatz mache. Ich denke, ich versuche nur, einige Grenzen zu definieren, die das Projekt zu Beginn der Entwicklung einfacher machen.

sfrj
quelle
Was ist mit Großbuchstaben los?
Amokrane Chentir
4
Oder könnten Sie das Projekt abgeschlossen haben, wenn Sie das alles aufschreiben?
Alternative
1
Klingt für mich nach Zeitverschwendung. Denken Sie, dass eine der heute gängigen Anwendungen auf diese Weise gestartet wurde? Jemand sagte "X saugt" oder "Y könnte cool sein" und sie begannen eine Lösung zu entwickeln.
Kevin Cline
1
Wenn ich ein Auftragnehmer wäre, würde ich niemals das Risiko eingehen, ein Festpreisangebot abzugeben, um ein komplexes System mit einer Spezifikation zu erstellen, die länger als ein paar Seiten ist. Ich würde das System viel lieber schrittweise aufbauen und liefern und zu einem vereinbarten Stundensatz abrechnen. Dies minimiert das Risiko sowohl für den Kunden als auch für den Auftragnehmer und maximiert das Feedback, das zur Erstellung eines nutzbaren Systems erforderlich ist.
Kevin Cline
1
@dunk - Zu Beginn des Flugdienstes waren nicht alle Funktionen moderner Jetliner vorhanden. Eine Anwendung kann nützlich sein, bevor jeder erdenkliche Anwendungsfall implementiert wurde.
Kevin Cline

Antworten:

23

Was Sie vorschlagen, ist aus Sicht der Puristen von Systems Engineering in Ordnung.

(Es wird ein paar agile Anhänger geben, die denken, dass alles übertrieben ist ... und Sie sollten einfach rausgehen und Sachen mit den üblichen Bewertungen usw. machen).

Sie müssen jedoch berücksichtigen, was Sie tun und für wen Sie es tun.

Ein Projekt für sich selbst zu machen ist etwas anderes als für jemand anderen - für Geld.

Wenn Sie für eine andere Person arbeiten (entweder in einem Unternehmen oder im Vertrag), sprechen und schreiben die EINZIGEN Kommunikationsmittel. (Letztendlich wird es ein Produkt oder Ergebnis geben, das bewertet werden kann.)

Der springende Punkt einer Spezifikation besteht darin, zu versuchen, die Kosten für spätere Korrekturen und Änderungen zu senken. Möglicherweise haben Sie die Diagramme gesehen, in denen die Kosten für Korrekturen in verschiedenen Phasen eines Projekts dargestellt sind.

  • Eine Korrektur einer dummen Idee kostet 1 US-Dollar

  • Ein Fix, der vorgenommen wurde, als die dumme Idee es in eine Spezifikation schaffte (die aktualisiert werden muss), kostet 10 US-Dollar

  • Eine Korrektur, die beim Erstellen eines Prototyps vorgenommen wurde, kostet 100 US-Dollar

  • Ein Fix, der ungefähr zu dem Zeitpunkt vorgenommen wurde, zu dem Sie eine Annahme vor dem Versand vornehmen, kostet 1000 US-Dollar

  • Ein Fix, der nach dem Versand und der Verärgerung Ihrer Kunden vorgenommen wurde, kostet 10000 US-Dollar.

Was Sie also in eine Spezifikation schreiben, ist ziemlich wichtig.

Zu argumentieren, dass Sie überhaupt keine Spezifikation haben sollten, ist naiv, dumm und wahrscheinlich gefährlich.

Eines der größten Probleme beim Schreiben einer Spezifikation besteht darin, zu wissen, wann Sie zu weit gegangen sind. Dies hängt von der Größe des Projekts ab. Zum Beispiel sollte ein Projekt, an dem 1-2 Personen ungefähr ein Jahr teilnehmen, insgesamt zwischen 2 und 4 WOCHEN für die Spezifikation aufgewendet werden ... einschließlich der Untersuchung der Machbarkeit ... der Spezifikation, die von den Personen geschrieben werden muss, die dies tatsächlich tun Die Arbeit ist kein hochfalutinischer Analytikertyp, der die blutigen Details nicht kennt. Ein Projekt, das 10 Personen 2 Jahre dauert, braucht viel länger.

Nun zu einigen Kommentaren zu Ihren verschiedenen Punkten:

  • Zweck

JA, schreibe das. Halten Sie es auf 1-2 Absätze, 1/2 Seite max.

  • Funktionsübersicht

KÖNNTE SEIN. Nur wenn es alles andere aufwertet.

  • Kontextdiagramm

WESENTLICH. Zeigt ALLE Ein- und Ausgänge an. Zeigt den Kontext an. Sie können (und sollten) eine angemessene Zeit damit verbringen.

  • Kritische Projekterfolgsfaktoren

KÖNNTE SEIN. Wenn das Projekt die Anforderungen erfüllt, ist es sicherlich ein Erfolg. Ich denke, das wird nicht wirklich gebraucht.

  • Geltungsbereich (In & Out)

NEIN. Ihr Kontextdiagramm macht dies.

  • Annahmen

JA. Versuchen Sie es kurz zu halten.

  • Akteure (Datenquellen, Systemakteure)

KÖNNTE SEIN. Das klingt für mich nach technischen Details, die nicht in einer FUNKTIONS-Spezifikation enthalten sein sollten.

  • Anwendungsfalldiagramm

KÖNNTE SEIN. Fügen Sie dies (diese) in einen Anhang ein. Erklären Sie mit Worten. Versuchen Sie, diese auf eine kleine Anzahl zu beschränken. Ich habe Vorschläge gesehen, dass in einem Projekt nicht mehr als 8 Anwendungsfälle ausführlich erläutert werden sollten. Decken Sie nicht alle "unglücklichen" Pfade ab, sonst werden Sie nie fertig.

Es ist sehr selten, dass ein Teil von s / w ein einzelnes Anwendungsfall- / Anwendungsfalldiagramm hat.

  • Prozessablaufdiagramm

KÖNNTE SEIN. Nur wenn es einen erheblichen Mehrwert bringt, verschwenden Sie sonst Ihre Zeit.

  • Aktivitätsdiagramm

KÖNNTE SEIN. Nur wenn es einen erheblichen Mehrwert bringt, verschwenden Sie sonst Ihre Zeit.

  • Sicherheitsanforderungen

JA - falls relevant.

  • Leistungsanforderungen

JA - obligatorisch. Muss sagen, was das Ding tun muss (und mit welchem ​​Leistungsniveau).

  • Besondere Anforderungen

Vielleicht - wenn es etwas Besonderes gibt.

  • Geschäftsregeln

Vielleicht - wenn nützlich.

  • Domänenmodell (Datenmodell)

Vielleicht - wenn nützlich.

  • Flussszenarien (Erfolg, Alternative…)

Vielleicht - wenn nützlich.

  • Zeitplan (Aufgabenverwaltung)

NEIN. Dies sollte nicht in einer Spezifikation enthalten sein. Es geht um Zeitplan, Planung usw.

  • Tore

KÖNNTE SEIN. Ziele sind keine Voraussetzungen, sie sind vage, flauschige, nicht schöne Dinge, die dazu dienen, das Wasser zu trüben. Versuche es zu vermeiden.

  • System Anforderungen

JA. Wesentlich. Sagt, was das Ding tun muss.

  • Erwartete Ausgaben

NEIN. Teil der Planung und Verwaltung, nicht die Anforderungen der Sache, die Sie machen.


Erläuterung: Ich schreibe seit über 15 Jahren Spezifikationen für Produkte, Software und komplexe Systeme. Alle kommerziellen Sachen. Meist kommerziell erfolgreich und viel Geld für verschiedene Arbeitgeber verdient. Einschließlich der Spezifikation für die agile S / W-Entwicklung, bei der Sie noch eine Spezifikation benötigen, bevor Sie in die Entwicklung einsteigen. Die IST-Entwicklung kann in jedem gewünschten Prozess durchgeführt werden, aber am Ende müssen Sie drei Dinge haben, um erfolgreich zu sein:

  1. Wissen, was Sie tun möchten. UND SCHREIBEN SIE ES AUF. (Das ist eine Spezifikation.)

  2. Mach Sachen, um # 1 oben zu treffen.

  3. Führen Sie ein gewisses Maß an Abnahmetests der Sache anhand der Spezifikation durch (was im Wesentlichen "Haben Sie getan, was Sie gesagt haben, dass Sie tun würden").

schnell_now
quelle
Diese Antwort ist reine Meinung und hat keine wissenschaftliche Grundlage. Es gibt keine Beweise dafür, dass Sie irgendetwas davon brauchen.
Dave Hillier
1
Entschuldigung, Herr Hillier, nicht wahr. Gut etabliert im Verteidigungs- und Luftfahrtgeschäft (lesen Sie mehr über die s / w-Entwicklungsprozesse der NASA). Ich habe sogar Kurse besucht, in denen all dies gelehrt wird, und seit 30 Jahren in dem einen oder anderen praktiziert.
schnell_now
Wow, Sie sind so erfahren, dass Sie keine einzige Referenz angeben müssen, um zu beweisen, dass eine Ihrer Behauptungen wahr ist. Auf jeden Fall sage ich nicht, dass es keinen Grund gibt, warum Sie dieses Zeug jemals brauchen würden, nur dass Sie keine guten Gründe haben, warum er dieses Zeug tatsächlich braucht.
Dave Hillier
Seufzer. Die Frage betraf eine FUNKTIONSSPEZIFIKATION. Dies bedeutet, dass Sie nichts mit Ressourcenbeschaffung, Zeitplanung, Projektstrukturplan usw. zu tun haben. Im normalen Verlauf von Ereignissen werden diese Informationen in einer Leistungsbeschreibung angezeigt und enthalten dann unterstützende Informationen in einem PSP, Zeitplan, Personalzuweisungen usw. usw. Die bekannteste, wenn auch heutzutage vielleicht etwas veraltete Referenz ist Blanchard "Systems Engineering and Analysis". Es gibt viele Ausgaben, die späteren sind wahrscheinlich die besten.
schnell_now
Ob eine funktionale Spezifikation für die S / W-Entwicklung verwendet werden sollte, ist ein gutes Argument - in der Regel gegen diejenigen, die es nicht mögen, zu Beginn eines Projekts festgehalten zu werden. Es gibt andere "moderne" Techniken, von denen behauptet wird, dass sie besser funktionieren (siehe The Agile Manifesto). Ob sie tatsächlich besser funktionieren, ist umstritten. Wenn der Kunde beispielsweise einen großen Entwicklungsjob für die Verteidigung ausführt, fühlt er sich möglicherweise mit häufigen Builds wohl, ist jedoch möglicherweise nicht bereit, diese zu fliegen. Und eine solche Arbeit ohne funktionale Spezifikation wird in der Angebotsphase wahrscheinlich nicht akzeptiert.
schnell_now
5

Es gibt drei Dinge zu beachten

1) Du musst irgendwo anfangen

Haben Sie das Problem identifiziert, das dieses Projekt zu lösen versucht? Sie könnten auch sagen: "Hier sind die Dinge, die dieses Projekt nicht abschließen würde, wenn es nicht möglich wäre." Ich habe auch einige Projekte gesehen (einige erfolgreich, andere weniger), die den Hauptbildschirm entwerfen und von dort aus die Lücken füllen.

2) Du musst irgendwo enden

Sie können Dinge zur Hölle spezifizieren, aber wenn Sie nie etwas tun, verschwenden Sie nur eine Menge Zeit und Papier und ignorieren Ihre Frau und Kinder sieben Wochen lang. (Wurde das schon gemacht?) Stellen Sie also sicher, dass Sie einige Grenzen setzen, wie weit Ihre Spezifikation gehen wird. Ist es sowohl eine technische als auch eine funktionale Spezifikation?

3) Sie müssen von Anfang bis Ende kommen

Beginnen Sie nicht damit, eine Hauptanforderung zu erhalten und dann jedes Detail darüber auszufüllen, bevor Sie die zweite Hauptanforderung zumindest in der Gliederung erhalten. Erstellen Sie Ihre Spezifikation zuerst horizontal und dann vertikal. Andernfalls treten einige größere Probleme auf, wenn Sie ein kleines Detail der ersten Anforderung erkennen, das die gesamte zweite Anforderung unmöglich macht.

corsiKa
quelle
3

Ich würde Ihre Liste in drei Teile aufteilen: die Dinge, die Benutzer interessieren, die Dinge, die Programmierer interessieren und die Dinge, die Manager interessieren. Lassen Sie einen Programmierer ihren Teil und einen Manager ihren Teil tun. Der Programmierer muss dem Manager und dem Manager wahrscheinlich Schätzungen für Teile des Projekts vorlegen, um dem Programmierer die Budgetbeschränkungen zur Verfügung zu stellen (dh es kann nicht länger als X Wochen dauern). Wenn alle (Kunden, Manager, Programmierer) zustimmen, ist dies grünes Licht und starten Sie das Projekt. Für den Programmierer, viele Leute poo-poo Spezifikationen, manchmal zu Recht. Ich würde nur die Teile spezifizieren, in denen zwei oder mehr Parteien kommunizieren (z. B. Client-Server). Im Übrigen üben Sie einfach eine Form von TDD basierend auf User Stories. Eine Linie zum Kunden ist auch vorteilhaft, um Geschichten zu erhalten.

Benutzergeschichten

  • Zweck Ziele Funktionsübersicht
  • Akteure (Datenquellen, Systemakteure)
  • Anwendungsfalldiagramm
  • Prozessablaufdiagramm
  • Aktivitätsdiagramm
  • Kontextdiagramm
  • Geschäftsregeln
  • Besondere Anforderungen
  • Leistungsanforderungen

Manager

  • Kritische Projekterfolgsfaktoren
  • Erwartete Ausgaben
  • Flussszenarien (Erfolg, Alternative…)
  • Zeitplan (Aufgabenverwaltung)

Programmierer

  • Sicherheitsanforderungen
  • Domänenmodell (Datenmodell)
  • System Anforderungen

Außerdem gibt es wahrscheinlich nicht für alle Arten von Softwareproblemen ein perfektes Rezept. Für eine Facebook-App möchten Sie wahrscheinlich früh und häufig eine Demo durchführen. Für ein Raketenleitsystem wahrscheinlich nicht so viel ;-)


quelle
2

Die Vorbereitung all dieser Dokumente kann Monate dauern! Sieht aus wie eine Art Wasserfall für mich.

Ich kann nicht vorschlagen, Ihrer Liste etwas mehr hinzuzufügen, es sei denn, Sie nehmen ein paar davon heraus. Ich denke, die zu produzierenden Artefakte hängen von der Kultur in Ihrem Unternehmen und den Fähigkeiten der Entwickler ab.


quelle
1
Siehe meine lange Antwort. Wasserfall ist ein alberner Ansatz in seiner Gesamtheit, weil er davon ausgeht, dass nichts schief geht. (Anforderungen sammeln, spezifizieren, entwerfen, herstellen, testen, verkaufen ... ohh, etwas ist schief gelaufen ... whoops, das ist ein bisschen schwierig). Der Punkt über das Front-End-Laden, an dem Sie die Anforderungen erfassen und Spezifikationen schreiben, sollte jedoch nicht ignoriert werden. Nur weil der gesamte Prozess naiv ist, heißt das nicht, dass Sie alles wegwerfen. Sie suchen nach den guten Teilen und verwenden sie.
schnell_now
-1

Es gibt keine bessere funktionale Spezifikation als einen funktionierenden, aber flüchtigen Prototyp, gerade wegen der Probleme mit einem Wasserfall-Ansatz.

Job
quelle
Das ist eine extrem gefährliche Sache, sagen Sie.
schnell_now
3
Dieser Ansatz hat viele Unternehmen aus dem Geschäft gebracht. Der hässliche Prototyp scheint immer das hässliche Produkt zu sein.
Dunk