Xtreme Programming (XP)

Was ist Extreme Programming ?
Bei Extreme Programming handelt es sich um eine agile Entwicklungsmethode, welche das lösen einer Programmieraufgabe in den Vordergrund der Entwicklung stellt. Es wird wenig Wert auf formalisiertes Vorgehen gelegt, im Gegensatz zu anderen Entwicklungsmethoden.

Beim Extreme Programming nähert sich das in der Entwicklung befindliche Produkt in kleinen Schritten immer mehr den Anforderungen des Kunden. Die Wirksamkeit des Extreme Programmings ist umstritten.

Vorgehen
Beim Xtreme Programming erfolgen während des gesamten Entwicklungsprozesses eines Produkts Iterationen. Dadurch das Teamarbeit, Offenheit und stete Kommunikation mit allen an der Entwicklung beteiligten Personen im Vordergrund steht kann die Software schneller bereitgestellt werden und eine höhere Softwarequalität gewährleistet werden. Im Laufe eines Extreme Programming Projekts können sich Prioritäten und Gewichte verändern, da beim XP davon ausgegangen wird das der Kunde zu beginn der Projektentwicklung noch nicht alle Anforderungen komplett kennt. Ein XP-Projekt erhält permanent neue Funktionalitäten, welche integriert und getestet werden.

Aufbau
Innerhalb des Entwicklungsteams gibt es keine Rollentrennung, jede Person im Entwicklungsteam wird auch als Entwickler bezeichnet. Manager spielen bei XP eine weniger wichtige Rolle, wichtiger sind die Rollen des Kunden, des Product Owners und des Teamleiters, welcher die Kommunikation mit den Kunden und untereinander koordiniert.

Rollen
Auch im Xtreme Programming existieren verschiedene Rollen welche nun einzeln erklärt werden.

Produktbesitzer
Der Produktbesitzer kann eine Person aus dem Management, ein Benutzer, ein Kunde, Analyst oder Sponsor sein, er hat die Verantwortung für das Projekt und setzt die Prioritäten.

Kunde
Die Rolle des Kunden hat der Auftraggeber, welcher auch Produktbesitzer sein kann, er entscheidet was gemacht wird und gibt regelmäßig Rückmeldungen.

Entwickler
Ein Entwickler ist Bestandteil des Entwicklerteams, welches in der Regel aus Programmieren, Testern, DB-Experten, Architekten und Designern besteht, sie entwickeln gemeinsam das Produkt.

Projekt Manager
Der Projekt Manger ist der Produktbesitzer, welcher auch Teil des Entwicklerteams sein kann, er übernimmt die Führung des Teams.

Benutzer
Die Rolle des Benutzers übernimmt der Nutzer des zu erstellenden Produkts.

Praktiken
Beim XP werden verschiedene Praktiken angewandt, welche im folgenden erklärt werden.

Pair Programming
Beim Pair Programming arbeiten zwei Programmierer an einem Computer, einer der beiden codet und der andere übernimmt mehr das denken und das im Kopf behalten des zu erreichenden Gesamtbilds der zu erstellenden Software. Diese Praktik ist vorallem für Anfänger von Vorteil, da sie hierbei von erfahrenen Programmierern lernen können. Dadurch das auf diese Weise ein ständiges Coderreview erfolgt, wird eine bessere Softwarequalität gewährleistet und Fehler können schneller gefunden und beseitigt werden.

Kollektives Eigentum
Es soll vermieden werden das einzelne Personen das Produkt oder Teile des Produkts als ihren Besitz betrachten. Dadurch das Aktivitäten der Entwicklung auf das Gesamte Team verteilt werden wird dieser Gedanke verhindert.

Permanente Integration
Es erfolgt eine permanente Integration der Komponenten zu einem lauffähigem Gesamtsystem, dies geschieht in kurzen Zeitabständen. Durch möglichst häufige Integration soll sich die Routine des Teams erhöhen. Dadurch können Fehler früh aufgedeckt und beseitigt werden. Das setzt vorraus das die zu integrierenden Komponenten komplett durchgetestet sein müssen.

Testgetriebene Entwicklung
Bei der Testgetrieben Entwicklung werden die Komponententests bereits geschrieben bevor die Funktionalität überhaupt programmiert wurde. Dadurch soll sich der Entwickler früh mit dem Design seines Codes beschäftigen und Fehler leichter vermeiden können.

Kundeneinbeziehung
Der Kunde gibt das Iterationsziel vor und hat danach sofort die Möglichkeit einen Akzeptanztest durchzuführen. Der Kunde soll immer Anwesend oder zu erreichen sein.

Refactoring
Es erfolgt ein ständiges Refactoring, eine ständige Verbesserung der Architektur, des Designs und des Codes. Es ist bei XP üblich zu beginn einen Code zu haben der nicht perfekt ist. Während des ständigen Reviews werden entdeckte Bugs sofort definiert und bei der nächsten Iteration behoben oder verbessert.

Keine Überstunden
Es sollen Überstunden vermieden werden, da sonst die Freude an der Arbeit darunter leiden könnte und die Konzentrationsfähigkeit der Programmierer geschwächt wird. Überstunden zeugen nur von falscher Planung.

Iterationen
Eine Iteration ist laut Definition eine in sich abgeschlossene einzelne Komponente. Durch kurze Iterationen und die damit verbundenen schnellen Feedbackschleifen zwischen Entwickler und Kunde verbessern die Qualität der Software.

Metapher
Da Kunden und Entwickler nicht immer die gleichen Fachbegrifflichkeiten beherrschen werden "User-Storys" verfasst welche für beide Gruppen verständliche Metaphern in Form von Alltagsgeschichten darstellen.

Coding-Standards
Nur wenn gemeinsame Coding Standarts im Entwicklerteam eingehalten werden ist es möglich verschiedene Entwickler in allen Bereichen der Entwicklung zu integrieren.

Einfaches Design
Es soll eine Lösung erreicht werden die genau die Gewünschten Anforderungen erfüllt aber nicht mehr.

Planning-Game
In einem Planning Game, welches auch als Planning Poker bekannt ist wird der Aufwand und die Umsetzung zukünftiger neuer Versionen der Software geschätzt.