Agile Engineering-Techniken (3 Tage)

 

Voraussetzungen

Die Teilnehmer sollten Programmiererfahrung haben in

  • Java 5
  • Web-Programmierung

Ziele

  • Wie konvertiert das Team eine Anzahl von User Stories in ein potentiell auslieferbares Inkrement des Produkts
  • Wie erkennt das Team, wie die User Story umgesetzt wird, welche Arbeitsschritte(Tasks) daraus abgeleitet werden müssen
  • Wie bestimmt man, wann ein Task bzw. eine User Story fertig sind („done“)
  • Wie entwickelt und dokumentiert ein Scrum Team Richtlinien und Standards für „done“ (Team Charter)
  • Wie vermeidet man „technische Schulden“ (technical debt) und was sind die Auswirkungen solcher Schulden
  • Wie wird bestimmt, wer welche Aufgaben bei der Realisierung des Produkt-Inkrement übernimmt, welche Rollen gibt es im Team
  • Welche Arten von Tests gibt es in der agilen Entwicklung, welche Rolle haben sie, wie und wann werden sie entwickelt und eingesetzt
  • Wie setzt man eine kontinuierliche Integration mit automatisierten Unit- und Akzeptanztests auf und hält sie am laufen
  • Test-First-Entwicklung und (Akzeptanz- und Unit-)Test-getriebene Entwicklung/Design
  • Pair-Programming-Techniken im Team
  • Refaktorisierung, Patterns und integrierte Nutzung im TDD-Zyklus
  • Emergente Architektur und  ihr Nutzen für eine inkrmentelle Entwicklung
  • Reporting und Messung von Geschwindigkeit (velocity) des Teams
  • Hindernisee und Beteiligung an der Beseitigung derselben

 

Inhalte

Architektur und Design

Lernziele

  • Untersuchung von Architektur und Design mit dem primären Fokus auf den Prinzipien, die eine bessere Testbarkeit und einfacheres Refactoring ermöglichen
  • Prinzipien von Architektur in einer agilen Umgebung
  • Design-Praktiken in einem agilen Team
  • Prinzipien und Vorgehensweisen, die eine bessere Testbarkeit und einfacheres Refactoring ermöglichen
  • Anti-Patterns

Schritte

  • Erarbeiten eines Proof of Concept/Spike früh im Kursverlauf
  • Emergente Architektur Live als Teil der Aufgabenstellung
  • Clean code

Zusammenarbeit

Lernziele

  • Ein umfassendes Verständnis zur Art, wie agile Teams zusammenarbeiten. Das umfasst u.a.:

    • Zusammenarbeit als ein Team
    • Einbeziehen des Kunden in den Prozess
    • Pair programming

Schritte

  • Diskussion and Reflexion über das Wesen der Zusammenarbeiten bei Agilen Methoden
  • Jeder Teilnehmer arbeitet als Mitglied eines Scrum Teams während des gesamten Kurses
  • Wir ratendringend zur Nutzung von Pair Programming währnd dem Kurs
  • Wir veranstalten „Programmier-Randori“ Sessions im Kurs
  • We führen eine Retrospektive als Teil des Kurses durch
  • Der Kurs beinhaltet Product Backlog Schätzung als eines seiner Kernelemente

Testgetriebene Entwicklung

Lernziele

Wir studieren Test‐First Entwicklung, u.a. mit folgenden Konzepten:

  • Testgetriebene Entwicklung (TDD) als Design-Aktivität
  • Der Rot-Grün-Refactoring Zyklus
  • Unit-Testen: Prinzipien und Praktiken
  • Was macht einen guten Test aus, wie misst man die Effektivität eines Tests

Schritte

  • Präsentation und Diskussion über automatisiertes Testen und TDD
  • Wir empfehlen dringend die Nutzung von TDD während des Kurses
  • Coding Kata – Vorführung und Übung
  • Coding Randori
  • „Code sense“ Übung

 

Refactoring 

Lernziele

Eine Einführung in die Praxis des Refactoring, u.a. folgende Konzepte:

  • Wann soll man refakturieren
  • Refactoring zur Pflegbarkeit
  • Refactoring nach Patterns
  • Problemzonen
  •  

Schritte

  • Diskussionen und Vorträge
  • Übungen zur Refakturierung von schlechtem Code
  • Impliziter Teil der Übungen über den ganzen Kurs (TDD)

Kontinuierliche Integration

Lernziele

Eine Einführung in die Grundprinzipien der kontinuierlichen Integration, u.a.:

  • Bauen und testen der Software mit einem einzelnen Kommando(„single command build“)
  • Erstellen von automatisierten, selbst-testenden und schnellen Builds
  • Die Bedeutung eines einheitlichen Quelltext-Repository
  • Verbessern der Transparenz und Sichtbarkeit durch automatisches Deployment

Schritte

  • Diskussion und Vorträge
  • Aufsetzen eines CI-Systems im Kursverlauf (basiert auf Hudson und SubVersion)
  • Während der Kursübungen empfehlen wir dringend häufige Integration

 

Kursformat

  • Einführung
  • Drei kurze Sprints, mit Lieferung eines laufenden Inkrement mit neuer Funktionalität.

Allgemeine Lehrmethoden

  • Kurze Theorieabschnitte, die sofort in Übungen bzw. Praktische Entwicklung umgesetzt werden.
  • Assessment: setzt sich zusammen aus Review durch die Trainer, gegenseitige Bewertung (“peer review”) und Selbstbewertung.
  • Spiele und andere Abendübungen: Code Kata, Daily Scrum from Hell, Penny Game.
Bookmark and Share