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.
Antworten:
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:
JA, schreibe das. Halten Sie es auf 1-2 Absätze, 1/2 Seite max.
KÖNNTE SEIN. Nur wenn es alles andere aufwertet.
WESENTLICH. Zeigt ALLE Ein- und Ausgänge an. Zeigt den Kontext an. Sie können (und sollten) eine angemessene Zeit damit verbringen.
KÖNNTE SEIN. Wenn das Projekt die Anforderungen erfüllt, ist es sicherlich ein Erfolg. Ich denke, das wird nicht wirklich gebraucht.
NEIN. Ihr Kontextdiagramm macht dies.
JA. Versuchen Sie es kurz zu halten.
KÖNNTE SEIN. Das klingt für mich nach technischen Details, die nicht in einer FUNKTIONS-Spezifikation enthalten sein sollten.
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.
KÖNNTE SEIN. Nur wenn es einen erheblichen Mehrwert bringt, verschwenden Sie sonst Ihre Zeit.
KÖNNTE SEIN. Nur wenn es einen erheblichen Mehrwert bringt, verschwenden Sie sonst Ihre Zeit.
JA - falls relevant.
JA - obligatorisch. Muss sagen, was das Ding tun muss (und mit welchem Leistungsniveau).
Vielleicht - wenn es etwas Besonderes gibt.
Vielleicht - wenn nützlich.
Vielleicht - wenn nützlich.
Vielleicht - wenn nützlich.
NEIN. Dies sollte nicht in einer Spezifikation enthalten sein. Es geht um Zeitplan, Planung usw.
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.
JA. Wesentlich. Sagt, was das Ding tun muss.
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:
Wissen, was Sie tun möchten. UND SCHREIBEN SIE ES AUF. (Das ist eine Spezifikation.)
Mach Sachen, um # 1 oben zu treffen.
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").
quelle
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.
quelle
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
Manager
Programmierer
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
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
Es gibt keine bessere funktionale Spezifikation als einen funktionierenden, aber flüchtigen Prototyp, gerade wegen der Probleme mit einem Wasserfall-Ansatz.
quelle