The AMOS Project - Exam
Aufgabe 1)
Die agilen Methodologien Scrum und Kanban werden zur Verbesserung der Effizienz und Flexibilität in der Softwareentwicklung eingesetzt.
- Scrum: Ein iterativer Ansatz, der in Sprints (zeitlich begrenzte Entwicklungsphasen) unterteilt ist.
- Rollen: Product Owner, Scrum Master, Entwicklungsteam
- Artefakte: Product Backlog, Sprint Backlog, Inkrement
- Ereignisse: Sprint Planning, Daily Scrum, Sprint Review, Sprint Retrospective
- Kanban: Ein visuelles System zur Steuerung des Workflows mit Fokus auf kontinuierliche Lieferung.
- WIP-Limits setzen (Work in Progress)
- Kanban-Board zur Visualisierung
- Kontinuierliche Verbesserung
a)
Scrum Implementierung: Beschreibe die Rolle des Scrum Masters und erläutere, wie der Scrum Master zu einem erfolgreichen Sprint und zur Maximierung des Teamoutputs beitragen kann.
Lösung:
Scrum Implementierung: In der Scrum-Methodologie spielt der Scrum Master eine zentrale Rolle zur Gewährleistung eines erfolgreichen Sprintverlaufs und zur Maximierung des Teamoutputs.
- Rolle des Scrum Masters:Der Scrum Master ist primär dafür verantwortlich, dass das Scrum-Team die Werte und Prinzipien von Scrum versteht und anwendet. Er fungiert als Coach und Mentor für das Team, stellt sicher, dass die Scrum-Regeln eingehalten werden, und arbeitet daran, Hindernisse und Blockaden, die den Fortschritt behindern könnten, zu beseitigen. Wichtige Aufgaben des Scrum Masters umfassen:
- Moderation der Scrum-Meetings wie Sprint Planning, Daily Scrum, Sprint Review und Sprint Retrospective.
- Unterstützung des Product Owners bei der Pflege des Product Backlogs und Priorisierung der Aufgaben.
- Schutz des Teams vor Störungen von außen, damit sich das Team auf die Arbeit konzentrieren kann.
- Förderung der kontinuierlichen Verbesserung und Anpassung der Arbeitsprozesse, basierend auf Erkenntnissen aus den Sprints.
- Beitrag zu einem erfolgreichen Sprint und Maximierung des Teamoutputs:Der Scrum Master trägt auf mehrere Weisen zu einem erfolgreichen Sprint und zur Maximierung des Teamoutputs bei:
- Entfernung von Hindernissen: Indem er regelmäßig mit dem Team kommuniziert und aufgetretene Probleme zeitnah löst, stellt der Scrum Master sicher, dass das Team reibungslos arbeiten kann.
- Förderung der Team-Kollaboration: Der Scrum Master erleichtert eine offene und transparente Kommunikation im Team und ermutigt zur Zusammenarbeit, was zu einer besseren Problemlösung und innovativen Ansätzen führt.
- Unterstützung bei der Selbstorganisation: Der Scrum Master hilft dem Team, selbstorganisiert zu arbeiten und Verantwortung für ihre Aufgaben zu übernehmen, was die Effizienz und das Engagement steigert.
- Kontinuierliche Verbesserung: Durch die Durchführung von Sprint Retrospectives und die Implementierung des Feedbacks aus diesen Besprechungen fördert der Scrum Master laufend die Verbesserung der Arbeitsprozesse.
b)
Kanban Anpassung: Ein Entwicklungsteam hat festgestellt, dass es häufig zu Prozessstörungen kommt, wenn zu viele Aufgaben gleichzeitig bearbeitet werden. Erläutere, wie der Einsatz von WIP-Limits (Work in Progress) auf einem Kanban-Board helfen kann, diese Störungen zu reduzieren und die Effizienz zu steigern.
Lösung:
Kanban Anpassung: Ein Entwicklungsteam hat festgestellt, dass es häufig zu Prozessstörungen kommt, wenn zu viele Aufgaben gleichzeitig bearbeitet werden. Der Einsatz von WIP-Limits (Work in Progress) auf einem Kanban-Board kann dazu beitragen, diese Störungen zu reduzieren und die Effizienz zu steigern.
- Was sind WIP-Limits?WIP-Limits oder Work-in-Progress-Limits legen eine Obergrenze für die Anzahl der gleichzeitig in Bearbeitung befindlichen Aufgaben fest. Dies bedeutet, dass das Team nur eine bestimmte Anzahl von Aufgaben gleichzeitig bearbeiten darf, bevor es neue Aufgaben beginnt.
- Wie können WIP-Limits helfen:
- Vermeidung von Überlastung: Durch die Begrenzung der Anzahl der gleichzeitig zu bearbeitenden Aufgaben wird sichergestellt, dass Teammitglieder nicht überlastet werden und ihre Arbeitskapazität optimal genutzt wird.
- Erhöhung des Fokus: WIP-Limits fördern den Fokus auf die Fertigstellung einzelner Aufgaben, anstatt ständig zwischen mehreren Aufgaben hin- und herzuwechseln. Dies kann die Qualität der Arbeit und die Geschwindigkeit der Fertigstellung erhöhen.
- Frühzeitige Identifizierung von Engpässen: Wenn ein WIP-Limit erreicht wird und keine neuen Aufgaben begonnen werden können, bevor bestehende Aufgaben abgeschlossen sind, wird das Team gezwungen, sich mit den Engpässen zu befassen und diese zu beseitigen.
- Förderung einer kontinuierlichen Fluss: WIP-Limits helfen dabei, einen gleichmäßigen Arbeitsfluss aufrechtzuerhalten, da sie sicherstellen, dass neue Aufgaben erst dann begonnen werden, wenn vorhandene Aufgaben abgeschlossen sind. Dies verbessert die Durchlaufzeiten und die Liefergeschwindigkeit.
- Verbesserte Priorisierung: Indem das Team gezwungen wird, sich auf eine begrenzte Anzahl von Aufgaben zu konzentrieren, wird die Priorisierung der Aufgaben verbessert. Dies ermöglicht es, wichtige und dringende Aufgaben zuerst abzuschließen.
In der Praxis können WIP-Limits einfach auf einem Kanban-Board implementiert werden, indem die Maximalanzahl an Aufgaben für jede Phase des Workflows festgelegt und sichtbar gemacht wird. Wenn die Anzahl der laufenden Aufgaben das Limit erreicht, muss das Team die laufenden Aufgaben abschließen, bevor neue Aufgaben in Angriff genommen werden können. Dies fördert Disziplin und eine effiziente Arbeitsweise.
c)
Unterschiede und Gemeinsamkeiten: Vergleiche Scrum und Kanban hinsichtlich folgender Aspekte:
- Flexibilität im Umgang mit Änderungen während des Entwicklungsprozesses
- Management der Aufgaben und Arbeitspakete im Team
- Messung und Verfolgung des Fortschritts
Lösung:
Unterschiede und Gemeinsamkeiten: Scrum und Kanban
- Flexibilität im Umgang mit Änderungen während des Entwicklungsprozesses
- Scrum: In Scrum werden Änderungen während eines laufenden Sprints vermieden. Ein Sprint ist eine feste Zeiteinheit (in der Regel 2-4 Wochen), in der das Team sich verpflichtigt, eine bestimmte Menge an Arbeit zu erledigen. Änderungen werden erst nach Abschluss des Sprints und während der Sprint-Planung für den nächsten Sprint berücksichtigt.
- Kanban: Kanban ist flexibler im Umgang mit Änderungen. Da es keine festgelegten Iterationen gibt, können Aufgaben in Echtzeit hinzugefügt oder entfernt werden, sofern die WIP-Limits (Work in Progress) eingehalten werden. Diese Flexibilität ermöglicht eine kontinuierliche Anpassung an sich ändernde Anforderungen und Prioritäten.
- Management der Aufgaben und Arbeitspakete im Team
- Scrum: Im Scrum-Framework werden Aufgaben und Arbeitspakete in Form von User Stories im Product Backlog verwaltet. Während des Sprint Planning Meetings werden diese in den Sprint Backlog verschoben, wo das Team sich verpflichtet, sie innerhalb des Sprints zu erledigen. Das Scrum-Team arbeitet iterativ und inkrementell, um die Aufgaben abzuschließen.
- Kanban: In Kanban werden Aufgaben auf einem Kanban-Board visualisiert, das typischerweise Spalten für verschiedene Phasen des Workflows enthält (z. B. To-Do, In Progress, Done). Das Team zieht Aufgaben von einer Spalte zur nächsten, sobald Arbeitsschritte abgeschlossen sind. WIP-Limits sorgen dafür, dass nur eine bestimmte Anzahl von Aufgaben gleichzeitig bearbeitet wird.
- Messung und Verfolgung des Fortschritts
- Scrum: Der Fortschritt in Scrum wird durch verschiedene Ereignisse und Artefakte wie täglich stattfindende Daily Scrums, Sprint Reviews und Burn-Down-Charts gemessen. Burn-Down-Charts visualisieren, wie viel Arbeit im Sprint verbleibt, und helfen dem Team, den Fortschritt und die Geschwindigkeit zu verfolgen.
- Kanban: In Kanban wird der Fortschritt durch den Fluss der Aufgaben auf dem Kanban-Board gemessen. Kennzahlen wie Durchlaufzeit (die Zeit, die eine Aufgabe von Beginn bis zur Fertigstellung benötigt) und Zykluszeit (die Zeit, die eine Aufgabe in einer bestimmten Phase verbringt) werden verwendet, um die Effizienz zu bewerten und Verbesserungsmöglichkeiten zu identifizieren.
Zusammenfassend lässt sich sagen, dass sowohl Scrum als auch Kanban effiziente, agile Methoden sind, jedoch unterschiedliche Ansätze zur Flexibilität, Aufgabenmanagement und Fortschrittsverfolgung bieten:
- Scrum eignet sich besser für Projekte mit klar definierten Anforderungen und festen Zeiteinheiten (Sprints), während Kanban für eine kontinuierliche und flexible Anpassung besser geeignet ist.
- In Scrum werden Aufgaben iterativ und inkrementell in Sprints abgewickelt, während in Kanban eine kontinuierliche Fluss von Aufgaben vorgesehen ist.
- Die Fortschrittsverfolgung in Scrum erfolgt durch Ereignisse und Artefakte wie Burn-Down-Charts, während in Kanban der Fokus auf Kennzahlen wie Durchlaufzeit und Zykluszeit liegt.
d)
Mathematische Betrachtung in Scrum: Ein Entwicklungsteam hat nach mehreren Sprints festgestellt, dass seine durchschnittliche Velocity (Menge der in einem Sprint abgeschlossenen Arbeiten) 30 Story Points beträgt. Berechne, wie viele Sprints das Team benötigen würde, um ein Produkt-Backlog von 150 Story Points zu bearbeiten. Berücksichtige dabei, dass die Velocity konstant bleibt.
Lösung:
Mathematische Betrachtung in Scrum: Um zu berechnen, wie viele Sprints ein Entwicklungsteam benötigt, um ein Produkt-Backlog von 150 Story Points zu bearbeiten, wenn die durchschnittliche Velocity 30 Story Points pro Sprint beträgt, können wir die folgende Formel anwenden:
- Benötigte Anzahl an Sprints = \frac{Gesamte Arbeitsmenge (Story Points)}{Durchschnittliche Velocity (Story Points pro Sprint)}
In diesem Fall:
- Gesamte Arbeitsmenge = 150 Story Points
- Durchschnittliche Velocity = 30 Story Points pro Sprint
Setzen wir die Werte in die Formel ein:
- Benötigte Anzahl an Sprints = \frac{150}{30} = 5
Das Team würde also 5 Sprints benötigen, um ein Produkt-Backlog von 150 Story Points zu bearbeiten, vorausgesetzt, dass die Velocity konstant bleibt.
Aufgabe 2)
Sprint-Planung und -DurchführungSprint-Planung und -Durchführung ist ein zentraler Bestandteil der agilen Softwareentwicklung, insbesondere im Scrum-Framework.
- Definition des Sprint-Ziels: Was soll bis zum Ende des Sprints erreicht werden?
- Backlog-Refinement: Auswahl und Klarstellung der User Stories für den Sprint
- Schätzung: Aufwandsschätzung der User Stories, z.B. mit Story Points
- Aufgabenteilung: Zerlegung der User Stories in einzelne Tasks
- Daily Scrum: Tägliches kurzes Meeting (15 Minuten) zur Synchronisation
- Review: Vorstellung der erzielten Ergebnisse am Ende des Sprints
- Retrospektive: Reflexion und Verbesserung des Prozesses nach jedem Sprint
a)
Erkläre die Bedeutung der Sprint-Ziel Definition im Scrum-Framework. Wie trägt ein klares Ziel zur Effizienz des Teams bei und warum ist es wichtig für den Erfolg eines Sprints?
Lösung:
Bedeutung der Sprint-Ziel Definition im Scrum-FrameworkDie Definition des Sprint-Ziels ist ein essenzieller Bestandteil des Scrum-Frameworks und hat folgenden Zweck:
- Klare Ausrichtung: Ein klar definiertes Sprint-Ziel gibt dem Team eine eindeutige Richtung und einen klaren Fokus für den gesamten Sprint. Alle Teammitglieder wissen, worauf sie hinarbeiten, und können ihre Anstrengungen auf dieses Ziel konzentrieren.
- Priorisierung und Entscheidungshilfe: Ein gut formuliertes Ziel hilft dem Team, Prioritäten zu setzen. Wenn unvorhergesehene Probleme oder Änderungen auftreten, kann das Ziel als Leitfaden dienen, um zu entscheiden, welche Aufgaben zuerst angegangen werden sollten.
- Motivation und Engagement: Ein gemeinsames Ziel kann das Team motivieren und das Engagement erhöhen. Es vermittelt den Teammitgliedern ein Gefühl der Zugehörigkeit und das Wissen, dass ihre Arbeit zu einem größeren Zweck beiträgt.
- Transparenz und Nachvollziehbarkeit: Mit einem klaren Ziel können Stakeholder und andere Beteiligte besser nachvollziehen, woran das Team arbeitet und was es am Ende des Sprints erreichen möchte. Dies schafft Vertrauen und Transparenz im gesamten Entwicklungsprozess.
- Förderung der Teamarbeit: Ein klar definiertes Ziel fördert die Zusammenarbeit im Team. Jedes Mitglied kennt seine Rolle und Verantwortung beim Erreichen des gemeinsamen Ziels, was die Koordination und Kommunikation untereinander verbessert.
Wichtigkeit für den Erfolg eines SprintsEin klares Sprint-Ziel ist entscheidend für den Erfolg eines Sprints aus mehreren Gründen:- Vermeidung von Scope Creep: Ein genau definiertes Ziel hilft, den Umfang eines Sprints festzulegen und zu verhindern, dass ständig neue Anforderungen hinzugefügt werden, die das Team überlasten könnten.
- Evaluierung des Fortschritts: Am Ende des Sprints dient das Ziel als Referenzpunkt, um den Fortschritt zu bewerten und zu überprüfen, ob das Team die gesetzten Erwartungen erfüllt hat.
- Effektive Retrospektive: Ein klares Ziel ermöglicht es dem Team, in der Retrospektive genau zu analysieren, was gut funktioniert hat und was verbessert werden muss, um zukünftige Sprints noch erfolgreicher zu gestalten.
Zusammengefasst trägt ein klares Sprint-Ziel maßgeblich zur Effizienz und Effektivität des Teams bei und ist ein wesentlicher Faktor für den Erfolg jedes Sprints im Scrum-Framework.b)
Im Backlog-Refinement werden User Stories für den kommenden Sprint ausgewählt. Beschreibe den Prozess und die beteiligten Rollen. Warum ist es entscheidend, die User Stories vorab zu klären?
Lösung:
Prozess des Backlog-RefinementsDas Backlog-Refinement (auch Backlog-Pflege genannt) ist ein kontinuierlicher Prozess, bei dem das Scrum-Team den Product Backlog analysiert und aktualisiert, um die User Stories für den kommenden Sprint vorzubereiten und zu klären. Dieser Prozess umfasst mehrere Schritte:
- Auswahl der User Stories: Der Product Owner priorisiert die User Stories auf Basis des Geschäftswerts, der Dringlichkeit und des Feedbacks der Stakeholder. Das Scrum-Team prüft, welche User Stories im nächsten Sprint bearbeitet werden sollen.
- Klarstellung der Anforderungen: Zusammen mit dem Product Owner stellt das Team sicher, dass die Anforderungen jeder ausgewählten User Story klar und verständlich sind. Dies umfasst das Hinzufügen von Akzeptanzkriterien und das Beantworten offener Fragen.
- Aufgabenschätzung: Das Team schätzt den Aufwand, der für die Umsetzung jeder User Story erforderlich ist, häufig mit Hilfe von Story Points oder anderen Schätzmethoden.
- Detailierung der Stories: Übermäßig große oder komplexe User Stories (Epics) werden in kleinere, besser handhabbare Teile zerlegt (sogenannte „Tasks“ oder „Sub-Stories“).
- Überprüfung und Anpassung: Der Product Backlog wird regelmäßig überprüft und aktualisiert, um sicherzustellen, dass er stets den aktuellen Projektanforderungen entspricht. Neue Erkenntnisse oder Änderungen können dabei ebenfalls berücksichtigt werden.
Beteiligte Rollen im Backlog-RefinementMehrere wichtige Rollen sind im Backlog-Refinement beteiligt:- Product Owner: Trägt die Gesamtverantwortung für den Inhalt des Product Backlogs und priorisiert die User Stories. Der Product Owner sorgt dafür, dass die User Stories klar und umsetzbar sind.
- Scrum Master: Unterstützt den Prozess, indem er sicherstellt, dass das Refinement effizient und zielgerichtet abläuft. Der Scrum Master hilft auch dabei, Hindernisse zu beseitigen, die das Team daran hindern könnten, die Stories zu klären.
- Entwicklungsteam: Das Entwicklungsteam (bestehend aus Entwicklern, Testern, Designern, etc.) beteiligt sich aktiv an der Detailierung und Schätzung der User Stories. Sie bringen technisches Know-how ein, um die Umsetzbarkeit der Stories zu beurteilen.
Warum ist die Klärung der User Stories entscheidend?Die Vorab-Klärung der User Stories ist aus mehreren Gründen entscheidend:- Vermeidung von Missverständnissen: Durch die Klarstellung der Anforderungen wird sichergestellt, dass alle Beteiligten (insbesondere das Entwicklungsteam) die Aufgaben und Ziele einer User Story vollständig verstehen.
- Erleichterung der Planung: Geklärte und detaillierte User Stories erleichtern die Sprint-Planung erheblich, da das Team den benötigten Aufwand besser abschätzen kann.
- Effizientere Arbeit: Wenn die Anforderungen im Voraus geklärt werden, kann das Team ohne Unterbrechungen arbeiten, da keine zusätzlichen Fragen während der Umsetzung auftauchen.
- Realistische Umsetzung: Durch die Schätzung und Aufteilung der User Stories kann das Team sicherstellen, dass die Arbeit innerhalb eines Sprints realistisch abgeschlossen werden kann.
- Verbesserte Qualität: Klare Anforderungen und regelmäßige Überprüfung des Product Backlogs tragen zu einer höheren Qualität der gelieferten Produkte bei, da weniger Fehler und Nacharbeiten erforderlich sind.
Insgesamt trägt das Backlog-Refinement erheblich zur Effizienz und Effektivität des Scrum-Prozesses bei und ist somit ein zentraler Bestandteil des agilen Projektmanagements.c)
Nehmen wir an, Dein Team hat die folgenden User Stories mit Story Points bewertet:
- User Story A: 5 Punkte
- User Story B: 8 Punkte
- User Story C: 3 Punkte
- User Story D: 2 Punkte
Das Team hat eine Velocity von durchschnittlich 15 Story Points pro Sprint. Welche User Stories würdest Du für den nächsten Sprint auswählen und warum? Lösung:
Auswahl der User Stories für den nächsten SprintUm zu entscheiden, welche User Stories für den nächsten Sprint ausgewählt werden sollen, müssen wir die Gesamtsumme der Story Points im Vergleich zur durchschnittlichen Velocity des Teams berücksichtigen. Das Team hat eine Velocity von durchschnittlich 15 Story Points pro Sprint. Die folgenden User Stories stehen zur Auswahl:
- User Story A: 5 Punkte
- User Story B: 8 Punkte
- User Story C: 3 Punkte
- User Story D: 2 Punkte
Um die 15 Story Points bestmöglich zu nutzen, sollten wir die User Stories so kombinieren, dass ihre Punkteanzahl der Velocity möglichst nahekommt.Schrittweise Überlegungen:Kombination 1:User Story B (8 Punkte) + User Story A (5 Punkte) + User Story D (2 Punkte)Summe: 8 + 5 + 2 = 15 PunkteKombination 2:User Story A (5 Punkte) + User Story C (3 Punkte) + User Story D (2 Punkte)Summe: 5 + 3 + 2 = 10 Punkte (zu wenige Punkte)Auf Basis dieser Überlegungen sehen wir, dass Kombination 1 die Punktanzahl der Velocity (15 Punkte) optimal erreicht.Empfohlene Auswahl der User Stories:- User Story B (8 Punkte): Diese Story hat einen bedeutenden Umfang und sollte bearbeitet werden, da sie einen großen Teil des Velocity-Budgets ausmacht.
- User Story A (5 Punkte): Diese Story passt gut zu User Story B und bringt das Punktelimit weiter nach oben.
- User Story D (2 Punkte): Diese Story ergänzt die Auswahl und hilft, genau die 15 Punkte zu erreichen.
Durch die Auswahl von User Stories B, A und D nutzt das Team die verfügbare Velocity von 15 Story Points vollständig aus und kann sicherstellen, dass die Arbeit des Sprints umfassend und wertvoll ist.Begründung:- Die Kombination erreicht die maximale Auslastung von 15 Story Points, ohne die Arbeitslast des Teams zu überladen.
- Es wird eine Mischung aus größeren (B) und kleineren (A, D) User Stories gewählt, die wahrscheinlich für eine ausgewogene Arbeitsverteilung innerhalb des Teams sorgt.
- Durch diese Auswahl wird sichergestellt, dass ein angemessenes Maß an Arbeit erledigt wird, was die Wahrscheinlichkeit erhöht, dass der Sprint erfolgreich abgeschlossen wird.
d)
Erkläre die Funktion des Daily Scrum Meetings. Wie tragen diese Meetings zur kontinuierlichen Verbesserung und Synchronisation des Teams bei?
Lösung:
Funktion des Daily Scrum MeetingsDas Daily Scrum Meeting, oft auch als Daily Standup bezeichnet, ist ein zentrales Element im Scrum-Framework. Es handelt sich um ein kurzes, täglich stattfindendes Meeting, das üblicherweise nicht länger als 15 Minuten dauert. Die Hauptziele des Daily Scrum sind:
- Synchronisation: Die Teammitglieder synchronisieren ihre Arbeit und tauschen sich über den aktuellen Stand der Aufgaben aus. Jeder berichtet kurz, was er seit dem letzten Treffen getan hat, was er heute tun wird und ob es Hindernisse gibt, die ihn daran hindern, seine Aufgaben zu erledigen.
- Transparenz: Das Daily Scrum schafft Transparenz über den Fortschritt des Teams. Alle sind auf dem gleichen Stand und wissen, wie weit die Teammitglieder bei ihren Aufgaben sind.
- Erkennung von Hindernissen: Probleme und Hindernisse können schnell identifiziert und adressiert werden. Falls ein Teammitglied auf ein Problem stößt, das seine Arbeit behindert, kann das Team gemeinsam nach einer Lösung suchen.
- Fokus halten: Das Meeting hilft dem Team, den Fokus auf die Sprint-Ziele zu behalten. Es wird sichergestellt, dass alle auf das gemeinsame Ziel hinarbeiten und keine unnötigen Arbeiten begonnen werden.
Beitrag der Daily Scrum Meetings zur kontinuierlichen Verbesserung und Synchronisation:- Kontinuierliche Überprüfung: Durch die tägliche Überprüfung des Fortschritts und der Aufgabenstellungen kann das Team kontinuierlich Anpassungen vornehmen und sicherstellen, dass es im Zeitplan bleibt.
- Frühe Problemidentifikation: Da Hindernisse schnell erkannt werden, können sie zeitnah aus dem Weg geräumt werden. Dies verhindert, dass kleine Probleme zu großen Blockaden werden.
- Stärkung des Teamgeists: Regelmäßige Treffen fördern die Kommunikation und das Zusammengehörigkeitsgefühl im Team. Jeder weiß, woran die anderen arbeiten, und kann Unterstützung anbieten oder anfordern.
- Verbesserung der Arbeitspraktiken: Die regelmäßige Reflexion über den Fortschritt und auftretende Hindernisse liefert Input für die Retrospektive, in der das Team seine Arbeitsweise analysiert und Verbesserungsmaßnahmen entwickelt.
- Zielorientiertes Arbeiten: Durch die täglichen Updates bleiben die Teammitglieder motiviert und fokussiert auf das Sprint-Ziel. Das Meeting stellt sicher, dass alle auf dasselbe Ziel hinarbeiten und keine unnötigen Aufgaben angenommen werden.
Zusammengefasst unterstützt das Daily Scrum das Team dabei, effizient zu arbeiten, Probleme schnell zu lösen und kontinuierlich Verbesserungen vorzunehmen. Es ist ein unverzichtbares Instrument in der agilen Softwareentwicklung.Aufgabe 3)
Context:Du bist der Product Owner eines agilen Entwicklungsteams, das an einer neuen E-Commerce-Plattform arbeitet. Euer Ziel ist es, die erste Version der Plattform in vier Sprints zu entwickeln. Bisher habt ihr verschiedene Anforderungen von Stakeholdern und potenziellen Nutzern gesammelt. Deine Aufgabe ist es nun, diese Informationen in Form von User Stories im Product Backlog festzuhalten und zu priorisieren. Nutze dazu die folgenden Informationen und Beispiele, um entsprechende User Stories zu formulieren und das Product Backlog zu erstellen.
a)
- Erstelle mindestens fünf User Stories: Formuliere fünf User Stories basierend auf den folgenden Anforderungen:
- Kunden sollen Produkte durchsuchen und nach Kategorien filtern können
- Es soll eine einfache Möglichkeit geben, Produkte zum Warenkorb hinzuzufügen und zu entfernen
- Kunden möchten ihre Bestellungen verfolgen
- Admins benötigen eine Funktion, um neue Produkte hinzuzufügen und vorhandene zu bearbeiten
- Es soll eine Registrierungs- und Login-Funktion geben, um Kundenkonten zu verwalten
Lösung:
- User Story 1: Als Kunde möchte ich Produkte durchsuchen und nach Kategorien filtern können, damit ich schnell die gewünschten Artikel finden kann.Akzeptanzkriterien:
- Es gibt eine Suchfunktion.
- Produkte können nach Kategorien, Preisen und Bewertungen gefiltert werden.
- Die Suchergebnisse werden klar und übersichtlich dargestellt.
- User Story 2: Als Kunde möchte ich Produkte einfach zum Warenkorb hinzufügen und daraus entfernen können, um meinen Einkauf bequem zu gestalten.Akzeptanzkriterien:
- Es gibt eine Schaltfläche zum Hinzufügen und Entfernen von Produkten im Warenkorb.
- Der Warenkorb wird in Echtzeit aktualisiert.
- Eine Bestätigungsnachricht erscheint, wenn ein Produkt hinzugefügt oder entfernt wird.
- User Story 3: Als Kunde möchte ich meine Bestellungen verfolgen können, damit ich immer über den aktuellen Status informiert bin.Akzeptanzkriterien:
- Eine Übersicht der Bestellungen ist im Benutzerkonto einsehbar.
- Die Bestellübersicht zeigt den aktuellen Status der Lieferung.
- Es gibt eine Benachrichtigung, wenn sich der Status der Bestellung ändert.
- User Story 4: Als Admin möchte ich neue Produkte hinzufügen und bestehende Produkte bearbeiten können, um das Produktsortiment aktuell zu halten.Akzeptanzkriterien:
- Ein Formular zum Hinzufügen neuer Produkte steht zur Verfügung.
- Produkte können nachträglich bearbeitet und aktualisiert werden.
- Es gibt eine Möglichkeit, Produkte aus dem Sortiment zu entfernen.
- User Story 5: Als Kunde möchte ich mich registrieren und einloggen können, um mein persönliches Konto zu verwalten.Akzeptanzkriterien:
- Ein Formular zur Registrierung neuer Benutzer ist verfügbar.
- Die Login-Funktion erlaubt den Zugang zum Benutzerkonto.
- Passwort-Wiederherstellungs- und Änderungsfunktionen sind integriert.
b)
- Priorisiere die User Stories: Ordne die fünf erstellten User Stories nach ihrer Wichtigkeit. Begründe Deine Entscheidungen und warum bestimmte Funktionen höher priorisiert werden sollten als andere.
Lösung:
- Priorität 1: User Story 5 (Registrierungs- und Login-Funktion)Begründung: Diese Funktion ist grundlegend, da sie den Kunden Zugang zu persönlichen Konten ermöglicht, was für die Nutzung der meisten anderen Funktionen, wie z.B. das Verfolgen von Bestellungen, notwendig ist. Ohne eine Registrierungsmöglichkeit und Login-Funktion können Benutzer keine personalisierten Erlebnisse haben.
- Priorität 2: User Story 2 (Produkte zum Warenkorb hinzufügen und entfernen)Begründung: Die Möglichkeit, Produkte zum Warenkorb hinzuzufügen oder daraus zu entfernen, ist ein zentrales Element des E-Commerce. Ohne diese Funktion wäre der Einkauf nicht möglich, was den Hauptzweck der Plattform untergräbt.
- Priorität 3: User Story 1 (Produkte durchsuchen und nach Kategorien filtern)Begründung: Die Such- und Filterfunktionen sind wichtig, damit Kunden leicht die Produkte finden können, die sie suchen. Dies verbessert maßgeblich die Benutzerfreundlichkeit und das Kundenerlebnis auf der Plattform.
- Priorität 4: User Story 4 (Admins Produkte hinzufügen und bearbeiten)Begründung: Um sicherzustellen, dass das Produktsortiment aktuell und vielfältig ist, müssen Admins in der Lage sein, neue Produkte hinzuzufügen und bestehende zu bearbeiten. Diese Funktion ist wichtig, um die Attraktivität der Plattform zu gewährleisten, hat jedoch zunächst eine geringere Priorität als grundlegende Kundenfunktionen.
- Priorität 5: User Story 3 (Bestellungen verfolgen)Begründung: Das Verfolgen von Bestellungen ist eine wichtige Funktion zur Verbesserung der Transparenz und Kundenzufriedenheit, wird jedoch als weniger dringlich angesehen, da sie vor allem wichtig wird, nachdem die grundlegenden Einkaufs- und Kontofunktionen bereits implementiert sind.
c)
- Product Backlog Pflege: Diskutiere, wie Du als Product Owner den Product Backlog pflegen möchtest, um sicherzustellen, dass er stets aktuell und relevant bleibt. Gehe insbesondere darauf ein, welche Methoden Du verwenden würdest, um kontinuierliches Feedback von Stakeholdern und Nutzern zu integrieren und wie die Priorisierung regelmäßig angepasst werden sollte.
Lösung:
- Kontinuierliche Pflege und Aktualisierung des Product Backlogs:
- Regelmäßige Backlog-Grooming-Sitzungen: Ich würde wöchentliche oder zweiwöchentliche Grooming-Sitzungen einplanen, um sicherzustellen, dass der Backlog stets aktuell und relevant bleibt. Während dieser Sitzungen werden neue User Stories hinzugefügt, bestehende Stories verfeinert und die Prioritäten überprüft.
- Stakeholder-Feedback einholen: Regelmäßige Meetings mit Stakeholdern, um Feedback und neue Anforderungen zu sammeln. Dies könnte durch monatliche Stakeholder-Meetings oder durch Feedback-Formulare geschehen.
- Nutzerfeedback integrieren: Um kontinuierlich auf die Bedürfnisse der Nutzer einzugehen, würde ich verschiedene Methoden einsetzen, um Nutzerfeedback zu sammeln, wie z.B. Umfragen, Benutzerinterviews und die Auswertung von Nutzungsmustern. Das Feedback der Nutzer sollte regelmäßig analysiert und in den Product Backlog eingepflegt werden.
- Prioritäten regelmäßig anpassen: Die Prioritäten im Backlog müssen regelmäßig überprüft und angepasst werden, basierend auf den neuesten Informationen, dem Feedback der Stakeholder und Nutzerdaten. Hierbei ist es wichtig, flexibel zu reagieren und stets die wichtigsten Anforderungen zuerst zu adressieren.
- Transparenz und Kommunikation: Eine offene und regelmäßige Kommunikation mit dem Entwicklungsteam ist entscheidend. Das Team sollte stets über Änderungen und Prioritätsanpassungen informiert sein, um effizient arbeiten zu können.
- Definition of Done (DoD) und Akzeptanzkriterien: Ich würde sicherstellen, dass jede User Story eine klare Definition of Done sowie präzise Akzeptanzkriterien hat, um Missverständnisse zu vermeiden und die Qualität der Deliverables zu sichern.
- Verwendete Methoden:
- Agile und Scrum-Praktiken: Der Einsatz von agilen Methoden wie Scrum zur Organisation der Arbeit, die Definition von Sprints und die Nutzung von Planning Poker zur Einschätzung der Komplexität der Aufgaben.
- Tools: Nutzung von Tools wie Jira oder Trello zur Verwaltung und Visualisierung des Product Backlogs. Diese Tools bieten Transparenz und erleichtern die Zusammenarbeit innerhalb des Teams.
- Retrospektiven: Einbindung regelmäßiger Retrospektiven nach jedem Sprint, um die Zusammenarbeit im Team zu reflektieren und kontinuierliche Verbesserungen zu identifizieren.
Diese Methoden und Vorgehensweisen helfen dabei, den Product Backlog stets aktuell und relevant zu halten und sicherzustellen, dass die Plattform den Anforderungen der Stakeholder und Nutzer entspricht.
d)
- Mathematik der Sprint-Planung: Angenommen, Dein Team besteht aus 5 Entwicklern und jeder Entwickler hat eine individuelle Kapazität von 40 Stunden pro Woche. Der Sprint dauert zwei Wochen. Berechne die Gesamtkapazität des Teams für einen Sprint und erkläre, wie Du diese Kapazität nutzst, um die in den Sprints umzusetzenen User Stories und Aufgaben auszuwählen. Verwende dabei eine fiktive Beispiel-User Story und diskutiere, wie der Aufwand für diese Geschichte geschätzt und in den Sprint integriert wird.
Lösung:
- Berechnung der Gesamtkapazität des Teams
- Die individuelle Kapazität jedes Entwicklers beträgt 40 Stunden pro Woche.
- Ein Sprint dauert zwei Wochen, daher beträgt die Kapazität eines Entwicklers für einen Sprint:40 Stunden/Woche \times 2 Wochen = 80 Stunden
- Das Team besteht aus 5 Entwicklern. Die Gesamtkapazität des Teams für einen Sprint ist:80 Stunden/Entwickler \times 5 Entwickler = 400 Stunden
- Nutzung der Kapazität zur Planung der Sprints
- Um die Sprints effizient zu planen, wird der gesamte verfügbare Aufwand von 400 Stunden auf die ausgewählten User Stories und Aufgaben verteilt.
- Jede User Story wird in kleinere Tasks unterteilt, und für jeden Task wird ein Aufwand in Stunden geschätzt.
- Die Aufwände der Tasks werden addiert und mit der Gesamtkapazität des Sprints abgeglichen, um sicherzustellen, dass die Kapazität nicht überschritten wird.
- Fiktives Beispiel: User Story
- User Story 2:Als Kunde möchte ich Produkte einfach zum Warenkorb hinzufügen und daraus entfernen können, um meinen Einkauf bequem zu gestalten.
- Schritte zur Umsetzung:
- 1. Design und Erstellung der Benutzeroberfläche (UI) für das Hinzufügen/Entfernen von Produkten (20 Stunden)
- 2. Implementierung des Warenkorbs und der Logik für das Hinzufügen/Entfernen von Produkten (30 Stunden)
- 3. Datenbankanpassungen zur Speicherung der Warenkorbinformationen (15 Stunden)
- 4. Integrationstests zur Sicherstellung der Funktionalität (10 Stunden)
- 5. Fehlerbehebung und Feinjustierungen (5 Stunden)
- Geschätzter Aufwand:20 + 30 + 15 + 10 + 5 = 80 Stunden
- Integration in den Sprint:Das Team würde diese User Story in den Sprint integrieren und dabei 80 Stunden der Gesamtkapazität (400 Stunden) nutzen. Der Rest der Kapazität wird für andere User Stories und Aufgaben verwendet.
Durch die Verwendung von Aufwandsschätzungen und die Verteilung der Aufgaben auf die verfügbare Kapazität stellt das Team sicher, dass die Arbeit realistisch geplant und innerhalb des Sprints abgeschlossen werden kann.
Aufgabe 4)
Paar-Programmierung und Code-Review-Prozesse Bei der Paar-Programmierung arbeiten zwei Entwickler gemeinsam an einem Computer. Ein Entwickler schreibt den Code (Driver), während der andere ihn überprüft (Navigator). Ein entscheidender Teil des Entwicklungsprozesses sind zudem die Code-Review-Prozesse, bei denen der Code strukturiert von Kollegen überprüft und verbessert wird. Beide Methoden zielen darauf ab, die Code-Qualität und den Wissenstransfer zu erhöhen. Außerdem fördern sie gemeinsames Problemlösen und die frühzeitige Erkennung von Fehlern. Das Ziel ist es, die Softwarequalität zu verbessern und Fehler vor der Produktion zu identifizieren.
a)
Erkläre ausführlich die Rollen des 'Drivers' und des 'Navigators' während der Paar-Programmierung. Wie tragen beide Rollen zur Erhöhung der Code-Qualität und des Wissenstransfers bei? Diskutiere dabei auch die Auswirkungen auf das Teamwork.
Lösung:
Rollen des 'Drivers' und des 'Navigators' in der Paar-Programmierung
Paar-Programmierung ist eine kollaborative Technik, bei der zwei Entwickler gemeinsam an einem Computer arbeiten:
- Driver: Der Driver ist der Entwickler, der aktiv den Code schreibt. Seine Hauptaufgabe ist das Eintippen und Erstellen des Codes basierend auf Spezifikationen und Anforderungen. Er konzentriert sich auf die Details der Implementierung und schreibt tatsächlich den Code.
- Navigator: Der Navigator ist der Entwickler, der den geschriebenen Code überprüft. Seine Aufgabe ist es, übergeordnete strukturelle und designbezogene Entscheidungen zu treffen, potenzielle Probleme und mögliche Verbesserungen zu identifizieren und sicherzustellen, dass der im Code umgesetzte Logik korrekt und effizient ist. Der Navigator gibt dem Driver ebenfalls kontinuierliches Feedback.
Beitrag dieser Rollen zur Erhöhung der Code-Qualität und des Wissenstransfers:
- Erhöhung der Code-Qualität:
- Der Navigator überprüft kontinuierlich den Code und kann sofortige Feedback und Verbesserungsvorschläge geben, was dazu beiträgt, potenzielle Fehler frühzeitig zu erkennen und zu korrigieren.
- Durch die Kollaboration wird die Wahrscheinlichkeit von Bugs und unerwünschten Side-Effects vermindert, da zwei Augenpaare den Code kontinuierlich überprüfen.
- Best Practices und Coding Standards können durch die Konsultation des Navigators besser eingehalten werden.
- Erhöhung des Wissenstransfers:
- Während der Paar-Programmierung lernen beide Entwickler voneinander. Der Driver kann vom Navigator lernen und vice versa. Dies ist besonders nützlich, wenn ein Entwickler in einem spezifischen Bereich oder mit einer bestimmten Technologie weniger Erfahrung hat.
- Techniken und Lösungsansätze werden geteilt, was dazu beiträgt, dass das Wissen innerhalb des Teams gleichmäßiger verteilt wird.
- Es schafft eine Gelegenheit für Weiterbildung 'on the job', ohne formelle Schulungen zu benötigen.
Auswirkungen auf das Teamwork:
- Förderung der Zusammenarbeit: Paar-Programmierung fördert eine engere Zusammenarbeit und Kommunikation zwischen den Teammitgliedern, was das Gesamtdynamik des Teams verbessert.
- Stärkung des Teamgeists: Durch die gemeinsame Problemlösung und das Arbeiten an einem einzigen Codebasis entsteht ein Gefühl der gemeinsamen Verantwortung und Zugehörigkeit.
- Verbesserung der Kommunikation: Entwickler müssen effektiv kommunizieren, um ihre Ideen und Implementierungen zu diskutieren und zu rechtfertigen. Dies verbessert die allgemeinen Kommunikationsfähigkeiten im Team.
- Höhere Identifikation mit dem Code: Da beide Entwickler intensiv an der Codierung beteiligt sind, fühlen sich beide stärker verantwortlich und verbunden mit der finalen Codebasis.
Insgesamt führt die Paar-Programmierung zu einer höheren Code-Qualität, einem effizienteren Wissenstransfer und einer besseren Teamdynamik, wodurch die Softwareentwicklung sowohl effektiver als auch angenehmer wird.
b)
Simuliere einen Code-Review-Prozess. Angenommen, Dein Kollege hat folgendes Stück Python-Code geschrieben, um die Fakultät einer Zahl zu berechnen:
def factorial(n): result = 1 for i in range(1, n + 1): result *= i return result
Beurteile den Code und schreibe einen Review-Kommentar, der Verbesserungen sowohl hinsichtlich der Effizienz als auch der Lesbarkeit des Codes vorschlägt. Gebe dabei konkrete Verbesserungen in Code-Form an.
Lösung:
Code-Review für die Berechnung der Fakultät in Python
Hier ist der ursprüngliche Python-Code zur Berechnung der Fakultät einer Zahl:
def factorial(n): result = 1 for i in range(1, n + 1): result *= i return result
Review-Kommentar:
- Lesbarkeit: Der Code ist grundsätzlich gut lesbar. Es gibt jedoch einige kleine Verbesserungsmöglichkeiten, z.B. durch die Verwendung von hilfreichen Kommentaren.
- Effizienz: Während diese Implementierung korrekt ist, gibt es keine wesentlichen Verbesserungen in der Effizienz für die Berechnung der Fakultät in einer Schleife. Jedoch könnten zukünftige Optimierungen in Betracht gezogen werden, wenn n extrem groß ist.
- Error-Handling und Validierung: Derzeit gibt es keine Überprüfung von Eingabewerten. Zum Beispiel sollten negative Zahlen oder nicht-integer Werte abgefangen werden.
Verbesserungsvorschläge:
- Lesbarkeit: Füge einen kurzen Kommentar hinzu, der erklärt, was die Funktion tut.
- Error-Handling und Validierung: Füge eine Überprüfung ein, um sicherzustellen, dass der Input eine nicht-negative ganze Zahl ist.
Verbesserte Version des Codes:
def factorial(n): # Überprüfen, ob die Eingabe eine nicht-negative ganze Zahl ist if not isinstance(n, int) or n < 0: raise ValueError(