Wie gehen Sie in Scrum mit Design um?

26

Wie gehen Sie in Scrum mit Design um? Haben Sie noch gut geschriebene Designdokumente für jede Scrum-Iteration? Entwerfen Sie nur Notizen mit UML-Diagrammen? Oder haben Sie nur gut kommentierten Code?

Bei jeder Iteration muss möglicherweise das Design geändert werden. Daher wollte ich nur wissen, wie die Leute dies erfassen, damit neue Entwickler die Domäne mühelos verstehen und so schnell wie möglich einsteigen können.

Seth
quelle
Design sollte vom Team sowohl vor als auch während eines Sprints inkrementell behandelt werden. Die meisten Teams verwenden eine Verfeinerung des Rückstandes als fortlaufende Aktivität, um die anstehenden Rückstandselemente zu überprüfen. Dies ist der perfekte Zeitpunkt für das Team, um genügend Lösungen zu entwickeln und zu entwerfen, um den Aufwand abzuschätzen. Alle erstellten Artefakte sollten an die Geschichte angehängt werden. Während des Sprints sollten feinkörnigere Architektur- und Designaktivitäten stattfinden. Bringen Sie diese Artefakte ebenfalls an. Wenn die Geschichte fertig ist, sollte es eine Fülle von Informationen über die bereitgestellte Lösung geben.
Treefiddy

Antworten:

11

Nur weil es Scrum ist, bedeutet das nicht, dass sich bei jedem Sprint alles ändert!

Bei Scrum geht es darum , das Notwendige zu tun (aber nicht mehr) . Sie müssen das Design noch ausführen und dokumentieren. Es ist nur der Betrag nicht festgelegt, noch wie es geht.

Teil der Planung jedes Sprints ist die Entscheidung, was getan werden muss. Wenn etwas im Backlog entworfen werden muss, weil es sich auf andere Dinge auswirkt, müssen Sie eine bestimmte Aufgabe für die Entwurfsprozesse hinzufügen und dies vor der Implementierungsaufgabe tun.

Martin York
quelle
9

Zu diesem Thema habe ich viel zu sagen. Ich habe viele Fälle erlebt, in denen Unternehmen / Teams / Mitarbeiter sagen, dass sie einen agilen Ansatz für Software verwenden, aber in Wirklichkeit wollen sie die Belohnungen, die agile Methoden versprechen, ernten, ohne sich an die Prinzipien zu halten.

Damit eine schnelle Iteration funktioniert, sollten Sie eine testgetriebene Entwicklung durchführen (ich habe aufgehört zu sagen, dass Sie nur widerwillig TDD durchführen müssen). In TDD drücken Ihre Tests das Design und die Absicht des Codes aus (wenn sie sagen, dass "der Code die Dokumentation ist", sollten sie sagen, dass "die Tests die Dokumentation sind"). Indem Sie Komponententests schreiben, die Ihr Verständnis der vorliegenden Funktion zum Ausdruck bringen, geben Sie ausdrücklich an, was Ihrer Meinung nach der Code tun muss. Dann schreiben Sie den Code, der das macht. Dann überarbeiten Sie diesen Code so, dass er den guten Architekturprinzipien "Rot-Grün-Refaktor" entspricht.

Durch Ausführen Ihrer Komponententests bei jedem Einchecken (oder sogar vor jedem Einchecken) wird sichergestellt, dass der neue Code, den Sie geschrieben haben, die erwarteten Funktionen in einem anderen Bereich der Anwendung nicht beeinträchtigt. Dies bietet ein Sicherheitsnetz, mit dem Sie den Code in aller Ruhe ändern können. Mit zunehmendem Verständnis der vorliegenden Anforderungen können Sie den Test ändern, um das neue Wissen widerzuspiegeln. Das eigentliche Design liegt in den Unit-Tests. Alles andere (einschließlich Code, der nicht behandelt wird) ist eine Lüge.

Hier sind einige empfohlene Lektüre

Dies sind gute Orte, um zu lernen, wie man wirklich agile Entwicklung angeht.

Michael Brown
quelle
4
@Murph: Die Idee ist, dass die Architektur im Entstehen begriffen ist, dass Sie sie durch Testen finden sollten, anstatt sie im Voraus zu definieren.
Martin Wickman
5
@Martin Ich sehe das irgendwie - aber es gibt immer noch schreckliche Größenprobleme. Ich fühle mich bis zu einem gewissen Grad damit wohl, aber darüber hinaus ... nun, ich nehme an, Sie hätten das wahrscheinlich tun müssen (oder zumindest eine anfängliche Struktur haben müssen), bevor Sie zum Scrum-Level der Entwicklung gelangen (wobei man das erwarten könnte) Team zur Verfeinerung und Weiterentwicklung der High-Level-Architektur sowie der Low-Level-Architektur).
Murph
2
@Murph: Ja, Bootstrapping ist ein Problem. Sie müssen mindestens die Programmiersprache auswählen. Nicht-funktionale Anforderungen wie Skalierbarkeit und Leistung beeinflussen die Architektur stark und müssen so schnell wie möglich berücksichtigt werden. Abgesehen davon möchte ich so einfach wie möglich beginnen und dann schrittweise und iterativ Arbeitsfunktionen (yagni) Stück für Stück hinzufügen. Konzentrieren Sie sich auf das Refactoring, um die Codebasis sauber zu halten und Inhalte zu extrahieren, bis das Design erscheint.
Martin Wickman
1
Der Grund, warum Scrum iterativ ist, liegt darin, dass wir Software aufgrund ihrer Beschaffenheit nie gleich beim ersten Mal richtig einsetzen. In vielen Fällen wissen die Stakeholder erst, was sie wirklich wollen, wenn sie etwas vor sich haben. Was ist besser: Stunden damit verbringen, ein Design für ein Feature zu erstellen (das verfeinert oder höchstwahrscheinlich weggeworfen werden muss, wenn das Gummi auf den Bürgersteig trifft) und dieses Design dem Implementierer mitteilen; oder verbringen Sie diese Stunden damit, einen ersten Durchgang für das Feature zu implementieren und ihn durch Tests und Refactoring zu verfeinern.
Michael Brown
3
Übrigens werden Sie den wahren Wert von TDD erst erkennen, wenn Sie einen Test haben, der UNERWARTET rot wird. Das war mein großer "Aha" -Moment bei TDD. Als ich mir den Test ansah, der gerade rot wurde, wurde mir klar, dass der Fehler ohne den Test sehr schwer aufzuspüren gewesen wäre, nachdem sich der Code in den Händen des Testers befand. Wenn Sie eine Top-Down-Architektur auf hoher Ebene benötigen, gibt es viele Tools, die Sequenz- und Klassendiagramme aus Ihrem Code generieren können. Verwenden Sie diese, um einen Snapshot-Bericht zu erhalten und diese zu entsorgen, da dies nicht gesetzlich vorgeschrieben ist.
Michael Brown
2

Scrum ist eine Projektmanagementmethode, keine Softwareentwicklungsmethode. Scrum wird normalerweise in Verbindung mit einer agilen Methodik verwendet. Darin liegt Ihre Antwort.

Steven A. Lowe
quelle
4
Scrum ist eine agile Methode, die sich auf das Entwicklungsteam und die Beteiligten konzentriert und iterative Lieferungen von Arbeitscode ermöglicht. Top-down-Projektmanagement und Scrum sind wie Öl und Wasser.
Michael Brown
1
@Mike stimmte zu, aber ich hatte immer das Gefühl, dass Scrum die agile Methodik eines Projektmanagers ist, während Extreme Programming die agile Methodik eines Entwicklers ist. Trotzdem habe ich gesehen, dass Scrum auf viele andere Projekte als Software angewendet wurde. Interessanterweise bietet Wikipedia diese Definition von Scrum: Scrum ist eine iterative, inkrementelle Methodik für das Projektmanagement oft in der agilen Software - Entwicklung zu sehen ist , eine Art von Software - Engineering: en.wikipedia.org/wiki/Scrum_(development) .
Ahsteele
2
Ich habe gerade festgestellt, dass ich Ihren Kommentar versehentlich abgelehnt habe ... wollte nicht. Ich kann diese Abstimmung nur entfernen, wenn Sie eine geringfügige Änderung vornehmen. Ich habe noch nie zuvor gesehen, dass Scrum als Projektmanagementmethode beschrieben wurde. Interessant. Abgesehen davon glaube ich, dass viele Versuche, "agil zu sein", scheitern, wenn man davon ausgeht, dass Scrum für Software funktioniert, ohne TDD anzuwenden.
Michael Brown
1

Es gibt im Vorfeld nicht so viel Design, wie sich die Anforderungen häufig ändern. Es ist also in der Regel Zeitverschwendung, bis auf Klassenebene zu entwerfen. Es kann sich jedoch lohnen, übergeordnete Architekturentscheidungen zu skizzieren.

Das Problem bei anspruchsvollen Designdokumenten besteht darin, dass sie fast veraltet sind, sobald sie erstellt wurden. Was am besten funktioniert, ist in der Regel eine Dokumentation auf hohem Niveau, die sich in kurzer Zeit wahrscheinlich nicht vollständig ändern wird.

Vadim
quelle
1
Ich würde nicht sagen, dass sich die Anforderungen ständig ändern. Infact während eines Sprints sind die Anforderungen statisch und unverändert. Nach jedem Sprint kann die Priorität der Anforderungen neu bewertet werden. Kaufen Sie Ihr Gesamtziel wird sich nicht ändern.
Martin York
@ Martin guter Punkt. Ich denke, ich sollte umformulieren, dass sie von Scrum zu Scrum wechseln.
Vadim
1

Scrum ist ein iteratives und inkrementelles Modell, das auf agilen Werten basiert . Das heißt, Sie haben keine separate Designphase. Die Idee ist, dass Sie ständig sollten mit Design beschäftigen sollten, genauso wie Sie sich ständig mit Analyse, Implementierung, Testen und Integration während des gesamten Projekts beschäftigen.

Sie müssen etwas planen, damit dies funktioniert. Nehmen Sie an der Sprint-Planungsbesprechung teil , in der das Team Aufgaben für den bevorstehenden Sprint abschätzt. Den meisten Menschen ist nicht klar, dass dies nicht nur ein Schätzungsgespräch ist, sondern auch ein Entwurfsaufwand. Eine Aufgabe könnte beispielsweise "Code für neues Automodell hinzufügen" sein. Sie können dies noch nicht abschätzen, Sie müssen ein bisschen mehr wissen. Das Team erörtert das Design und entwickelt eine umfassende Lösung ("Unterklasse Auto?"), Die der Aufgabe als Erinnerung hinzugefügt wird. Mehr Formalität braucht man selten. Sie haben jetzt eine Idee, wie Sie das Problem lösen können. Sie haben noch nicht alle Details und das ist in Ordnung, Sie wissen genug über das Design, um eine bequeme Schätzung vornehmen zu können. Ohne dass Sie (zu diesem Zeitpunkt) irgendwelche Diagramme erstellen müssen.

Für die tatsächliche physische Dokumentation empfehle ich , ein Systemübersichtsdiagramm an einer Wand zu erstellen damit alle es sehen können. Die Übersicht muss nur die wichtigsten Klassen und Module enthalten und sollte selten aktualisiert werden müssen. Auch das Erstellen einiger Zustandsdiagramme für die wichtigsten Klassen im System ist sehr hilfreich. Streuen Sie ein paar ausgewählte Sequenzdiagramme mit typischen Anwendungsfällen an, damit die Menschen schnell erkennen können, wie die Dinge miteinander verbunden sind. Ich gehe davon aus, dass Sie Klassenhierarchiediagramme aus Ihrem Code generieren können, sodass dieses Problem leicht gelöst werden kann.

Beachten Sie, dass alle Diagramme nach der tatsächlichen Implementierung erstellt werden. Dies steht im Einklang mit der "Arbeitssoftware über umfassende Dokumentation" und Just-in-Time-Design.

Und ja, lesbarer Code ist definitiv Dokumentation.

Martin Wickman
quelle
1

Die Gesamtarchitektur des Projekts und das High-Level-Design würden außerhalb der Scrum-Teams erstellt, wenn die Projektbesitzer die Geschichten erstellen.

Es muss genug eines Gesamtentwurfs in welcher Form auch immer vorhanden sein, um die Beziehung zwischen den Geschichten und den Erwartungen des Kunden zu erkennen.

Einige der für jede Geschichte erforderlichen Entwürfe würden während der Planung in Planung und Verhandlung mit dem Produktbesitzer vorgenommen.

Der größte Teil des Entwicklungsaufwands für eine Geschichte entfiel auf den Sprint.

Wenn die Story nicht ausreichend definiert ist, um eine Schätzung vorzunehmen, kann im aktuellen Sprint eine Zeitbox abgelegt werden, um genügend Entwurfsarbeit zu leisten, damit eine entsprechende Story für einen späteren Sprint erstellt werden kann.

Blake
quelle
0

Mein Verständnis ist, dass Sie ein übergeordnetes Design mit den Anfangsanforderungen erstellen, die Sie zu Beginn des Projekts zusammengetragen haben. Sie dokumentieren diesen Entwurf gut.

Wenn Sie dann die Anforderung tatsächlich implementieren, ändern Sie das Design der niedrigeren Ebene nach Bedarf, aber Sie vermeiden, das Design der höheren Ebene zu ändern.

Nun, so wurde es mir sowieso vor fünf Minuten erklärt ...

indyK1ng
quelle
0

In der Eclipse-Community gibt es heute eine Spaltung zwischen traditionellen UML-Tools für MDD, in denen das Modell den Code / die Entwicklung steuert, und Omondo, der der Ansicht ist, dass Iterationen den Entwicklungsprozess und sicherlich nicht nur das Modell steuern sollten.

Ich stimme ihnen zu, weil MDD Mist ist, während UML wirklich ein ausgezeichneter Weg ist, um zu standardisieren, um mit anderen Teammitgliedern zu kommunizieren. Alt-Text

UML_GURU
quelle