Ablauf: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Langenfeld (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Langenfeld (Diskussion | Beiträge)
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
{{TOCRight}}{{review}}Im Softwarepraktikum wird das Vorgehensmodell [[Scrum]] in angepasster Form angewendet. Die Anpassungen sollen vor allem den Verwaltungsaufwand reduzieren, die in Scrum beschriebenen Artefakte auf [[Gitea]] übertragen, und mehr Raum für Fehler lassen und die auf den Prozess aufgesetzten [[Formalien|Zulassungskriterien]] unterstützen. Die gesamtdauer des Softwarepraktikum ist in [[Sprint|Sprints]] von je einer Woche Dauer unterteilt.  
{{TOCRight}}{{review}}Im Softwarepraktikum wird das Vorgehensmodell [[Scrum]] in angepasster Form angewendet. Die Anpassungen sollen vor allem den Verwaltungsaufwand für die Studenten reduzieren, die in Scrum beschriebenen Artefakte auf [[Gitea]] übertragen und die auf den Prozess aufgesetzten [[Formalien|Zulassungskriterien]] unterstützen. Die gesamtdauer des Softwarepraktikum ist in [[Sprint|Sprints]] von je einer Woche unterteilt.  


==Scrum-Artefakte im Sopra==
==Scrum-Artefakte im Sopra==
Da [[Gitea]] keine direkte Unterstützung für Scrum bietet, werden die von Scrum verwendeten Artefakte wie folgt auf Giteakonstrukte abgebildet:
Scrum unterscheidet eine Reihe von Artefakten, die für die Arbeit mit Scrum notwendig sind. Das sind vor allem, das Product- und Sprint Backlog mit den darin definierten Aufgaben in Form vorn Tasks und User Stories. Da [[Gitea]] keine direkte Unterstützung für Scrum bietet, werden die von Scrum verwendeten Artefakte wie folgt auf Giteakonstrukte abgebildet:


* Ein '''[[Sprint]]''' wird in [[Gitea]] durch einen Milestone (<code>Issues -> Milestones</code>) dargestellt. Die Gitea-Milestones bekommen dann den Namen <code>Sprint<woche> (Beschreibung)</code> also zum Beispiel <code>Sprint00 (Hausaufgabe)</code>.
* Ein Entwicklungsabschnitt, ein sogenannter '''[[Sprint]]''', wird in [[Gitea]] durch einen Milestone (<code>Issues -> Milestones</code>) dargestellt. Die Gitea-Milestones bekommen dann den Namen <code>Sprint<woche> (Beschreibung)</code> also zum Beispiel <code>Sprint00 (Hausaufgabe)</code>.
* Das '''Product Backlog''' besteht in Gitea aus allen [[Item|Items]] (<code>Issues</code>) die noch keinem Sprint zugeordnet wurden. In Scrum ist es üblich, Aufgaben mit verschiedener Detailtiefe zu beschreiben, darunter die Beschreibungen einzelner Funktionen aus der Benutzersicht, die sogenannten User Stories, die wiederum in einzelne Teilaufgaben, die Tasks zerlegt werden. Um den Prozess im Softwarepraktikum möglichst überschaubar zu halten nehmen wir für das Sopra an, dass das [[GDD]] alle Spielfeatures ausreichend gut beschreibt, um daraus im ''[[Ablauf#Sprint%20Planning%20.28max.%2060min.29|Sprint Planning]]'' direkt Issues von Taskgröße abzuleiten. Sollte eine weitere Unterteilung nötig oder erwünscht sein, schlagen wir folgende Aufteilung vor:
* Das '''Product Backlog''' besteht in Gitea aus allen [[Item|Items]] (<code>Issues</code>) die noch keinem Sprint zugeordnet wurden. In Scrum ist es üblich, Aufgaben mit verschiedener Detailtiefe zu beschreiben. Unter andem durch die Beschreibungen einzelner Funktionen aus der Benutzersicht, die sogenannten ''User Stories''. User Stories sind zu groß um auf einmal bearbeitet zu werden, und werden deshalb wiederum in einzelne Teilaufgaben, die ''Tasks'' zerlegt. Um den Prozess im Softwarepraktikum möglichst überschaubar zu halten machen wir für das Sopra folgende Annahme: Das [[GDD]] beschreibt alle features des Spiels ausreichend, um daraus im ''[[Ablauf#Sprint%20Planning%20.28max.%2060min.29|Sprint Planning]]'' direkt Aufgaben von der Größe eines ''Tasks'' abzuleiten. Sollte eine weitere Unterteilung nötig oder erwünscht sein, schlagen wir folgende Aufteilung vor:
**Eine '''User Story''' ist ein Issue dem das Label <code>user story</code> zugewiesen wurde. Zu jedem ''[[Ablauf#Sprint%20Planning%20.28max.%2060min.29|Sprint planning]]'' sollten alle User Stories außerdem ein Label für die Priorität (<code>prioritiy: high</code>,...) haben.
** Ein '''Task''' ist ein Issue ohne ein spezielles Label.
** Ein '''Task''' ist ein Issue ohne spezielle Labels.
** Falls Sie diese verwenden möchte, ist eine '''User Story''' ein Gitea-Issue dem das Label <code>user story</code> zugewiesen wurde. Zu jedem ''[[Ablauf#Sprint%20Planning%20.28max.%2060min.29|Sprint planning]]'' sollten alle User Stories außerdem ein Label für die Priorität (<code>prioritiy: high</code>,...) haben.
* Ein '''[[Sprint Backlog]]''' besteht aus allen [[Item|Items]], die einem [[Sprint]] zugewiesen wurden (<code>Issues -> Milestones -> <Sprintname></code>). Alle Items im Sprint Backlog müssen eine Priorität (normalerweise <code>prioritiy: high</code>) und eine [[ETC|Aufwandsabschätzung]] haben (z.B.: <code>estimate: 2</code>,...).
* Ein '''[[Sprint Backlog]]''' besteht aus allen [[Item|Items]] (d.h. User Stories, Issues, Bugtickets...), die einem [[Sprint]] zugewiesen wurden (<code>Issues -> Milestones -> <Sprintname></code>). Alle Items im Sprint Backlog müssen eine Priorität (z.B.: <code>prioritiy: high</code>) und eine [[ETC|Aufwandsabschätzung]] haben (z.B.: <code>estimate: 2</code>,...).


Das [[Git]]-Repository verwendet mindestens zwei Branches:
Das [[Git]]-Repository verwendet mindestens zwei Branches:
Zeile 16: Zeile 16:


==Wöchentliches Gruppentreffen  mit Tutor (Review-, Retro- und Planning-Meeting)==
==Wöchentliches Gruppentreffen  mit Tutor (Review-, Retro- und Planning-Meeting)==
Jeder [[Sprint]] beginnt und endet am wöchentlichen Gruppentreffen, das wie ein [[Scrum-Meeting]] organisiert ist. In diesem Treffen wird der letzte Sprint besprochen und der nächste Sprint geplant.
Jeder [[Sprint]] im Softwarepraktikum beginnt und endet am wöchentlichen Gruppentreffen, das wie ein [[Scrum-Meeting]] organisiert ist. In diesem Treffen wird der letzte Sprint besprochen und der nächste Sprint geplant. Das Treffen ist in drei Teile, das Sprint Review, Sprint Planning und Sprint Retrospective unterteilt.  
Dazu ist das Treffen normalerweise in die drei Teile Sprint Review, Sprint Planning und Sprint Retrospective unterteilt. Bei den ersten zwei Treffen kann es aber sinnvoll sein, sich erst einmal langsam an diese Vorgehensweise heranzutasten und die Aufteilung nicht so streng zu verfolgen. Erst wenn die eigentliche Implementierungsphase beginnt sollte man sich möglichst eng an diese Aufteilung halten.  


===Sprint Review (max. 30min)===
===Sprint Review (max. 30min)===
Im Sprint Review werden die Ergebnisse des vergangenen [[Sprint]]s demonstriert und besprochen und bestimmt, ob alle Ziele erreicht worden sind.  
Im Sprint Review werden die Ergebnisse des vergangenen [[Sprint]]s demonstriert. Dabei wird für jede Aufgabe aus dem Sprint bestimmt, ob diese zur Zufriedenheit des Teams erfüllt wurde.  


Zu Beginn dieses Teils des Treffens führt das Team zuerst vor, was für neue Features im letzten [[Sprint]] fertiggestellt worden sind. Danach erklärt entweder der [[Product Owner]] (siehe [[Ablauf#Wiederkehrende Aufgaben|Wiederkehrende Aufgabe "Product Owner"]]) oder jedes Teammitglied einzeln, welche Aufgaben aus dem letzten [[Sprint]] im Sinne der [[DoD|Definition of Done]] abgeschlossen wurden, bzw. welche übrig geblieben sind. Dann wird die Aufwandsabschätzung überprüft. Dabei sollten zwei Punkte geklärt werden:
Zu Beginn dieses Teils des Treffens führt jedes Teammitgleid vor, was für neue Features im letzten [[Sprint]] fertiggestellt worden sind. Danach erklärt entweder der [[Product Owner]] (siehe [[Ablauf#Wiederkehrende Aufgaben|Wiederkehrende Aufgabe "Product Owner"]]) oder jedes Teammitglied einzeln, welche Aufgaben aus dem letzten [[Sprint]] im Sinne der [[DoD|Definition of Done]] abgeschlossen wurden, bzw. welche übrig geblieben sind. Dann wird die Aufwandsabschätzung überprüft. Dabei sollten zwei Punkte geklärt werden:
* War die Abschätzung für die einzelnen [[Item]]s im letzten [[Sprint]] richtig oder hat man sich nach oben oder unten verschätzt?
* War die Abschätzung für die einzelnen [[Item]]s im letzten [[Sprint]] richtig oder hat man sich nach oben oder unten verschätzt?
*Wurde die dem Team zur Verfügung stehende Zeit richtig eingeschätzt?
*Wurde die dem Team zur Verfügung stehende Zeit richtig eingeschätzt?
Zeile 31: Zeile 30:
===Sprint Retrospective (max. 15min)===
===Sprint Retrospective (max. 15min)===


 
In diesem Teil des Treffens sollten alle Dinge geklärt werden, die den bisherigen Prozess betreffen. Dazu wird diskutiert, was im letzten Sprint im Hinblick auf Menschen, Beziehungen, Prozesse, Tools gut bzw. schlecht gelaufen ist. Bei Bedarf stellt das Team fest, wo etwas verändert werden muss, damit die gemeinsamen Ziele besser erreicht werden können. Dabei wird schriftlich festgehalten, wie diese Änderungen im nächsten [[Sprint]] umgesetzt wird. Im Speziellen sollte während der Sprint Retrospektive auch die [[DoD]] diskutiert und im Bedarfsfall angepasst werden.
In diesem Teil des Treffens sollten alle Dinge geklärt werden, die den bisherigen Prozess betreffen. Dazu wird diskutiert, was im letzten Sprint im Hinblick auf Menschen, Beziehungen, Prozesse, Tools gut bzw. schlecht gelaufen ist. Bei Bedarf sollte man feststellen, wo etwas verändert werden muss, damit die gemeinsamen Ziele besser erreicht werden können. Dabei sollte man einen schriftlichen Plan erstellen, wie man diese Änderungen im nächsten [[Sprint]] umsetzen kann.
Im Speziellen sollte während der Sprint Retrospektive auch die [[DoD]] diskutiert und im Bedarfsfall angepasst werden.


Dieser Schritt finde '''vor''' dem nächsten Sprintplanning statt, da Änderungsvorschläge direkt im anschließenden Sprint umgesetzt werden sollen.
Dieser Schritt finde '''vor''' dem nächsten Sprintplanning statt, da Änderungsvorschläge direkt im anschließenden Sprint umgesetzt werden sollen.
Zeile 41: Zeile 38:


====Ablauf====  
====Ablauf====  
Zuerst sollte geklärt werden, wie viel Zeit jedes Teammitglied und damit das gesamte Team für den nächsten [[Sprint]] bereitstellen kann. Danach wählt man gemeinsam ein [[Item]] (unter Berücksichtigung der Priorität) aus dem [[Product Backlog]] aus, das im nächsten [[Sprint]] umgesetzt werden soll. Das [[Item]] sollte nun so lange in kleinere [[Item]]s, zerlegt werden (z.B. zuerst in User Stories und dann in Tasks, oder auch direkt in Tasks), bis diese direkt als an einzelne Teammitglieder verteilt werden können. Für jedes der so entstandenen ''atomaren'' [[Item]]s sollte nun der Arbeitsaufwand ([[ETC]]) abgeschätzt werden. Danach werden die atomaren [[Item]]s in das neue [[Sprint Backlog]] verschoben.    
Zuerst sollte geklärt werden, wie viel Zeit jedes Teammitglied und damit das gesamte Team für den nächsten [[Sprint]] bereitstellen kann. Danach wählt man gemeinsam ein [[Item]] (unter Berücksichtigung der Priorität) aus dem [[Product Backlog]] aus, das im nächsten [[Sprint]] umgesetzt werden soll. Das [[Item]] sollte nun so lange in kleinere [[Item]]s, zerlegt werden (z.B. zuerst in User Stories und dann in Tasks, oder auch direkt in Tasks), bis diese direkt als an einzelne Teammitglieder verteilt werden können. Für jedes der so entstandenen ''atomaren'' [[Item]]s sollte nun der Arbeitsaufwand ([[ETC]]) abgeschätzt werden. Danach werden die atomaren [[Item]]s in das neue [[Sprint Backlog]] verschoben.  
 
Diesen Vorgang wiederholt man nun so lange, bis man die Zeit, die das Team für den nächsten [[Sprint]] zur Verfügung hat, aufgebraucht hat. Erst danach werden die einzelnen [[Item]]s im [[Sprint Backlog]] unter den Teammitgliedern aufgeteilt.  
Diesen Vorgang wiederholt man nun so lange, bis man die Zeit, die das Team für den nächsten [[Sprint]] zur Verfügung hat, aufgebraucht hat. Erst danach werden die einzelnen [[Item]]s im [[Sprint Backlog]] unter den Teammitgliedern aufgeteilt.  
Am Ende diesen Teils kommt man somit zu einem neuen [[Sprint Backlog]] mit einer Liste von [[Item]]s die jeweils einem Verantwortlichen zugeteilt sind.
Am Ende diesen Teils kommt man somit zu einem neuen [[Sprint Backlog]] mit einer Liste von [[Item]]s die jeweils einem Verantwortlichen zugeteilt sind.


====Wiederkehrende Aufgaben====
====Wiederkehrende Aufgaben====
Während des Softwarepraktikums müssen bestimmte organisatorische Aufgaben in jedem [[Sprint]] ab Woche 2 erledigt werden. Diese Aufgaben können immer vom gleichen Teammitglied, oder abwechselnd ausgeführt werden. Aufgaben können auch von mehr als einer Person erledigt werden, sofern der Umfang der Aufgaben dies zulässt und Bedarf besteht.
Während des Softwarepraktikums müssen bestimmte organisatorische Aufgaben in jedem [[Sprint]] ab Woche 2 erledigt werden. Aufgaben können auch von mehr als einer Person erledigt werden, sofern der Umfang der Aufgaben dies zulässt und Bedarf besteht.


Die folgenden wiederkehrenden Aufgaben gibt es:  
Die folgenden wiederkehrenden Aufgaben gibt es:  
Zeile 56: Zeile 54:
**Gemeinsam mit der Gruppe bestimmen, was aufgrund der Entwicklungsreife die als nächstes zu bearbeitenden User Stories werden soll.
**Gemeinsam mit der Gruppe bestimmen, was aufgrund der Entwicklungsreife die als nächstes zu bearbeitenden User Stories werden soll.
** Vor dem Gruppentreffen das Increment nach <code>release</code> pushen (siehe [[GitWorkflow#Sprint Abschließen| Sprint Abschließen]]).
** Vor dem Gruppentreffen das Increment nach <code>release</code> pushen (siehe [[GitWorkflow#Sprint Abschließen| Sprint Abschließen]]).
*Qualitätssicherung (ab Woche 3)
*Qualitätssicherung (zwei Personen je Woche, ab Woche 3; wird in der Gruppe druchrotiert)
**Commitmessages und Kommentare überprüfen.
**Code auf [[CleanCode|Clean-Code]] Richtlinien prüfen.
**Code auf [[CleanCode|Clean-Code]] Richtlinien prüfen.
**Architektur und Schnittstellen überprüfen und pfelgen.
**Code Reviews vorbereiten und durchführen.
**Code Reviews vorbereiten und durchführen.
**ReSharper-Konformität im ganzen Projekt überprüfen und ggf. herstellen.
*Architektur (ab Woche 3)
**Schnittstellen definieren.
**Architekturbeschreibungen pflegen.
**Einhaltung der Architektur im Projekt sicherstellen und beides ggf. anpassen.
**Einen Überblick über die Gesamtarchitektur behalten und bei der Umsetzung verschiedener Tasks stets die Abhängigkeiten innerhalb der Architektur berücksichtigen.


====Aufgabe schwieriger als gedacht====
====Aufgabe schwieriger als gedacht====
Natürlich kann es vorkommen, dass man eine Aufgabe als zu leicht einschätzt und sich während der Bearbeitung abzeichnet, dass man die Aufgabe innerhalb des aktuellen [[Sprint]]s nicht erledigen kann. Daher ist es zum einen wichtig, bei den eigenen Aufgaben auf die Abhängigkeiten zu den Aufgaben anderer Teammitglieder zu achten und sich entsprechend abzusprechen (speziell sollte man vermeiden, erst kurz vorm Ende des [[Sprint]]s mit Aufgaben zu beginnen, die andere für die Erledigung ihrer Aufgaben brauchen).  
Natürlich kann es vorkommen, dass man eine Aufgabe als zu leicht einschätzt und sich während der Bearbeitung abzeichnet, dass man die Aufgabe innerhalb des aktuellen [[Sprint]]s nicht erledigen kann. Daher ist es zum einen wichtig, bei den eigenen Aufgaben auf die Abhängigkeiten zu den Aufgaben anderer Teammitglieder zu achten und sich entsprechend abzusprechen (speziell sollte man vermeiden, erst kurz vorm Ende des [[Sprint]]s mit Aufgaben zu beginnen, die andere für die Erledigung ihrer Aufgaben brauchen). Zum anderen '''müssen''' die anderen Teammitglieder und der Tutor über ein Kommentar im entsprechenden Ticket '''rechtzeitig''' informiert werden, dass eine Aufgabe nicht mehr innerhalb des aktuellen [[Sprint]]s erledigt werden kann, und wo die Probleme mit  der Aufgabe lagen.
Zum anderen '''muss''' man seine Teammitglieder und den Tutor über ein Kommentar im entsprechenden Ticket '''rechtzeitig''' informieren, dass eine Aufgabe nicht mehr innerhalb des aktuellen [[Sprint]]s erledigt werden kann.


Ohne eine rechtzeitige Mitteilung im Ticket zählt die jeweilige Aufgabe als nicht abgeschlossen und führt zu Punkteverlust bei den wöchentlich erreichbaren Punkten der Einzelleistung (siehe [[Formalien#Benotung|Benotung]]).
Ohne eine rechtzeitige '''Mitteilung im Ticket''' zählt die jeweilige Aufgabe als nicht abgeschlossen und führt zu Punkteverlust bei den wöchentlich erreichbaren Punkten der Einzelleistung (siehe [[Formalien#Benotung|Benotung]]).


==Organisieren der gemeinsamen Arbeit als Items im Sprint- und Product-Backlog==
==Organisieren der gemeinsamen Arbeit als Items im Sprint- und Product-Backlog==
Zeile 81: Zeile 74:
*Coaching (z.B.: Pair Programming, andere Gruppenmitglieder unterstützen, Präsentationen vorbereiten und proben)
*Coaching (z.B.: Pair Programming, andere Gruppenmitglieder unterstützen, Präsentationen vorbereiten und proben)


Nur Vorlesungen, [[Formalien#Pr.C3.A4sentationen|Präsentationen]] und die [[Ablauf#W.C3.B6chentliches%20Gruppentreffen%20mit%20Tutor|wöchentlichen Treffen]] sind bereits von der vorgesehenen Arbeitslast abgezogen und sollen ''nicht'' als Backlog Items erstellt werden.
Die Vorlesungen, [[Formalien#Pr.C3.A4sentationen|Präsentationen]] und die [[Ablauf#W.C3.B6chentliches%20Gruppentreffen%20mit%20Tutor|wöchentlichen Treffen]] sind bereits von der vorgesehenen Arbeitslast abgezogen und sollen ''nicht'' als Backlog Items erstellt werden.


===Gemeinsame Tickets und Unterstützung===
===Gemeinsame Tickets und Unterstützung===
Zeile 99: Zeile 92:
'''Gemeinsam arbeiten'''
'''Gemeinsam arbeiten'''


Außerhalb des offiziellen Gruppentreffens ist es sinnvoll zu versuchen, weitere feste Treffen zu vereinbaren, an denen gemeinsam an der Umsetzung des Spiels gearbeitet werden kann. Oftmals reicht es auch schon, gemeinsame Zeiten zu vereinbaren in denen man von Zuhause aus arbeitet, sich aber gegenseitig über synchrone Kommunikationsmedien (Skype, IRC, Instant Messaging,...) erreichen kann.  
Außerhalb des offiziellen Gruppentreffens ist es sinnvoll zu versuchen, weitere feste Treffen zu vereinbaren, an denen gemeinsam an der Umsetzung des Spiels gearbeitet werden kann. Oftmals reicht es auch schon, gemeinsame Zeiten zu vereinbaren in denen man von Zuhause aus arbeitet, sich aber gegenseitig über synchrone Kommunikationsmedien (z.B. über [[Dienste|Mattermost]]) erreichen kann.  


Bei diesen Treffen ist es sinnvoll, zuerst ein ''Daily-Scrum'' zu machen. Ein Daily-Scrum ist ein [[Scrum-Meeting]], das max. 15min dauert und bei dem jeder Teilnehmer folgende Fragen beantwortet, ohne das andere Teilnehmer Rückfragen stellen oder Kommentare abgeben:
Bei diesen Treffen ist es sinnvoll, zuerst ein ''Daily-Scrum'' zu machen. Ein Daily-Scrum ist ein [[Scrum-Meeting]], das max. 15min dauert und bei dem jeder Teilnehmer folgende Fragen beantwortet, ohne das andere Teilnehmer Rückfragen stellen oder Kommentare abgeben:
Abgerufen von „https://sopranium.de/Ablauf