Blatt 3 Flashcards
Was ist inkrementelle Entwicklung, für welche Arten von Software ist dieser Ansatz geeignet, für welche nicht
Die inkrementelle Softwareentwicklung ist eine Methode, bei der ein Projekt in kleinere Teile (Inkremente) unterteilt wird, die nacheinander entwickelt und getestet werden. Jedes Inkrement repräsentiert eine funktionsfähige / erweiterbare Version oder Softwareerweiterung.
▪ frühe Ansätze für inkrementelles Entwicklung entstanden ab 1950/60er
▪ Ansatz in 1970/80er weiterentwickelt und verfeinert, v.a. zum Spiralmodell
▪ Aufschwung in 1980er/90er durch agile Methoden, die wiederum die Idee der inkrementellen Entwicklung als Kernaspekt aufgreifen
Dieser Ansatz eignet sich besonders gut für Projekte, bei denen sich Anforderungen leicht ändern können oder wenn es wichtig ist, rasch Ergebnisse zu liefern. Inkrementelle Entwicklung fördert Flexibilität und die Möglichkeit, auf Feedback zu reagieren. Allerdings könnte sie für Projekte mit streng festgelegten, unveränderlichen Anforderungen weniger geeignet sein, da häufige Änderungen zu zusätzlichem Aufwand führen können. Projekte, bei denen die Gesamtkomplexität von Anfang an vollständig verstanden werden kann, könnten ebenfalls von anderen Vorgehensmodellen stärker profitieren.
Die zwölf Prinzipien aus dem Agilen Manifest
- “Unsere höchste Priorität ist es, den Kunden durch frühe und kontinuierliche Lieferung wertvoller Software zufriedenzustellen.”
- “Ändere sich die Anforderungen, selbst spät in der Entwicklung, willkommen; Agile Prozesse nutzen Veränderungen zum Wettbewerbsvorteil des Kunden.”
- “Liefere funktionierende Software regelmäßig, mit einer Präferenz für die kürzere Zeitskala.”
- “Mitarbeiter im Projekt sollen täglich miteinander zusammenarbeiten.”
- “Baue Projekte um motivierte Individuen auf. Gib ihnen die Umgebung und die Unterstützung, die
sie benötigen, und vertraue darauf, dass sie die Aufgabe erledigen.” - “Die effizienteste und effektivste Methode, Informationen zu übermitteln, ist im Gespräch von Angesicht zu Angesicht.”
- “Funktionierende Software ist das Hauptmaß für Fortschritt.”
- “Agile Prozesse fördern nachhaltige Entwicklung. Die Sponsoren, Entwickler und Anwender sollten einen konstanten Geschwindigkeitsverlust unbegrenzt aufrechterhalten können.”
- “Ständige Aufmerksamkeit für technische Exzellenz und gutes Design erhöht die Agilität.”
- “Einfachheit – die Kunst, die Menge nicht getaner Arbeit zu maximieren – ist essenziell.”
- “Die besten Architekturen, Anforderungen und Entwürfe entstehen durch selbstorganisierte Teams.”
- “In regelmäßigen Abständen reflektiert das Team darüber, wie es effektiver werden kann, und passt sein Verhalten entsprechend an.”
Nennen Sie drei Prinzipien, die unvereinbar mit dem klassischen Wasserfallmodell sind und begründen Sie Ihre Antwort für jedes Prinzip
Drei Prinzipien, die unvereinbar mit dem klassischen Wasserfallmodell sind:
1. Prinzip 2: “Ändere sich die Anforderungen, selbst spät in der Entwicklung, willkommen; Agile
Prozesse nutzen Veränderungen zum Wettbewerbsvorteil des Kunden.”
Im Wasserfallmodell sind einmal festgelegte Anforderungen schwer zu ändern, da Änderungen spät
im Prozess kostspielig und komplex sind.
2. Prinzip 3: “Liefere funktionierende Software regelmäßig, mit einer Präferenz für die kürzere
Zeitskala.”
Das Wasserfallmodell sieht eine späte Lieferung der gesamten Software nach Abschluss aller
Entwicklungsphasen vor, im Gegensatz zu regelmäßigen inkrementellen Lieferungen agiler Prozesse.
3. Prinzip 8: “Agile Prozesse fördern nachhaltige Entwicklung. Die Sponsoren, Entwickler und
Anwender sollten einen konstanten Geschwindigkeitsverlust unbegrenzt aufrechterhalten können.”
Das Wasserfallmodell strebt oft eine hohe Produktivität in den frühen Phasen an, ohne die
Langzeitnachhaltigkeit zu betonen, was im Widerspruch zu diesem agilen Prinzip steht.
Erklären Sie, wie den agilen Praktiken zugrundeliegenden Prinzipien zu einer beschleunigten Entwicklung und Bereitstellung von Software führen kann
Die agilen Praktiken, die auf den zugrundeliegenden Prinzipien basieren, zielen darauf ab, die Entwicklung und Bereitstellung von Software zu beschleunigen, indem sie auf Flexibilität, ständiges Feedback und iterative Verbesserungen setzen:
1. Kundenzentrierung und frühzeitige Lieferung: Der Fokus auf die Zufriedenstellung des Kunden durch frühzeitige und kontinuierliche Lieferung wertvoller Software ermöglicht es, schnell auf Kundenbedürfnisse zu reagieren und ihre Anforderungen in den Entwicklungsprozess zu integrieren.
2. Anpassungsfähigkeit durch Änderungen in Anforderungen: Die Bereitschaft, sich auch spät im Entwicklungsprozess an sich ändernde Anforderungen anzupassen, ermöglicht es, flexibel auf neue Erkenntnisse oder Marktanforderungen zu reagieren, was die Gesamtentwicklungszeit verkürzen
kann.
3. Inkrementelle Entwicklung und regelmäßige Lieferung: Durch inkrementelle Entwicklung und regelmäßige Lieferungen von funktionsfähiger Software wird der Gesamtprozess beschleunigt.
Benutzer können frühzeitig von Teillösungen profitieren, während gleichzeitig kontinuierlich an neuen Funktionen gearbeitet wird.
4. Kontinuierliches Feedback und Zusammenarbeit: Die tägliche Zusammenarbeit und der Austausch von Feedback zwischen Teammitgliedern fördern schnelle Entscheidungsfindung und ermöglichen es, Probleme sofort anzugehen, was den Entwicklungsprozess beschleunigen kann.
5. Technische Exzellenz und nachhaltige Entwicklung: Die Fokussierung auf technische Exzellenz und nachhaltige Entwicklung führt zu einer höheren Codequalität und Wartbarkeit. Dies reduziert die Wahrscheinlichkeit von Fehlern und beschleunigt den gesamten Entwicklungszyklus.
6. Selbstorganisierte Teams und kurze Kommunikationswege: Selbstorganisierte Teams können effizienter arbeiten, da sie Entscheidungen autonom treffen können. Kurze Kommunikationswege fördern eine effektive Zusammenarbeit und erleichtern die schnelle Lösung von Problemen.
7. Kontinuierliche Verbesserung durch Reflexion: Die regelmäßige Reflexion über den Entwicklungsprozess und die Bereitschaft, das Verhalten entsprechend anzupassen, ermöglichen eine kontinuierliche Verbesserung und Optimierung der Arbeitsabläufe.
8. Frühes Erkennen von Fehlern: Durch die Betonung von regelmäßigen, kleinen Lieferungen können Fehler frühzeitig erkannt und behoben werden, was den Zeitaufwand für spätere Fehlerkorrekturen minimiert.
9. Motivierte Individuen und effektive Kommunikation: Motivierte Teammitglieder, die in einer unterstützenden Umgebung arbeiten, fördern eine höhere Produktivität und beschleunigen den Entwicklungsprozess. Effektive Kommunikation minimiert Missverständnisse und Verzögerungen.
Die Kombination dieser Prinzipien und Praktiken schafft eine agile Umgebung, die die Geschwindigkeit, Flexibilität und Effizienz des Softwareentwicklungsprozesses steigert
Beschreiben Sie in eigenen Worten (9-10 Sätze) den Prozessablauf, d.h. Ablauf der Entwicklungsarbeit, bei Scrum und nutzen Sie hierfür auch die vorgesehenen Fachbegriffe (Daily Scrum, Sprint Planning etc.)
Scrum ist ein agiles Rahmenwerk für die Softwareentwicklung mit wiederkehrenden, zeitlich begrenzten Zyklen, genannt Sprints. Der Prozess beginnt mit einem Produktbacklog, das alle notwendigen Aufgaben und Funktionen enthält. Vor jedem Sprint wählt das Entwicklungsteam in Zusammenarbeit mit dem Product Owner und dem Scrum Master die Aufgaben aus dem Backlog aus. Während des Sprints arbeitet das Team an den ausgewählten Aufgaben, mit täglichen Kurzbesprechungen, bekannt als Daily Scrum, um den Fortschritt zu überprüfen und Hindernisse zu besprechen. Am Ende eines Sprints gibt es eine Überprüfung der abgeschlossenen Arbeiten und eine Retrospektive für die kontinuierliche Verbesserung.
Erklären Sie den Zweck von SAFe bzw. des Rahmenwerks, wie dieses in der Praxis angewandt werden kann und inwiefern es sich von Vorgehensmodellen unterscheidet. Beantworten Sie dabei die Frage wieso es verschiedene Ausbaustufen zu SAFe gibt
Das Scaled Agile Framework (SAFe) ist ein Rahmenwerk, das agile Prinzipien auf die gesamte Organisation ausdehnt und die Skalierung agiler Methoden für große Unternehmen erleichtert. SAFe fördert die koordinierte Zusammenarbeit zwischen verschiedenen Teams, um komplexe Softwareprodukte in größeren Maßstäben zu entwickeln. Es bietet eine Struktur für Planung, Ausführung und Lieferung von Software auf organisatorischer Ebene, unter Einsatz klarer Rollen, Artefakte und Veranstaltungen. SAFe adressiert die Herausforderungen der Skalierung in größeren Organisationen, indem es klare Strukturen für Zusammenarbeit, Koordination und Kommunikation bietet und die Einführung agiler Methoden unterstützt. Verschiedene Ausbaustufen von SAFe passen sich den unterschiedlichen Anforderungen und Kontexten verschiedener Organisationen an und ermöglichen eine maßgeschneiderte Anwendung abhängig von Größe, Komplexität und Branche.
Erläutern Sie fünf der Kanban Praktiken in eigenen Worten und wie diese sich auf die Gestaltung bzw. die Arbeit mit dem Kanban-Board auswirken können
Visualisierung:
Kanban nutzt ein Board zur Visualisierung des Arbeitsprozesses, wobei Aufgaben in Spalten den Phasen des Arbeitsflusses entsprechen. Diese Visualisierung ermöglicht es dem Team, den Status der Arbeit schnell zu erfassen und Engpässe zu erkennen.
Begrenzung der Arbeit in Bearbeitung (WIP):
Die WIP-Begrenzung regelt, wie viele Aufgaben gleichzeitig in einer Phase bearbeitet werden dürfen. Dies verhindert Überlastung, fördert gleichmäßige Arbeit und hilft, Engpässe zu vermeiden.
Flussmanagement:
Das Ziel des Flussmanagements ist es, den Arbeitsfluss zu optimieren, Engpässe zu minimieren und die Durchlaufzeit zu verkürzen. Durch kontinuierliches Monitoring und Anpassungen kann das Team die Arbeit effizient vorantreiben.
Rückkopplungsschleife (Feedback Loops):
Regelmäßige Überprüfungen und Anpassungen des Prozesses ermöglichen es dem Team, den Fortschritt zu bewerten und Verbesserungen vorzunehmen. Durch diese Rückkopplung kann das Team seine Arbeitsweise optimieren und sich an veränderte Anforderungen anpassen.
Serviceklassen und Typen von Arbeit:
Die Klassifizierung von Arbeit in verschiedene Serviceklassen ermöglicht es dem Team, unterschiedliche Prioritäten festzulegen und strategisch zu entscheiden, welche Aufgaben priorisiert werden sollen, um den Gesamtfluss zu verbessern.
Erklären Sie, warum die Test-First-Entwicklung Programmierern dabei hilft, ein besseres Verständnis der Systemanforderungen zu gewinnen. Was sind die möglichen Schwierigkeiten bei der Test-First-Entwicklung?
Die Test-First-Entwicklung, bei der Tests vor der Implementierung des eigentlichen Codes geschrieben werden, zwingt Programmierer dazu, sich frühzeitig und gründlich mit den Systemanforderungen auseinanderzusetzen. Durch das Verfassen von Tests werden die
Programmierer dazu angehalten, klare und präzise Spezifikationen für die erwartete Funktionalität zu erstellen. Dies fördert ein tiefes Verständnis der Anforderungen, da die Tests den erwarteten
Verhaltensweisen entsprechen müssen. Es hilft auch, potenzielle Missverständnisse zu identifizieren und die Anforderungen aus der Perspektive der Benutzer besser zu durchdringen.
Allerdings gibt es einige Schwierigkeiten bei der Test-First-Entwicklung:
1. Zeitlicher Aufwand Das Schreiben von Tests vor der Implementierung kann anfänglich mehr Zeit in Anspruch nehmen, insbesondere wenn die Anforderungen noch nicht vollständig geklärt sind. Dies
könnte als zeitaufwändiger empfunden werden, besonders wenn sich die Anforderungen später ändern.
2. Lernkurve für Entwickler: Die Einführung der Test-First-Methode erfordert möglicherweise eine gewisse Einarbeitungszeit und Schulung für Entwickler, die möglicherweise nicht vertraut sind oder
keine Erfahrung damit haben.
3. Komplexität der Tests: Das Verfassen von effektiven Tests erfordert Fähigkeiten in Testdesign und -implementierung. Die Komplexität der Tests kann zu Anfangsproblemen führen, insbesondere wenn Entwickler nicht ausreichend mit den Konzepten der Testautomatisierung vertraut sind.
4. Flexibilität bei sich ändernden Anforderungen: Wenn sich Anforderungen häufig ändern, könnte die Test-First-Methode zu zusätzlichem Aufwand führen, da bereits geschriebene Tests möglicherweise angepasst oder neu geschrieben werden müssen. Dies könnte die Flexibilität des Ansatzes in Frage stellen.
Die Formulierung von Anforderungen ist ein wesentliches Merkmal strukturierter Softwareentwicklung insbesondere bei komplexen/großen Softwaresystemen. Werden Anforderungen vor der
Entwicklung von Software nicht oder unzureichend definiert, kann dies schwerwiegende Konsequenzen für den Erfolg von Entwicklungsprojekten nach sich ziehen.
- Kunden
Kunden sind eine wesentliche Quelle für Anforderungen. Sie geben an, welche Funktionen und Merkmale sie von der Software erwarten, um ihre Bedürfnisse und Erwartungen zu erfüllen. - Benutzer
Die Endbenutzer der Software liefern Anforderungen, indem sie spezifizieren, wie die Software in ihrer täglichen Arbeit eingesetzt werden soll und welche Funktionalitäten ihre Aufgaben erleichtern
würden. - Stakeholder
Stakeholder, einschließlich Management, Marketing oder Supportteams, können spezifische Anforderungen haben, die auf ihren jeweiligen Verantwortlichkeiten und Zielen basieren. - Regulatorische Vorgaben
Gesetzliche und regulatorische Anforderungen können eine Quelle für spezifische Funktionalitäten oder Sicherheitsstandards sein, die in der Software umgesetzt werden müssen, um Compliance zu
gewährleisten. - Marktforschung
Durch Marktforschung können Anforderungen abgeleitet werden, um sicherzustellen, dass die Software den aktuellen und zukünftigen Marktanforderungen entspricht und wettbewerbsfähig
bleibt.
Welche Folgen kann es haben, wenn zum Beginn eines Entwicklungsprojekts kein Lastenheft vorliegt – beschreiben Sie mögliche Auswirkungen auf das Softwareprojekt
Wenn kein Lastenheft zu Beginn eines Entwicklungsprojekts vorliegt, können verschiedene Probleme auftreten:
Unklare Anforderungen: Ohne ein Lastenheft fehlen klare Spezifikationen darüber, was die Software leisten soll, was zu Missverständnissen und Fehlinterpretationen führen kann.
Fehlende Zielsetzungen: Ohne definierte Anforderungen aus dem Lastenheft können Ziele und Prioritäten des Projekts unklar bleiben, was die Planung und Umsetzung erschwert.
Budget- und Zeitüberschreitungen: Die fehlende Klarheit über Anforderungen kann zu Änderungen im späteren Verlauf des Projekts führen, was zu Verzögerungen und zusätzlichen Kosten führen kann.
Mangelnde Kundenzufriedenheit: Ohne klare Anforderungen aus dem Lastenheft besteht die Gefahr, dass die entwickelte Software nicht den Bedürfnissen und Erwartungen der Kunden entspricht, was zu Unzufriedenheit und möglicherweise zum Verlust von Kunden führen kann.
Qualitätsprobleme: Ohne ein Lastenheft als Referenzpunkt für die Anforderungen besteht die Gefahr, dass wichtige Funktionen oder Sicherheitsstandards übersehen werden, was zu Qualitätsproblemen oder Sicherheitsrisiken in der Software führen kann.
Prototypenmodell
Ein Prototypenmodell ist eine entwickelte Vorversion einer Software, die dazu dient, bestimmte Funktionen oder das Benutzererlebnis zu demonstrieren und frühzeitig Feedback zu sammeln. Es ermöglicht Entwicklern und Stakeholdern, das Design und die Funktionalität zu überprüfen, bevor die endgültige Softwareentwicklung beginnt.
Iteration
Ist ein wiederholten Zyklus im Entwicklungsprozess, bei dem ein Teil der Software erstellt, überprüft und verbessert wird. Diese iterative Vorgehensweise ermöglicht kontinuierliche Anpassungen und Optimierungen, wodurch Entwickler flexibel auf sich ändernde Anforderungen reagieren können.
Agilität
Agilität im Software Engineering bezieht sich auf eine methodische und flexible Herangehensweise an die Softwareentwicklung, die auf den Prinzipien des Agilen Manifests basiert. Sie betont iterative
Entwicklung, enge Zusammenarbeit zwischen Teams und Kunden, schnelle Anpassung an sich ändernde Anforderungen sowie die kontinuierliche Lieferung funktionsfähiger Software in kurzen
Entwicklungszyklen.
Scrum
Scrum ist ein agiles Rahmenwerk für die Softwareentwicklung, das auf transparenten, kollaborativen und iterativen Prozessen basiert. Es legt besonderen Fokus auf kurze, wiederholte Entwicklungszyklen, sogenannte Sprints, sowie regelmäßige Teammeetings und kontinuierliches Feedback, um eine effiziente und flexible Produktentwicklung zu ermöglichen.
Kanban
Kanban ist eine agile Methodik im Software Engineering, die sich auf die visuelle Darstellung des Entwicklungsprozesses konzentriert, um den Workflow zu optimieren. Durch die Verwendung von visuellen Boards und Begrenzungen für gleichzeitig bearbeitete Aufgaben ermöglicht Kanban eine kontinuierliche Lieferung von Software, betont die Reduzierung von Engpässen und fördert eine
effiziente Arbeitsweise.