Home

05 Agile Entwicklung Teil 1: Philosophie, Praktiken und User Stories

lecture agile scrum xp user-stories sprints bounded-rationality

1. Einführung: Vom Scheitern zur Agilität

In Teil 2 des Requirements Engineering haben wir untersucht, warum traditionelle Softwareentwicklungsmodelle oft scheitern. Wir haben vier kritische Probleme identifiziert:

  1. Spätes Feedback — Funktionierende Software erscheint 6-18 Monate nach den Anforderungsentscheidungen, was bedeutet, dass Fehler viel zu spät entdeckt werden
  2. Die Kurve der Änderungskosten — Boehms Forschung zeigte, dass Fehler, die in der Produktion gefunden werden, 30-100x mehr kosten zu beheben als solche, die während der Anforderungsphase erkannt werden
  3. Drei falsche Annahmen:
    • “Wir können alle Anforderungen im Voraus kennen”
    • “Wir können vollständig entwerfen, bevor wir programmieren”
    • “Wir können es beim ersten Mal richtig bauen”
  4. Das Planungsparadox — Wenn wir mehr planen, verschwenden wir Zeit mit Plänen, die sich ändern werden. Wenn wir weniger planen, bauen wir das Falsche.

Diese Probleme sind nicht nur theoretisch. Sie haben unzählige Projektfehlschläge, Kostenüberschreitungen und frustrierte Entwickler und Benutzer verursacht.

Aber was, wenn das Problem nicht die schlechte Ausführung traditioneller Methoden ist? Was, wenn die Methoden selbst grundlegend fehlerhaft sind?

In dieser zweiteiligen Vorlesungsreihe erkunden wir einen alternativen Ansatz: Agile Entwicklung. Anstatt Unsicherheit mit mehr Planung zu bekämpfen, umarmt Agile die Unsicherheit und baut Prozesse, die sich an Veränderungen anpassen.

Teil 1 (diese Vorlesung) behandelt die philosophische Grundlage, das Agile Manifest, Extreme Programming-Praktiken und User Stories. Teil 2 behandelt das Scrum-Framework, die Sprint-Durchführung und reale Belege für die Einführung von Agile.


2. Lernziele

Am Ende dieser Vorlesung werden Sie in der Lage sein:

  1. Die philosophische Grundlage zu erklären von Agile unter Verwendung von Herbert Simons Konzept der begrenzten Rationalität
  2. Die vier Werte und zwölf Prinzipien des Agilen Manifests zu artikulieren
  3. Extreme Programming (XP) Praktiken anzuwenden einschließlich TDD, Refactoring, Pair Programming und Continuous Integration
  4. Menschliches und KI-Pair-Programming zu vergleichen — zu verstehen, wann welcher Ansatz den größten Nutzen bietet
  5. Effektive User Stories zu schreiben unter Verwendung des “Als [Rolle] möchte ich [Funktion], damit [Nutzen]”-Formats mit Akzeptanzkriterien
  6. User Stories mit GitHub Issues zu verfolgen — Labels, Meilensteine, Aufgabenlisten und Projektboards
  7. Agile Praktiken mit Testing zu verbinden — zu verstehen, wie iterative Entwicklung sich mit TDD und CI integriert

3. Herbert Simons Begrenzte Rationalität: Die philosophische Grundlage

Bevor das Agile Manifest 2001 geschrieben wurde, hatte ein Nobel-Preisträger der Wirtschaftswissenschaften bereits erklärt, warum traditionelle Planungsansätze zum Scheitern verurteilt sind.

3.1 Wer war Herbert Simon?

Herbert Alexander Simon (1916-2001) war ein amerikanischer Universalgelehrter, dessen Arbeit Wirtschaftswissenschaften, kognitive Psychologie, Informatik und Organisationstheorie umfasste. Er verbrachte den größten Teil seiner Karriere an der Carnegie Mellon University, wo er half, eine der ersten Informatik-Fakultäten der Welt zu gründen.

Simon erhielt zwei der höchsten Auszeichnungen in verschiedenen Bereichen:

Sein einflussreichstes Werk, Administrative Behavior (1947), führte ein Konzept ein, das revolutionieren sollte, wie wir über menschliche Entscheidungsfindung denken.

3.2 Begrenzte Rationalität erklärt

Die klassische Wirtschaftswissenschaft ging davon aus, dass Menschen perfekt rationale Entscheidungsträger sind — sie sammeln alle verfügbaren Informationen, bewerten alle möglichen Alternativen und wählen die optimale Lösung.

Simon argumentierte, dass dies Fiktion ist. In Wirklichkeit stehen Menschen vor drei grundlegenden Einschränkungen:

Einschränkung Beschreibung Beispiel in der Software
Kognitive Einschränkungen Wir können nicht alle verfügbaren Informationen verarbeiten Kein Entwickler kann das gesamte Verhalten eines Systems im Kopf behalten
Zeitbeschränkungen Entscheidungen müssen getroffen werden, bevor alle Daten verfügbar sind Anforderungen müssen geschrieben werden, bevor Benutzer das System genutzt haben
Unvollständiges Wissen Wir können nicht vorhersagen, wie sich die Umgebung ändern wird Marktbedingungen, Benutzerbedürfnisse und Technologie entwickeln sich unvorhersehbar

Aufgrund dieser Einschränkungen argumentierte Simon, dass Menschen nicht optimieren — sie satisfizieren (ein Wort, das er prägte, aus dem Englischen “satisfy” und “suffice”). Wir finden nicht die beste Lösung; wir finden eine Lösung, die gut genug ist angesichts unserer Beschränkungen.

3.3 Die Verbindung zur Softwareentwicklung

Simons Erkenntnis hat tiefgreifende Auswirkungen auf die Softwareentwicklung:

Wenn begrenzte Rationalität wahr ist, dann sind vollständige Anforderungsspezifikationen unmöglich. Die Wasserfall-Annahme — “wir können alle Anforderungen im Voraus kennen” — ist nicht nur schwer zu erreichen; sie ist philosophisch inkohärent.

Betrachten Sie unser Road Profile Viewer-Projekt. Selbst bei sorgfältiger Anforderungserhebung können wir nicht voraussehen:

Das ist kein Versagen unseres Anforderungsprozesses — es ist eine fundamentale Eigenschaft der menschlichen Kognition.

flowchart LR
    subgraph Traditional["Traditionelle Annahme"]
        direction TB
        A1[Vollständige Information] --> B1[Optimale Entscheidung]
        B1 --> C1[Perfektes System]
    end

    subgraph Bounded["Begrenzte Rationalität (Realität)"]
        direction TB
        A2[Begrenzte Information] --> B2[Zufriedenstellende Entscheidung]
        B2 --> C2[Aus Nutzung lernen]
        C2 --> D2[Anpassen & Verbessern]
        D2 --> A2
    end

    Traditional ~~~ Bounded

Simons Schlussfolgerung: Anstatt so zu tun, als könnten wir ein perfektes Vorausverständnis erreichen, sollten wir Prozesse aufbauen, die Lernen und Anpassung umfassen. Genau das tut Agile.


4. Übersicht über agile Methoden

4.1 Der Aufstieg von Agile: Historischer Kontext

In den 1980er und frühen 1990er Jahren glaubte die Software-Engineering-Community, dass bessere Software durch sorgfältige Projektplanung, formalisierte Qualitätssicherung und rigorose, kontrollierte Entwicklungsprozesse entsteht. Dieser “plangetriebene” Ansatz wurde für große, langlebige Systeme wie Luft- und Raumfahrt- und Regierungssoftware entwickelt — Projekte, die bis zu 10 Jahre von der Spezifikation bis zur Bereitstellung dauern können.

Als dieser schwergewichtige Ansatz jedoch auf kleine und mittelgroße Geschäftssysteme angewendet wurde, traten Probleme auf:

Die Unzufriedenheit mit diesen schwergewichtigen Ansätzen führte zur Entwicklung von agilen Methoden in den späten 1990er Jahren, darunter Extreme Programming (Beck 1999), Scrum (Schwaber und Beedle 2001) und DSDM (Stapleton 2003).

4.2 Was macht eine Methode “agil”?

Alle agilen Methoden teilen drei grundlegende Eigenschaften:

Eigenschaft Beschreibung Kontrast zu plangetrieben
Verschränkte Prozesse Spezifikation, Design und Implementierung finden zusammen statt. Anforderungen sind ein Überblick, keine detaillierte Spezifikation. Plangetrieben: Separate Phasen mit formalen Dokumenten zwischen jeder Stufe
Inkrementelle Entwicklung Das System wird in einer Reihe von Inkrementen entwickelt. Endbenutzer und Stakeholder sind an der Spezifizierung und Bewertung jedes Inkrements beteiligt. Plangetrieben: Vollständiges System wird am Ende des Projekts geliefert
Umfangreiche Werkzeugunterstützung Automatisierte Testwerkzeuge, Konfigurationsmanagement, Systemintegration und UI-Generierungswerkzeuge unterstützen das schnelle Tempo. Plangetrieben: Werkzeuge unterstützen Dokumentation und Compliance

Das Ergebnis: Agile Methoden erstellen neue Releases alle zwei bis drei Wochen, beziehen Kunden ein, um schnelles Feedback zu erhalten, und minimieren Dokumentation durch die Verwendung informeller Kommunikation anstelle formeller Meetings mit schriftlichen Dokumenten.

flowchart LR
    subgraph Plan["Plangetriebene Entwicklung"]
        direction TB
        R1[Requirements<br>Engineering] --> RS[Anforderungs-<br>Spezifikation]
        RS --> D1[Design &<br>Implementierung]
        D1 -.-> RC[Anforderungs-<br>Änderungsanträge]
        RC -.-> RS
    end

    subgraph Agile["Agile Entwicklung"]
        direction TB
        R2[Requirements<br>Engineering] <--> D2[Design &<br>Implementierung]
    end

    Plan ~~~ Agile

4.3 Die fünf Prinzipien agiler Methoden

Während sich verschiedene agile Methoden in ihren spezifischen Praktiken unterscheiden, teilen sie einen gemeinsamen Satz von Prinzipien:

Prinzip Beschreibung Praktische Herausforderung
Kundeneinbindung Kunden sollten während der gesamten Entwicklung eng eingebunden sein. Ihre Rolle ist es, neue Anforderungen zu liefern und zu priorisieren und Iterationen zu bewerten. Kunden haben andere Anforderungen an ihre Zeit und können möglicherweise nicht Vollzeit teilnehmen. Externe Stakeholder (wie Regulierungsbehörden) sind schwer zu vertreten.
Veränderung annehmen Erwarten Sie, dass sich Anforderungen ändern, und entwerfen Sie das System so, dass es diese Änderungen aufnehmen kann. Die Priorisierung von Änderungen kann extrem schwierig sein, wenn es viele Stakeholder mit unterschiedlichen Prioritäten gibt.
Inkrementelle Lieferung Software wird in Inkrementen entwickelt, wobei der Kunde die Anforderungen für jedes Inkrement spezifiziert. Schnelle Iterationen passen möglicherweise nicht zu längerfristigen Geschäftsplanungs- und Marketingzyklen.
Einfachheit bewahren Konzentrieren Sie sich auf Einfachheit sowohl in der Software als auch im Entwicklungsprozess. Arbeiten Sie aktiv daran, Komplexität aus dem System zu eliminieren. Unter dem Druck von Lieferterminen haben Teams möglicherweise keine Zeit, Vereinfachungen durchzuführen.
Menschen, nicht Prozesse Die Fähigkeiten des Entwicklungsteams sollten anerkannt und genutzt werden. Teammitglieder sollten ihre eigenen Arbeitsweisen entwickeln. Einzelne Teammitglieder haben möglicherweise nicht die geeigneten Persönlichkeiten für die intensive Einbindung, die typisch für agile Methoden ist.

4.4 Wo Agile am besten funktioniert

Agile Methoden waren besonders erfolgreich in zwei Situationen:

  1. Produktentwicklung — wo ein Softwareunternehmen ein kleines oder mittelgroßes Produkt zum Verkauf entwickelt. Praktisch alle Softwareprodukte und Apps werden heute mit einem agilen Ansatz entwickelt.

  2. Kundenspezifische Systementwicklung — wo es ein klares Engagement des Kunden gibt, sich am Entwicklungsprozess zu beteiligen, und wo es wenige externe Stakeholder und Vorschriften gibt.

Warum funktionieren diese Situationen gut? Weil sie kontinuierliche Kommunikation zwischen dem Produktmanager oder Kunden und dem Entwicklungsteam ermöglichen, und die Software ist eigenständig und nicht eng mit anderen gleichzeitig entwickelten Systemen integriert.

4.5 Die agile Antwort auf Unsicherheit

Anstatt Unsicherheit mit mehr Planung zu bekämpfen, arbeitet Agile mit Unsicherheit:

Traditionelle Antwort auf Unsicherheit Agile Antwort auf Unsicherheit
Mehr Vorausplanung Kurze Planungszyklen (1-4 Wochen)
Umfangreiche Dokumentation Funktionierende Software als primäres Artefakt
Änderungskontrollgremien Veränderung als Wettbewerbsvorteil willkommen heißen
Lange Releasezyklen (Monate/Jahre) Häufige Releases (Wochen)
Big-Bang-Tests am Ende Kontinuierliches Testen durchgehend
Spezialisten-Übergaben Funktionsübergreifende Teams

Die zentrale Erkenntnis: Feedback ist wertvoller als Vorhersage. Anstatt Monate damit zu verbringen, vorherzusagen, was Benutzer wollen, verbringen Sie Wochen damit, etwas zu bauen und aus ihren tatsächlichen Reaktionen zu lernen.


5. Das Agile Manifest

5.1 Geschichte und Kontext

Im Februar 2001 versammelten sich siebzehn Software-Praktiker in einem Skiresort in Snowbird, Utah. Sie vertraten verschiedene Methodologien — Extreme Programming, Scrum, Crystal und andere — aber teilten eine gemeinsame Frustration mit schwergewichtigen Prozessen.

Über ein Wochenende destillierten sie ihre kollektive Weisheit in vier Werte und zwölf Prinzipien. Das Ergebnis war das Agile Manifest, eines der einflussreichsten Dokumente in der Geschichte der Software.

5.2 Die vier Werte

Manifest für Agile Softwareentwicklung

Wir erschließen bessere Wege, Software zu entwickeln, indem wir es selbst tun und anderen dabei helfen. Durch diese Tätigkeit haben wir diese Werte zu schätzen gelernt:

  • Individuen und Interaktionen mehr als Prozesse und Werkzeuge
  • Funktionierende Software mehr als umfassende Dokumentation
  • Zusammenarbeit mit dem Kunden mehr als Vertragsverhandlung
  • Reagieren auf Veränderung mehr als das Befolgen eines Plans

Das heißt, obwohl wir die Werte auf der rechten Seite wichtig finden, schätzen wir die Werte auf der linken Seite höher ein.

agilemanifesto.org

Beachten Sie den letzten Satz: Das Manifest lehnt Prozesse, Dokumentation, Verträge oder Pläne nicht ab. Es etabliert Prioritäten.

Wert Was es bedeutet Was es NICHT bedeutet
Individuen und Interaktionen mehr als Prozesse und Werkzeuge Qualifizierten Menschen vertrauen; Bürokratie minimieren; persönliche Gespräche Überhaupt keine Prozesse; Werkzeuge sind nutzlos
Funktionierende Software mehr als umfassende Dokumentation Fortschritt mit laufendem Code demonstrieren; dokumentieren, was notwendig ist Null Dokumentation; niemals etwas aufschreiben
Zusammenarbeit mit dem Kunden mehr als Vertragsverhandlung Fortlaufendes Gespräch; gemeinsames Verständnis; Partnerschaft Keine Verträge nötig; keinen Umfang definieren
Reagieren auf Veränderung mehr als das Befolgen eines Plans Anpassen, während man lernt; Pläne sind lebende Dokumente Überhaupt keine Planung; einfach mit dem Programmieren anfangen

5.3 Die zwölf Prinzipien

Hinter den vier Werten stehen zwölf Prinzipien, die die agile Praxis leiten:

Lieferungsorientiert:

  1. Unsere höchste Priorität ist es, den Kunden durch frühe und kontinuierliche Auslieferung wertvoller Software zufrieden zu stellen.
  2. Liefere funktionierende Software regelmäßig, von ein paar Wochen bis zu ein paar Monaten, mit Bevorzugung der kürzeren Zeitspanne.
  3. Funktionierende Software ist das wichtigste Fortschrittsmaß.

Veränderung umarmend:

  1. Heiße Anforderungsänderungen willkommen, selbst spät in der Entwicklung. Agile Prozesse nutzen Veränderungen zum Wettbewerbsvorteil des Kunden.
  2. Die besten Architekturen, Anforderungen und Entwürfe entstehen durch selbstorganisierte Teams.
  3. In regelmäßigen Abständen reflektiert das Team, wie es effektiver werden kann, und passt sein Verhalten entsprechend an.

Menschenzentriert:

  1. Errichte Projekte rund um motivierte Individuen. Gib ihnen das Umfeld und die Unterstützung, die sie benötigen, und vertraue darauf, dass sie die Aufgabe erledigen.
  2. Die effizienteste und effektivste Methode, Informationen zu vermitteln, ist im Gespräch von Angesicht zu Angesicht.
  3. Fachleute aus der Wirtschaft und Entwickler müssen während des Projekts täglich zusammenarbeiten.
  4. Agile Prozesse fördern nachhaltige Entwicklung. Die Auftraggeber, Entwickler und Benutzer sollten ein gleichmäßiges Tempo auf unbegrenzte Zeit halten können.

Qualitätsgetrieben:

  1. Ständiges Augenmerk auf technische Exzellenz und gutes Design fördert Agilität.
  2. Einfachheit — die Kunst, die Menge nicht getaner Arbeit zu maximieren — ist essenziell.
🚀

Lieferungsfokus

  • 1. Frühe & kontinuierliche Lieferung
  • 2. Häufige Releases
  • 3. Funktionierende Software = Fortschritt
🔄

Veränderung umarmen

  • 4. Anforderungsänderungen willkommen
  • 5. Selbstorganisierte Teams
  • 6. Reflektieren & Anpassen
👥

Menschen zuerst

  • 7. Motivierten Individuen vertrauen
  • 8. Gespräch von Angesicht zu Angesicht
  • 9. Tägliche Zusammenarbeit
  • 10. Nachhaltiges Tempo

Technische Exzellenz

  • 11. Kontinuierliche Exzellenz
  • 12. Einfachheit

5.4 Praktische Herausforderungen der agilen Prinzipien

Die Manifest-Prinzipien klingen ansprechend, aber ihre Anwendung in der Praxis wirft schwierige Fragen auf. Reale Organisationen stehen vor Einschränkungen, die eine reine agile Einführung herausfordernd machen können:

Prinzip Praktische Herausforderung Reale Auswirkungen
Kundeneinbindung Kunden finden, die bereit sind, Vollzeit am Entwicklungsprozess teilzunehmen Kunden haben ihre eigenen Jobs; Product Owner sind oft Stellvertreter mit unvollständigem Wissen über die echten Benutzerbedürfnisse
Veränderung annehmen Nicht alle Stakeholder sind bereit zu akzeptieren, dass sich Prioritäten ändern werden Einige Änderungen haben hohe Implementierungskosten; späte grundlegende Änderungen können auch bei gutem Design erhebliche Nacharbeit erfordern
Einfachheit bewahren Einfachheit erfordert zusätzliche Arbeit zu erreichen; unter Lieferdruck überspringen Teams Refactoring Technische Schulden akkumulieren sich; "einfach zum Laufen bringen" wird zur Norm; zukünftige Änderungen werden schwieriger
Menschen über Prozesse Nicht jeder hat die Persönlichkeit für enge kollaborative Arbeit Einige Teammitglieder arbeiten lieber allein; Pair Programming kann erschöpfend sein; Konflikte können ohne Prozessleitplanken entstehen
Minimale Dokumentation Langlebige Systeme benötigen Dokumentation; Teamfluktuation verliert Wissen Wenn ursprüngliche Entwickler gehen, kämpfen neue Teammitglieder ohne Dokumentation; Wartung wird teuer

5.5 Wann ist Agile am anwendbarsten?

Agile Methoden sind keine universelle Lösung. Sie funktionieren am besten unter bestimmten Bedingungen:

Agile funktioniert gut, wenn:

Agile kann Schwierigkeiten haben, wenn:

Die Realität: Die meisten Organisationen verwenden heute einen hybriden Ansatz — sie übernehmen agile Praktiken, wo möglich, während sie notwendige Dokumentation und Prozesse für Compliance, Integration oder organisatorische Einschränkungen beibehalten.


6. Extreme Programming (XP): Wichtige Praktiken

6.1 Was ist XP?

Extreme Programming (XP) wurde von Kent Beck in den späten 1990er Jahren entwickelt. Der Name kommt davon, gute Softwareentwicklungspraktiken auf ihr “Extrem” zu treiben:

XP liefert die technischen Praktiken, die Agile funktionieren lassen. Ohne diese Praktiken wird Agile nur “weniger planen” — was zu Chaos führt, nicht zu Agilität.

6.2 Der XP Release-Zyklus

XP organisiert Arbeit in Releases, Iterationen und Aufgaben:

📦

Release-Ebene (Wochen bis Monate)

📋 User Stories auswählen
Iteration 1 1-2 Wochen
Iteration 2 1-2 Wochen
...
Iteration N 1-2 Wochen
🚀 Software ausliefern
🔄

Innerhalb jeder Iteration

✂️ Stories in Aufgaben aufteilen
💻 Entwickeln / Integrieren / Testen
System bewerten

Zu Beginn eines Projekts erfassen Story Cards die Kundenanforderungen. Der Kunde arbeitet mit dem Team zusammen, um diese Stories zu priorisieren, und jedes Release enthält die Funktionen mit der höchsten Priorität, die in den Zeitplan passen.

Sobald Stories einem Release zugewiesen sind, teilt das Entwicklungsteam sie in Task Cards auf. Jede Aufgabe repräsentiert ungefähr 1-2 Tage Arbeit, was den Fortschritt sichtbar und die Schätzung genauer macht.

Verbindung zur vorherigen Vorlesung: Wir haben User Stories in Kapitel 04: Requirements Engineering eingeführt. Dort haben Sie das “Als… möchte ich… damit…“-Format und die INVEST-Kriterien gelernt. XPs Story Cards sind die physische Darstellung dieser User Stories — eine leichtgewichtige Art, sie zu erfassen und zu priorisieren, ohne schwere Dokumentation. Die digitalen Entsprechungen (GitHub Issues, Jira-Tickets) dienen heute demselben Zweck.

6.3 Kern-XP-Praktiken

Praktik Beschreibung Verbindung zu diesem Kurs
User Stories Anforderungen als kurze Beschreibungen aus Benutzerperspektive Kapitel 04: User Stories
Testgetriebene Entwicklung (TDD) Schreibe fehlschlagenden Test, schreibe Code zum Bestehen, refactore Kapitel 03: TDD
Refactoring Codestruktur verbessern ohne Verhaltensänderung Kapitel 02: Refactoring
Pair Programming Zwei Entwickler, ein Computer, kontinuierliche Überprüfung Siehe Vertiefung unten
Continuous Integration Häufig zusammenführen, bei jedem Commit automatisch testen Kapitel 02: CI/CD
Kollektives Eigentum Jeder kann jeden Code ändern; keine "Code-Silos" Ermöglicht durch Tests und Pair Programming
Einfaches Design Für aktuelle Bedürfnisse entwerfen, nicht für hypothetische Zukunft Kapitel 02: YAGNI
Kleine Releases Häufig in Produktion deployen mit minimalen Änderungen Agiles Prinzip #2
Nachhaltiges Tempo 40-Stunden-Wochen; Burnout und Last-Minute-Heroismus vermeiden Agiles Prinzip #10
Vor-Ort-Kunde Kundenvertreter Vollzeit verfügbar, um Fragen zu beantworten Ermöglicht schnelles Feedback

6.4 Testgetriebene Entwicklung im Detail

Testgetriebene Entwicklung (TDD) kehrt die traditionelle Entwicklungssequenz um. Anstatt Code zu schreiben und dann Tests zu schreiben, tun Sie:

  1. Schreiben Sie einen fehlschlagenden Test, der das erwartete Verhalten definiert
  2. Schreiben Sie den minimalen Code, um den Test zu bestehen
  3. Refactoren Sie, um das Design zu verbessern, während die Tests grün bleiben

Dieser Ansatz hat einen entscheidenden psychologischen Vorteil: Er zwingt Sie, darüber nachzudenken, was der Code tun soll, bevor Sie darüber nachdenken, wie er implementiert wird.

Das Testverzögerungsproblem

In der Praxis haben viele Teams Schwierigkeiten, die Disziplin aufrechtzuerhalten. Unter Zeitdruck schreiben Entwickler Tests nach dem Code — oder überspringen Tests ganz. Dies erzeugt Testverzögerung: eine wachsende Lücke zwischen Produktionscode und Testabdeckung.

Sobald sich Testverzögerung entwickelt, stehen Entwickler vor einem Dilemma:

XP adressiert dies, indem Test-First zu einer Teamnorm gemacht wird, nicht zu einer individuellen Entscheidung. Pair Programming hilft, die Disziplin durchzusetzen, weil Ihr Partner es bemerkt, wenn Sie den Testschritt überspringen.

Beispiel: Test-First für Profilvalidierung

# Step 1: Write the failing test
def test_profile_name_too_long_raises_error():
    """Names over 100 characters should be rejected."""
    long_name = "A" * 101
    with pytest.raises(ValidationError, match="Name must be 1-100 characters"):
        validate_profile_name(long_name)

# Step 2: Write minimum code to pass
def validate_profile_name(name: str) -> str:
    if len(name) > 100:
        raise ValidationError("Name must be 1-100 characters")
    return name

# Step 3: Refactor (add more validation rules)
def validate_profile_name(name: str) -> str:
    if not name or len(name) > 100:
        raise ValidationError("Name must be 1-100 characters")
    return name.strip()

6.5 Pair Programming im Detail

Pair Programming ist vielleicht die kontraintuitivste XP-Praktik. Zwei Entwickler arbeiten zusammen an einem Computer:

Partner wechseln häufig die Rollen (alle 15-30 Minuten) und tauschen über den Tag die Paare.

Vorteile:

Was sagt die Forschung?

Pair Programming wurde umfangreich untersucht:

Die Forschung legt nahe, dass Pair Programming nicht universell vorteilhaft ist — es ist ein Werkzeug, das am besten auf komplexe, risikoreich oder lernintensive Arbeit angewendet wird.

Wann Pair Programming nutzen:

Wann alleine arbeiten:

6.6 KI als Ihr Pair-Programming-Partner: Der neue Navigator?

Seit Vorlesung 1 haben Sie GitHub Copilot als Teil Ihrer Entwicklungsumgebung verwendet. Ob Sie es erkannt haben oder nicht, jedes Mal wenn Copilot Code vorschlug und Sie bewerteten, ob Sie ihn akzeptieren — waren Sie in einer Form von Pair Programming mit einem KI-Partner engagiert.

Dies wirft eine wichtige Frage auf: Gelten die Forschungsergebnisse über menschliches Pair Programming aus den Jahren 2000 und 2007 noch im Zeitalter der generativen KI? Oder hat KI die Gleichung grundlegend verändert?

6.6.1 Der Aufstieg der KI-Pair-Programmer

Die Landschaft verschob sich rapide:

Diese Werkzeuge funktionieren als ein immer verfügbarer Navigator — sie schlagen Code-Vervollständigungen vor, beantworten Fragen und helfen beim Debuggen. Sie bleiben der Driver; die KI bietet Navigationsvorschläge.

6.6.2 Was sagt die Forschung?

Forscher haben begonnen, Mensch-Mensch-Pair-Programming mit Mensch-KI-Pair-Programming zu vergleichen. Die Erkenntnisse sind differenziert:

Dimension Menschliches Pair Programming KI Pair Programming
Geschwindigkeit ~15% Overhead (zwei Personen, eine Aufgabe) 55% schnellere Aufgabenfertigstellung (GitHub 2023)
Fehlerreduzierung 15% weniger Fehler (Williams 2000) Gemischt: Lesbarkeit ↑, aber 41% höherer Code-Churn (GitClear 2024)
Angst/Motivation Moderate Verbesserung Signifikante Reduktion (p < .001, d = 0.35) (STEM Education 2025)
Komplexe Aufgaben Starke Vorteile Schwierigkeiten ohne Projektkontext
Verfügbarkeit Arbeitszeiten, Terminplanung erforderlich 24/7, unendliche Geduld
Expertise-Matching Fix (wer verfügbar ist) Anpassbar an Ihr Niveau
Wissenstransfer Hoch (implizites Wissen wird geteilt) Keiner
Mentoring-Fähigkeit Ja Nein
Teamkultur aufbauen Ja Nein

6.6.3 Das Produktivitätsversprechen

Die Produktivitätsgewinne sind real und gut dokumentiert:

Diese Gewinne sind am ausgeprägtesten bei Boilerplate-Code, Syntax-Nachschlagen und Routine-Implementierungen — genau die Aufgaben, bei denen der Pair-Programming-Overhead am schwersten zu rechtfertigen ist.

6.6.4 Die Qualitätsfrage

Das Qualitätsbild ist jedoch komplizierter. Forschung aus 2024 präsentiert widersprüchliche Belege:

Positive Erkenntnisse (GitHub-gesponserte Forschung):

Besorgniserregende Erkenntnisse (unabhängige Forschung):

Interpretation: KI tauscht möglicherweise anfängliche Geschwindigkeit gegen spätere Nacharbeit ein. Der Code wird schneller geliefert, erfordert aber möglicherweise mehr Wartung.

6.6.5 Eine differenzierte Erkenntnis für Lernende

Eine 2025er Studie auf der ACM Learning@Scale-Konferenz fand heraus, dass die Vorteile von KI-Pair-Programming ungleich verteilt waren unter den Studierenden:

Dies legt eine kritische Erkenntnis nahe: KI verstärkt bestehende Fähigkeiten, anstatt sie zu ersetzen. Wenn Sie nicht verstehen, warum Code funktioniert, wird KI Sie nicht lehren — sie wird nur mehr Code generieren, den Sie nicht verstehen.

Dies verbindet sich direkt mit unserer Betonung von TDD und Testing: Ihre Tests verifizieren, dass KI-Vorschläge tatsächlich korrekt funktionieren. Sie müssen den Code immer noch gut genug verstehen, um aussagekräftige Tests zu schreiben.

6.6.6 Was KI nicht ersetzen kann

Forschung identifiziert konsistent Fähigkeiten, die einzigartig menschlich bleiben:

Wie eine 2025er Studie bemerkte: Studierende “schätzten LLM-basierte Werkzeuge als wertvolle Pair-Programming-Partner”, hatten aber “unterschiedliche Erwartungen im Vergleich zu menschlichen Teamkollegen”.

6.6.7 Praktische Anleitung: Wann was verwenden

Basierend auf der Forschung hier eine aktualisierte Anleitung für das KI-Zeitalter:

KI-Pair-Programming verwenden für:

Menschliches Pair Programming verwenden für:

Der kompetente Entwickler von 2025 und darüber hinaus wird wahrscheinlich beides strategisch nutzen — erkennen, wann Geschwindigkeit und Verfügbarkeit (KI) gebraucht werden versus wann Weisheit, Herausforderung und Wissenstransfer (Mensch) gebraucht werden.

Das beste Pairing-Setup könnte sein: ein menschlicher Navigator, der weiß, wann er Sie fahren lässt — und wann er vorschlägt, Copilot um eine Syntax-Erinnerung zu bitten.

6.7 Wie XP-Praktiken sich gegenseitig verstärken

XP-Praktiken sind nicht unabhängig — sie bilden ein sich gegenseitig verstärkendes System:

👥
Pair Programming
Verstärkt alles
📋 User Stories
🧪 Test-First (TDD)
🔧 Refactoring
Einfaches Design
🔄 Continuous Integration
🚀 Kleine Releases

7. User Stories für den Road Profile Viewer

Wenden wir XP-Praktiken auf unser Kursprojekt an: den Road Profile Viewer.

7.1 User Story Format

Aus Kapitel 04 erinnern Sie sich an das User-Story-Format:

Als [Rolle] möchte ich [Funktion], damit [Nutzen].

Dieses Format erfasst:

7.2 Story Cards und Task Cards

Im traditionellen XP werden User Stories auf physische Story Cards geschrieben — Karteikarten, die klein genug sind, um Kürze zu erzwingen. Die Einschränkung ist beabsichtigt: Eine Story, die nicht auf eine Karte passt, ist zu groß und muss aufgeteilt werden.

Was auf eine Story Card kommt:

Sobald eine Story zur Implementierung ausgewählt wurde, teilt das Entwicklungsteam sie in Task Cards auf. Jede Aufgabe repräsentiert ein bestimmtes Stück Arbeit (maximal 1-2 Tage):

Story Card Task Cards (abgeleitet von Story)
Profil-Upload

Als Straßeningenieur möchte ich neue Straßenprofile über JSON-Dateien hochladen.

Priorität: Hoch
Schätzung: 5 Punkte
  • /upload-Route und Template erstellen
  • Datei-Upload-Formularkomponente implementieren
  • JSON-Parsing mit Fehlerbehandlung hinzufügen
  • Pydantic-Validierungsmodell implementieren
  • Datenbank-Speicheroperation hinzufügen
  • Integrationstests schreiben

Warum physische Karten?

In den frühen Tagen von XP dienten physische Karten mehreren Zwecken:

7.2.1 Von physischen Karten zu digitalen Werkzeugen

Heute verwenden die meisten Teams digitale Werkzeuge anstelle von physischen Karten. Die Umstellung erfolgte aus praktischen Gründen:

Aspekt Physische Karten GitHub Issues Jira
Am besten für Kleine zusammenlokalisierte Teams, Workshops Open Source, kleine-mittlere Teams, Entwickler Enterprise, große Teams, Management-Reporting
Kosten Karteikarten + Marker Kostenlos (öffentlich), bei GitHub enthalten 7,75-15,25$/Benutzer/Monat
Lernkurve Keine Niedrig (wenn Sie GitHub kennen) Mittel-Hoch (viele Funktionen)
Sprint-Planung Karten auf Board bewegen GitHub Projects Boards Eingebautes Sprint-Management
Reporting Manuelles Zählen Basic (Insights-Tab) Erweitert (Burndown, Velocity, Forecasting)

Für diesen Kurs empfehlen wir GitHub Issues, weil:

Das Werkzeug ist egal — die Praktik zählt. Ob Sie Haftnotizen, GitHub Issues oder Jira verwenden, die Prinzipien bleiben gleich: Stories klein halten, sie in Aufgaben aufteilen und Fortschritt sichtbar machen.

7.3 Road Profile Viewer Funktionsanforderungen

Das Projekt erfordert:

7.4 Beispiel User Stories

7.4.1 Story 1: Profilauswahl

Als Straßeningenieur möchte ich aus mehreren gespeicherten Straßenprofilen per Dropdown auswählen, damit ich schnell zwischen verschiedenen Straßenmessungen wechseln kann.

Akzeptanzkriterien (Given-When-Then):

Scenario: Select a different profile
  Given the application has 3 stored profiles
  And the dropdown shows "Highway A1" as the default
  When I click the dropdown and select "Rural Road B7"
  Then the chart updates to show the "Rural Road B7" profile
  And the intersection calculation uses the new profile data

Scenario: Default selection on startup
  Given the application has stored profiles
  When the application starts
  Then the dropdown pre-selects the first profile alphabetically
  And the chart displays that profile

7.4.2 Story 2: Profil-Upload

Als Straßeningenieur möchte ich neue Straßenprofile über JSON-Dateien hochladen, damit ich Messungen aus Felduntersuchungen zum System hinzufügen kann.

Akzeptanzkriterien:

Scenario: Upload valid JSON profile
  Given I am on the upload page
  And I have a valid JSON file with 100 road points
  When I select the file and click "Upload"
  Then the system displays a preview chart
  And I can enter a custom name for the profile
  And clicking "Save" stores the profile in the database
  And I receive a success confirmation

Scenario: Upload invalid JSON format
  Given I am on the upload page
  When I select a file that is not valid JSON
  Then the system displays "Invalid JSON format" error
  And the profile is NOT saved to the database

Scenario: Upload mismatched coordinates
  Given I am on the upload page
  When I select a JSON file where x_coordinates has 50 items but y_coordinates has 45 items
  Then the system displays "Coordinate arrays must have equal length" error
  And the profile is NOT saved

7.4.3 Story 3: Datenvalidierung

Als Systemadministrator möchte ich, dass hochgeladene Profile gegen Schemaregeln validiert werden, damit ungültige Daten die Datenbank nicht beschädigen können.

Akzeptanzkriterien:

Scenario: Valid profile data
  Given a JSON file with name "Test Road" (10 chars)
  And x_coordinates and y_coordinates each have 25 float values
  When the system validates the file
  Then validation passes
  And the profile can be saved

Scenario: Name too long
  Given a JSON file with name exceeding 100 characters
  When the system validates the file
  Then validation fails with "Name must be 1-100 characters"

Scenario: Empty coordinate arrays
  Given a JSON file with empty x_coordinates array
  When the system validates the file
  Then validation fails with "Minimum 2 coordinate points required"

7.4.4 Story 4: Profilvorschau

Als Straßeningenieur möchte ich das Profildiagramm vor dem Speichern in der Vorschau sehen, damit ich überprüfen kann, dass ich die richtigen Daten hochlade.

Akzeptanzkriterien:

Scenario: Preview before save
  Given I have uploaded a valid JSON file
  When the system accepts the file
  Then I see a graph showing the road profile
  And the graph axes are labeled correctly
  And I can still cancel without saving

7.4.5 Story 5: Datenbankpersistenz

Als Straßeningenieur möchte ich, dass meine Profile Anwendungsneustarts überdauern, damit ich meine Daten nicht verliere, wenn ich die Anwendung schließe.

Akzeptanzkriterien:

Scenario: Profiles survive restart
  Given I have saved 5 profiles to the database
  When I restart the application
  Then all 5 profiles appear in the dropdown
  And each profile loads correctly when selected

7.5 User Stories in der Praxis verwalten

Die oben genannten User Stories sind auf dem Papier gut strukturiert, aber wie verfolgen Teams sie tatsächlich während der Entwicklung? Sehen wir, wie man diese Stories in GitHub Issues übersetzt — das Werkzeug, das Sie bereits für diesen Kurs verwenden.

7.5.1 GitHub Issues für User Stories verwenden

GitHub Issues bietet alles, was Sie brauchen, um User Stories zu verwalten:

Labels kategorisieren Issues nach Typ und Priorität:

Meilensteine gruppieren Stories in Releases:

Aufgabenlisten innerhalb von Issues verfolgen Unteraufgaben:

Verlinkung verbindet Stories mit der Implementierung:

7.5.2 Beispiel: Profil-Upload als GitHub Issue

So würde Story 2: Profil-Upload als GitHub Issue aussehen:

📋 [Story] Profil-Upload über JSON-Dateien #12
story priority:high sprint:1 feature:upload
🎯 Meilenstein: MVP Release v1.0

User Story

Als Straßeningenieur möchte ich neue Straßenprofile über JSON-Dateien hochladen, damit ich Messungen aus Felduntersuchungen zum System hinzufügen kann.

Akzeptanzkriterien

  • Upload-Seite erreichbar unter /upload
  • Dateiauswahl akzeptiert nur .json-Dateien
  • Gültiges JSON zeigt Vorschaudiagramm vor dem Speichern
  • Ungültiges JSON zeigt klare Fehlermeldung
  • Nicht übereinstimmende Koordinaten-Arrays werden mit Erklärung abgelehnt
  • Erfolgsbestätigung wird nach dem Speichern angezeigt
  • Neues Profil erscheint sofort im Dropdown

Aufgaben

  • /upload-Route und Template erstellen
  • Datei-Upload-Formularkomponente implementieren
  • JSON-Parsing mit Fehlerbehandlung hinzufügen
  • Pydantic-Validierungsmodell implementieren
  • Datenbank-Speicheroperation hinzufügen
  • Integrationstests schreiben (Ziel: 90% Abdeckung)

Definition of Done

  • Alle Akzeptanzkriterien verifiziert
  • Tests geschrieben und bestanden
  • Code geprüft und genehmigt
  • Keine bekannten Bugs

Warum diese Struktur funktioniert:

  1. User Story oben — Jeder kann verstehen was und warum
  2. Akzeptanzkriterien als Checkboxen — Klare Definition von “fertig”
  3. Aufgaben als Checkboxen — Implementierungsfortschritt verfolgen
  4. Labels zum Filtern — Alle hochprioritären Stories finden, alle Upload-Features usw.

7.5.3 GitHub Projects für Sprint-Planung

Für Planung auf Sprint-Ebene verwenden Sie GitHub Projects (das neuere “Projects V2”):

  1. Projektboard erstellen, das mit Ihrem Repository verknüpft ist
  2. Spalten hinzufügen für Ihren Workflow: BacklogSprintIn BearbeitungReviewFertig
  3. Issues ziehen zwischen Spalten, während die Arbeit voranschreitet
  4. Filter verwenden, um nur den aktuellen Sprint zu sehen: milestone:"Sprint 1"

Das Board gibt dem Team einen visuellen Überblick — das digitale Äquivalent der physischen Kartenwand, die XP-Teams in den 1990er Jahren verwendeten.

7.5.4 Wenn Teams GitHub Issues entwachsen

Für größere Teams oder Unternehmensumgebungen bieten Werkzeuge wie Jira:

Die Prinzipien bleiben gleich, unabhängig vom Werkzeug. Wenn Sie User Stories, Aufgabenaufteilung und Sprint-Planung mit GitHub Issues beherrschen, werden Sie sich schnell an jedes andere Werkzeug anpassen.

Weiterführend: GitHub Issues-Dokumentation Atlassian Jira-Guides

7.6 User Story Aufschlüsselung

Story Priorität Geschätzter Aufwand Abhängigkeiten
Datenbankpersistenz Hoch Mittel Schema-Design
Datenvalidierung Hoch Klein Pydantic-Setup
Profilauswahl Hoch Mittel Datenbank, existierende UI
Profil-Upload Hoch Groß Validierung, Datenbank
Profilvorschau Mittel Klein Upload-Formular

8. Zusammenfassung

Konzept Kernpunkt Verbindung zum Testing
Begrenzte Rationalität Wir können Systeme nicht vollständig im Voraus spezifizieren, weil Menschen satisfizieren, nicht optimieren Tests müssen sich entwickeln, wenn das Verständnis wächst; unvollständige Specs bedeuten unvollständige Tests
Agiles Manifest 4 Werte, 12 Prinzipien, die funktionierende Software und Reaktion auf Veränderung priorisieren "Funktionierende Software" erfordert Tests; Veränderung erfordert Regressionstests
XP-Praktiken TDD, Refactoring, Pair Programming, Continuous Integration TDD ist Kern-XP-Praktik; Refactoring erfordert Testsicherheitsnetz
KI Pair Programming 55% schneller bei Routineaufgaben, aber 41% höherer Churn; verstärkt bestehende Fähigkeiten Tests verifizieren, dass KI-Vorschläge korrekt funktionieren; Sie müssen den Code immer noch verstehen
User Stories "Als [Rolle] möchte ich [Funktion], damit [Nutzen]" mit Akzeptanzkriterien Akzeptanzkriterien sind ausführbare Testfälle
GitHub Issues Digitale Story Cards mit Labels, Meilensteinen und Aufgabenlisten Issues mit Commits und PRs für Nachverfolgbarkeit verknüpfen

8.1 Wichtige Erkenntnisse

  1. Traditionelle Modelle scheitern, weil begrenzte Rationalität vollständige Vorausplanung unmöglich macht.
  2. Agile akzeptiert Unsicherheit und baut Prozesse um kurze Feedback-Schleifen herum.
  3. XP-Praktiken (TDD, Refactoring, CI) liefern die technische Grundlage, die Agile funktionieren lässt.
  4. KI Pair Programming ergänzt, ersetzt aber nicht menschliche Zusammenarbeit — nutzen Sie beides strategisch.
  5. User Stories mit Akzeptanzkriterien transformieren Anforderungen in ausführbare Testspezifikationen.
  6. GitHub Issues bietet alles, was Sie brauchen, um User Stories zu verfolgen, mit enger Integration zu Ihrem Code.

9. Reflexionsfragen

  1. Herbert Simons Erkenntnis: Wie erklärt begrenzte Rationalität, warum sich Ihre Road Profile Viewer-Anforderungen während der Entwicklung ständig geändert haben? Geben Sie ein konkretes Beispiel aus der Erfahrung Ihres Teams.

  2. Manifest-Interpretation: “Funktionierende Software mehr als umfassende Dokumentation” — bedeutet das keine Dokumentation? Welche Dokumentation würden Sie trotzdem für den Road Profile Viewer schreiben?

  3. XP-Abwägungen: Pair Programming erfordert zwei Entwickler für eine Aufgabe. Wann würden die Vorteile (kontinuierliche Überprüfung, Wissensaustausch) die scheinbaren Kosten von zwei Personen an einem Computer überwiegen?

  4. KI vs. menschliches Pairing: Basierend auf der präsentierten Forschung, wann würden Sie menschliches Pair Programming gegenüber KI-Unterstützung wählen? Geben Sie ein konkretes Beispiel aus Ihrer Road Profile Viewer-Arbeit.

  5. User-Story-Übung: Schreiben Sie eine User Story mit Akzeptanzkriterien für eine Funktion, die NICHT in den aktuellen Anforderungen ist — zum Beispiel “Profil als PDF exportieren” oder “zwei Profile nebeneinander vergleichen.”

  6. GitHub Issues-Übung: Nehmen Sie eine Ihrer User Stories und erstellen Sie ein GitHub Issue nach der Struktur in Abschnitt 7.5.2. Fügen Sie Labels, Akzeptanzkriterien als Checkboxen und eine Aufgabenaufteilung hinzu.


10. Weiterführende Literatur

10.1 Bücher

10.2 Artikel und Ressourcen

10.3 Werkzeuge


11. Wie geht es weiter?

In Teil 2: Scrum Framework und praktische Anwendung werden wir behandeln:

Mit der Philosophie, den Praktiken und User Stories aus Teil 1 sind Sie bereit zu lernen, wie Scrum diese Elemente in einen wiederholbaren Prozess organisiert.

© 2026 Dominik Mueller   •  Powered by Soopr   •  Theme  Moonwalk