cd Blatt 2

Techniken der agilen Entwicklung

Agile Methoden

Agile Methoden in der Informatik basieren auf dem Prinzip der Flexibilität und Anpassungsfähigkeit während des gesamten Softwareentwicklungsprozesses. Sie unterscheiden sich von planaren Methoden durch ihre iterative Natur und den Fokus auf kontinuierliche Verbesserung und Kundenbeteiligung. Die Grundidee ist, dass sich Anforderungen und Lösungen durch die Zusammenarbeit zwischen selbstorganisierten Teams und ihren Kunden dynamisch entwickeln.


Zu den Hauptprinzipien gehören die Einbeziehung des Kunden, Offenheit für Änderungen, die Priorisierung von Menschen vor Prozessen, inkrementelle Auslieferung und die Betonung der Einfachheit. Diese Prinzipien ermöglichen eine schnellere Anpassung an Veränderungen und eine engere Zusammenarbeit mit dem Kunden.

  • User-Storys

    • Softwareanforderungen ändern sich ständig. Um mit diesen Änderungen umzugehen, haben agile Methoden keine eigene Aktivität zum Requirements-Engineering. Stattdessen wird die Ermittlung der Anforderungen in die Entwicklung integriert. Um dies zu erleichtern, entstand die Idee der „User-Story“, wobei eine User-Story ein Benutzungsszenario ist, das einem Systemanwender widerfahren könnte.
      • Man arbeitet mit dem Kunden ein Beispielszenario aus indem erklärt wird was der Code machen soll und wie er zu funktionieren hat.
    • Vor und Nachteile
      1. + Motiviert Benutzer, Anforderungen während der anfänglichen Anforderungsermittlung vorzuschlagen
      2. + Ermöglicht realistische und praxisnahe Anforderungsdarstellung
      3. - Schwierigkeiten bei der Beurteilung der Vollständigkeit der User-Storys
      4. - Herausforderung, alle wesentlichen Anforderungen eines Systems abzudecken
      5. - Risiko des Auslassens wichtiger Teile durch erfahrene Benutzer bei der Beschreibung ihrer Arbeit
  • Refactoring

    • Im Gegensatz zum herkömmlichen Software-Engineering, welches auf zukünftige Änderungen ausgerichtet ist, verfolgt das Extreme Programming  einen pragmatischeren Ansatz. Statt auf mögliche, aber oft nicht eintretende Änderungen vorzubereiten, konzentriert sich diese Methode auf aktuelle Verbesserungen.
      • Refactoring, ein zentrales Element im Extreme Programming, bedeutet die kontinuierliche Verbesserung des Codes. Das Team sucht aktiv nach Verbesserungsmöglichkeiten und implementiert diese sofort, auch wenn dies kurzfristig nicht notwendig erscheint.
    • Ein Hauptproblem inkrementeller Entwicklung ist die potenzielle Schwächung der Softwarestruktur durch lokale Änderungen. Refactoring beugt dieser strukturellen Verschlechterung vor, indem es die Struktur und Lesbarkeit des Codes verbessert.
    • Beispiele für Refactoring sind die Neuorganisation einer Klassenhierarchie zur Entfernung doppelten Codes, das Bereinigen und Umbenennen von Attributen und Methoden sowie die Ersetzung von ähnlichem Code durch Methodenaufrufe aus einer Programmbibliothek.
    • Entwicklungsumgebungen wie Eclipse unterstützen Refactoring durch spezielle Werkzeuge, die das Auffinden von Codeabhängigkeiten und das Vornehmen globaler Codeänderungen erleichtern.
    • Refactoring sollte idealerweise dazu führen, dass Software stets einfach zu verstehen und zu ändern ist. In der Praxis kann sich dies jedoch als schwierig erweisen, besonders unter Entwicklungsdruck.
    • Kurz gesagt, Refactoring ist der Prozess der kontinuierlichen und gezielten Verbesserung des Codes zur Optimierung der Softwarestruktur und -effizienz.
  • Test-First-Entwicklung

    • Bei der Test-First-Entwicklung, einem zentralen Ansatz des Extreme Programmings, wird das Testen automatisiert und ist integraler Bestandteil des Entwicklungsprozesses. Die Entwicklung kann nicht fortgeführt werden, bis alle Tests erfolgreich ausgeführt sind.
    • Diese Methode hat sich zu allgemeineren testgetriebenen Entwicklungstechniken weiterentwickelt. Hierbei werden zuerst Tests entwickelt, bevor man den Code schreibt, um frühzeitig Probleme aufzudecken.
    • Test-First-Entwicklung definiert implizit sowohl eine Schnittstelle als auch eine Spezifikation des Verhaltens für die zu entwickelnde Funktionalität, was Missverständnisse bei Anforderungen verringert.
    • Die Verwendung von Frameworks zur Testautomatisierung, wie JUnit, erleichtert das Schreiben von ausführbaren Tests und bringt eine Testmenge zur Ausführung.
    • Vor und Nachteile
      1. + Erleichtert das frühzeitige Erkennen von Problemen und Fehlern
      2. + Fördert ein klares Verständnis der Anforderungen vor der Implementierung
      3. - Herausforderung der vollständigen Testabdeckung
      4. - Kann aufgrund von Entwicklungsdruck vernachlässigt werden
      5. - Schwierigkeiten bei der inkrementellen Erstellung von Tests für komplexe Benutzeroberflächen
    • Kurz gesagt, Test-First-Entwicklung ist eine Schlüsselstrategie in agilen Methoden, bei der Tests vor der eigentlichen Codeentwicklung geschrieben werden, um frühzeitig Fehler zu erkennen und eine präzisere Anforderungsdefinition zu ermöglichen.
  • Pair Programming

    • Pair Programming im Extreme Programming (XP) umfasst das paarweise Zusammenarbeiten von Programmierern am selben Rechner. Diese Paare werden dynamisch zusammengestellt, um während des Entwicklungsprozesses eine Vielfalt an Kombinationen zu ermöglichen.
    • Vorteile des Pair Programmings umfassen gemeinsames Eigentum und Verantwortung für das System, einen informellen Review-Prozess durch kontinuierliche Überprüfung des Codes sowie die Förderung von Refactoring zur Verbesserung der Softwarestruktur.
    • Vor und Nachteile
      1. + Fördert das kollektive Verständnis und die gemeinsame Verantwortung für den Code
      2. + Dient als effektiver, informeller Review-Prozess für Code
      3. + Unterstützt Refactoring und Qualitätsverbesserung
      4. - Kann in Bezug auf Codeausstoß weniger effizient erscheinen
      5. - Unterschiedliche Studienergebnisse bezüglich der Produktivität im Vergleich zu Einzelarbeit
    • Kurz gesagt, Pair Programming ist eine zentrale Praxis in XP, die durch Zusammenarbeit zweier Personen an einem Rechner die Codequalität steigert und das Wissensmanagement innerhalb des Teams fördert.
  • Praktische Probleme mit agilen Methoden

    • Agile Methoden haben sich in der Entwicklung von Softwareprodukten und Apps bewährt, stoßen aber bei eingebetteten Systemen oder großen, komplexen Projekten an ihre Grenzen.
    • Probleme ergeben sich insbesondere bei großen, langlebigen Systemen, die für externe Kunden entwickelt werden, wegen der Unvereinbarkeit der Formlosigkeit agiler Methoden mit juristischen Vertragsgestaltungen.
    • Vor und Nachteile
      1. + Eignet sich gut für neue Softwareentwicklung
      2. + Fördert schnelle Anpassung und Flexibilität
      3. - Schwierigkeiten bei der Integration in formale Vertragsprozesse
      4. - Weniger geeignet für Softwarewartung und große, verteilte Teams
    • Kurz gesagt, während agile Methoden in bestimmten Bereichen der Softwareentwicklung erfolgreich sind, stellen sie bei großen Projekten, Wartungsaufgaben und juristischen Vertragsaspekten eine Herausforderung dar.
  • Agile und plangesteuerte Methoden

    • Die Skalierung agiler Methoden erfordert eine Integration mit plangesteuerten Ansätzen, besonders in großen Unternehmen, die langfristige Planung und Budgetierung benötigen.
    • Probleme der Integration umfassen die Formlosigkeit agiler Entwicklung im Vergleich zu juristischen Vertragsprozessen und die Eignung agiler Methoden hauptsächlich für neue Softwareentwicklung, nicht für Wartung.
    • Vor und Nachteile Gleich wie bei Praktische Probleme mit agilen Methoden
      • Kurz gesagt, während agile Methoden in bestimmten Kontexten vorteilhaft sind, benötigen große Unternehmen oft eine Kombination aus agilen und plangesteuerten Ansätzen, um ihre breiteren organisatorischen Anforderungen zu erfüllen.
    • Agile Methoden für große Systeme

      • Agile Methoden mussten für die großangelegte Softwareentwicklung angepasst werden, da große Softwaresysteme komplexer sind und aus mehreren, oft geografisch verteilten Teilsystemen bestehen.
      • Herausforderungen bei der Skalierung agiler Methoden für große Systeme umfassen die Integration mit bestehenden Systemen, die Koordination verteilter Teams, umfangreiche Systemkonfigurationen, externe Regulierungen und eine Vielzahl von Interessengruppen.
      • Vor und Nachteile Gleich wie bei Praktische Probleme mit agilen Methoden
        • Kurz gesagt, während agile Methoden für kleine Teams und Projekte gut funktionieren, erfordern große Systeme eine spezielle Anpassung und Integration agiler Prinzipien mit traditionelleren Ansätzen.
      • Organisationsübergreifende agile Methoden

        • Die Einführung agiler Methoden in kleinen Softwareunternehmen ist oft einfacher aufgrund der geringeren Bürokratie und der größeren Flexibilität im Vergleich zu größeren Unternehmen.
        • In größeren Organisationen gibt es Herausforderungen bei der horizontalen Skalierung agiler Methoden aufgrund von Qualitätsstandards, unterschiedlichen Qualifikationsniveaus der Mitarbeiter und eventuellem kulturellen Widerstand gegenüber neuen Methoden.
        • Vor und Nachteile
          1. + Kleine Unternehmen können agile Methoden schneller und effektiver anwenden und anpassen.
          2. + Agile Methoden fördern qualitativ hochwertige Arbeit durch hochqualifizierte Teams.
          3. - Große Unternehmen stoßen auf Herausforderungen wie Bürokratie und die Notwendigkeit eines kulturellen Wandels.
          4. - Standardisierte Verfahren und Qualitätsstandards können mit agilen Praktiken kollidieren.
          5. - Projektmanager ohne Erfahrung mit agilen Methoden könnten skeptisch gegenüber neuen Ansätzen sein.
        • Kurz gesagt, die Einführung agiler Methoden in großen Unternehmen erfordert einen kulturellen Wandel und kann durch interne Bürokratie und bestehende Qualitätsprozesse erschwert werden.

      1. Entwicklungsmodelle

      1. Angesichts des Vorhabens des SWT-TV Managements, das Online-Angebot um eine Mediathek und einen Live-Stream-Bereich zu erweitern, stellt sich die Frage nach dem passenden Entwicklungsmodell.

        Auswahl des Entwicklungsmodells

        • Aufgrund der unscharfen Anforderungen und der erwarteten häufigen Änderungen bietet sich Scrum als agiles Entwicklungsmodell an, um Flexibilität und schnelle Markteinführung zu gewährleisten.
          • Scrum erlaubt eine priorisierte Feature-Entwicklung und bietet durch iterative Releases die Möglichkeit, das Produkt sukzessive am Markt zu etablieren.
        • Vor- und Nachteile von Scrum
          1. +Anpassungsfähigkeit an schnelllebige Branchen und technischen Wandel.
          2. + Möglichkeit zur Priorisierung von Features und frühzeitige Kundenbindung durch iterative Releases.
          3. - Potenzielle Herausforderungen bei der Einführung in Teams ohne agile Erfahrung.
          4. - Risiko der Überforderung bei unzureichender Erfahrung mit selbstorganisierten Prozessen.
        • Wasserfallmodell

          • Das Wasserfallmodell ist ein lineares, sequenzielles Entwicklungsmodell, das gut für klar definierte Projekte ohne erwartete Änderungen geeignet ist.
            • Es eignet sich für Projekte, bei denen alle Anforderungen im Voraus bekannt sind und wenig bis keine Änderungen erwartet werden, wie zum Beispiel bei der Entwicklung von standardisierter Software.
          • Vor- und Nachteile des Wasserfallmodells
            1. + Einfache Verwaltung aufgrund der festen Phasen und klar definierten Prozesse.
            2. +Dokumentation und Planung werden von Anfang an stark betont.
            3. - Mangelnde Flexibilität, um auf Änderungen während des Entwicklungsprozesses zu reagieren.
            4. - Späte Entdeckung von Fehlern und Problemen, da das Testen erst nach der Implementierung erfolgt.
            5. - Kann zu Verzögerungen und Budgetüberschreitungen führen, wenn Änderungen erforderlich sind.
        • Fazit: Angemessenheit des Entwicklungsmodells

          Angesichts der Natur des SWT-TV-Projekts, das eine dynamische und anpassungsfähige Entwicklungsumgebung erfordert, erscheint das agile Modell, speziell Scrum, als das angemessenere. Es begünstigt schnelle Iterationen, Feedbackschleifen und eine flexible Handhabung von Änderungen, was für das schnelllebige, technologiegetriebene Umfeld des Online-Streamings und der Medienbranche kritisch ist.

          Im Gegensatz dazu bietet das Wasserfallmodell zwar eine strukturierte und vorhersehbare Planungsumgebung, doch die damit verbundene Inflexibilität und die späten Testphasen könnten zu Verzögerungen führen, die bei einem zeitkritischen Projekt wie dem Aufbau einer Online-Mediathek untragbar sind. Zudem könnte das Wasserfallmodell Schwierigkeiten bereiten, schnell auf Nutzerfeedback zu reagieren, was für die Nutzerbindung und das Wachstum der Online-Plattform entscheidend ist.

          Daher, während das Wasserfallmodell in einem stabileren und vorhersehbaren Umfeld seine Stärken hat, passt es nicht gut zu den Anforderungen von SWT-TV. Agile Methoden, mit ihrer adaptiven Planung und Kundenorientierung, bieten den erforderlichen Rahmen, um das Projekt erfolgreich zu starten und zu skalieren.

      2. Gefahren und Nachteile bei der Nutzung von Scrum

        • Kundenbeteiligung:Der Kunde muss bereit sein, das Projekt kontinuierlich zu begleiten, was einen erheblichen Aufwand für Anforderungsentwicklung und Akzeptanztests bedeutet.
        • Erfahrung im Team:Für die effektive Nutzung von Scrum ist eine gewisse Erfahrung im Entwicklerteam nötig.
        • Flexibles Pricing:Festpreisvereinbarungen sind mit Scrum schwer realisierbar, da das Modell auf Flexibilität und Veränderlichkeit der Anforderungen aufbaut.
        • Messbarkeit des Fortschritts:Der Fortschritt des Gesamtprojekts ist bei Scrum schwer messbar, was Herausforderungen in der Projektverwaltung und -steuerung mit sich bringen kann.

      2. Skalierung agiler Methoden

      1. a) Warum ist es notwendig, Methoden und Dokumentation von plangesteuerten Ansätzen zu übernehmen, wenn agile Methoden auf große Projekte skaliert werden?

        • Projektplanung:Essentiell für Koordination und Abstimmung der Auslieferungszyklen.
        • Anforderungsanalyse und Dokumentation:Wichtig für die Aufteilung der Arbeit unter den Teams.
        • Design-Dokumentation:Klare Interfaces sind notwendig für die unabhängige Arbeit der Teams.
        • Risikomanagement:Wichtig für die Koordination und Minimierung von Risiken.
      2. b) Erklären Sie kurz, was das Scrum of Scrums ist und wie es funktioniert.

        • Scrum of Scrums ist ein tägliches Meeting, bei dem Vertreter jedes Teams Fortschritt besprechen, Probleme identifizieren und die Arbeit planen.
      3. c) Welche Probleme können bei aufeinander abgestimmten Auslieferungszyklen der Teams in größeren Scrum-Projekten auftreten?

        • Abhängigkeiten:Komplexe Abhängigkeiten zwischen den Teams können zu Verzögerungen führen, wenn ein Team auf die Fertigstellung von Aufgaben eines anderen Teams wartet.
        • Kommunikationsherausforderungen:Bei einer großen Anzahl von Teams kann die effektive Kommunikation schwieriger werden, was zu Missverständnissen und Informationsverlust führen kann.
        • Ressourcenkonflikte:Die gemeinsame Nutzung von Ressourcen oder Fachwissen zwischen Teams kann zu Konflikten und Verzögerungen führen.
        • Inkonsistente Ziele:Unterschiedliche Ziele und Prioritäten zwischen den Teams können die Koordination erschweren und die Gesamtrichtung des Projekts beeinträchtigen.
        • Qualitätsschwankungen:Unterschiede in der Qualitätskontrolle und -standards zwischen Teams können zu Inkonsistenzen im Endprodukt führen.
        • Skalierungsprobleme:Das Hinzufügen neuer Teams oder Mitglieder kann die Komplexität erhöhen und bestehende Prozesse und Kommunikationswege stören.

      U User Stories

      1. U User Stories: Erstellen von detaillierten User Stories für die SWT-TV Mediathek.

      2. a)User Story eines Kunden der SWT-TV Mediathek:

        • "Als treuer Zuschauer der SWT-TV Mediathek möchte ich eine Sendung, die ich verpasst habe, nachträglich anschauen können. Ich öffne die Mediathek, suche nach der verpassten Sendung und wähle sie aus. Das System zeigt mir verschiedene Qualitätsstufen und Untertiteloptionen an, aus denen ich wählen kann. Nachdem ich meine Auswahl getroffen habe, startet die Sendung, und ich kann sie von Anfang an oder ab einem bestimmten Zeitpunkt sehen."
      3. b)User Story eines Mitarbeiters, der Inhalte auf SWT-TV Mediathek bereitstellt:

        • "Als Mitarbeiter im Content-Management von SWT-TV möchte ich eine neue Sendung in die Mediathek einpflegen. Ich logge mich in das Content-Management-System ein und wähle den Bereich 'Neue Inhalte hinzufügen'. Hier lade ich die Videodatei hoch, füge Titel, Beschreibung und Tags hinzu und ordne die Sendung der passenden Kategorie zu. Bevor ich den Inhalt veröffentliche, führt das System eine Qualitätsprüfung durch, um sicherzustellen, dass Bild und Ton den Standards entsprechen. Nach erfolgreicher Prüfung wird die Sendung für die Zuschauer freigegeben."

      K Agile Entwicklungsprozesses

      1. 1. Wahr oder falsch: Aussagen über agile Softwareentwicklung

        • i) Pair Programming: Wahr. Es ist eine Praktik der agilen Softwareentwicklung.
        • ii) Ausführliche Dokumentation: Falsch. In agiler Entwicklung ist funktionierende Software wichtiger als ausführliche Dokumentation.
        • iii) Prozesse und Werkzeuge: Falsch. In agiler Entwicklung sind Individuen und Interaktionen wichtiger als Prozesse und Werkzeuge.
      2. 2. Zuordnung von Scrum-Artefakten zu Rollen

        • Product Backlog: Der Product Owner ist für die Erstellung und Wartung zuständig.
        • Sprint Backlog: Das Entwicklungsteam ist für die Erstellung und Wartung zuständig.
        • Potentially Shippable Product Increment: Das Entwicklungsteam erstellt es, und der Scrum Master unterstützt bei der Wartung.
      3. 3. Zuordnung von agilen Methoden zu Aussagen

        • i) Entwickler:innen arbeiten an allen Bereichen des Systems: Dies folgt dem Prinzip der kollektiven Codebesitz und Vermeidung von Experteninseln in agilen Methoden wie Extreme Programming.
        • ii) Kontinuierliche Verbesserungen zur Erhöhung der Wartbarkeit des Codes: Dies ist ein Teil des Refactoring-Prozesses in agilen Methoden wie Scrum und Extreme Programming.