Momentan verwenden wir in meinem aktuellen Projekt agile Methoden, und wir haben jede Menge solcher Geschichten:
Als Assistent möchte ich einem Kunden eine Rückerstattung zahlen, damit er auf Anfrage etwas Geld bekommen kann
Als Kunde möchte ich für einen Kauf bezahlen, damit ich meinen Artikel erhalten kann.
Bisher haben wir bei jedem Sprint die wichtigsten Geschichten ausgewählt und in eine Reihe formaler Anforderungsspezifikationen eingearbeitet (wir gruppieren einige der Geschichten, die in derselben Spezifikation ähnlich sind). Je nach Story kann es sich lediglich um eine Schaltfläche auf einem Bildschirm oder um einen gesamten Workflow handeln.
Das Problem ist jetzt, dass, weil es so viele Geschichten gibt, für keinen Teil des Systems sofort klar ist, welche Geschichten sich darauf beziehen.
Es funktioniert zur Zeit der Entwickler. Bei jedem Sprint erhalten die Entwickler nur eine Spezifikation, in der dargelegt wird, was sie tun müssen und welche Änderungen sie vornehmen müssen. In Bezug auf die Pflege dieser Story-Liste und für Tests wird es jedoch sehr schwierig, Fehler zu verfolgen und im Allgemeinen nur die Spezifikationen beizubehalten, da eine der Funktionen auf dem Bildschirm möglicherweise an verschiedenen Stellen dokumentiert wurde nach Geschichte aufgeteilt.
Ist es eine gute Idee, Spezifikationen zu schreiben, die auf Geschichten basieren? Haben wir die Geschichten falsch geschrieben?
quelle
Antworten:
Das mag umstritten sein, aber hier geht es!
Wir haben an einem Echtzeitsystem gearbeitet, in dem einer meiner früheren Chefs vorgeschlagen hat, AGILE zu machen! Es war wirklich leicht, das Management dafür zu gewinnen. es war jedoch leichter gesagt als getan.
Das Konzept der Geschichten ist gut - aber um ganz offen zu sein, ist es ziemlich vage. Was ist eigentlich eine Geschichte? Das eigentliche Problem ist, dass die Verwendung von Storys
alone
(und das Gleiche gilt auch für Anwendungsfälle) mehrere Probleme hat - wie folgt:Anforderungen können nicht aus dem Zusammenhang geraten (es sei denn, Sie wiederholen so oft grob). Es gibt Annahmen, Hintergrundwissen und andere Anforderungen, die auch mit einer bestimmten Anforderung verknüpft sind. Sie sind nur in einem Kontext und nur in einer bestimmten Reihenfolge sinnvoll. Die Implementierung der wichtigsten zuerst ist geschäftlich sinnvoll, aber wenn Sie sie mindestens ablegen - behalten Sie von Anfang an eine vollständige Referenzierung bei, wenn Sie sie sammeln. Das Anforderungswort selbst ist komplex und nicht wirklich auf Anwendungsfälle / Geschichten beschränkt. In der Tat sind Geschichten umsetzbar, aber dann gibt es Anforderungen, die möglicherweise nicht umsetzbar sind, wie z. B. Leistung, zu erfüllende Einschränkungen, Geschäftsregeln usw.
Die Anforderungen müssen angemessen groß und quantifizierbar sein, sonst können Sie nie mehr als eine große Geschichte benötigen! Was bildet genau 1 Geschichte?
Domainkenntnisse sind wirklich Voraussetzung! Ein einfaches Beispiel eines Architekten, derverschiedene Eigenschaften von Glas, Stahl und Holz kennt . Dieses Wissen ist nicht Teil des Anforderungsdokuments für das Gebäude per say! Wenn Sie eine Bankensoftware schreiben, gibt es eine ganze Reihe von Konzepten zum Bankgeschäft. Die Aussagesich als Anforderung selbst macht es nicht handhabbarweil es Ihnen nicht sagen , was soll Software tun im Gegensatz , wie die Welt funktioniert . Enthält die Geschichte solche Domänenkomplikationen? oder schließt es das aus?
Die Modellierung der Welt ist eine Voraussetzung, die von nicht ganz unterstützt wird.
Es gibt viel Literatur zum Thema Modellierung, die sich darauf konzentriert, nur zu verstehen, wie die Welt funktioniert, ist Hintergrundwissen. Die Modellierung bildet eine feste Grundlage, auf der Anforderungen eine klare Bedeutung erhalten. Allerdings sollte so etwas im Voraus sein. Leider lehnen die meisten agilen Praktiken den Wert der Vorabmodellierung ab, um schnellere und schlankere Lieferungen zu ermöglichen. aber das denke ich immer noch ist ein großer Show Stopper, wenn die Dinge skalieren müssen. Viele Projekte sind nicht erfolgreich, weil die Modellierung irrelevant ist - aber erfahrene Ingenieure kennen sie im Kopf und benötigen nicht viel explizite Anleitung.
Kommen wir also zu Ihrer Frage:
Ich denke, User Stories haben Wert als explizites Urteil des Kunden. Aber wenn sie schlecht organisiert und unzureichend detailliert (oder vage) sind, gibt es ein Problem. Es sei denn, Sie haben eine größere Struktur, um das breitere Verständnis (Domänenwissen) und den Umfang (Gesamtspezifikation) zu akkumulieren. User Stories nur für Segmente oder Elemente innerhalb eines größeren solchen Systems.
PS: Ich habe eine genaue Meinung zu Anwendungsfällen (wie sie in ovalen Diagrammen dargestellt sind), dass sie keine gute Arbeit leisten, wenn Sie sie nicht in einen geeigneten Kontext und mit angemessener Granularität stellen. (Ich nenne sie nutzlose Fälle ). Die einzige glaubwürdige Quelle, die ich finde, um das Schreiben von Anwendungsfällen wirklich skalierbar und aussagekräftig zu machen, ist das Schreiben effektiver Anwendungsfälle von Cockburn
quelle
Ja, wenn Sie Abhängigkeiten und Prioritäten Ihrer Geschichten verwalten können.
Hier ist ein Artikel über Story Maps , mit dem Sie viele Benutzergeschichten bestellen und verwalten können.
quelle
Als ich diese Antwort schrieb, wurde mir klar, dass es nicht um Tests geht, sondern um Dokumentation. Sie sollten zuerst das agile Manifest lesen :
Sie sollten Ihre Spezifikationen also ausführbar machen, dh als vollautomatische Testreihe schreiben.
Ja, imho, das ist es. Es heißt "verhaltensgesteuerte Entwicklung" oder "Spezifikation durch Beispiel". In Ruby gibt es ein großes Werkzeug Gurke , die in diesem viel hilft.
Warum soll es klar sein? Ich meine, brauchen Sie wirklich eine Rückverfolgbarkeitsmatrix "Test / Code"? Der Vorteil des Schreibens von Tests als Spezifikation besteht darin, dass Sie keine separate Rückverfolgbarkeit für "Anforderungen / Tests" benötigen, da Tests zu Anforderungen werden. Für Integrationstests sollten Sie Ihre Software als Ganzes und nicht als separate Teile behandeln.
Möglicherweise benötigen Sie ein Coverage-Tool, um festzustellen, ob "tote" Module vorhanden sind. Teile Ihres Systems werden von Ihren Spezifikationstests nicht abgedeckt. Aber es sollte Ihnen wirklich egal sein, welcher Spezifikation dieser bestimmte Code entspricht. Es sollte umgekehrt sein: Aus einer bestimmten Spezifikation sollten Sie wissen, welcher Teil des Systems ihm entspricht. Sie sollten sich keine Gedanken über Doppelarbeit in Ihren Spezifikationen machen. Und wenn Sie ein DRY- Prinzip auf Ihren Code anwenden, gibt es Dutzende von Spezifikationen, die denselben Code ausführen.
Es ist nicht ungewöhnlich, dass Hunderte von Integrationstests durch eine kleine Änderung in einem kritischen Modul unterbrochen werden. Hier setzt der Unit-Test an.
Sie sollten Ihre Tests so strukturieren, dass Sie feststellen können, ob ein bestimmter Test eine hohe Anforderung oder nur ein subtiles Detail davon abdeckt. In letzterem Fall sollten Sie diesen Test von Ihrer Integrationstestsuite trennen. Der Zweck von Unit-Tests besteht darin, Fehler zu lokalisieren. Wenn Sie also einen Fehler einführen, tritt nur ein Testfehler auf.
Ich denke, Sie müssen Ihre Geschichten nur in Epen organisieren, entweder nach Benutzer, z. B. "Kunde", "Assistent" oder nach Funktionen / Bildschirmen / Workflows ("Kauf", "Rückerstattung").
Auch hier sind Spezifikationstests kein Ersatz für Unit-Tests. Weiterlesen
quelle
Sie haben ein Problem und die Art und Weise, wie Sie es lösen, erwähnt, aber Sie haben vergessen, ein Beispiel für Ihre Spezifikationen und Gruppierungen zu nennen und wie es mit der Art und Weise zusammenhängt, wie Sie Ihr Produkt entwickeln.
Agile verbietet es nicht. In Agile können Sie alles tun, um in nachhaltigem Tempo maximalen Geschäftswert zu erzielen. Wenn Sie also Spezifikationen schreiben möchten, um mehr geschäftlichen Nutzen zu erzielen, ist dies absolut in Ordnung.
Ihr Beispiel zeigt zwei User Stories. Sie hängen vielleicht irgendwie mit Ihrer Geschäftslogik zusammen, aber das ist ein sehr häufiges Szenario.
Wenn Sie die Funktionalität für User Storys bactracken möchten, können Sie wieder das verwenden, was am besten zu Ihnen passt, einschließlich Dokumentation, einiger Diagramme oder Ihrer "Spezifikation". Sie müssen jedoch darauf vorbereitet sein, dass die Wartung dieser Artefakte Sie mit zunehmender Komplexität der entwickelten Anwendung mehr kostet. Die einzige Frage, die Sie in diesem Fall beantworten müssen, lautet: Wenn ich meine Spezifikationen nicht verwende, kostet uns das mehr? Wenn die Antwort ja ist, haben Sie eine bessere Option gewählt.
Die Agilität funktioniert am besten für kleine bis mittlere Projekte mit kleinen Teams, bei denen die gesamte Architektur als implizites Wissen im Team gehalten wird. Während der Iterationsplanung gehen Sie Ihre ausgewählten Storys durch, diskutieren die Auswirkungen auf die aktuelle Implementierung und schreiben einige Aufgaben, die zum Abschließen der Story erforderlich sind. Die eigentliche Dokumentation in diesem Fall ist die Testsuite mit automatischen Akzeptanz- und Integrations- / Komponententests. Sobald Ihre SW oder Ihr Team wächst, muss das implizite Wissen teilweise auf eine Dokumentation übertragen werden.
quelle
Hier spielt die Abstraktion eine große Rolle. Sie müssen sich die Geschichten unter Berücksichtigung der jeweiligen Perspektive ansehen. Sammeln Sie die Substantive und Verben in den Aussagen und bestätigen Sie sie. Sie können Ihre Modelle nicht auf persönliche Annahmen stützen. Achten Sie auch auf Details.
Das Schreiben von Spezifikationen basierend auf User Stories kann nicht korrekt sein. Sie müssen zusätzliche Details ausgraben und manchmal Details ignorieren, die nicht relevant sind. Die Spezifikationen sollten geschrieben werden, wenn Ihr Modell vollständig und genau ist, nachdem Ihr Analyst dies bestätigt hat.
quelle