„Extreme Programming“ – Versionsunterschied
[ungesichtete Version] | [gesichtete Version] |
K →Generell: ein paar Stellen geglättet, relativiert und weicher formuliert |
Revert - verzichtbar Markierung: Manuelle Zurücksetzung |
||
(859 dazwischenliegende Versionen von mehr als 100 Benutzern, die nicht angezeigt werden) | |||
Zeile 1: | Zeile 1: | ||
'''Extreme Programming''' ('''XP''', auch '''Extremprogrammierung''') ist eine [[Agile Methode|Methode]], die das Lösen einer Programmieraufgabe in den Vordergrund der Softwareentwicklung stellt und dabei einem formalisierten Vorgehen geringere Bedeutung zumisst. |
|||
'''Extreme Programming''' ('''XP''') ist ein [[agiler Prozess|agiles]] [[Vorgehensmodell (Software)|Vorgehensmodell]] in der [[Softwaretechnik]], welches sich durch eine [[Iteration|iterative]], [[Inkrementelles Vorgehensmodell|inkrementelle]] und kommunikationsintensive Herangehensweise auszeichnet. Es wurde von [[Kent Beck]], [[Ward Cunningham]] und [[Ron Jeffries]] während ihrer Arbeit im [[Projekt]] [[Chrysler Comprehensive Compensation System|Comprehensive Compensation System]] bei [[Chrysler Corporation|Chrysler]] entwickelt. Das sogenannte C3-Projekt dauerte von 1995 bis 2000. Die zu entwickelnde [[Software]] wurde im Bereich der [[Lohnabrechnung]] eingesetzt <ref name="C3">Chrysler Comprehensive Compensation System: ''[http://www.xprogramming.com/publications/dc9810cs.pdf Chrysler Goes To {{"-en|Extremes}}]'' ([[PDF]], englisch), 9. Juni 2006</ref>. |
|||
Diese Vorgehensweise definiert ein [[Vorgehensmodell zur Softwareentwicklung|Vorgehensmodell]] der [[Softwaretechnik]], das sich den [[Anforderung (Heuristik)|Anforderungen]] des Kunden in kleinen Schritten annähert. |
|||
== Grundlagen == |
|||
[[Bild:XP-Life.png|thumb|260px|right|XP Lebenszyklus]] |
|||
[[Datei:XP-Life.png|mini|400px|XP-Lebenszyklus]] |
|||
XP ist ein durch fortlaufende [[Iteration#Softwaretechnik|Iterationen]] und den Einsatz mehrerer Einzelmethoden strukturierendes Vorgehensmodell. XP entstand durch die [[Synthese]] verschiedener Disziplinen der [[Softwareentwicklung]] und basiert auf in der Praxis bewährten Methoden, auch [[Best practice]]s genannt. |
|||
XP identifiziert zahlreiche Kerndisziplinen der [[Softwareentwicklung]], und nutzt [[Best Practice]]s, also sich in der Praxis als nutzbar erwiesene Standards, in einer extremen Art und Weise. Die Methode berücksichtigt, dass der [[Kunde]] die wirklichen fachlichen [[Anforderungen]] an die zu erstellende [[Software]] zum Projektbeginn meist noch nicht komplett kennt bzw. das mit der Realisierung betraute Entwickler-Team nicht über alle (technischen) Informationen verfügt, um eine verlässliche [[Aufwandsabschätzung (Software)|Aufwandsabschätzung]] über die notwendige Dauer bis zum Abschluss zu geben. Im Laufe eines Projektes ändern sich darüber hinaus nicht selten Prioritäten. Zu Beginn geforderte Funktionen werden möglicherweise in einer anderen Form benötigt oder sind im Laufe der Zeit komplett hinfällig. |
|||
XP |
XP folgt einem strukturierten Vorgehen und stellt die Teamarbeit, Offenheit und stetige Kommunikation zwischen allen Beteiligten in den Vordergrund. Kommunikation ist dabei eine Grundsäule. |
||
Die Methode geht davon aus, dass der Kunde die Anforderungen an die zu erstellende [[Software]] zu Projektbeginn noch nicht komplett kennt und nicht hinreichend strukturieren kann, beziehungsweise dass ein mit der Realisierung betrautes Entwicklerteam nicht über alle Informationen verfügt, um eine verlässliche [[Aufwandsschätzung (Softwaretechnik)|Aufwandsschätzung]] über die notwendige Dauer bis zum Abschluss zu geben. Im Laufe eines Projektes ändern sich nicht selten Prioritäten und Gewichte. Zu Beginn geforderte Funktionen der Software werden möglicherweise in einer anderen Form benötigt oder im Laufe der Zeit sogar komplett hinfällig. |
|||
Bei einer konsequenten Ausrichtung an XP soll die zu erstellende Software schneller bereitgestellt werden können, als mit traditionellen Ansätzen. Die Softwarequalität soll höher und die Zufriedenheit des Kunden sichergestellt sein. Er bekommt laut Methodik ein einsatzbereites Produkt, an dessen Herstellung er aktiv teilgenommen hat. |
|||
Bei einer konsequenten Ausrichtung an XP soll die zu erstellende Software schneller bereitgestellt werden sowie eine höhere Softwarequalität und Zufriedenheit des Kunden als mit traditionellen Ansätzen zu erreichen sein. Der Kunde soll ein einsatzbereites Produkt erhalten, an dessen Herstellung er aktiv teilgenommen hat. |
|||
XP ist einerseits eine Summe von zentralen Attributen (Werte, [[Prinzip]]ien und Best Practices), andererseits liefert es auch ein [[Rahmenwerk]] für ein strukturiertes Vorgehen, ein Prozessmodell. |
|||
Neue Funktionalitäten werden permanent entwickelt, integriert und getestet. Für die zu entwickelnden Funktionalitäten werden jeweils die Schritte Risikoanalyse, Nutzenanalyse, die Bereitstellung einer ersten ausführbaren Version ([[Prototyping (Softwareentwicklung)|Prototyping]]) und ein Akzeptanztest durchgeführt. |
|||
Sowohl XP als Vorgehensmodell als auch einzelne Bestandteile wie die Praktiken werden kontrovers diskutiert und der Nutzen kritisch betrachtet. |
|||
== Nutzen == |
== Nutzen == |
||
Nach Vertretern dieses Vorgehensmodells ist XP [[Risikomanagement]]. Es bejaht das Risiko, geht aktiv darauf ein und versucht, es zu minimieren. Dieser implizite Umgang mit dem Faktor ''Risiko'' steht im Gegensatz zu eher expliziten Vorgehensweisen, wie der Aufstellung einer ''Risikoliste''.<ref name="MARC">Tom DeMarco, Timothy Lister: ''Bärentango'', Hanser Fachbuch, März 2003, ISBN 3-446-22333-9.</ref> Softwareentwicklungsprojekte sind unterschiedlichen Gefahren ausgesetzt, für die Extreme Programming Lösungen anbieten soll. |
|||
=== |
=== Kundensicht === |
||
Dem Kunden bietet XP, gerade durch seine kurzen Entwicklungszyklen, jederzeit die Möglichkeit, steuernd auf das Projekt einzuwirken. Dadurch soll erreicht werden, dass sich das Produkt aktuellen Anforderungen anpasst, statt überholten Anforderungen aus einer längst vergangenen Analysephase zu genügen und damit bereits bei Einführung veraltet zu sein. Zudem kann der Kunde bereits nach kurzer Zeit ein unvollständiges aber zumindest funktionstüchtiges Produkt einsetzen. Der Kunde ist im besten Fall jederzeit auf demselben aktuellen Informationsstand bezüglich des Projektes wie das Entwicklerteam. |
|||
Laut der Vertreter dieses Vorgehensmodells ist XP gelebtes [[Risikomanagement]]: wo in anderen Vorgehensmodellen das mit der Softwareerstellung verbundene Risiko und geeignete Gegenmaßnahmen nicht selten wenig Berücksichtigung finden, geht XP einen anderen Weg. Hier gehen die XP-eigenen Werte, Prinzipien und Praktiken aktiv auf das Risiko ein und versuchen es zu minimieren. Der Umgang ist impliziter Bestandteil XPs. Ein anderes Beispiel sich nicht implizit, aber explizit mit Risiko zu beschäftigen ist die Aufstellung einer ''Risikoliste''<ref name="MARC">Tom DeMarco, Timothy Lister: ''Bärentango'', Hanser Fachbuch, März 2003, ISBN 3-446-22333-9</ref>. |
|||
Ein häufiger Ansatz traditioneller Softwareerstellung ist: ''Vielleicht brauchen wir irgendwann einmal diese oder jene Programmfunktionen'', auch [[Feature-Request|Feature]] genannt. XP stellt dem gegenüber: ''Lass es!'' (vgl. auch [[YAGNI]] – „You Ain’t Gonna Need It“). Vor jedem der kurzen Entwicklungsschritte wird zusammen mit dem Kunden genau festgelegt, was wirklich sinnvoll ist, entwickelt zu werden. Die sogenannte „[[Featuritis]]“ soll damit vermieden werden. |
|||
Software-Entwicklungsprojekte sind unterschiedlichen Gefahren ausgesetzt, für die Extreme Programming Lösungen anbieten will. |
|||
Eines der größten Risiken der Softwareentwicklung ist, dass dem Kunden ein Produkt bereitgestellt wird, das er in dieser Form nicht möchte. XP möchte dem durch ständige, aktive Einbeziehung des Kunden in den Entwicklungsprozess vorbeugen. Er kann sich Zwischenversionen ansehen und direkt Änderungswünsche äußern. |
|||
'''Unbenutzbarkeit aufgrund von Programmierfehlern''': Programmierfehler sowie fehlerhafte Integration einzelner [[Komponente]]n: es werden viele und frühe Tests angestrebt. Jede Komponente besitzt einen [[Modultest]] (Unit-Test) (in [[Java (Programmiersprache)|Java]] beispielsweise mit [[JUnit]]). Falls in einer Komponente während der Entwicklung ein Fehler bemerkt wird, so wird ein Test entwickelt, der diesen Fehler identifiziert. Die Arbeiten der einzelnen projektbeteiligten Entwickler wird sehr häufig [[Integration (Software)|integriert]]. Eine tägliche Integration mit automatischer Ausführung der Tests ([[Regressionstest]]) soll zu einer enormen Qualitätssteigerung führen. Fehler werden früher gefunden. Je später ein Fehler gefunden wird, desto teurer ist dessen Behebung. Die testgetriebene Entwicklung soll zu Code führen, der ein besseres Design aufweist und wartbarer ist. |
|||
Um diese Vorteile nutzen zu können, muss der Kunde im Gegenzug auch eine Reihe von Einschränkungen und Forderungen hinnehmen. So fordert XP von ihm, dass er während der gesamten Entwicklungszeit mit dem Entwicklungsteam zusammenarbeitet. Des Weiteren muss er auf eine formale Festlegung der Projektinhalte (Spezifikation) verzichten (siehe auch ''[[#Der ideale Kunde|Der ideale Kunde]]''). |
|||
'''Unbenutzbarkeit aufgrund von Fehlentwicklung''': Eins der größten Risiken der Softwareentwicklung ist, dass dem Kunden ein Produkt bereitgestellt wird, welches er in dieser Form nicht möchte. XP möchte dem vorbeugen, indem der Kunde mit in den Entwicklungsprozess einbezogen wird. Häufig weiß zu Beginn der Kunde auch gar nicht genau wie seine Lösung aussehen soll. Es ist deshalb hilfreich, wenn der Kunden ständig in dem Projekt involviert ist. Er kann sich integrierte Zwischenversionen ansehen und frühzeitig Änderungswünsche kommunizieren. |
|||
=== Programmierersicht === |
|||
'''Zeitplan nicht einhaltbar''': In vielen Projekten gelingt es nicht das Produkt in der gewünschten Zeit im gewünschten Umfang und mit den geplanten Ressourcen fertigzustellen. In XP soll nur das implementiert werden was tatsächlich einen Nutzen hat. Durch den ständigen Austausch mit dem Kunden wird der aktuelle Entwicklungsstand stetig kommuniziert. Durch Prioritätsanalyse sollen die unbedingt zu erstellenden Funktionen identifiziert werden. Dabei sollte mit den Funktionen begonnen werden, welche den größten Nutzen haben und das größte (technische) Risiko beinhalten. |
|||
Es existiert keine strikte Rollentrennung, da die Aufgabenverteilung abhängig von Situation und Fähigkeiten geschieht. Der allgemeine Wissensaustausch und die stetige Kommunikation beugen einem Wissens[[monopol]] vor. Dies soll den Einzelnen entlasten, da ansonsten der Druck auf einer Person lastet, wenn diese sich als Einzige in einem [[Modul (Software)|Modul]] auskennt. |
|||
[[Bild:Xp-loop.png|thumb|260px|right|XP Kreislauf: Welche Schritte in welchen zeitlichen Abständen.]] |
|||
'''„Featuritis“''': („''Vielleicht brauchen wir irgendwann einmal dieses oder jenes Feature …''“) XP stellt dem gegenüber: ''Lass es!'' (vgl. auch [[YAGNI]]). Vor jeder der kurzen Iterationen wird genau festgelegt was entwickelt wird. |
|||
Um Unbenutzbarkeit aufgrund von Programmfehlern sowie fehlerhafte Integration einzelner [[Komponente (Software)|Komponenten]] zu vermeiden, werden bei XP viele und möglichst frühe Tests angestrebt. Jede Komponente besitzt einen [[Modultest]] (Unit-Test); in [[Java (Programmiersprache)|Java]] beispielsweise mit [[JUnit]]. Bei Feststellung eines Fehlers in einer Komponente während der Entwicklung wird ein Test entwickelt, der diesen lokalisiert. Eine tägliche Einbeziehung der einzelnen am Projekt beteiligten Entwickler mit automatischer Ausführung der Tests ([[Regressionstest]]) soll zu einer erheblichen Qualitätssteigerung führen. Fehler sollen so früher gefunden werden, denn je später ein Fehler gefunden wird, desto teurer ist meist dessen Korrektur. Außerdem soll die [[testgetriebene Entwicklung]] zu einem leichter wartbaren Programmcode mit besserem Design führen. |
|||
=== Kundensicht === |
|||
Dem ''Kunden'' bietet XP, gerade durch seine kurzen Iterationszyklen jederzeit die Möglichkeit ''steuernd auf das Projekt einzuwirken''. Dieser Nutzen steigt für den Kunden noch mit der Projektgröße oder -dauer. Insbesondere soll dadurch erreicht werden, dass das Produkt sich aktuellen Anforderungen anpasst, statt nicht mehr aktuellen Anforderungen aus einer längst vergangenen Analysephase zu genügen und damit bereits bei Einführung veraltet zu sein. Zudem kann der Kunde bereits nach kurzer Zeit ein unvollständiges aber funktionstüchtiges Produkt einsetzen. Der Kunde weiß über den Fortschritt stetig so viel wie das Entwickler-Team. |
|||
Da die meisten Einzelmethoden gerade auf den Alltag der Programmierer ausgerichtet sind, bedeutet XP zugleich auch ein hohes Maß an Herausforderung und ggf. Umstellung der Beteiligten. Auf diese Aspekte wird ausführlicher im Abschnitt ''[[#Der ideale Programmierer|Der ideale Programmierer]]'' eingegangen. |
|||
=== Programmierersicht === |
|||
Dem ''Programmierer'' bietet XP durch seine ständig wechselnden Paare und den gemeinsamen Austausch und Abschätzungen einen besseren Überblick über das Projekt und damit mehr Fachwissen sowohl über das Fachkonzept als auch die Technologien. Es existiert keine strikte [[Rolle]]ntrennung, die Aktivitäten werden situativ nach Fähigkeiten verteilt. Durch den allgemeinen Wissensaustausch und der stetigen Kommunikation wird einem Wissensmonopol vorgebeugt, was den Einzelnen entlastet (es lastet Druck auf einer Person, wenn Sie sich als einzige an einem Modul auskennt). Durch die gleichmäßige Verteilung auf Iterationen wird die Arbeitsauslastung homogenisiert. |
|||
=== Projektsicht === |
=== Projektsicht === |
||
Dem Projekt bietet XP die Möglichkeit, Risiken zu minimieren. Unter richtiger Anwendung von XP soll der Kunde Software erhalten, deren Umfang ihn nicht überrascht. Das Team soll ferner gegen Ausfall (Krankheit, Unfall, Stellenwechsel) Einzelner nicht mehr so anfällig sein. Ein ehrlicher Umgang mit dem Kunden soll die Glaubwürdigkeit und Zufriedenheit steigern und die [[Angst]] minimieren, die unter Umständen zwischen Kunde („Haben die mich verstanden?“, „Was werden sie wohl liefern?“) und Entwicklung („Was will er eigentlich genau?“, „Ob er zufrieden sein wird mit dem, was wir liefern?“) vorherrscht. |
|||
Aufwandsabschätzungen werden verlässlicher, da sie im Team getroffen und ständig einer kritischen Überprüfung ([[Review (Softwaretest)|Review]]) unterzogen werden. [[Teamgeist]] wird laut XP gefördert. Jedem im Team sollte klar sein, dass das Ziel nur als Einheit erreichbar ist. Sollte ein Projekt, zum Beispiel aus Kostengründen, vorzeitig eingestellt werden, besteht durch die regelmäßigen Iterationen dennoch ein zumeist einsatzfähiges Produkt. |
|||
In vielen Projekten gelingt es nicht, das Produkt in der gewünschten Zeit im gewünschten Umfang und mit den geplanten Ressourcen fertigzustellen. In XP soll nur das verwirklicht werden, was tatsächlich einen Nutzen für den Kunden hat. Durch ständigen Austausch mit dem Kunden sowie Prioritätsanalysen sollen die unbedingt zu erstellenden Funktionen identifiziert werden. Dabei sollte mit den Funktionen begonnen werden, die den größten Nutzen haben und das größte (technische) Risiko beinhalten. |
|||
=== Betriebswirtschaftliche Sicht === |
=== Betriebswirtschaftliche Sicht === |
||
Extreme Programming stellt aus wirtschaftswissenschaftlicher Sicht eine Form der [[Organisation]] dar, die direkt die Prozesse der [[Wertschöpfung]] beschreibt. In den Wirtschaftswissenschaften werden zur Bewertung von Extreme Programming auch Erkenntnisse anderer [[Sozialwissenschaften]] insbesondere der [[Soziologie]] genutzt |
Extreme Programming stellt aus wirtschaftswissenschaftlicher Sicht eine Form der [[Organisation]] dar, die direkt die Prozesse der [[Wertschöpfung (Wirtschaft)|Wertschöpfung]] beschreibt. In den Wirtschaftswissenschaften werden zur Bewertung von Extreme Programming auch Erkenntnisse anderer [[Sozialwissenschaften]], insbesondere der [[Soziologie]], genutzt. |
||
Dem [[Risikomanagement]] dient diese Alternative vor allem zur Steuerung von [[Risiko|Risiken]]. Wie bei vielen Prozessen der Wertschöpfung sind besonders in der Softwareentwicklung Risiken meist operative Risiken: Die Wertschöpfung ist [[Effektivität|ineffektiv]], wenn die Kundenwünsche nicht getroffen und gesteckte Ziele somit verfehlt wurden. Die Wertschöpfung ist ineffizient, wenn zum Erreichen des Ergebnisses ein zu hoher Aufwand entstand. Risikoverminderung, und dadurch Effektivität und Effizienz, soll bei Extreme Programming durch die Art des Umgangs mit Fehlern, mit Mitarbeitern und mit Kunden erreicht werden: |
|||
* Kompensation von Krankheitsausfällen |
|||
* Kundennahe Entwicklung |
|||
* Weniger Fehler im Ergebnis |
|||
Ein möglichst genaues Erkennen von Risiken durch das Verfahren selbst soll über angepasste Aufwandsschätzungen eine Bewertung des zu akzeptierenden Risikos ermöglichen. Extreme Programming kann dagegen eine Risikoverlagerung erschweren. Aus der Sicht des Risikomanagements ist Extreme Programming also ''nur'' eine Möglichkeit, mit Risiken umzugehen, und zwar eine Möglichkeit, die Vor- und Nachteile besitzt. |
|||
Das [[Personalwesen]] in Unternehmen betrachtet Extreme Programming insbesondere im Hinblick auf seine Auswirkungen auf die Mitarbeiterzufriedenheit. Extreme Programming soll dabei bewusst oder unbewusst zum [[Kooperatives Lernen|kooperativen Lernen]] beitragen. Für das Personalwesen ist dieses Verfahren also besonders aus Sicht der [[Personalentwicklung]] interessant. Durch höhere Mitarbeiterzufriedenheit und durch die Vermeidung von Überstunden soll die gesamte Produktivität erhöht werden. Die Praktik des Pair-Programming lässt allerdings – rein mathematisch betrachtet – Gegenteiliges vermuten. Die Vermeidung von Spezialistentum und individuellem Besitz von Wissen über Teile der Software dient der [[Kollektive Wissenskonstruktion|kollektiven Wissenskonstruktion]] und kann die Ersetzung von Entwicklern vereinfachen. |
|||
Dem [[Risikomanagement]] dient diese Alternative vor allem der Steuerung von Risiken. Risikoverminderung soll über Extreme Programming durch Eigenschaften wie der geringen Fehlerlastigkeit des Ergebnisses oder der geringen Auswirkung durch Krankheitsausfall der Mitarbeiter erreicht werden. Ein möglichst genaues Erkennen von Risiken durch das Verfahren selbst, soll über angepasste Aufwandsschätzungen eine angemessene Risikoakzeptierung zulassen. Extreme Programming kann dagegen eine Risikoverlagerung erschweren. |
|||
Die gesamte Betriebswirtschaftslehre ist in den letzten Jahren von der prozess- bzw. wertschöpfungsorientierten zur kunden- bzw. marktorientierten Unternehmensführung übergegangen. Auch wenn Extreme Programming die Wertschöpfung beschreibt, bietet es Möglichkeiten zu kundennaher Vorgehensweise. Über Extreme Programming soll – wie in anderen Branchen schon länger üblich – eine größere Einbindung des Kunden in den Wertschöpfungsprozess möglich sein. Wichtig wird dies umso mehr, wenn Software weniger als [[Faktormarkt|Faktorgut]], sondern mehr als [[Halbfabrikat|Vorprodukt]] erstellt und vertrieben wird. |
|||
Das [[Personalwesen]] in Unternehmen betrachtet Extreme Programming insbesondere auf seine Auswirkungen auf die Mitarbeiterzufriedenheit. Extreme Programming soll dabei bewusst oder unbewusst zum [[Kooperatives Lernen|kooperativen Lernen]] beitragen. Für das Personalwesen ist dieses Verfahren also besonders aus Sicht der [[Personalentwicklung]] interessant. Durch die höhere Mitarbeitzufriedenheit soll die gesamte Produktivität erhöht werden auch wenn einige Verfahren rein mathematisch betrachtet Gegenteiliges vermuten lassen. |
|||
Ebenfalls muss in Extreme Programming und dessen Aufwand aus Sicht des [[Informationsmanagement]]s betrachtet werden, dass der Aufwand den unbedingt notwendigen Informationsaustausch festlegt, der ökonomisch bewertet wird. Genutzt werden dazu Erkenntnisse der [[Informationswissenschaft|Informations-]] und [[Kommunikationswissenschaft]]. Dabei kann insbesondere die [[Medienreichhaltigkeitstheorie]] eingesetzt werden: Weil die zu diskutierenden und kommunizierenden Sachverhalte in der Regel komplex sind, werden auch komplexe, reichhaltige [[Massenmedien|Kommunikationsmedien]] gewählt: direkte, persönliche Gespräche. Kritisch zu hinterfragen ist hierbei die schwierige räumliche Verteilbarkeit der Entwicklungsprozesse sowie die Einbindung des Kunden, da unter Umständen eine räumliche Trennung zwischen Entwicklern und Kunden besteht. |
|||
Die gesamte Betriebswirtschaftslehre ist in den letzten Jahren von der prozess- bzw. wertschöpfungsorientierten zur kundenorientierten- bzw. marktorientierten Unternehmensführung übergegangen. Auch wenn Extreme Programming die Wertschöpfung beschreibt, bietet es über die Eigenschaft der Kundennähe Möglichkeiten zur kundennahen Unternehmung an. Über Extreme Programming soll – wie in anderen Branchen schon länger üblich – eine größere Einbindung des Kunden in den Wertschöpfungsprozess möglich sein. Wichtig wird dies umso mehr, wenn Software weniger als [[Faktormarkt|Faktorgut]] sondern mehr als [[Vorprodukt]] erstellt und vertrieben wird. |
|||
== Vorgehen == |
== Vorgehen == |
||
Vereinzelt wird Extreme Programming als informelle (und damit unverbindliche) Methode bezeichnet. Das trifft jedoch weder den Ansatz noch das Ziel. Tatsächlich ist die Formalisierung der Methode des Extreme Programming bewusst flach und schlank gehalten. Hingegen muss ein Einvernehmen zwischen Kunden und Programmierern hinsichtlich der Verbindlichkeit der erstellten Unterlagen hergestellt werden, solange diese noch nicht durch neuere Fassungen ersetzt wurden. Weiter muss der Vorgang des Ersetzens einer Fassung einer Unterlage durch eine neuere Fassung dieser Unterlage soweit formalisiert sein, dass beide Parteien Kenntnis von dieser Ersetzung haben und diese Ersetzung annehmen. |
|||
=== Aufbauorganisation === |
=== Aufbauorganisation === |
||
Neben dem Entwicklungsteam gibt es im Wesentlichen den Kunden und den ''Product |
Neben dem Entwicklungsteam gibt es im Wesentlichen den Kunden und den ''Product-Owner''. Innerhalb des Entwicklerteams soll es keine Rollentrennung geben. So wird nicht unterschieden, wer im Team welches Spezialgebiet hat, beziehungsweise welche besonderen Fähigkeiten er mitbringt. Jede Person im Team wird als [[Softwareentwickler|Entwickler]] ''(Developer)'' bezeichnet. Ein [[Manager (Wirtschaft)|Manager]] ist gewöhnlich eine Person mit Führungsbefugnis, also ein disziplinarischer Vorgesetzter. Dieser hat in XP weniger Wichtigkeit. Dagegen gibt es einen „Leiter“ des Teams, also jemand, der die Kommunikation mit Kunden oder untereinander koordiniert. Auch der Nutzer der zu erstellenden Software kann das Team durch das Projekt führen. Die Unterscheidung zwischen Manager und „Leiter“ ist für agile Vorgehensmodelle typisch. Der Product-Owner, der über die genaue Vorgehensweise entscheidet, trägt die Verantwortung. Product-Owner im Sinne von XP kann beispielsweise ein Vertreter des Produktmanagements, ein Kunde oder ein Nutzer des Produktes sein. Die Rollen sind je nach Projekt und Umgebung unterschiedlich, häufig auch in Personalunion, verteilt. |
||
{| class="wikitable zebra" style="background:#F0F0FF;" |
|||
{| {{Prettytable}} |
|||
|+ Die Rollen bei XP |
|+ Die Rollen bei XP |
||
|- class="hintergrundfarbe8" |
|||
! Rolle |
|||
! Beispiel |
|||
! Aufgaben |
|||
|- |
|- |
||
|Produktbesitzer |
|||
! {{highlight2}}|Rolle |
|||
|Produktmanagement, Marketing, ein Benutzer, Kunde, Manager des Benutzers, Analyst, Sponsor |
|||
! {{highlight2}}|Beispiel |
|||
|Hat Verantwortung, setzt Prioritäten, Entscheider für bestes [[Return on Investment|ROI]] |
|||
! {{highlight2}}|Aufgaben |
|||
|- |
|- |
||
|Product Owner |
|||
|Produktmanagement, Marketing, ein User, Manager des Users, Analyst, Sponsor |
|||
|Verfolgt gemeinsame Vision, Etabliert Prioritäten, Entscheider für bestes [[ROI]] |
|||
|- bgcolor="#f0f0ff" |
|||
|Kunde |
|Kunde |
||
|Auftraggeber, kann auch der |
|Auftraggeber, kann auch der Produktbesitzer sein, kann, muss aber nicht der Benutzer sein |
||
|Entscheidet was gemacht wird, gibt regelmäßig |
|Entscheidet, was gemacht wird, gibt regelmäßig Rückmeldung, Auftraggeber |
||
|- |
|- |
||
|Entwickler |
|||
|Developer |
|||
|Bestandteil des Teams, das ganze Entwicklungsteam besteht aus Entwicklern: Programmierer, Tester, DB-Experten, Architekt, Designer |
|Bestandteil des Teams, das ganze Entwicklungsteam besteht aus Entwicklern: Programmierer, Tester, DB-Experten, Architekt, Designer |
||
|Entwickelt das Produkt |
|Entwickelt das Produkt |
||
|- |
|||
|- bgcolor="#f0f0ff" |
|||
|Projektmanager |
|Projektmanager |
||
|Ist gewöhnlich der |
|Ist gewöhnlich der Produktbesitzer. Kann auch Entwickler aber nicht Manager des Teams sein |
||
|Führung des Teams |
|Führung des Teams |
||
|- |
|- |
||
|Benutzer |
|||
|User |
|||
|Der Nutzer des zu erstellenden Produktes |
|Der Nutzer des zu erstellenden Produktes |
||
|Wird das zu erstellende Produkt nutzen |
|||
|Führung des Teams, nicht Manager des Teams; ist gewöhnlich der Product Owner |
|||
|} |
|} |
||
=== Anforderungsmanagement === |
=== Anforderungsmanagement === |
||
Der Umgang mit den Anforderungen und |
Der [[Anforderungserhebung|Umgang mit den Anforderungen und deren Verwirklichung]] ist eine zentrale Komponente XPs. Durch eine Mischung verschiedener, in den folgenden Abschnitten dargestellter Maßnahmen soll die Qualität und Flexibilität der Software gesteigert werden, so dass sich der Zusammenhang zwischen dem Zeitpunkt der Anforderungsstellung und den damit entstehenden Kosten weitgehend linear darstellt. |
||
[[Datei:Xpkurve.png|mini|400px|Änderungskostenkurve in Abhängigkeit vom Zeitpunkt der Änderung]] |
|||
[[Bild:Xpkurve.png|thumb|240px|right|Kostenkurve]] |
|||
Bei einem weitgehend linearen Verlauf |
Bei einem weitgehend linearen Verlauf einer ableitbaren [[Kostenauflösung|Änderungskostenkurve]] wird auf eine vollständige Erhebung aller Anforderungen zu Beginn des Projektes verzichtet. Stattdessen werden die sich erst im Laufe der Umsetzung ergebenden Anforderungen berücksichtigt. Dieses Vorgehen resultiert aus den Beobachtungen, dass einerseits der Kunde zu Beginn des Projektes noch gar nicht genau weiß, was er möchte, andererseits sich diese Anforderungen im Laufe eines Projektes ändern. Darüber hinaus sind Fehler umso teurer, je später man sie findet. Im schlimmsten Fall erhält der Kunde nach einem langen Projekt etwas geliefert, was er in dieser Form gar nicht haben möchte. Ständiger Gedankenaustausch mit dem Kunden, Offenheit für Änderungen und stetige Integration wirken diesen Risiken entgegen. Anforderungen werden nicht selten zunächst als [[Prototyping (Softwareentwicklung)|Prototypen]] bereitgestellt. Dabei handelt es sich um Versionen, die noch nicht die volle, endgültige Funktionalität besitzen. |
||
=== Planung === |
=== Planung === |
||
[[Datei:Release3.png|mini|400px|Release, Iterationen, User-Storys und Tasks]] |
|||
Im Rahmen der Planung wird gewöhnlich folgende Unterscheidung vorgenommen: ein [[Release]] beinhaltet die Funktionen, die insgesamt und für sich geschlossen die Bereitstellung einer neuen Version des [[Produkt]]es rechtfertigen. Um zu dem Release zu kommen wird ein Release-Plan aufgestellt welcher im wesentlichen aus [[Iteration]]en besteht. Unter anderem abhängig von der geschätzten Dauer des Release werden die Iterationen in Anzahl und Dauer festgelegt. Normale Iterationen gehen von 1 Woche bis 4 Wochen. Der Zeitpunkt der Fertigstellung wird als Intervall kommuniziert, dessen Größe im Laufe des Releases aufgrund gewonnener Erkenntnisse und durchgeführten Fortschritts ständig abnimmt. |
|||
Im Rahmen der Planung wird gewöhnlich folgende Unterscheidung vorgenommen: ein [[Versionierung|Release]] beinhaltet die Funktionen, die insgesamt und für sich geschlossen die Bereitstellung einer neuen Version des Produktes rechtfertigen. Um zu dem Release zu kommen, ist ein Release-Plan aufzustellen, der im Wesentlichen aus [[Iteration]]en besteht. Unter anderem abhängig von der geschätzten Entwicklungsdauer des Release werden die Iterationen in Anzahl und Dauer festgelegt. Iterationen dauern üblicherweise zwischen einer und vier Wochen. Der Zeitpunkt der Fertigstellung wird als Zeitintervall diskutiert, dessen Größe im Laufe des Release aufgrund gewonnener Erkenntnisse und des durchgeführten Fortschritts ständig abnimmt. |
|||
[[Bild:Risk-value-priorisierung.png|thumb|240px|right|Risiko-Value Gegenüberstellung und Priorisierung]] |
|||
[[Datei:Risk-value-priorisierung.png|mini|400px|Risiko-Wert Gegenüberstellung und Verteilung der Prioritäten]] |
|||
Die einzelnen Neuerungen, die innerhalb der Iterationen realisiert werden, werden zusammen bzw. durch den Kunden, durch [[User Story|User Stories]], einem schlankeren [[Derivat]] der [[Use Case]]s, beschrieben. User Stories beschreiben was ein [[Akteur]] mit dem [[System]] machen können soll, um etwas zu erreichen. Eine User Story folgt dem Muster ''„Als xxx kann ich xxxx, um xxxx'“'', wobei das ''um'' auch weggelassen werden kann, falls die [[Intention]] klar erkennbar ist. Diese Formulierung dient als [[Template]] und kann situativ geändert werden. |
|||
==== User-Storys ==== |
|||
Das ganze Team ist bei der Erstellung beteiligt. Sie werden auf einzelnen Karten ([[Story Card]]s) geschrieben und für alle sichtbar an ein [[Medium]] platziert. |
|||
Die innerhalb der Iterationen umzusetzenden einzelnen Neuerungen werden mit dem Kunden durch ''[[User-Story]]s'' beschrieben. |
|||
Das ganze Team ist bei der Erstellung beteiligt. Die abzuarbeitenden Anforderungen werden auf einzelnen Karten ''(Story Cards)'' geschrieben und für alle sichtbar platziert. Neben diesem Vorgehen ist es auch üblich ''Class Responsibility Collaboration Models'' auf ''CRC Cards'' zu verfassen. ''CRC Models'' nehmen sich dabei einen Akteur im System vor und beschreiben dessen Verantwortlichkeiten und Interaktionen mit anderen Akteuren. |
|||
Den ''User-Storys'' werden Prioritätswerte zugeordnet. Dazu muss das Team zusammen mit dem Kunden zunächst Klarheit gewinnen, welche ''User-Storys'' das höchste Risiko bezüglich Zeitplan, Kosten oder Funktionalität besitzen und welche ''User-Storys'' dem [[Produkt (Wirtschaft)|Produkt]] den höchsten, respektive den niedrigsten Mehrwert bieten, wobei ein Diagramm hilfreich sein kann. Das Release sollte mit den ''User-Storys'' begonnen werden, die das höchste Risiko und den höchsten Nutzen auf sich vereinen. Danach sind diejenige ''User-Storys'' zu verwirklichen, die geringes Risiko aber hohen Nutzen haben. Anschließend geht das Team die ''User-Storys'' an, die geringes Risiko und geringen Nutzen auf sich vereinen. Die Fertigstellung von User-Storys mit geringem Nutzen aber hohem Risiko ist zu vermeiden. |
|||
: '''User Story: Als Arzt kann ich alle Patienten sehen, die ich am Tag habe.''' |
|||
[[Datei:Kano-modell.png|mini|400px|links|Kundenzufriedenheit]] |
|||
Es werden die User Stories priorisiert. Dazu muss das Team zusammen mit dem Kunden zunächst Klarheit gewinnen welche User Stories das höchste Risiko bezüglich Zeitplan, Kosten oder Funktionalität besitzen und welche User Stories dem Produkt den höchsten respektive den niedrigsten Mehrwert bieten. Hier kann ein Diagramm helfen. Das Release sollte mit den User Stories begonnen werden, welche das höchste Risiko und den höchsten Nutzen auf sich vereinen. Danach werden die User Stories realisiert welche geringes Risiko aber hohen Nutzen haben. Anschließend geht das Team die User Stories an die geringes Risiko und geringen Nutzen haben. Die Realisierung von User Stories mit geringem Nutzen aber hohem Risiko sollte vermieden werden. |
|||
Neben einer Abschätzung nach Nutzen und Risiko ist für die Entscheidung, welche ''User-Storys'' in dem Release beziehungsweise in den ersten Iterationen umgesetzt werden sollen, noch eine Analyse der Kundenwünsche von Bedeutung. Dabei bedient sich ein XP-Projekt häufig des [[Kano-Modell]]s. Dabei werden in einer systematischen Kundenbefragung Fragen in ''funktionaler Form'' und in ''dysfunktionaler Form'' gestellt. Es lässt sich anschließend bestimmen, welche ''User-Storys'' unbedingt fertiggestellt werden müssen ''(Must-haves)'', welche linearer Natur sind (je mehr, desto besser; siehe auch ''[[Proportionalität|proportional]]''.) und welche ''Exciters'' sind (Der Kunde rechnet nicht mit diesen Merkmalen, nutzt das Produkt auch ohne. Es lässt sich dadurch der Preis erhöhen.). Die so gewonnenen Erkenntnisse werden diskutiert. |
|||
[[Bild:Kano-modell.png|thumb|240px|right|Kundenzufriedenheit]] |
|||
XP zeichnet sich dadurch aus, dass die Betrachtung der Größe einer Einheit, wie Release oder Iteration, unabhängig von ihrer Dauer ist. |
|||
Neben einer Abschätzung nach Nutzen und Risiko ist für die Entscheidung welche User Stories in dem Release bzw. in den ersten Iterationen realisiert werden sollen noch eine Analyse der Kundenwünsche von Bedeutung. Dabei bedient sich ein XP-Projekt häufig dem [[Kano-Modell]]. In einer systematischen Kundenbefragung werden Fragen in ''funktionaler Form'' und in ''dysfunktionaler Form'' gestellt. Es lässt sich anschließend bestimmen welche User Stories unbedingt realisiert werden müssen (''Must-haves''), welche linearer Natur sind (je mehr desto besser, Kundenzufriedenheit steigt ''[[linear]]'') und welche ''Exciters'' sind (der Kunde rechnet nicht wirklich mit diesen Features, nutzt das Produkt auch ohne. Es lässt sich dadurch der Preis erhöhen.). Die gewonnenen Erkenntnisse werden diskutiert. |
|||
==== Aufwandsabschätzung ==== |
|||
XP zeichnet sich dadurch aus, dass die Größe einer Einheit wie Release oder Iteration unabhängig von ihrer Dauer betrachtet wird. |
|||
Bei der Release-Planung sind User-Storys noch recht grobkörnig. Beschäftigt sich ein Team mit einer User-Story genauer, so wird sie, zusammen mit dem Kunden, detaillierter beschrieben. User-Storys werden gewöhnlich in ''Story-Points'' abgeschätzt, wobei auch eine Abschätzung in ''idealen Tagen'' möglich ist. Story-Points sind relative [[Aufwandsschätzung (Softwaretechnik)|Aufwandsabschätzungen]], also der Entwicklungsaufwand für eine Story im Vergleich zu anderen. Dabei kann es sein, dass erste Abschätzungen im Verlaufe des Projektes geändert werden. Es wird vom ganzen Team, in mehreren Runden, in einem ''Planning-Game'' eine Punkteanzahl für die User-Storys geschätzt. |
|||
Nachdem User-Storys abgeschätzt, priorisiert und einer Iteration zugewiesen wurden, beginnt das Team mit der Umsetzung. User-Storys werden zu Beginn der Iteration in feinkörnige, technische Arbeitspakete ([[Aufgabe (Pflicht)|Tasks]]) zerlegt, die gewöhnlich einen Umfang von Stunden besitzen. Das Team führt diese Zerlegung durch und schätzt die Dauer eines jeden Tasks. Es wird allerdings noch nicht festgelegt wer den Task zugeteilt bekommt. Zu Beginn der Arbeiten nehmen sich die Entwickler jeweils ein Arbeitspaket vor, gewöhnlich nach Fähigkeiten. Dieser Vorgang wird im Team kurz diskutiert. Nach der anfänglichen Zuweisung der Arbeitspakete wird ein weiterer Task begonnen, wenn ein Teammitglied Zeit dafür findet, also seinen vorangegangenen Task abgeschlossen hat. Die Implementierung einer User-Story, also der Funktionalität, ist erst abgeschlossen, wenn alle einzelnen Tasks dieser User-Story abgearbeitet und die Tests geschrieben und alle erfolgreich durchlaufen sind. |
|||
=== Aufwandsabschätzung === |
|||
Bei der Release-Planung sind User Stories noch recht [[grobkörnig]]. Beschäftigt sich ein Team mit einer User Story genauer so wird sie, zusammen mit dem Kunden, detaillierter beschrieben. User Stories werden gewöhnlich in [[Story Point]]s abgeschätzt, wobei auch eine Abschätzung in ''idealen Tagen'' möglich ist. Story Points sind relative [[Aufwandsabschätzung (Software)|Aufwandsabschätzungen]], also der Entwicklungsaufwand für eine Story im Vergleich zu anderen. Dabei kann es sein, dass erste Abschätzungen im Verlaufe des Projektes geändert werden. User Stories werden in einem ''Planning Poker'' (auch als ''Planning Game'' bekannt) in mehreren Runden vom ganzen Team auf eine Punkte-Anzahl geschätzt. |
|||
Der Demonstration dieser Vorgehensweise soll eine Tabelle mit Aufwandsabschätzungen in einer fiktiven Arztpraxis dienen. Jeder Arzt hat eine Software, die ihm hilft, seine Patienten und die Termine zu verwalten: |
|||
User Stories werden zu Beginn der Iteration in [[feinkörnig]]e, technische [[Task]]s zerlegt, welche gewöhnlich einen Umfang von Stunden besitzen. Das Team schätzt die Dauer eines jeden Tasks. Es wird allerdings noch nicht festgelegt wer den Task realisiert. Erst wenn das Team bzw. ein Teammitglied Zeit findet wird der Task begonnen. Eine User Story ist erst abgeschlossen, wenn alle seine Tasks realisiert sind und die Tests geschrieben und alle erfolgreich durchlaufen sind. |
|||
{| class="wikitable zebra" style="background:#F0F0FF; text-align:center;" |
|||
{| {{Prettytable}} |
|||
|+ User |
|+ User-Storys mit Aufwandsabschätzung in Story-Points |
||
|- class="hintergrundfarbe8" |
|||
! Story No. |
|||
! Story |
|||
! Abschätzung<br />(Story Points) |
|||
|- |
|- |
||
| 1 |
|||
! {{highlight2}}|Story No. |
|||
|style="text-align:left;"| Als Arzt kann ich alle Patienten sehen, die ich am Tage habe. |
|||
! {{highlight2}}|Story |
|||
| 3 |
|||
! {{highlight2}}|Abschätzung<br />(Story Points) |
|||
|- |
|- |
||
| 2 |
|||
|align="center"|1 |
|||
|Als Arzt kann ich |
|style="text-align:left;"| Als Arzt kann ich über die Gesundheitsgeschichte meiner Patienten Auskunft geben. |
||
| 5 |
|||
|align="center"|3 |
|||
|- bgcolor="#f0f0ff" |
|||
|align="center"|2 |
|||
|Als Arzt kann ich die Gesundheitsgeschichte meiner Patienten beauskunften. |
|||
|align="center"|5 |
|||
|- |
|- |
||
| 3 |
|||
|align="center"|3 |
|||
|Als Assistentin kann ich einem Patienten einen Termin geben. |
|style="text-align:left;"| Als Assistentin kann ich einem Patienten einen Termin geben. |
||
| 2 |
|||
|align="center"|3 |
|||
|- |
|||
|- bgcolor="#f0f0ff" |
|||
| 4 |
|||
|align="center"|4 |
|||
|Als Assistentin kann ich einem Patienten eine Verschreibung ausdrucken. |
|style="text-align:left;"| Als Assistentin kann ich einem Patienten eine Verschreibung ausdrucken. |
||
| 1 |
|||
|align="center"|3 |
|||
|} |
|} |
||
Der Begriff ''Velocity'' (Geschwindigkeit) beschreibt den Durchsatz des Teams, also die Anzahl der innerhalb einer Iteration erreichten Story-Points. Die Bestimmung der Velocity hilft abzuschätzen, wie lange die Entwicklung der gewünschten Funktionalität für ein Release dauert, beziehungsweise wie viele Iterationen notwendig sind. Es ist normal, dass die Geschwindigkeit des Teams nicht immer die gleiche ist. |
|||
=== Entwicklung und Abschluss === |
=== Entwicklung und Abschluss === |
||
[[Datei:Extreme Programming Planungs- und Feedback-Schleifen.svg|mini|400px|Zeitlicher Abstand der Schritte]] |
|||
Täglich gibt es ein kurzes Stand-up Meeting. Jeder Entwickler berichtet was er am Vortag geleistet hat, was er heute leisten möchte und wo es ggf. Probleme gab. Ferner werden situativ Paare gebildet (Pair Programming). Im Laufe des Tages gibt es weiteren stetigen Austausch (''Pair Negotiations''), während die Entwickler die Funktionalität und die Tests programmieren. |
|||
Es gibt eine tägliche kurze Besprechung ''(Stand-up Meeting)'', bei der jeder Entwickler berichtet, was er am Vortag geleistet hat, wo es gegebenenfalls Probleme gab und was er heute leisten möchte. Ferner werden situationsabhängig Arbeitspaare gebildet ''([[Pair-Programming]])''. Im Laufe des Tages findet, während die Entwickler die Funktionalität und die Tests programmieren, weiterer stetiger Austausch ''(Pair-Negotiations)'' statt. |
|||
Kann eine User Story in einer Iteration nicht abgeschlossen werden (z. B. weil die Tests nicht erfolgreich sind oder sich die Abschätzung als zu knapp bzw. der Umfang als zu groß herausgestellt hat), so wird sie gewöhnlich in mehrere kleinere aufgeteilt oder komplett in die nächste Iteration verschoben. Auch während einer Iteration kann sich durch Umpriorisierung des Kunden oder durch neue Erkenntnisse an der Zusammenstellung der Iteration etwas ändern. Ist die Iteration abgeschlossen schauen sich Vertreter des [[Management]]s, der Kunde (Akzeptanztest) oder andere [[Stakeholder]] das Produkt in der aktuellen Ausbaustufe an, und geben Feedback. So ist es denkbar, dass der Kunde während des Akzeptanztest neue Prioritäten setzt oder weitere Ideen hat. |
|||
Kann eine User-Story in einer Iteration nicht abgeschlossen werden, zum Beispiel weil die Tests nicht erfolgreich waren oder sich die Abschätzung als zu knapp beziehungsweise der Umfang als zu groß herausgestellt hat, so wird sie gewöhnlich in mehrere kleinere aufgeteilt oder komplett in die nächste Iteration verschoben. Auch während einer Iteration kann sich, durch sich ändernde Prioritäten des Kunden oder durch neue Erkenntnisse, an der Zusammenstellung der Iteration etwas ändern. Ist die Iteration abgeschlossen, schauen sich Vertreter des [[Unternehmensführung|Managements]], der Kunde ([[Akzeptanztest (Softwaretechnik)|Akzeptanztest]]) oder andere Personen, die an dem Produkt Interesse haben, das Produkt in der aktuellen Ausbaustufe an und geben Rückmeldungen. So ist es denkbar, dass der Kunde während des Akzeptanztests neue Prioritäten setzt oder weitere Ideen einbringt. |
|||
Technische Unterstützung muss differenziert betrachtet werden. Einerseits wird bewusst auf technische [[Hilfsmittel]] verzichtet, so in etwa bei der Erstellung von User Stories. Diese werden gewöhnlich manuell erstellt. Andererseits wird die Technik aber auch exzessiv genutzt, so in etwa bei der automatisierten Integration und der automatisierten Durchführung von Tests. Darüber hinaus existieren Projektmanagement-Werkzeuge, welche sich auf die speziellen Rahmenbedingungen und Anforderungen XPs konzentriert haben (siehe Tools). |
|||
Technische Unterstützung muss differenziert betrachtet werden. Einerseits wird bewusst auf technische [[Arbeitsmittel|Hilfsmittel]] verzichtet, so etwa bei der Erstellung von User-Storys. Diese werden gewöhnlich manuell erstellt. Andererseits wird die Technik aber auch exzessiv genutzt, so etwa bei der automatisierten Integration und der automatisierten Durchführung von Tests. Darüber hinaus existieren Projektmanagement-Werkzeuge, die sich auf die speziellen Rahmenbedingungen und Anforderungen XPs konzentriert haben. |
|||
== Attribute == |
|||
XP besteht aus Werten, Prinzipien und Praktiken. Obwohl es auch andere maßgebliche Quellen gibt (siehe Weblinks und Literatur) orientiert sich die Zusammenstellung der Werte, Prinzipien und Praktiken an Kent Beck <ref name="BECK1">Kent Beck, Dirk Andres: ''Extreme Programming Explained. Embrace Change''. 1st Edition, Addison Wesley, 2000, ISBN 0201616416</ref>, dessen noch recht neue, evolutionäre Weiterentwicklungen XPs hier ebenfalls Berücksichtigung findet <ref name="BECK2">Kent Beck, Dirk Andres: ''Extreme Programming Explained. Embrace Change''. 2nd Edition, Addison Wesley, Dezember 2004, ISBN 0-321-27865-8</ref>. Es existiert keine eindeutige Definition von XP, wobei allerdings die Diskussionen und Ausführungen der drei Originalverfasser XP am signifikantesten prägen. |
|||
=== Abgrenzung von herkömmlichem Vorgehen === |
|||
Die zu entwickelnde Funktionalität wird kurz und formlos in User-Storys beschrieben. Das meiste Wissen über die Funktionalität ihrer Entwicklung befindet sich in den Köpfen der Beteiligten. User-Storys werden gewöhnlich nur relativ zueinander geschätzt. Zu Beginn einer Iteration wird deren Inhalt festgelegt. Anschließend kommt erst die Aufteilung der gewählten User-Storys in Tasks. Neuartig an dem XP-Ansatz ist ebenfalls, dass nicht nur einzelne Personen, sondern das ganze Team den jeweiligen Aufwand schätzt. Auch das Verfahren der Schätzung ist neu. Der Zeitpunkt, wann und wie die Tasks den einzelnen Entwicklern zugeteilt werden, ist ebenfalls ein Abgrenzungskriterium. Erst im Laufe der Iteration nehmen sich die einzelnen Entwickler, je nach ihrer Verfügbarkeit, eines Tasks an. Zu allen User-Storys gibt es zahlreiche Tests. Eine User-Story ist erst komplett abgeschlossen, wenn alle Tests erfolgreich abgelaufen sind. Der tägliche kurze Austausch ist für die [[Agile Softwareentwicklung|agile Methodik]] üblich. |
|||
== Bestandteile == |
|||
XP besteht aus Werten, Prinzipien und Praktiken. Obwohl es auch andere maßgebliche Quellen gibt (siehe [[#Weblinks|Weblinks]] und [[#Literatur|Literatur]]), orientiert sich die Zusammenstellung der Werte, Prinzipien und Praktiken an Kent Beck,<ref name="BECK1">Kent Beck: ''Extreme Programming Explained. Embrace Change''. 1st Edition, Addison-Wesley, 2000, ISBN 0-201-61641-6.</ref> dessen noch recht neue, evolutionäre Weiterentwicklungen XPs hier ebenfalls Berücksichtigung finden.<ref name="BECK2">Kent Beck, Cynthia Andres: ''Extreme Programming Explained. Embrace Change''. 2nd Edition, Addison-Wesley, Dezember 2004, ISBN 0-321-27865-8.</ref> Es existiert keine eindeutige Definition von XP, wobei allerdings die Diskussionen und Ausführungen der drei Originalverfasser XP am signifikantesten prägen. |
|||
=== Werte === |
=== Werte === |
||
XP definiert fünf zentrale Werte, abstrakte Elemente, die von zentraler Bedeutung sind |
XP definiert fünf zentrale Werte, abstrakte Elemente, die von zentraler Bedeutung sind: ''Kommunikation'', ''Einfachheit'', ''Rückmeldung'', ''Mut'' und ''Respekt'', wobei Respekt erst später dazukam. Ohne stetige Beachtung dieser zentralen Werte ist es laut XP nicht möglich, erfolgreich Software zu entwickeln. |
||
[[Bild:XP-Werte.png|thumb|220px|right|Die zentralen XP-Werte]] |
|||
Das Team |
Das Team kommuniziert stetig, um Informationen auszutauschen. Der Prozess selbst erfordert hohe Kommunikationsbereitschaft. Es gibt einen stetigen Austausch aller Beteiligten, also auch zwischen dem Entwicklungsteam und dem Kunden. Es kommen auch Personen zu Wort, die in einer gerade diskutierten technischen Aufgabenstellung keine Experten sind. So werden sie miteinbezogen, es gibt zusätzliche Rückmeldungen und jeder fühlt sich dem Team und dem Produkt verpflichtet. Stetige Kommunikation mit dem Kunden, Aufnahme seines Feedbacks und Erfüllung seiner Wünsche, also auch eines lauffähigen Produktes, das seinen Wünschen voll entspricht, ist wichtiger als [[Vertrag]]sverhandlungen. Die Kommunikation zeichnet sich ferner durch einen respektvollen Umgang aus, sowohl im Team untereinander als auch mit dem Kunden. Unterschiedliche Meinungen werden akzeptiert. |
||
Die |
Die Entwickler sollen mutig sein und die Kommunikation offen gestalten. Falls eine Anforderung nicht in einer Iteration umgesetzt werden kann, wird in offener und ehrlicher Art und Weise direkt darauf hingewiesen. Es muss eine Atmosphäre geschaffen werden, die herkömmliche Störungen (wie unnatürlichen Konkurrenzkampf innerhalb des Teams zu Lasten des Produktes) minimiert. Um die Offenheit und den Mut zu fördern und [[Gruppendynamik|gruppendynamischen]], [[Psychologie|psychologischen]] Schwierigkeiten entgegenzutreten, kann bewusst ein ''Doomsayer'' zur offenen, zeitnahen Aussprache von schlechten Nachrichten oder möglichen Schwierigkeiten oder auch ein [[Advocatus Diaboli]] eingesetzt werden. |
||
Es soll die |
Es soll die einfachste Lösung für eine Problemstellung umgesetzt werden. In jeder Iteration konzentriert sich das komplette Team genau auf die momentan umzusetzenden Anforderungen. Die Lösungen sind technisch immer möglichst einfach zu halten. |
||
=== Prinzipien === |
=== Prinzipien === |
||
Es gibt 14 Prinzipien, die eine Brücke bilden zwischen den abstrakten Werten und den konkret anwendbaren Praktiken. Diese Prinzipien sollten immer Berücksichtigung finden. Sie sind ''Menschlichkeit'', ''Wirtschaftlichkeit'', ''Beidseitiger Vorteil'', ''Selbstgleichheit'', ''Verbesserungen'', ''Vielfältigkeit'', ''Reflexion'', ''Lauf'', ''Gelegenheiten wahrnehmen'', ''Redundanzen vermeiden'', ''Fehlschläge hinnehmen'', ''Qualität'', ''Kleine Schritte'' sowie ''Akzeptierte Verantwortung''. |
|||
Software wird von Menschen entwickelt |
Software wird von Menschen entwickelt. Menschen bilden also den Faktor, dem laut XP besondere Aufmerksamkeit gilt. Durch Schaffung einer menschlichen Atmosphäre soll den Grundbedürfnissen der Entwickler (Sicherheit, Vollendung, Identifikation mit der Gruppe, Perspektive und Verständnis) entsprochen werden. |
||
Die erstellte Software |
Die erstellte Software beziehungsweise eine einzelne Funktionalität muss einerseits wirtschaftlich sein und dennoch einen echten Wert bringen. Andererseits muss sie für beide Seiten von Vorteil sein und alle Beteiligten (Entwicklungsteam und Kunde) zufriedenstellen. |
||
Die Wiederverwendung bestehender Lösungen, wozu beispielsweise die zahlreichen unterschiedlichen Tests gehören, die stetig automatisiert durchlaufen werden, ist wichtig. <!-- Was soll’n das sein: Selbstgleichheit? Selbstgleichheit zeichnet sich auch dadurch aus, dass Tests immer zusammen mit der Funktionalität entwickelt werden. Wo allerdings ''Verbesserung''spotential identifiziert wird ist die Lösung anzupassen. --> Es ist jedem klar, dass erste Lösungen meist nicht optimal sind. Aus Feedback und selbst gewonnenen, neuen Erkenntnissen wird die Lösung stetig verbessert. Immer bessere Lösungen zu erkennen, gelingt nur durch stetige Reflexion und ein kontinuierliches Hinterfragen der jeweiligen Vorgehensweisen im Team. Die Produktivität dieses Verfahrens steigt proportional zur Uneinheitlichkeit des aus Personen mit unterschiedlichen Fähigkeiten und [[Persönlichkeit|Charakteren]] bestehenden Teams. Verschiedene Meinungen werden nicht nur geduldet, sondern sogar gefördert. Dazu muss ein [[Konfliktmanagement]] etabliert werden. |
|||
[[Bild:XP-Evolution-Prinzipien.png|thumb|230px|right|Die Prinzipien XPs]] |
|||
Die Lauffähigkeit der Software muss zu jedem Zeitpunkt garantiert sein. Obwohl kurze Iterationen mit permanentem Feedback dabei helfen, das Projekt in einem Lauf zu halten, müssen Fehlschläge dennoch miteinkalkuliert werden. Es ist durchaus üblich und wird akzeptiert, eine Umsetzung durchzuführen, die zunächst nicht optimal oder sogar fehlerhaft sein kann. Diese Schwierigkeiten müssen als Gelegenheit und Chance begriffen werden, das Produkt und das Team noch weiter reifen zu lassen. Ein offener, konstruktiver Umgang mit den Herausforderungen der Softwareentwicklung gelingt umso besser, je mehr alle Beteiligten bereit sind, ihre Verantwortung zu akzeptieren. Einem Entwickler eine Aktivität und Verantwortung nur disziplinarisch aufzutragen, reicht nicht aus, da er die Verantwortung aktiv annehmen und leben muss. |
|||
Eine Wiederverwendung existenter Lösungen ist sehr wichtig, dazu gehören beispielsweise die zahlreichen unterschiedlichen Tests, die stetig, automatisiert durchlaufen werden. ''Selbstgleichheit'' zeichnet sich auch dadurch aus, dass Tests immer zusammen mit der Funktionalität entwickelt wird. Wo allerdings ''Verbesserung''spotential identifiziert wird, wird die Lösung angepasst. Es ist jedem klar, dass erste Lösungen nicht optimal sind. Aus Feedback und selbst gewonnenen, neuen Erkenntnissen wird die Lösung stetig verbessert. Immer bessere Lösungen zu erkennen gelingt nur durch stetige ''Reflexion'', ein kontinuierliches Nachfragen im Team, warum etwas so gemacht wird wie es gerade gemacht wird. Dies ist umso produktiver je ''vielfältiger'' das Team zusammengestellt ist. Das Team besteht aus Personen mit unterschiedlichen Fähigkeiten und [[Charakter]]en. Verschiedene Meinungen werden nicht nur geduldet sondern auch gefördert. Es muss [[Konfliktmanagement]] etabliert werden. |
|||
Ein weiterer wichtiger Punkt ist die hohe [[Qualität]], die gemäß XP im Gegensatz zu anderen Faktoren wie Ressourcen, Funktionsumfang oder Endtermin nicht zur Diskussion steht. Diese Grundeinstellung unterscheidet sich von vielen anderen Methoden der Softwareerstellung, bei denen Software zu einem bestimmten Zeitpunkt und in einem definierten Funktionsumfang fertiggestellt werden soll, worunter fast immer die Softwarequalität leidet. Gerade die Qualität ist allerdings wichtig, um das Produkt einsatzfähig, fehlerfrei und erweiterbar zu halten. Software mit gutem Design und hoher Qualität ist mittelfristig kostengünstiger, erweiterbarer und weniger fehlerbehaftet als schnell erstellte, sogenannte ''Quick-and-dirty-Software''. |
|||
Es wird konstant Software entwickelt die jederzeit lauffähig ist. Kurze Iterationen mit permanentem Feedback halten das Projekt in einem ''Lauf''. Dennoch müssen ''Fehlschläge'' einkalkuliert werden. Es ist durchaus normal eine Realisierung durchzuführen, die zunächst nicht optimal oder gar fehlerhaft ist. Dies muss akzeptiert werden. Diese Schwierigkeiten müssen als ''Gelegenheit'' begriffen werden, also als Chance, die das Produkt und das Team nur noch weiter reifen lassen. Ein offener, konstruktiver Umgang mit den Herausforderungen bei der Softwareentwicklung gelingt am besten, wenn alle Beteiligten ihre ''Verantwortung akzeptieren''. Einem Entwickler eine Aktivität und eine Verantwortung disziplinarisch aufzutragen reicht nicht aus. Er muss die Verantwortung annehmen und leben. |
|||
Zu guter Qualität gehört auch die Vermeidung von Redundanzen (unnötig mehrfach oder wiederholt ausgeführte oder auch manuell ausgeführte automatisierbare Schritte). |
|||
Ein weiterer wichtiger Punkt ist die [[Qualität]]. ''Qualität'' ist nicht diskutabel. Die zu erstellende Software muss von hoher Qualität sein. Ressourcen und vor allem Funktionsumfang und Endtermin sind eventuell diskutabel. Diese Grundeinstellung unterscheidet sich von vielen anderen Methoden der Softwareerstellung. Wo Software zu einem bestimmten Zeitpunkt und einem definierten Funktionsumfang fertiggestellt werden soll, leidet fast immer die Softwarequalität. Gerade die Qualität ist allerdings sehr wichtig, um das Produkt einsatzfähig, fehlerfrei und erweiterbar zu halten. Software mit gutem Design und hoher Qualität ist mittelfristig kostengünstiger als schnell erstellte [[Frickelsoftware]], ohne ein Mindestmaß an Qualität. |
|||
Durch schnelle, kleine Schritte bleibt das Team flexibel und kann sich schnell neuen Rahmenbedingungen anpassen und auf Feedback eingehen. Die negativen Folgen eines einzelnen kleinen, nicht erfolgreichen Schrittes können wesentlich schneller durch einen neuen Schritt kompensiert werden, als dies bei einem einzelnen größeren Schritt der Fall wäre. |
|||
=== Praktiken === |
=== Praktiken === |
||
Es lassen sich traditionelle und evolutionäre Praktiken unterscheiden. Die traditionellen sind in der XP-Welt weit verbreitet und genutzt. Die evolutionären nehmen verschiedene neue Erkenntnisse aus der jahrelangen Anwendung XPs auf. Sie verfeinern oder modifizieren die ursprünglichen Praktiken geringfügig und machen damit die Nutzung klarer und verständlicher. |
|||
Extreme Programming ist die Summe einzelner Best Practices. Sie sollen alle zusammen eingesetzt werden, um den größten Nutzen zu erzielen. XP definiert sich selbst mit diesen Prinzipien allerdings nicht als Allheilmittel. Da wo es den individuellen Anforderungen nicht genügt soll es angepasst werden. Viele Prinzipien greifen verzahnt ineinander. Einzelne Praktiken sind an sich nicht neu, werden teilweise bereits lange genutzt, oder sind sogar von trivialer, und doch unterschätzer Natur. Die Praktiken sind die greifbaren, konkreten Maßnahmen die sich aus den Werten und den Prinzipien ableiten lassen. |
|||
XP wird häufig mit den traditionellen Praktiken verbunden, beziehungsweise darauf reduziert. |
|||
Es lassen sich traditionelle Praktiken unterscheiden von evolutionären Praktiken. Die traditionellen sind in der XP-Welt weit verbreitet und genutzt. Die evolutionären nehmen verschiedene neue Erkenntnisse aus der jahrelangen Anwendung XPs auf. Sie verfeinern die ursprünglichen oder modifizieren sie geringfügig und machen die Nutzung klarer und verständlicher. |
|||
XP wird häufig mit den traditionellen Praktiken [[Assoziation|assoziert]] bzw. darauf reduziert. |
|||
==== Traditionelle Praktiken ==== |
==== Traditionelle Praktiken ==== |
||
; Pair-Programming |
|||
'''Pair-Programming''': Beim [[Pair-Programming]] teilen sich zwei [[Programmierer]] einen Computer – einer codiert (der ''Driver'') und der andere denkt mit und hat das große Bild im Kopf (der ''Partner''). Die Rollen werden regelmäßig getauscht. Dieses Vorgehen steigert den Wissenstransfer. Anfänger lernen schneller von der Arbeit eines Spezialisten. Das Wissen wird verteilt. Das Projekt ist nicht mehr so anfällig gegen den Ausfall eines einzelnen. Durch ständiges [[Review]] der Entwicklung und Kommunikation wird das [[Design]] verbessert, und Fehler schneller gefunden (siehe auch [[Vier-Augen-Prinzip]]). |
|||
: Bei der [[Paarprogrammierung]] teilen sich zwei [[Programmierer]] einen Computer – einer codiert (der ''Driver'') und der andere denkt mit und hat das Gesamtbild im Kopf (der ''Partner''). Die Rollen werden regelmäßig getauscht. Dieses Vorgehen steigert den Wissenstransfer. Anfänger sollen schneller von der Arbeit eines Spezialisten lernen. Das Wissen wird verteilt. Das Projekt ist nicht mehr so anfällig gegen den Ausfall eines Einzelnen. Durch ständigen [[Codereview]] der Entwicklung und Kommunikation wird das [[Design]] verbessert und Fehler schneller gefunden (siehe auch [[Vier-Augen-Prinzip]]). |
|||
; Kollektives Eigentum |
|||
'''Kollektives Eigentum''': Aktivitäten werden an das ganze Team verteilt, zunächst nicht an einzelne Personen. Es existiert das Bewusstsein und die Verpflichtung nur als Team erfolgreich sein zu können. Diese Verpflichtung wird täglich gelebt. Einzelne Teammitglieder besitzen kein Wissens[[monopol]]. Pair-Programming und wechselhafte Einsatzgebiete wirken der Strömung entgegen, dass einzelne Personen Teile als ihren Besitz betrachten. |
|||
: Aktivitäten werden zunächst nicht an einzelne Personen verteilt, sondern an das ganze Team. Es existiert laut Methodik das Bewusstsein und die Verpflichtung nur als Team erfolgreich sein zu können. Einzelne Teammitglieder besitzen kein Wissens[[monopol]]. Pair-Programming und wechselhafte Einsatzgebiete sollen der Strömung entgegenwirken, dass einzelne Personen Teile als ihren Besitz betrachten. |
|||
; {{Anker|Permanente Integration}}Permanente Integration |
|||
'''Permanente Integration''': [[Integration (Software)|Integration]] der einzelnen [[Komponente]]n zu einem lauffähigen Gesamtsystem in kurzen Zeitabständen (z. B. durch [[CruiseControl]]). Je häufiger integriert wird, desto höher wird die eintretende [[Routine (Programmierung)|Routine]]. Fehler werden frühzeitig aufgedeckt. Die mit der Integration verbundenen Kosten werden auf fast 0 minimiert gehört denn die Integration zu einem täglichen Schritt, der weitestgehend vollautomatisiert und selbst stabil und durchgetestet ist. |
|||
: [[Kontinuierliche Integration]] der einzelnen [[Komponente (Software)|Komponenten]] zu einem lauffähigen Gesamtsystem in kurzen Zeitabständen. Je häufiger integriert wird, desto höher wird laut XP die eintretende Routine. Fehler werden damit früh aufgedeckt. Die mit der Integration verbundenen Kosten sollen fast auf Null minimiert werden, da die Integration zu einem täglichen Schritt gehört, der weitestgehend vollautomatisiert und selbst stabil und durchgetestet sein muss. |
|||
; {{Anker|Permanentes Testen}}Testgetriebene Entwicklung bzw. Permanentes Testen |
|||
'''Testgetriebene Entwicklung''' bzw '''Permanentes Testen''': Bei der [[Testgetriebene Entwicklung|testgetriebenen Entwicklung]] werden erst die [[Modultest]]s (Unit-Test) geschrieben, bevor die eigentliche Funktionalität programmiert wird. Der Entwickler befasst sich dadurch frühzeit mit dem Design des Codes, und überdenkt seine Programmierarbeit genau. Die Tests werden nach jedem Programmierschritt ausgeführt und liefern Rückmeldung über den Entwicklungsstand. Man spricht in diesem Zusammenhang auch von [[Grey-Box-Test]]s. Die Tests sind automatisiert. Im Laufe einer Integration werden Integrationstests durchgeführt. Es wird zwischen [[Regressionstest]] und [[Modultest]] unterschieden. Während Modultests einzelne Module testen (Unit-Tests) ist ein Regressionstest die kollektive Ausführung aller Tests, um die unveränderte Lauffähigkeit der ''alten'', bereits vor der Iteration existenten Funktionalität zu überprüfen. Auch [[Performance]]tests sind üblich. Hier wird überprüft, ob das Produkt bestimmte Leistungs- bzw. Geschwindigkeitsmaßstäbe erfüllt. Der Entwickler bekommt Rückmeldung (Feedback) wie viele und welche Tests nicht erfolgreich waren. Ein [[Akzeptanztest (Softwaretechnik)|Akzeptanztest]] ist die Präsentation eines Standes des Produktes, um die Zufriedenheit des Kunden und die Nutzbarkeit zu validieren. |
|||
: Bei der [[Testgetriebene Entwicklung|testgetriebenen Entwicklung]] werden erst die [[Modultest]]s (Unit-Test) geschrieben, bevor die eigentliche Funktionalität programmiert wird. Der Entwickler befasst sich dadurch früh mit dem Design des Codes und überdenkt seine Programmierarbeit genau. Die Tests werden nach jedem Programmierschritt ausgeführt und liefern Rückmeldung über den Entwicklungsstand. Die Tests sind automatisiert. Im Laufe einer Integration werden Integrationstests durchgeführt. Es wird zwischen [[Regressionstest]] und Modultest unterschieden. Während Modultests (Unit-Tests) einzelne Module testen, ist ein Regressionstest die kollektive Ausführung aller Tests, um die unveränderte Lauffähigkeit der ''alten'', bereits vor der Iteration existenten Funktionalität zu überprüfen. Auch [[Rechenleistung|Performancetests]], bei denen die Leistungs- und Geschwindigkeitsmerkmale in Bezug auf die geforderten Werte gemessen werden, sind üblich. Der Entwickler bekommt Rückmeldung (Feedback), wie viele und welche Tests nicht erfolgreich waren. Ein [[Akzeptanztest (Softwaretechnik)|Akzeptanztest]] ist die Präsentation des Standes des Produktes, um die Zufriedenheit des Kunden und die Nutzbarkeit zu validieren. |
|||
[[Bild:Xp-kreis.png|left|thumb|240px|XP Best Practices]] |
|||
[[Datei:Xp-kreis.png|mini|400px|XP Best Practices]] |
|||
; Kundeneinbeziehung |
|||
'''Kundeneinbeziehung''': Enge Einbeziehung des Kunden, d. h. der Kunde gibt das [[Iteration|Iterationsziel]] mit einer Auswahl der zu realisierender ''User Stories'' vor und hat zeitnah die Möglichkeit [[Akzeptanztest (Softwaretechnik)|Akzeptanztests]] durchzuführen. ''Story-Cards'' dienen als Medium, um die kurzen Anwendungsfälle in Form von ''User Stories'' aufzunehmen. Der Kunde muss immer anwesend oder zumindest greifbar sein. Neben User Stories auf Story-Cards existiert noch der Ansatz ''CRC-Modelle'' auf [[Class-Responsibility-Collaboration-Karten|CRC-Karten]] zu verfassen. |
|||
: Enge Einbeziehung des Kunden, das heißt, der Kunde gibt das [[Iteration]]sziel mit einer Auswahl der zu realisierenden ''User-Storys'' vor und hat kurz danach die Möglichkeit, [[Akzeptanztest (Softwaretechnik)|Akzeptanztests]] durchzuführen. ''[[Story-Card]]s'' dienen als Medium, um die kurzen Anwendungsfälle in Form von ''User-Storys'' aufzunehmen. Der Kunde muss immer anwesend oder zumindest erreichbar sein. Neben User-Storys auf Story-Cards existiert noch der Ansatz, ''CRC-Modelle'' auf [[Class-Responsibility-Collaboration-Karten|CRC-Karten]] zu verfassen. |
|||
; Refactoring |
|||
'''Refactoring''': Laufendes [[Refactoring]], ständige [[Softwarearchitektur|Architektur]], [[Design]]- und [[Code]]-Verbesserungen, auch um [[Anti-Pattern]]s zeitnah zu beheben. XP bejaht die Existenz von Code, der initial nicht perfekt ist. Stattdessen sind sämtliche Teile einem stetigen Review unterzogen. Die Behebung von gefundenen, optimierungsfähigen Stellen werden gewöhnlich zeitnah durchgeführt oder als Fehler ([[Bug]]) definiert, der in einer späteren Iteration behoben wird. |
|||
: Laufendes [[Refactoring]], ständige [[Softwarearchitektur|Architektur]]-, [[Design]]- und [[Code]]-Verbesserungen, auch um [[Anti-Pattern]]s umgehend erkennen und beseitigen zu können. XP bejaht die Existenz von Code, der am Beginn nicht perfekt ist. Stattdessen sind sämtliche Teile einem stetigen Review unterworfen. Gefundene, optimierungsfähige Stellen werden gewöhnlich sofort verbessert oder als Fehler ([[Programmfehler|Bugs]]) definiert, die in einer späteren Iteration behoben werden. |
|||
; Keine Überstunden |
|||
'''Keine Überstunden''': ''40-Stunden-Woche'', d. h. Überstunden sind zu vermeiden, weil darunter die Freude an der Arbeit, mittelfristig die Konzentrationsfähigkeit der Programmierer und somit auch die Qualität des Produktes leidet. Nachweisbar sinkt die [[Produktivität]] des Entwicklers durch Überstunden. Arbeit außerhalb des [[Sweet Spot]] darf im Einzelfall zwar geduldet werden, aber auf keinen Fall besonders entlohnt oder erwartet werden. Überstunden zeugen gewöhnlich einfach nur von falscher [[Planung]]. |
|||
: ''40-Stunden-Woche'', d. h. Überstunden sind zu vermeiden, weil darunter die Freude an der Arbeit, mittelfristig die Konzentrationsfähigkeit der Programmierer und somit auch die Qualität des Produktes leidet. Nachweislich sinkt die [[Produktivität]] eines Entwicklers durch Überstunden. Arbeit außerhalb der regulären Arbeitszeit wird im Einzelfall zwar geduldet, aber auf keinen Fall besonders entlohnt oder erwartet. Überstunden zeugen gewöhnlich einfach nur von falscher [[Planung]]. |
|||
; Iterationen |
|||
'''Iterationen''': Kurze [[Iteration]]en, um dem Kunden in regelmäßigen Zeitabständen einen lauffähigen Zwischenstand des Produkts zu liefern. Eine Iteration ist eine zeitlich und fachlich in sich abgeschlossene Einheit. Kurze Iterationen und verbundene Akzeptanztests bieten schnelle Feedbackschleifen zwischen Entwicklung und Kunde. |
|||
: Kurze [[Iteration]]en, um dem Kunden in regelmäßigen Zeitabständen einen lauffähigen Zwischenstand des Produkts zu liefern. Eine Iteration ist eine zeitlich und fachlich in sich abgeschlossene Einheit. Kurze Iterationen und damit verbundene Akzeptanztests erlauben schnelle Feedbackschleifen zwischen Entwicklung und Kunde. |
|||
; Metapher |
|||
'''Metapher''': Anforderungen werden mit dem fachlichen [[Vokabular]] des Kunden, optimalerweise auch von ihm selbst, in Form von ''User Stories'' beschrieben. Alle sprechen eine Sprache, was durch ein [[Glossar]] verstärkt werden kann. Häufiges Problem in traditionell aufgesetzten Softwareprojekten ist ein latentes Missverständnis zwischen Kunde und Entwicklungsteam. Der Entwickler hat Schwierigkeiten die Fachsprache des Kunden, der Kunde kann und will auch nicht die technischen Vokabeln des Entwicklers verstehen. Es wird eine ''Metapher'' gewählt, eine logisch ähnliche, für jeden verständliche Alltagsgeschichte. |
|||
: Da in traditionell aufgesetzten Softwareprojekten ein latentes Missverständnis zwischen Kunde und Entwicklungsteam ein häufiges Problem darstellt – der Entwickler hat Schwierigkeiten mit der Fachsprache des Kunden und umgekehrt –, werden die Anforderungen im fachlichen [[Vokabular]] des Kunden, idealerweise auch von ihm selbst, in Form von ''User-Storys'' beschrieben. Alle sprechen eine Sprache, was durch ein [[Glossar]] noch verstärkt werden kann. Es wird eine ''Metapher'' gewählt, eine inhaltlich ähnliche, für beide Seiten verständliche Alltagsgeschichte. |
|||
; Coding-Standards |
|||
'''Coding Standards''': Das Team hält sich an [[Standard]]s bei der Realisierung. Coding Standards ermöglichen erst die gemeinschaftliche Verantwortung des Teams. Wechselnder Einsatz der Entwickler in allen Bereichen der Software ist nur durch gemeinsame Standards praktikabel. |
|||
: Das Team hält sich bei der Programmierarbeit an [[Coding standards|Standards]], welche erst die gemeinschaftliche Verantwortung des Teams bei dieser Aufgabe ermöglichen. Wechselnder Einsatz der Entwickler in allen Bereichen der Software ist laut XP nur durch gemeinsame Standards sinnvoll möglich. |
|||
; Einfaches Design |
|||
'''Einfaches Design''': Es soll die Lösung angestrebt werden, die genau das erreicht was gewünscht ist. Bewusst [[generisch]]e Realisierungen oder vorbereitende Maßnahmen für potentiell zukünftige Anforderungen werden vermieden. Das ganze Design wird möglichst einfach gehalten. Zum Thema Einfachheit sind die [[Umgangssprache|umgangssprachlichen]] [[Akronym]]e [[KISS-Prinzip|KISS]] und [[YAGNI]] verbreitet. |
|||
: Es soll die einfachste Lösung angestrebt werden, also diejenige, die genau das Gewünschte erreicht (und nicht mehr). Bewusst allgemein ([[generisch]]) gehaltene Lösungen oder vorbereitende Maßnahmen für potentiell zukünftige Anforderungen werden vermieden. Zum Thema Einfachheit sind die [[Umgangssprache|umgangssprachlichen]] [[Akronym]]e [[KISS-Prinzip|KISS]] („Keep it simple, stupid“) und [[YAGNI]] („You Ain’t Gonna Need It“) verbreitet. |
|||
; Planning-Game |
|||
'''Planning Game''': Neue Versionen der Software werden in einem ''Planning Game'', auch als ''Planning Poker'' bekannt, spezifiziert, und aufwandstechnisch abgeschätzt. Während dieses iterativen Vorgehens sind sowohl Entwicklungsmannschaft als auch Kunde anwesend. |
|||
: Neue Versionen der Software werden in einem ''Planning-Game'', auch als ''Planning-Poker'' bekannt, spezifiziert und der Aufwand zu deren Umsetzung abgeschätzt. An diesem iterativen Prozess sind sowohl Entwicklungsmannschaft als auch Kunde beteiligt. |
|||
==== Evolutionäre Praktiken ==== |
==== Evolutionäre Praktiken ==== |
||
Die evolutionären Praktiken lassen sich unterteilen in Hauptpraktiken und |
Die evolutionären Praktiken wurden fünf Jahre nach den ursprünglichen publiziert und ersetzen diese. Sie lassen sich unterteilen in ''Hauptpraktiken'' und ergänzende ''Begleitpraktiken''. Inhaltlich sind die neuen Praktiken mit den alten, traditionellen Praktiken vergleichbar. Die Bezeichnungen der alten Praktiken wurden teilweise modifiziert oder in einzelne Unterpraktiken aufgeteilt. Zwei Praktiken sind weggefallen: die Praktik ''Metapher'' war zu schwer zu vermitteln und hat sich laut Literatur nicht durchgesetzt. ''Coding-Standards'' werden als selbstverständlich vorausgesetzt und nicht mehr explizit erwähnt. |
||
===== Hauptpraktiken ===== |
===== Hauptpraktiken ===== |
||
Die Hauptpraktiken sind: ''Räumlich zusammen sitzen'', ''Informativer Arbeitsplatz'', ''Team'', ''Pair-Programming'', ''Energievolle Arbeit'', ''Entspannte Arbeit'', ''Stories'', ''Wöchentlicher Zyklus'', ''Quartalsweiser Zyklus'', ''10-Minuten |
Die Hauptpraktiken sind: ''Räumlich zusammen sitzen'', ''Informativer Arbeitsplatz'', ''Team'', ''Pair-Programming'', ''Energievolle Arbeit'', ''Entspannte Arbeit'', ''Stories'', ''Wöchentlicher Zyklus'', ''Quartalsweiser Zyklus'', ''10-Minuten-Build'', ''[[Kontinuierliche Integration]]'', ''Test-First-Programmierung'' und ''Inkrementelles Design''. |
||
Durch offene, gemeinsame Anordnung der Arbeitsplätze soll die Kommunikation optimiert werden. Diese Form ist aufgrund der besseren Kommunikationsmöglichkeiten einer räumlichen Trennung der Beteiligten vorzuziehen. Der Arbeitsplatz muss ferner „informativ“ sein, indem zum Beispiel aktuelle Tasks, der Stand des Projektes und andere wichtige Informationen vom Arbeitsplatz aus immer gut sichtbar sind. Empfehlenswert ist es hier zum Beispiel, die User-Storys zentral an einer Wand anzubringen. |
|||
Das Team ist laut XP wichtiger als die [[Individuum|Individuen]]. Es fällt, im Bewusstsein, nur als Gemeinschaft erfolgreich zu sein, gemeinsame Entscheidungen. Dies wird dadurch gefördert, dass die einzelnen technischen Aktivitäten in der Planung nicht einzelnen Personen, sondern dem Team zugeordnet werden. Probleme löst das Team ohne den Eingriff eines Managers von außen. Mit dem Thema ''selbstregulierendes Team'' befasst sich auch der Essay ''[[Die Kathedrale und der Basar]]''. ''Pair-Programming'' mit abwechselnden Partnern soll diese Grundeinstellung weiter fördern. |
|||
[[Bild:XP-Evolution-Hauptpraktiken.png|thumb|240px|right|Die Hauptpraktiken des evolutionären XPs]] |
|||
Die Arbeit soll mit voller Motivation und gleichzeitig in einer entspannten, kollegialen Atmosphäre ablaufen, da die Entwickler ohne Überstunden arbeiten und somit maximale Produktivität erreicht wird. Es werden Sicherheitspuffer einkalkuliert. Nicht einhaltbare Versprechen werden vermieden. |
|||
Nicht nur räumlich vereint: das ''ganze Team'' ist wichtiger als [[Individuum|Individuen]]. Das Team fällt kollektiv Entscheidungen. Das Bewusstsein nur als Gemeinschaft erfolgreich zu sein ist tief verankert. Dies wird dadurch gefördert, dass die einzelnen technischen Aktivitäten in der Planung nicht einzelnen Personen zugeordnet werden. Das ganze Team ist für die gemeinsame, erfolgreiche Realisierung verantwortlich. Probleme löst das Team selbst, der Eingriff eines Managers von außen ist nicht notwendig. Mit dem Thema selbstregulierendes Team befasst sich auch der Essay [[Die Kathedrale und der Basar]]. ''Pair-Programming'' mit abwechselnden Partnern unterstützen weiter diese Grundeinstellung. |
|||
Die zu entwickelnde Funktionalität wird in Form von Storys beschrieben, beispielsweise User-Storys. In wöchentlichem Zyklus wird entschieden, welche Kundenwünsche als Nächstes in Angriff genommen werden. Das Projekt selbst wird in einem quartalsweisen Zyklus geplant. Die vorgegebenen Zyklen sind Richtwerte, deren Größen im täglichen Einsatz variieren können. |
|||
Die Arbeit ist einerseits ''energievoll'', da die Entwickler ohne Überstunden arbeiten, somit maximale Produktivität erlangen, sie ist aber auch ''entspannt''. Es werden Sicherheitspuffer einkalkuliert. Nicht einhaltbare Versprechen werden vermieden. Auf eine entspannte, kollegiale Atmosphäre, auch zum Kunden, wird geachtet. |
|||
Die Software zu [[Erstellungsprozess|erstellen]] und alle Testläufe durchzuführen soll in maximal zehn Minuten abgeschlossen sein. Durch diesen ''10-Minuten-Build'' werden die Kosten für Erstellung und das Testen der Software minimiert. Alle von einem Entwickler gemachten Änderungen sollten circa alle zwei Stunden bereitgestellt werden. Diese kontinuierliche Integration soll einem potentiellen Chaos vorbeugen, das entstehen könnte, wenn die Entwickler ihre Änderungen und Erweiterungen am Produkt selten in das zentrale Datenhaltungssystem ([[Repository]]) einstellen würden. Alle Mitarbeiter haben so die Änderungen rasch zur Verfügung. Sowohl die zehn Minuten beim Build als auch die zwei Stunden bei der Integration sind Zielvorgaben, die in konkreten Projekten variieren können. Gerade bei großen Projekten mit einer großen Menge an [[Quelltext]] und Entwicklern wird ein Build deutlich länger dauern, und die Integrationsintervalle werden oft größer sein. Die Praktiken betonen nur die Richtung und geben einen Idealwert vor, der angestrebt werden sollte. Durch Automatisierung lässt sich die Build-Zeit weitestgehend minimieren. |
|||
Die zu entwickelnde Funktionalität wird in Form von ''Stories'' beschrieben, beispielsweise User Stories. In einem ''wöchentlichen Zyklus'' wird entschieden welche Kundenwünsche als nächstes realisiert werden. Das Projekt selbst wird in einem ''quartalsweisen Zyklus'' geplant. Die Zyklen sind Richtwerte, dessen Größen im täglichen Einsatz variieren können. |
|||
Die Entwicklung ist gekennzeichnet durch den Test-First-Programmieransatz: vor der Realisierung der Funktionalität muss der Test geschrieben werden. Ein inkrementelles Design, das neue Erkenntnisse und Feedback aufnimmt, verbessert das Design der Software stetig. |
|||
Die Software [[Build|bauen]] und alle Tests laufen lassen soll in maximal 10 Minuten abgeschlossen sein. Durch diesen ''10-Minuten Build'' werden die Kosten für Erstellung und das Testen der Software minimiert. Alle von einem Entwickler gemachten Änderungen sollten ca. alle 2 Stunden bereitgestellt werden. Diese ''kontinuierliche Integration'' beugt einem potentiellen Chaos vor, wenn die Entwickler ihre Änderungen und Erweiterungen am Produkt sehr selten in das zentrale Datenhaltungssystem ([[Repository]]), beispielsweise [[CVS]], einstellen. Alle Kollegen haben zeitnah die Änderungen zur Verfügung. Sowohl die 10 Minuten beim Build als auch die zwei Stunden bei der Integration sind Zielvorgaben, die sich in konkreten Projekten schwer erreichen lassen. Gerade bei großen Projekten mit viel Quelltext und vielen Entwicklern wird ein Build signifikant länger dauern, und die Integrationsintervalle nicht selten größer sein. Die Praktiken betonen die Richtung und geben einen Idealwert vor, der angestrebt werden sollte. Durch Automatisierung lässt sich die Build-Zeit weitestgehend minimieren. |
|||
Die Entwicklung ist ferner gekennzeichnet durch den ''Test-First Programmierung''-Ansatz: vor der Realisierung der Funktionalität muss der Test geschrieben werden. Ein ''inkrementelles Design'' verbessert das Design der Software stetig. Neue Erkenntnisse und Feedback werden aufgenommen. |
|||
===== Begleitpraktiken ===== |
===== Begleitpraktiken ===== |
||
Die Begleitpraktiken sind: |
|||
Die Begleitpraktiken sind: ''Richtige Kundeneinbeziehung'', ''Inkrementelles Deployment'', ''Team Konstanz'', ''Schrumpfende Teams'', ''Ursachliche Analysen'', ''Geteilter Code'', ''Codierung und Testen'', ''Eine zentrale Codebasis'', ''Tägliches Deployment'', ''Verhandelbarer, vertraglicher Funktionsumfang'' und ''Zahlen-pro-Nutzung''. |
|||
* richtige Kundeneinbeziehung |
|||
* inkrementelles Deployment |
|||
* Team-Konstanz |
|||
* schrumpfende Teams |
|||
* ursachliche Analysen |
|||
* geteilter Code |
|||
* Codierung und Testen |
|||
* eine zentrale [[Codebasis]] |
|||
* tägliches Deployment |
|||
* verhandelbarer, vertraglicher Funktionsumfang |
|||
* Zahlen-pro-Nutzung. |
|||
Der Kunde nimmt aktiv an der |
Der Kunde nimmt aktiv an der Entwicklung teil. Er ist Teilnehmer an den regelmäßigen Treffen und wird aktiv miteinbezogen. Die Einbeziehung zeigt sich auch beim zu entwickelnden Funktionsumfang, der verhandelbar bleiben muss. Mehrere kleinere Verträge anstatt eines großen Vertrags können in derartig betriebenen Projekten Risiken minimieren und die Flexibilität erhöhen. Da iterativ stetig neue Versionen bereitgestellt werden, müssen die [[Zahlung]]en des Kunden unabhängig von der Anzahl der bereitgestellten Versionen sein. Der Kunde zahlt nicht für jede Version der Software, sondern pro Nutzung. |
||
Das Team |
Das Team soll einerseits von seiner Konstanz leben, kann aber auch personell verkleinert werden. Das Entwicklerteam muss über mehrere Projekte hinweg das gleiche sein. Es erwirbt im Rahmen der Produktentwicklung die Fähigkeiten, als Team zusammenzuarbeiten, welche für weitere Projekte genutzt werden kann. Sobald das Team leistungsstärker und produktiver wird, sollte seine Arbeitslast, trotz einer Verlagerung von Ressourcen zu anderen Teams, konstant bleiben. |
||
Dem Code als |
Dem Code als dem im Zentrum stehenden Medium kommt eine zentrale Rolle zu. Er wird in einer zentralen, datenbankähnlichen Struktur ([[Repository]]) gehalten. Es existiert nur eine offizielle Version (Codebasis) des Systems. Dieser Code wird, bildlich gesprochen, zwischen den Entwicklern geteilt. Jeder Entwickler im Team muss in der Lage sein, auch „fremden“ Code jederzeit ändern zu können (Collective-Code-Ownership). Neben dem Code existieren immer die Tests, die zusammen mit dem Code die einzigen zu erstellenden, durch die Entwicklungsarbeit bereitgestellten Medien („Artefakte“) sind. Alle anderen Medien, zum Beispiel die Dokumentation, werden allein aus Code und Tests generiert. |
||
Um Schwierigkeiten |
Um Schwierigkeiten früh zu identifizieren, wird inkrementelles Deployment (die Überführung der Anwendung auf das Zielsystem) durchgeführt. Wenn [[Legacy-System|Altsysteme]] durch neue Software ersetzt werden sollen, muss ein Teil nach dem anderen ersetzt werden. Dieses Vorgehen soll die Umstellung planbarer machen. Das Deployment ist täglich inkrementell durchzuführen. Jeden Tag soll eine neue Version der Software produktiv gestellt werden. Dies macht das Deployment zur Routine, minimiert dessen Kosten und Fehler und ermöglicht stetige Integrations- und Akzeptanztests. Falls einmal ein technisches Fehlverhalten eintritt, muss eine ursächliche Analyse durchgeführt werden. |
||
=== Flexibilitätsgrad vs. Steifheit === |
=== Flexibilitätsgrad vs. Steifheit === |
||
Eine der theoretischen Grundlagen des Extreme Programming ist der Flexibilitätsgrad des zu entwickelnden |
Eine der theoretischen Grundlagen des Extreme Programming ist der Flexibilitätsgrad des zu entwickelnden Softwaresystems. XP geht von einem mindestens proportionalen Zusammenhang zwischen dem Gegenteil der Flexibilität, der sogenannten ''Steifheit'', und den Pflegekosten zur Fehlerbehebung oder Erweiterung des Systems aus. Je flexibler ein Softwaresystem, desto geringer sind die Pflegekosten, je steifer, desto höher. |
||
Einige |
Einige Steifheitskriterien: |
||
* |
* Die Anzahl überflüssiger bzw. ungenutzter Merkmale |
||
* schlechte |
* Eine schlechte, fehlende, schwer verständliche oder zu umfangreiche Dokumentation |
||
* schwer verständlicher Entwurf |
* Ein schwer verständlicher oder unflexibler Entwurf |
||
* Fehlende Regressionstests |
|||
* steifer Entwurf |
|||
* Ein schwerfälliges Gesamtsystem |
|||
* fehlende Regressionstests |
|||
* schwerfälliges Gesamtsystem |
|||
Die Flexibilitätskriterien sind das Gegenteil der Steifheitskriterien, zum Beispiel ein leicht verständlicher und flexibler Entwurf. |
|||
Einige Flexibilitätskriterien: |
|||
* gute Dokumentation (vorhanden, leicht verständlich, vollständig aber nicht ausschweifend) |
|||
* leicht verständlicher Entwurf |
|||
* flexibler Entwurf |
|||
* Regressionstests |
|||
* leichtgewichtiges Gesamtsystem |
|||
Einige der als Bestandteil des |
Einige der als Bestandteil des Extreme Programming definierten Mechanismen dienen laut XP der Erhöhung der Flexibilität: |
||
* Die |
* Die testgetriebene Entwicklung sorgt für ein ausreichendes Vorhandensein von Regressionstests und eine verbesserte [[Testbarkeit]] der Software |
||
* |
* Das ständige Refactoring führt zur Fehlerbeseitigung, einem leicht verständlichen und flexiblen Entwurf sowie guter Dokumentation |
||
* Die |
* Die kontinuierliche Integration erfordert zwangsläufig ein leichtgewichtiges Gesamtsystem |
||
* Um zu entwickelnde |
* Um die zu entwickelnde Funktionalität zu bestimmen, und zwischen Kunde und Entwicklungsteam auszuarbeiten, werden User-Storys eingesetzt |
||
== |
== Ursprung und Abgrenzung == |
||
XP ist ein Vertreter der agilen Softwareentwicklung. Im Vergleich zu traditionellen [[Vorgehensmodell zur Softwareentwicklung|Vorgehensmodellen]] wählt es alternative Ansätze, um Herausforderungen während der Softwareentwicklung zu adressieren. |
|||
=== |
=== Traditionelle Vorgehensmodelle === |
||
In aus heutiger Sicht ''traditionellen'' Vorgehensmodellen ist der Softwareentwicklungsprozess in aufeinanderfolgenden [[Projektphase|Phasen]] organisiert. Nach Jahren der Anwendung von traditionellen Vorgehensmodellen, wie dem ab 1970 genutzten [[Wasserfallmodell]], haben es, aus Sicht der XP-Vertreter, Projektverantwortliche nur unzureichend verstanden, die Probleme und Risiken der Softwareentwicklung in den Griff zu bekommen. Viele Projekte kamen nie zu einem Abschluss oder überstiegen zeitlich und/oder kostenmäßig die Planung. Viele, gerade über lange Zeiträume laufende Projekte deckten mit Abschluss zwar die zu Beginn spezifizierten Anforderungen ab, berücksichtigten allerdings unzureichend, dass Anforderungen sich ändern können oder erst im Laufe eines Projektes dem Kunden wirklich klar ist, wie das Endergebnis aussehen soll. Über Erfolg und Schwierigkeiten von Softwareprojekten liefert der ''[[Chaos-Studie|Chaos-Report]]'' von ''The Standish Group'' regelmäßig fundierte Untersuchungen, wie beispielsweise 1994.<ref name="CHAOS">The Standish Group: ''{{Internetquelle |url=https://www.standishgroup.com/sample_research_files/chaos_report_1994.pdf |titel=The CHAOS Report (1994) |abruf=2020-01-12}}'' (englisch), 12. Juni 2006.</ref> |
|||
In Abgrenzung zu traditionellen [[Vorgehensmodell (Software)|Vorgehensmodell]]en wie dem ab 1970 genutzten [[Wasserfallmodell]] durchläuft der Entwicklungsprozess in XP immer wieder in kurzen Zyklen sämtliche Disziplinen der klassischen Softwareentwicklung (zum Beispiel [[Anforderungsanalyse]], [[Design]], [[Implementierung]], [[Test]]). Nur die im aktuellen Iterationsschritt benötigten [[Merkmal]]e werden implementiert. XP ist ''leichtgewichtiger'': es wird keine komplette technische [[Spezifikation]] der zu entwickelnden Lösung vorausgesetzt (so gibt es beispielsweise kein [[Pflichtenheft]]). |
|||
In Abgrenzung zu traditionellen Vorgehensmodellen durchläuft der Entwicklungsprozess in XP immer wieder iterativ in kurzen Zyklen sämtliche Disziplinen der klassischen Softwareentwicklung (zum Beispiel Anforderungsanalyse, [[Design]], [[Implementierung]], [[Test]]). Durch diese inkrementelle Vorgehensweise werden nur die im aktuellen Iterationsschritt benötigten [[Merkmal]]e verwirklicht (implementiert). XP ist dadurch ''leichtgewichtiger'': Es wird keine komplette technische [[Spezifikation]] der zu entwickelnden Lösung vorausgesetzt (so gibt es beispielsweise kein [[Pflichtenheft]]). |
|||
Es waren Kent Beck, Ward Cunningham und Ron Jeffries, die in der Softwareentwicklung im C3-Projekt neue Wege einschlugen. Nach Jahren der Anwendung von aus heutiger Sicht ''traditionellen'' Vorgehensmodellen wie dem Wasserfallmodell haben es, aus Sicht der XP Vertreter, die Projektverantwortlichen nur unzureichend verstanden die Probleme und Risiken der Softwareentwicklung in den Griff zu bekommen. Viele Projekte kamen nie zu einem Abschluss oder überstiegen zeitlich und/oder kostentechnisch die Planung. Viele, gerade langläufige Projekte, deckten mit Abschluss zwar die zu Beginn spezifizierten Anforderungen ab, berücksichtigten allerdings unzureichend, dass Anforderungen sich ändern können oder erst im Laufe eines Projektes dem Kunden wirklich klar ist, wie das Produkt aussehen soll. Über Erfolg und Schwierigkeiten von Softwareprojekten liefert der ''Chaos-Report'' von ''The Standish Group'' regelmäßig fundierte Untersuchungen, wie beispielsweise 1994 <ref name="CHAOS">The Standish Group: ''[http://www.standishgroup.com/sample_research/chaos_1994_1.php The CHAOS Report (1994)]'' (englisch), 12. Juni 2006</ref>. |
|||
=== Geschichte von XP === |
|||
Beigefügte Tabelle enthält eine Auflistung der von XP identifizierten Kerndisziplinen bei der Softwareentwicklung. Neben dem von XP verfolgten Ansatz zeigt die letzte Spalte den historischen, weit verbreiteten Ansatz respektive das Risiko. Nicht XP einsetzende Unternehmungen können ein Vorgehensmodell besitzen welches sich, bewusst oder unbewusst, mit diesen Disziplinen positiv auseinandersetzen. |
|||
''Extreme Programming'', und damit einher [[Industriestandard|Standards]] wie JUnit, wurden von [[Kent Beck]], [[Ward Cunningham]] und [[Ron Jeffries]] (allesamt Erstunterzeichner des [[Agile Manifesto]]) während ihrer Arbeit im [[Projekt]] Comprehensive Compensation System bei [[Chrysler Corporation|Chrysler]] zur Erstellung von Software entwickelt. Die Arbeiten am sogenannten C3-Projekt begannen 1995 und wurden 2000 nach der Übernahme durch Daimler eingestellt. Die dabei entwickelte Software wurde im Bereich der [[Lohnabrechnung]] eingesetzt und basierte hauptsächlich auf [[Smalltalk (Programmiersprache)|Smalltalk]]. Das C3-Projekt wurde ursprünglich nach dem Wasserfallmodell umgesetzt. Nachdem nach knapp einem Jahr kein wesentlicher Fortschritt zu verzeichnen war, wurde der Entwicklungsansatz geändert. Das Projekt zeichnete sich aus durch häufig wechselnde Anforderungen und einer hohen Mitarbeiterfluktuation.<ref name="C3">Chrysler Comprehensive Compensation System: {{Webarchiv | url=http://www.xprogramming.com/publications/dc9810cs.pdf | wayback=20150113174308 | text=''Chrysler Goes To Extremes''}} (PDF, englisch; 188 kB), 9. Juni 2006.</ref><ref name="C3-XP">Chrysler Comprehensive Compensation System: ''[http://www.agileconnection.com/sites/default/files/article/file/2012/XDD3248filelistfilename1_0.pdf Extreme Programming Considered Harmful for Reliable Software Development]'' (PDF, englisch), 6. Februar 2002.</ref><ref name="C3-Wiki">Chrysler Comprehensive Compensation: ''[http://c2.com/cgi/wiki?ChryslerComprehensiveCompensation Project to replace existing payroll applications with a single application.]'' (englisch), 16. Oktober 2013.</ref> |
|||
XP ist ein agiles Vorgehensmodell. Die folgende Tabelle stellt den von XP identifizierten Kerndisziplinen den historischen, weitverbreiteten Ansatz mitsamt seinen Risiken der Softwareentwicklung gegenüber. Unternehmen, die XP nicht einsetzen, können Vorgehensmodelle verwenden, die sich – bewusst oder unbewusst – mit diesen Disziplinen positiv auseinandersetzen. |
|||
{| {{Prettytable}} |
|||
{| class="wikitable zebra" style="background:#F0F0FF;" |
|||
|+ Verbreitete XP-Kerndisziplinen und Risiken bei herkömmlicher Herangehensweise |
|+ Verbreitete XP-Kerndisziplinen und Risiken bei herkömmlicher Herangehensweise |
||
|- class="hintergrundfarbe8" |
|||
|- |
|||
! Praktik |
|||
! {{highlight2}}|Prinzip |
|||
! |
! Richtiges Vorgehen nach XP |
||
! |
! Traditionelles oder falsches Vorgehen/Risiko nach XP |
||
|- |
|- |
||
|Kommunikation |
|Kommunikation |
||
|Stetiger Austausch wird gefördert und erwartet. |
|Stetiger Austausch wird gefördert und erwartet. |
||
|Jeder muss zunächst mal seine Aufgaben lösen. |
|Jeder muss zunächst mal seine Aufgaben lösen. |
||
|- |
|||
|- bgcolor="#f0f0ff" |
|||
|Mut |
|Mut |
||
|Offene Atmosphäre. |
|Offene Atmosphäre. |
||
Zeile 287: | Zeile 311: | ||
|- |
|- |
||
|Kollektives Eigentum |
|Kollektives Eigentum |
||
| |
|Programmcode, Dokumente etc. gehören dem Team. |
||
|Jeder fühlt sich nur für seine Artefakte verantwortlich. |
|Jeder fühlt sich nur für seine Artefakte verantwortlich. |
||
|- |
|||
|- bgcolor="#f0f0ff" |
|||
|Pair |
|Pair-Programming |
||
|Zu zweit am Rechner. |
|Zu zweit am Rechner. |
||
|Jeder will und muss zunächst auf seine ihm zugewiesenen Aufgaben schauen. |
|Jeder will und muss zunächst auf seine ihm zugewiesenen Aufgaben schauen. |
||
Zeile 296: | Zeile 320: | ||
|Integration |
|Integration |
||
|Stetige Integrationen erlauben Feedback und erhöhen Qualität. |
|Stetige Integrationen erlauben Feedback und erhöhen Qualität. |
||
| |
|Selten Integrationen, da vermeintlich unnütz und Zeitverschwendung. |
||
|- |
|||
|- bgcolor="#f0f0ff" |
|||
|Testgetriebene Entwicklung |
|Testgetriebene Entwicklung |
||
|Testen hat |
|Testen hat einen hohen Stellenwert. |
||
|Testen kostet nur Zeit. |
|Testen kostet nur Zeit. Wenige manuelle Tests. |
||
|- |
|- |
||
|Kundeneinbeziehung |
|Kundeneinbeziehung |
||
|Kunde wird zur aktiven Mitarbeit aufgerufen. |
|Der Kunde wird zur aktiven Mitarbeit aufgerufen. |
||
|Kunde ist selten Partner sondern nur die |
|Der Kunde ist selten wirklicher Partner, sondern nur die „andere Seite des Vertrages“. |
||
|- |
|||
|- bgcolor="#f0f0ff" |
|||
|Refactoring |
|Refactoring |
||
|Suboptimales Design und Fehler werden akzeptiert. |
|Suboptimales Design und Fehler werden akzeptiert. |
||
Zeile 313: | Zeile 337: | ||
|Einhaltung der regulären Arbeitszeit. |
|Einhaltung der regulären Arbeitszeit. |
||
|Stetige, regelmäßige Überschreitung der regulären Arbeitszeit. |
|Stetige, regelmäßige Überschreitung der regulären Arbeitszeit. |
||
|- |
|||
|- bgcolor="#f0f0ff" |
|||
|Iterationen |
|Iterationen |
||
|Ein Release wird in viele handliche Iterationen unterteilt. |
|Ein Release wird in viele handliche Iterationen unterteilt. |
||
|Iterationen sind nicht nötig, es wird an einem Release gearbeitet. |
|Iterationen sind nicht nötig, es wird an einem Release gearbeitet. |
||
|- |
|- |
||
|Stand-up |
|Stand-up-Meeting |
||
|Täglicher strukturierter Austausch. |
|Täglicher, strukturierter Austausch. |
||
|Große, lange, seltenere Projektmeetings. Personenanzahl und Inhalt häufig zu aufgebläht. |
|Große, lange, seltenere Projektmeetings. Die Personenanzahl und der Inhalt sind häufig zu aufgebläht. |
||
|- |
|||
|- bgcolor="#f0f0ff" |
|||
|Dokumentation |
|Dokumentation |
||
|Wo es |
|Wo es sinnvoll ist. |
||
|Wichtiges Artefakt. Alles muss standardisiert dokumentiert sein. Dokumentation wird aber nicht genutzt. |
|Wichtiges Artefakt. Alles muss standardisiert dokumentiert sein. Dokumentation wird aber nicht genutzt. |
||
|- |
|- |
||
Zeile 329: | Zeile 353: | ||
|Ein gemeinsames Vokabular. |
|Ein gemeinsames Vokabular. |
||
|Kunde und Entwicklung sprechen in zwei Sprachen, häufig aneinander vorbei. |
|Kunde und Entwicklung sprechen in zwei Sprachen, häufig aneinander vorbei. |
||
|- |
|||
|- bgcolor="#f0f0ff" |
|||
|Team |
|Team |
||
|Das Team ist |
|Das Team ist wichtig. Es existieren keine Rollen. Feedback wird von jedem erwartet. |
||
|Spezialistentum. Abschottung. Wissensmonopole. |
|Spezialistentum. Abschottung. Wissensmonopole. |
||
|- |
|- |
||
|Standards |
|Standards |
||
|Standards wo es |
|Standards, wo es sinnvoll erscheint. |
||
|Überregulierung. Starrer Prozess. |
|Überregulierung. Starrer Prozess. |
||
|- |
|||
|- bgcolor="#f0f0ff" |
|||
|Qualität |
|Qualität |
||
|Inhärenter Bestandteil. |
|Inhärenter Bestandteil. |
||
Zeile 343: | Zeile 367: | ||
|} |
|} |
||
Aufgrund der wachsenden Nutzung wird XP weiter optimiert: je mehr Projekte gemäß XP entwickelt werden, desto mehr Erfahrungen fließen in die Weiterentwicklung von XP ein. Da es auch eine Summe von [[Best practice]]s ist, lässt sich somit sagen: „Es wird in der Praxis für die Praxis angepasst“. |
|||
Die drei XP-Begründer identifizierten die Werte und Prinzipien, und stellten dar, wie diese helfen die Herausforderungen der Softwareentwicklung zu meistern. Heute, über zehn Jahre nach den ersten XP-Schritten, erfreut sich XP und auch andere agile Methoden wachsender Beliebtheit. Untersuchungen von [[Forrester Research]] ergaben, dass in Nordamerika und Europa 2005 ca. 14 % aller Projekte mit agilen Methoden durchgeführt wurden<ref name="FOR">Forrester Research: ''[http://www.forrester.com/Research/Document/Excerpt/0,7211,38334,00.html Corporate IT Leads The Second Wave Of Agile Adoption]'' (englisch), 30. September 2005</ref> und viele über einen Einsatz nachdenken. Neben der bekannten und verbreiteten agilen Methode XP hat auch [[Scrum]] eine gewisse Bekanntheit erlangt. Neben vielen Ähnlichkeiten zu XP gibt Scrum in bestimmten Bereichen Vorgaben bzgl. Iterationslänge, [[Protokoll]]ierung und Verfahren. Scrum nutzt ein eigenes Vokabular. Der kleinste gemeinsame Nenner aller agilen Vorgehensmodellen ist das [[Agile Manifest]]: |
|||
=== Andere agile Vorgehensmodelle === |
|||
: ''Individuen und Interaktionen haben Vorrang vor Prozessen und Werkzeugen.'' |
|||
{{Hauptartikel|Agile Softwareentwicklung}} |
|||
: ''Lauffähige Software hat Vorrang vor ausgedehnter Dokumentation.'' |
|||
Der kleinste gemeinsame Nenner aller agilen Vorgehensmodelle ist das „Agile Manifest“:<ref name="AM">Ward Cunningham, Kent Beck et al.: ''[https://agilemanifesto.org/ Manifesto for Agile Software Development]'' (englisch), 2001.</ref> |
|||
: ''Zusammenarbeit mit dem Kunden hat Vorrang vor Vertragsverhandlungen.'' |
|||
* ''Individuen und Interaktionen haben Vorrang vor Prozessen und Werkzeugen'' |
|||
: ''Auf Änderungen eingehen geht vor einen Plan strikt verfolgen.'' |
|||
* ''Lauffähige Software hat Vorrang vor ausgedehnter Dokumentation'' |
|||
* ''Zusammenarbeit mit dem Kunden hat Vorrang vor Vertragsverhandlungen'' |
|||
* ''Das Eingehen auf Änderungen hat Vorrang vor strikter Planverfolgung'' |
|||
Neben XP hat auch [[Scrum]] einen gewissen Bekanntheitsgrad erlangt. Neben vielen Ähnlichkeiten mit XP gibt Scrum in bestimmten Bereichen Vorgaben bezüglich Iterationslänge, Protokollierung und Verfahren. Scrum nutzt ein eigenes Vokabular. |
|||
Eine weitere gerne in diesem Zusammenhang angeführte Disziplin ist das ''Feature-Based Programming'', eine Methodik die den Fokus ebenfalls auf die bereitzustellende Funktionalität setzt. |
|||
Eine weitere gerne in diesem Zusammenhang angeführte Disziplin ist das [[Feature Driven Development]], eine Methodik, die den Schwerpunkt ebenfalls auf die bereitzustellende Funktionalität legt. |
|||
Gerade aufgrund der wachsenden Nutzung wird XP immer weiter optimiert und in der Praxis für die Praxis angepasst. Der Schritt von dem ursprünglichen XP-Ansatz hin zu der zweiten Evolutionsstufe XPs wird sicherlich nicht die letzte Evolutionsstufe bleiben. |
|||
Ähnlichkeiten zwischen XP und [[Kaizen]], einem in Japan vor allem in der Autoindustrie entwickelten Konzept ([[Kontinuierlicher Verbesserungsprozess]]) zur Sicherung der Qualität im Fertigungsprozess und einer Optimierung der Fertigungs- und Managementkosten mittels „schlankerer“ Ansätze ([[Schlanke Produktion]]), sind nicht zu übersehen. |
|||
=== XP und das C3-Projekt === |
|||
Das C3-Projekt wurde initial nach einem Wasserfall-Modell und mit der Hilfe eines externen Dienstleisters realisiert. Nachdem es nach knapp einem Jahr keinen wesentlichen Fortschritt gab, wurde der Entwicklungsansatz geändert. C3 wurde im Jahr 2000 nach dem Zusammenschluss der Unternehmen [[Daimler]] und [[Chrysler]] zu [[DaimlerChrysler]] eingestellt. Es wurde zwar lauffähige Software bereitgestellt, allerdings nicht in sämtlichen zu Beginn geplanten Ausbaustufen. Während des Projektes gab es Schwierigkeiten den vor Ort vorhandenen Kundenrepräsentanten zu ersetzen, nachdem dieser nach einem [[Burnout]] ausgeschieden sein soll. Ferner wurden die Anforderungen sehr häufig gewechselt und Kommunikation war schwierig aufgrund einer Fluktuation der Mitarbeiter: viele wurden während des Projektes befördert oder schieden aus. Die Einstellung des Projektes wird damit begründet, dass das [[Management]] das Interesse an dem Projekt verlor <ref name="C3Wiki">Chrysler Comprehensive Compensation System Wiki: ''[http://c2.com/cgi/wiki?ChryslerComprehensiveCompensation C3 Wiki]'' (englisch), 16. Juni 2006</ref><ref name="XPKritik">Keefer, AVOCA GmbH: ''[http://www.avoca-vsm.com/Dateien-Download/ExtremeProgramming.pdf Extreme Programming Considered Harmful for Reliable Software Development 2.0]'' ([[PDF]], englisch), 16. Juni 2006</ref>. |
|||
Ein weiteres agiles Vorgehensmodell ist [[Crystal Family|Crystal]], eine Familie von Methoden, deren Mitglieder meist mit Farben gekennzeichnet werden. |
|||
Anderen Quellen nach stellte das erfolgreiche Projekt eine zuverlässige, kostengünstige und erweiterbare Software bereit. Neue Mitarbeiter konnten schnell integriert werden. Das System war drei Jahre produktiv und sowohl ein technischer als auch ein wirtschaftlicher Erfolg bis zum Schluss. Eingestellt wurde es aus zwei Gründen: es wurde in [[Smalltalk (Programmiersprache)|Smalltalk]] entwickelt, wobei [[Java (Programmiersprache)|Java]] in dieser Zeit ungemein an Popularität und Verbreitung gewann. Die Unternehmung wollte kein System weiterentwickeln welches auf einer selten genutzten Sprache wie Smalltalk aufbaute. Der andere Grund wäre die Finanzierung: zunächst wurde das Projekt als Pilotprojekt für objektorientierte Technologien direkt von der [[IT]] finanziert. Der Bitte der IT an andere Abteilungen die Finanzierung für spätere Ausbaustufen zu übernehmen wurde nicht nachgekommen. Das Projekt wurde darauf hin eingestellt <ref name="BECK2">Kent Beck, Dirk Andres: ''Extreme Programming Explained. Embrace Change''. 2nd Edition, Addison Wesley, Dezember 2004, ISBN 0-321-27865-8</ref>. |
|||
Auch traditionelle Vorgehensmodelle, wie das [[V-Modell (Entwicklungsstandard)|V-Modell]], wurden zwischenzeitlich um neue Erkenntnisse in der Softwareentwicklung angereichert. Als Ergebnis bedient sich der Nachfolger, das ''V-Modell XT'', agiler Ansätze. So gibt das V-Modell XT keine strikte Sequenz an zu durchlaufenden Phasen mehr vor. |
|||
=== Kritik === |
|||
XP gilt als schwerer einsetzbar in verteilten Umgebungen. Direkter Kontakt mit Entwicklern untereinander und dem Kunden ist problematisch, falls mehrere verschiedene Kunden existieren und/oder die Beteiligten räumlich getrennt arbeiten (z. B. Entwicklung ist teilweise [[Outsourcing|outgesourced]]). Der „ideale Kunde“ ist manchmal nicht greifbar. Der Einsatz von XP in hoch-sensiblen Bereichen mit genau zu spezifizierenden Merkmalen (wie Automotive) bedarf besonderer Konzentration. Sowohl Eigenheiten in der Aufbauorganisation als auch die Komplexität und Anforderungen an die zu entwickelnde Fachlichkeit lassen sich mit XP dennoch meistern. Auch größere Teams werden als nicht geeignet angesehen nach XP zu entwickeln. Hier hilft eine Aufteilung in viele kleine Teams wobei die optimale Einzelteamgröße bei bis zu ca. 10 Personen liegt. Personen, die nicht gerne kommunizieren bzw. Probleme haben offen und ehrlich über die anfallenden Dinge zu reden werden Schwierigkeiten haben in XP-Projekten zu arbeiten. Es muss eine vertrauenswürdige Atmosphäre geschaffen werden. Einzelne Entwickler dürfen nicht an dem Umfang ihrer entwickelten Funktionalität dynamisch entlohnt werden, da das Team im Vordergrund steht und entscheidet. |
|||
== XP in Projekten == |
|||
Darüber hinaus gibt es spezifische Unternehmensumgebungen, welche auf den ersten Blick die Nutzung von XP erschweren. Dazu gehören: |
|||
Im Jahr 2005, über zehn Jahre nach den ersten XP-Schritten, erfreuten sich XP und andere agile Methoden wachsender Beliebtheit. Untersuchungen von „Forrester Research“ ergaben, dass in Nordamerika und Europa 2005 circa 14 % aller Projekte mit agilen Methoden durchgeführt wurden<ref name="FOR">Forrester Research: '' {{Webarchiv | url=http://www.forrester.com/Research/Document/Excerpt/0,7211,38334,00.html | wayback=20071016155709 | text=Corporate IT Leads The Second Wave Of Agile Adoption}}'' (englisch), 30. November 2005.</ref> (von denen XP die verbreitetste ist) und viele andere einen Einsatz prüfen. |
|||
# Das Projekt wird weit im Voraus geplant. |
|||
# Das Projekt muss eine fixe [[Deadline]] halten und dabei eine genaue Anzahl von Funktionalität liefern. |
|||
# Das Projekt geht von einer Unternehmung zu einer anderen über (oder: es wird outgesourced). |
|||
# Anforderungen werden nur ganz oberflächlich verstanden. |
|||
# Das Unternehmen ist recht starr und möchte nicht zu viel Flexibilität erlauben, auch bei Projekten die bezüglich Deadline und Funktionsumfang gar nicht starr sind. |
|||
Zu den Nutzern XPs zählten im Juli 2006 sowohl Unternehmen, die kommerziell Software herstellen und vertreiben, als auch Unternehmen, deren eigentliches Geschäft nicht die Erstellung von Software ist: ''Dresdner Kleinwort Wasserstein'', ''[[Encyclopaedia Britannica]]'', ''Fidelity'', ''Progressive'', ''Capital One'', ''Royal & Sunalliance'', ''Channel One'', ''Daedalos International'', ''Gemplus'', ''it-agile'', ''Qwest'' und ''O&O Services''.<ref name="C2COMPDOINGXP">C2: ''[http://www.c2.com/cgi/wiki?CompaniesDoingXp Companies Doing Xp]'' (englisch), 23. Juli 2006.</ref><ref name="OMCOMPDOINGXP">Object Mentor, Inc.: ''{{Webarchiv | url=http://www.objectmentor.com/ourCustomers/index | wayback=20060423092645 | text=Companies using XP, Customers}}'' (englisch), 23. Juli 2006.</ref> |
|||
Den Punkten ist gemeinsam, dass sie eine unverhältnismäßig große Unsicherheit beinhalten und/oder eine Ungenauigkeit der Aufwandsschätzungen sehr große Konsequenzen hätte. In einer solchen Umgebung empfiehlt es sich bei der Nutzung von XP sogenannte ''Feature Buffers'' und/oder ''Schedule Buffers'' einzuplanen, also Puffer im Funktionsumfang respektive beim Fertigstellungstermin. Implizite Funktionspuffer in einer Größenordnung von 30 % werden beispielsweise auch von [[Dynamic Systems Development Method]] (DSDM), einer weiteren agilen Entwicklungsmethode, angelegt. |
|||
Viele Unternehmen berichten öffentlich von ihren Erfahrungen mit XP. Sie schildern, wie sie XP im Detail eingesetzt haben, welche Schwierigkeiten dabei auftraten und wie der Erfolg einzuschätzen war. ''[[NortonLifeLock|Symantec]]'' hat seine Änderung des Vorgehensmodells hin zu XP publiziert.<ref name="SYMANTEC">Dr. Dobb’s: ''[http://www.ddj.com/dept/architect/184414801 Going to Extremes]'' (englisch), 2. Januar 2002.</ref> ''Sabre Airline Solutions'' hat mit XP sowohl die Fehler in ihrer Software als auch die Entwicklungszeit reduziert:<ref name="SABRE">Computerworld: ''{{Webarchiv | url=http://www.computerworld.com/developmenttopics/development/story/0,10801,91646,00.html | wayback=20090313033625 | text=Sabre takes extreme measures}}'' (englisch), 29. März 2004.</ref> |
|||
Ein weiterer häufiger Kritikpunkt ist, dass XP für [[Festpreis]]projekte nicht geeignet sei. Ansätze XP mit Festpreisprojekten zu vereinen sind: Versicherungsprämien auf die Schätzung, User Stories (bzw. die Story Cards) werden zum Vertragsgegenstand, [[Prognose]]n von [[Risiko|Risiken]] auf [[Produktivität]] und Restaufwände oder besondere Preismodelle wie ''Aufwandspreis mit Obergrenze'', ''Phasenfestpreis'' oder ''Anforderungseinheitspreis''. Dem Kunden sollte es davon unabhängig wichtiger sein ein lauffähiges Produkt zu haben welches voll seinen Wünschen entspricht. Der ganze Entwicklungsprozess muss durch ständige Kommunikation begleitet werden. |
|||
{{Zitat |
|||
Auch einzelne Praktiken stehen in der Kritik. So ist es teilweise schwer zu vermitteln, dass Pair-Programming laut XP tatsächlich eine Produktivitätssteigerung und besseres Design nach sich zieht. Für viele Personen sind zwei Personen an einem Rechner, wobei einer "nur zuguckt", nicht [[Effizienz|effizient]], und dafür sei "keine Zeit da". Immer das einfachste Design, die einfachste Lösung zu realisieren kann kontraproduktiv sein, müssen in späteren Versionen der Software Änderungen oder Erweiterungen gemacht werden, die bereits zu Beginn zu antizipieren wären. So ist eine [[generisch]]e Lösung laut XP nicht anzustreben. |
|||
|Sprache=en |
|||
|Text=It was XP […] that produced the dramatic quality improvements […] You have the weaker people paired with the stronger people, and business knowledge and coding knowledge are transferred very quickly. |
|||
|Übersetzung=Es war XP [...], das die dramatischen Qualitätsverbesserungen hervorbrachte [...] Sie haben die schwächeren mit den stärkeren Menschen verbunden, und Geschäftswissen und Programmierkenntnisse werden sehr schnell übertragen. |
|||
|Autor=Gary Anthes |
|||
|ref=<ref name="SABRE" /> |
|||
}} |
|||
== Kritik == |
|||
== Weiterführende Informationen == |
|||
{{Belege fehlen}} |
|||
=== |
=== Das Alles-oder-Nichts-Prinzip === |
||
Gemäß einigen Protagonisten des XP-Ansatzes wirken die einzelnen Methoden so eng zusammen, dass diese ohne Ausnahme eingesetzt werden sollen. Bereits der Verzicht auf einzelne Methoden soll die Wirksamkeit des Gesamtansatzes massiv einschränken. Da jedoch der Einsatz der Methoden oftmals auf zahlreichen Voraussetzungen basiert (siehe z. B. die Abschnitte [[#Der ideale Kunde|Der ideale Kunde]] und [[#Der ideale Programmierer|Der ideale Programmierer]]), ist es wahrscheinlich, dass in konkreten Projekten einzelne Methoden eben gerade nicht angewandt werden können. Das liefert dann auch auf einfache Weise eine Erklärung für das Scheitern von XP-Projekten: Meist dürfte sich eine vernachlässigte Methode finden lassen, so dass das Scheitern nicht auf XP als Gesamtansatz, sondern auf die Vernachlässigung dieser Methode zurückgeführt werden kann. Mittlerweile ist es umstritten, ob tatsächlich alle Methoden angewendet werden müssen, um durch XP die Wahrscheinlichkeit auf einen erfolgreichen Projektverlauf zu erhöhen. |
|||
* [http://www.projectcards.com/ ProjectCards] (proprietär) |
|||
* [http://www.versionone.net/ VersionOne Agile Lifecycle Management] ([[Proprietäre Software|proprietär]]) |
|||
* [http://www.xplanner.org/ XPlanner] ([[Open Source]]) |
|||
=== |
=== Bewegliche Anforderungen === |
||
Ein Hauptgrund für die Spezifikation von Anforderungen besteht bei klassischen Vorgehensmodellen in der Schaffung einer verlässlichen Basis für die Entwicklungsarbeit, so dass später notwendige Änderungen an der Realisierung möglichst gering bleiben. Die implizite Annahme dieser Haltung ist, dass Änderungen umso teurer werden, je später sie durchgeführt werden müssen. Obwohl sich diese Annahme in vielen Projekten bestätigt hat, geht XP gewissermaßen davon aus, dass Änderungen grundsätzlich „billig“ sind, wenn man sie kontinuierlich durchführt. Auch verneint XP implizit die Annahme, dass spätere Änderungen teurer werden, und begründet dies damit, dass die Änderungen dann nicht – wie in anderen Ansätzen – in mehreren Artefakten zugleich (Spezifikation, Dokumentation, Quellcode) umgesetzt werden müssen. |
|||
* [[Agile Softwareentwicklung]] |
|||
* [[Crystal Family|Crystal]] – Agiles Vorgehensmodell |
|||
* [[RUP]] – Vorgehensmodell |
|||
* [[Spiralmodell]] – Vorgehensmodell |
|||
* [[V-Modell]] – Vorgehensmodell |
|||
Die diesbezüglichen Annahmen von XP treffen sicher dann zu, wenn die Anforderungen ''unvermeidlich'' Änderungen unterworfen sein werden. In diesem Fall kann eine Spezifikation der Anforderungen unter Umständen größeren Aufwand nach sich ziehen als das Auslassen der Spezifikation – schon allein deswegen, weil die Spezifikation immer mitgeändert werden muss. Es ist jedoch unklar, warum es schädlich sein sollte, Anforderungen zumindest dann zu spezifizieren, wenn sie mit einiger Sicherheit bis zum Projektende Bestand haben werden. Durch den Verzicht auf eine Spezifikation läuft man Gefahr, Anforderungen zu übersehen oder hinsichtlich ihrer Bedeutung falsch einzuschätzen. Auch ist denkbar, dass der Kunde im Projektverlauf seine Anforderungen bewusst ändert, jedoch gegenüber dem Entwicklungsteam bekundet, seine Auffassung sei bislang nur falsch verstanden worden. Hinsichtlich der Einschätzung, dass spätere Änderungen nicht teurer sind als frühe, ist einzuwenden, dass späte Änderungen dann sehr teuer sein können, wenn sie das Design der Anwendung in grundlegender Weise betreffen. So ist die Änderung der Architektur einer Anwendung nicht ohne erheblichen Aufwand durchzuführen, ja sie kann ggf. teurer sein als eine Neuimplementierung. Es ist nicht ersichtlich und erscheint daher als eine Glaubensfrage, ob XP durch den Einsatz seiner Methoden derartige Situationen verhindern kann. |
|||
== Referenzen == |
|||
=== |
=== Der ideale Kunde === |
||
Der Einsatz von XP verlangt einen experimentierfreudigen Kunden, der nicht nur auf eine Reihe von üblichen Vorgehensweisen verzichten, sondern zudem selbst erhebliche Ressourcen aufwenden muss. Zu den Aspekten, auf die ein Kunde ungern verzichtet, gehören: |
|||
* Scott W. Ambler, Ronald E. Jeffries: ''Agile Modeling: Effective Practices for eXtreme Programming and the Unified Process'', Wiley, John & Sons, ISBN 0-471-20282-7 |
|||
; Dokumentation: Software kann in komplexen [[Systemlandschaft]]en eingeführt werden, so dass unterschiedlichste Beteiligte (z. B. Schnittstellenverantwortliche, Mitarbeiter von externen Providern usw.) Kenntnis von technischen Details erlangen müssen. In solchen Umgebungen verbieten meist schon die Firmenrichtlinien den Verzicht auf eine ausführliche Dokumentation. Aber selbst wenn dies nicht der Fall ist, bleibt zu klären, wie die Kenntnisse über technische Details an die Betroffenen vermittelt werden sollen, wenn keine Dokumentation existiert, und mehr noch, wenn davon ausgegangen werden muss, dass künftige Änderungen die relevanten technischen Einzelheiten betreffen. |
|||
* Kent Beck: ''Extreme Programming – das [[Manifest]]. Die revolutionäre Methode für Softwareentwicklung in kleinen Teams'', Addison-Wesley, 2000, ISBN 3-8273-1709-6 |
|||
; Spezifikation: Insbesondere beim Abschluss von Werkverträgen stellt sich für den Kunden die Frage, worin präzise eigentlich das Gewerk besteht, das durch den vereinbarten Preis erworben wird. Des Weiteren können firmenweite Richtlinien die Erstellung einer Spezifikation verlangen. |
|||
* Alistair Cockburn: ''Agile Softwareentwicklung'', mitp, ISBN 3-8266-1346-5 |
|||
; Termine: Da der projektleitende Vertreter des Kunden oftmals selbst den Projektfortschritt berichten muss, stellt die Fertigstellung bestimmter Funktionen zu festgelegten Terminen, somit also die Aufstellung eines Projektplans, oftmals einen unverzichtbaren Bestandteil der gemeinsamen Vorgehensweise dar. |
|||
* [[Martin Fowler]]: ''Refactoring'', Addison-Wesley, ISBN 3-8273-1630-8 |
|||
Über diese Punkte hinaus stellt das „Kunde vor Ort“-Prinzip eine Anforderung dar, die in der Realität nur äußerst selten umsetzbar ist. Um seine Aufgabe erfüllen zu können, muss der Mitarbeiter offensichtlich über einen erheblichen Wissensumfang verfügen. Ist dies aber der Fall, so ist der Mitarbeiter sehr wahrscheinlich auch in seinem eigenen Unternehmen nicht für mehrere Monate entbehrlich. Nicht selten werden IT-Projekte zudem gerade deshalb an externe Dienstleister vergeben, um den eigenen Ressourcenaufwand zu beschränken. Das Kunde-vor-Ort-Prinzip stellt somit eine der am schwierigsten erfüllbaren Anforderungen des Extreme Programming dar. |
|||
* Ronald E. Jeffries: ''Extreme Programming Adventures in C#'', Microsoft Press, 2004, ISBN 0-735-61949-2 |
|||
* Ronald E. Jeffries et al.: ''Extreme Programming Installed'', Addison-Wesley Professional, 2000, ISBN 0-201-70842-6 |
|||
* Stefan Richter: ''Feature-based Programming'', Addison-Wesley, ISBN 3-8273-2077-1 |
|||
=== |
=== Der ideale Programmierer === |
||
XP stellt zahlreiche Anforderungen an die beteiligten Programmierer. |
|||
* [http://www.agilealliance.org Agile Alliance] (englisch) |
|||
* Die Programmierer müssen über sehr gute Fähigkeiten verfügen, da der auf häufigen Änderungen basierende Ansatz unter Verwendung von Refactorings nicht ohne umfangreiche Programmiererfahrung und ohne den Einsatz von dafür geeigneten Werkzeugen realisiert werden kann. |
|||
* [http://www.agilemanifesto.org/ Agiles Manifest] (englisch) |
|||
* Programmierer weisen oftmals ein recht ausgeprägtes Ego auf, das sich in großer Überzeugung von „richtigen Lösungen“ und einem gewissen Besitzdenken hinsichtlich des geschriebenen Codes äußert. Nicht alle Programmierer können damit umgehen, dass – gemäß XP – jeder den Code aller anderen modifizieren darf. |
|||
* [http://www.extremeprogramming.org Extreme Programming: A gentle introduction.] (englisch) |
|||
* XP weist eine Reihe von Merkmalen auf, die hohe Disziplin erfordern (wie z. B. der Test-first-Ansatz, das permanente Durchführen von Refactorings, Programmieren in Paaren usw.), und einige andere, die eine gewisse Disziplinlosigkeit fördern (z. B. das Auslassen von Spezifikation und Dokumentation). Es besteht die Gefahr, dass die letzteren Ansätze gegenüber den Ersteren betont werden. Die Einhaltung der Ansätze mit hoher Disziplin erfordert fähige Beteiligte und eine funktionierende Selbstregulierung des Teams. Da aber unter Umständen kein Projektverantwortlicher benannt wurde, fragt sich, wer letztlich für die konsequente Einhaltung aller Aspekte sorgt. |
|||
* [http://www.chaosradio.de/cre028.html Podcast zum Thema Extreme Programming] vom [[Chaosradio]] |
|||
Die Anforderungen zeigen, dass XP nicht auf beliebige Teams angewandt werden kann. |
|||
* [http://www.xprogramming.com XP (Ron Jeffries)] (englisch) |
|||
* [http://www.c2.com/cgi/wiki?ExtremeProgramming XP (Ward Cunningham)] (englisch) |
|||
* [http://www.xp-diary.de XP-Tagebuch], ein Tagebuch von Entwicklern, die Extreme Programming betreiben. |
|||
* [http://www.martinfowler.com/articles/newMethodology.html XP-The New Methodology (Martin Fowler)] (englisch) |
|||
=== Beschränkte Team- und damit Projektgröße === |
|||
=== Quellen === |
|||
Mehrere XP-Methoden erfordern einen hohen Grad an gegenseitiger Informiertheit und somit ein hohes Maß an Kommunikation zwischen den Beteiligten. So bedingt das kontinuierliche Refactoring unter Umständen Änderungen gemeinsam genutzter Komponenten, über die möglichst das gesamte Team unterrichtet sein muss. Das Fehlen eines Projektmanagers erfordert gemeinsame Absprachen zur Arbeitsteilung. Da zudem eine präzise Spezifikation und Dokumentation fehlt, müssen alle Informationen zur Umsetzung in den Köpfen der Beteiligten verfügbar sein. Mit der Größe des Teams steigt jedoch der Kommunikationsaufwand quadratisch an, so dass XP-Projekten eine natürliche Grenze hinsichtlich der Teamgröße gesetzt ist. Die maximale Größe wird gemeinhin bei zehn Teammitgliedern angesetzt. |
|||
<references /> |
|||
=== Fehlende Eignung für Festpreisprojekte === |
|||
[[Kategorie:Projektmanagement]] |
|||
Ein weiterer häufiger Kritikpunkt ist, dass XP für [[Festpreis]]projekte nicht geeignet sei. Da der Kunde einen festen Preis zahlt, muss der Auftragnehmer in irgendeiner Form sicherstellen, dass er für diesen Preis auch nur eine festgelegte Leistung erbringen muss. Die Leistungserbringung erfolgt so lange, bis der Kunde zufrieden ist, kann in immer neuen Kundenanforderungen münden, so dass die Aufwände für die Realisierung nicht abzusehen sind. Die Festlegung der Festleistung als Inhalt des Werkvertrages entspräche jedoch einer Spezifikation und ist somit in XP verpönt. Es gibt einige Ansätze, XP dennoch mit Festpreisprojekten kompatibel zu machen: |
|||
[[Kategorie:Vorgehensmodell (Software)]] |
|||
* Versicherungsprämien auf die Schätzung |
|||
* User-Storys (bzw. die Story-Cards) werden zum Vertragsgegenstand |
|||
* besondere Preismodelle wie ''Aufwandspreis mit Obergrenze'', ''Phasenfestpreis'' oder ''Anforderungseinheitspreis''. |
|||
Die Wirksamkeit dieser Ansätze ist jedoch unklar. User-Storys können zu unpräzise sein, um das Gewerk gegen unerwartete technische Anforderungen abzusichern. Die angesprochenen Preismodelle entsprechen nur noch bedingt einem Festpreis und damit Werkvertrag, so dass fraglich ist, ob ein Kunde mit der Vorgabe eines Festpreises darauf eingehen würde. Selbiges gilt auch für Versicherungsprämien. |
|||
=== Feste Fertigstellungstermine === |
|||
[[ca:Programació Extrema]] |
|||
Die iterative Vorgehensweise von XP und der fehlende Projektplan legen bereits nahe, dass die Fertigstellung eines fachlich gewünschten Funktionsumfangs zu einem gesetzten Termin nicht ohne weiteres garantiert werden kann. Zwar wird zu dem gesetzten Termin ''etwas'' fertig sein (da der Fokus jeder Iteration auf einer ausführbaren, ggf. sogar produktionsfähigen Software liegt), welche fachlichen Aspekte dies jedoch tatsächlich sind, kann nicht vorherbestimmt werden – umso weniger als Überstunden verpönt sind und das Ausmaß nötiger Refactorings auf Grund beweglicher Anforderungen nur schwer abgeschätzt werden kann. |
|||
[[cs:Extrémní programování]] |
|||
[[en:Extreme Programming]] |
|||
[[es:Programación Extrema]] |
|||
[[fr:Extreme programming]] |
|||
[[he:Extreme Programming]] |
|||
[[it:Extreme Programming]] |
|||
[[ja:エクストリーム・プログラミング]] |
|||
[[lt:Ribinis programavimas]] |
|||
[[nl:Extreme Programming]] |
|||
[[no:Extreme Programming]] |
|||
[[pl:Programowanie ekstremalne]] |
|||
[[pt:Programação extrema]] |
|||
[[ru:Экстремальное программирование]] |
|||
[[sv:Extrem programmering]] |
|||
[[th:Extreme programming]] |
|||
[[zh:极限编程]] |
|||
[[zh-min-nan:XP]] |
|||
=== Einsatz in verteilten Umgebungen === |
|||
{{Lesenswert Kandidat}} |
|||
XP gilt in verteilten Umgebungen als schwerer einsetzbar als herkömmliche Modelle. Der direkte Kontakt der Entwickler untereinander und zum Kunden ist problematisch, falls verschiedene Kunden existieren oder die Beteiligten räumlich getrennt arbeiten, so zum Beispiel bei teilweise ausgelagerten Entwicklungen ([[Outsourcing]]). |
|||
=== Kritik an einzelnen Praktiken === |
|||
Die stets erneute Erstellung von Testfällen und die automatisierte, permanente Ausführung der Tests kann in komplexen oder [[Nebenläufigkeit|nebenläufigen]] Anwendungen und [[Verteiltes System|verteilten Systemen]] aufwändig sein. Wenn sich keine Rollen ausbilden, muss jeder alles wissen, statt einzelne Schwerpunkte im Team zu setzen (klassisches Beispiel: GUI-Entwicklung und Datenbank-Entwicklung), was die Gesamtleistung des Teams vermindern kann. |
|||
=== Personalpolitik === |
|||
Da das Team im Vordergrund steht, dürfen einzelne Entwickler nicht nach dem Umfang ihrer entwickelten Funktionalität honoriert werden. Insbesondere der Honorarvertrag ist kein geeignetes Vergütungsmodell bei Anwendung des Vorgehensmodells der XP. |
|||
== Siehe auch == |
|||
* [[Crystal Family|Crystal]], agiles Vorgehensmodell |
|||
* [[Scrum]], agiles Vorgehensmodell, das gut mit XP harmoniert<ref name="Scrum and XP">Henrik Kniberg: [http://www.infoq.com/minibooks/scrum-xp-from-the-trenches Scrum and XP from the Trenches] (PDF, englisch), 27. Juni 2007.</ref> |
|||
== Literatur == |
|||
* [[Kent Beck]]: ''Extreme Programming Explained, Embrace Change.'' Addison-Wesley, 1999, ISBN 0-201-61641-6 (2. Auflage, 2004, ISBN 0-321-27865-8). |
|||
* Kent Beck: ''Extreme Programming, Das Manifest.'' Addison-Wesley, 2000, ISBN 3-8273-1709-6. (deutsche Übersetzung) |
|||
* The XP Series: |
|||
** Kent Beck, [[Martin Fowler]]: ''Planning Extreme Programming.'' Addison-Wesley, 2000, ISBN 0-201-71091-9. |
|||
** [[Ron Jeffries]] et al.: ''Extreme Programming Installed.'' Addison-Wesley, 2000, ISBN 0-201-70842-6. |
|||
** Giancarlo Succi, Michele Marchesi: ''Extreme Programming Examined.'' Addison-Wesley, 2001, ISBN 0-201-71040-4. |
|||
** James Newkirk, [[Robert C. Martin]]: ''Extreme Programming in Practice.'' Addison-Wesley, 2001, ISBN 0-201-70937-6. |
|||
** William C. Wake: ''Extreme Programming Explored.'' Addison-Wesley, 2001, ISBN 0-201-73397-8. |
|||
** Ken Auer, Roy Miller: ''Extreme Programming Applied.'' Addison-Wesley, 2001, ISBN 0-201-61640-8. |
|||
** Pete McBreen: ''Questioning Extreme Programming.'' Addison-Wesley, 2002, ISBN 0-201-61640-8. |
|||
** Giancarlo Succi et al.: ''Extreme Programming Perspectives.'' Addison-Wesley, 2002, ISBN 0-201-77005-9. |
|||
** Doug Wallace et al.: ''Extreme Programming for Web Projects.'' Addison-Wesley, 2002, ISBN 0-201-79427-6. |
|||
** Lisa Crispin, Tip House: ''Testing Extreme Programming.'' Addison-Wesley, 2002, ISBN 0-321-11355-1. |
|||
* Scott W. Ambler: ''Agile Modeling: Effective Practices for eXtreme Programming and the Unified Process.'' Wiley, John & Sons, 2002, ISBN 0-471-20282-7. |
|||
* Ron Jeffries: ''Extreme Programming Adventures in C#.'' Microsoft Press, 2004, ISBN 0-7356-1949-2. |
|||
* Henning Wolf et al.: ''eXtreme Programming, Eine Einführung mit Empfehlungen und Erfahrungen aus der Praxis.'' dpunkt, 2. Auflage, 2005, ISBN 3-89864-339-5. |
|||
== Weblinks == |
|||
Deutsch |
|||
* [http://chaosradio.ccc.de/cre028.html Podcast zum Thema Extreme Programming] vom [[Chaosradio|Chaosradio Express]] |
|||
* [http://www.zeit.de/2004/01/T-Extremprogrammierer?page=all Artikel] aus [[Die Zeit]] |
|||
* {{Webarchiv | url=http://www4.in.tum.de/publ/papers/Rum01.pdf | wayback=20170808203625 | text=Extreme Programming – Back to Basics?}} (PDF, 110 KiB) |
|||
* [http://www.frankwestphal.de/ExtremeProgramming.html Was ist Extreme Programming?] – von Frank Westphal |
|||
* {{Webarchiv | url=http://www.little-idiot.de/his/t1.htm | wayback=20130318232214 | text=OpenSource Entwicklung und ihre Dynamiken}} (mit Kapiteln über Agile Methoden und XP) |
|||
Englisch |
|||
* [http://www.agilealliance.org/ Agile Alliance] |
|||
* [http://www.extremeprogramming.org/ Extreme Programming: A gentle introduction.] |
|||
* [http://www.xprogramming.com/ XP] (Ron Jeffries) |
|||
* [http://www.c2.com/cgi/wiki?ExtremeProgramming XP] (Ward Cunningham) |
|||
* [http://www.martinfowler.com/articles/newMethodology.html XP-The New Methodology] (Martin Fowler) |
|||
Fachkonferenzen zum Thema |
|||
* [http://www.xpdays.de/ XP Days Deutschland], die jährliche XP-Konferenz in Deutschland |
|||
== Einzelnachweise == |
|||
<references /> |
|||
[[Kategorie:Vorgehensmodell (Software)]] |
|||
[[Kategorie:Agile Softwareentwicklung]] |
|||
[[Kategorie:Englische Phrase]] |
Aktuelle Version vom 16. April 2025, 05:15 Uhr
Extreme Programming (XP, auch Extremprogrammierung) ist eine Methode, die das Lösen einer Programmieraufgabe in den Vordergrund der Softwareentwicklung stellt und dabei einem formalisierten Vorgehen geringere Bedeutung zumisst. Diese Vorgehensweise definiert ein Vorgehensmodell der Softwaretechnik, das sich den Anforderungen des Kunden in kleinen Schritten annähert.
Grundlagen
[Bearbeiten | Quelltext bearbeiten]
XP ist ein durch fortlaufende Iterationen und den Einsatz mehrerer Einzelmethoden strukturierendes Vorgehensmodell. XP entstand durch die Synthese verschiedener Disziplinen der Softwareentwicklung und basiert auf in der Praxis bewährten Methoden, auch Best practices genannt.
XP folgt einem strukturierten Vorgehen und stellt die Teamarbeit, Offenheit und stetige Kommunikation zwischen allen Beteiligten in den Vordergrund. Kommunikation ist dabei eine Grundsäule.
Die Methode geht davon aus, dass der Kunde die Anforderungen an die zu erstellende Software zu Projektbeginn noch nicht komplett kennt und nicht hinreichend strukturieren kann, beziehungsweise dass ein mit der Realisierung betrautes Entwicklerteam nicht über alle Informationen verfügt, um eine verlässliche Aufwandsschätzung über die notwendige Dauer bis zum Abschluss zu geben. Im Laufe eines Projektes ändern sich nicht selten Prioritäten und Gewichte. Zu Beginn geforderte Funktionen der Software werden möglicherweise in einer anderen Form benötigt oder im Laufe der Zeit sogar komplett hinfällig.
Bei einer konsequenten Ausrichtung an XP soll die zu erstellende Software schneller bereitgestellt werden sowie eine höhere Softwarequalität und Zufriedenheit des Kunden als mit traditionellen Ansätzen zu erreichen sein. Der Kunde soll ein einsatzbereites Produkt erhalten, an dessen Herstellung er aktiv teilgenommen hat.
Neue Funktionalitäten werden permanent entwickelt, integriert und getestet. Für die zu entwickelnden Funktionalitäten werden jeweils die Schritte Risikoanalyse, Nutzenanalyse, die Bereitstellung einer ersten ausführbaren Version (Prototyping) und ein Akzeptanztest durchgeführt.
Nutzen
[Bearbeiten | Quelltext bearbeiten]Nach Vertretern dieses Vorgehensmodells ist XP Risikomanagement. Es bejaht das Risiko, geht aktiv darauf ein und versucht, es zu minimieren. Dieser implizite Umgang mit dem Faktor Risiko steht im Gegensatz zu eher expliziten Vorgehensweisen, wie der Aufstellung einer Risikoliste.[1] Softwareentwicklungsprojekte sind unterschiedlichen Gefahren ausgesetzt, für die Extreme Programming Lösungen anbieten soll.
Kundensicht
[Bearbeiten | Quelltext bearbeiten]Dem Kunden bietet XP, gerade durch seine kurzen Entwicklungszyklen, jederzeit die Möglichkeit, steuernd auf das Projekt einzuwirken. Dadurch soll erreicht werden, dass sich das Produkt aktuellen Anforderungen anpasst, statt überholten Anforderungen aus einer längst vergangenen Analysephase zu genügen und damit bereits bei Einführung veraltet zu sein. Zudem kann der Kunde bereits nach kurzer Zeit ein unvollständiges aber zumindest funktionstüchtiges Produkt einsetzen. Der Kunde ist im besten Fall jederzeit auf demselben aktuellen Informationsstand bezüglich des Projektes wie das Entwicklerteam.
Ein häufiger Ansatz traditioneller Softwareerstellung ist: Vielleicht brauchen wir irgendwann einmal diese oder jene Programmfunktionen, auch Feature genannt. XP stellt dem gegenüber: Lass es! (vgl. auch YAGNI – „You Ain’t Gonna Need It“). Vor jedem der kurzen Entwicklungsschritte wird zusammen mit dem Kunden genau festgelegt, was wirklich sinnvoll ist, entwickelt zu werden. Die sogenannte „Featuritis“ soll damit vermieden werden.
Eines der größten Risiken der Softwareentwicklung ist, dass dem Kunden ein Produkt bereitgestellt wird, das er in dieser Form nicht möchte. XP möchte dem durch ständige, aktive Einbeziehung des Kunden in den Entwicklungsprozess vorbeugen. Er kann sich Zwischenversionen ansehen und direkt Änderungswünsche äußern.
Um diese Vorteile nutzen zu können, muss der Kunde im Gegenzug auch eine Reihe von Einschränkungen und Forderungen hinnehmen. So fordert XP von ihm, dass er während der gesamten Entwicklungszeit mit dem Entwicklungsteam zusammenarbeitet. Des Weiteren muss er auf eine formale Festlegung der Projektinhalte (Spezifikation) verzichten (siehe auch Der ideale Kunde).
Programmierersicht
[Bearbeiten | Quelltext bearbeiten]Es existiert keine strikte Rollentrennung, da die Aufgabenverteilung abhängig von Situation und Fähigkeiten geschieht. Der allgemeine Wissensaustausch und die stetige Kommunikation beugen einem Wissensmonopol vor. Dies soll den Einzelnen entlasten, da ansonsten der Druck auf einer Person lastet, wenn diese sich als Einzige in einem Modul auskennt.
Um Unbenutzbarkeit aufgrund von Programmfehlern sowie fehlerhafte Integration einzelner Komponenten zu vermeiden, werden bei XP viele und möglichst frühe Tests angestrebt. Jede Komponente besitzt einen Modultest (Unit-Test); in Java beispielsweise mit JUnit. Bei Feststellung eines Fehlers in einer Komponente während der Entwicklung wird ein Test entwickelt, der diesen lokalisiert. Eine tägliche Einbeziehung der einzelnen am Projekt beteiligten Entwickler mit automatischer Ausführung der Tests (Regressionstest) soll zu einer erheblichen Qualitätssteigerung führen. Fehler sollen so früher gefunden werden, denn je später ein Fehler gefunden wird, desto teurer ist meist dessen Korrektur. Außerdem soll die testgetriebene Entwicklung zu einem leichter wartbaren Programmcode mit besserem Design führen.
Da die meisten Einzelmethoden gerade auf den Alltag der Programmierer ausgerichtet sind, bedeutet XP zugleich auch ein hohes Maß an Herausforderung und ggf. Umstellung der Beteiligten. Auf diese Aspekte wird ausführlicher im Abschnitt Der ideale Programmierer eingegangen.
Projektsicht
[Bearbeiten | Quelltext bearbeiten]Dem Projekt bietet XP die Möglichkeit, Risiken zu minimieren. Unter richtiger Anwendung von XP soll der Kunde Software erhalten, deren Umfang ihn nicht überrascht. Das Team soll ferner gegen Ausfall (Krankheit, Unfall, Stellenwechsel) Einzelner nicht mehr so anfällig sein. Ein ehrlicher Umgang mit dem Kunden soll die Glaubwürdigkeit und Zufriedenheit steigern und die Angst minimieren, die unter Umständen zwischen Kunde („Haben die mich verstanden?“, „Was werden sie wohl liefern?“) und Entwicklung („Was will er eigentlich genau?“, „Ob er zufrieden sein wird mit dem, was wir liefern?“) vorherrscht.
Aufwandsabschätzungen werden verlässlicher, da sie im Team getroffen und ständig einer kritischen Überprüfung (Review) unterzogen werden. Teamgeist wird laut XP gefördert. Jedem im Team sollte klar sein, dass das Ziel nur als Einheit erreichbar ist. Sollte ein Projekt, zum Beispiel aus Kostengründen, vorzeitig eingestellt werden, besteht durch die regelmäßigen Iterationen dennoch ein zumeist einsatzfähiges Produkt.
In vielen Projekten gelingt es nicht, das Produkt in der gewünschten Zeit im gewünschten Umfang und mit den geplanten Ressourcen fertigzustellen. In XP soll nur das verwirklicht werden, was tatsächlich einen Nutzen für den Kunden hat. Durch ständigen Austausch mit dem Kunden sowie Prioritätsanalysen sollen die unbedingt zu erstellenden Funktionen identifiziert werden. Dabei sollte mit den Funktionen begonnen werden, die den größten Nutzen haben und das größte (technische) Risiko beinhalten.
Betriebswirtschaftliche Sicht
[Bearbeiten | Quelltext bearbeiten]Extreme Programming stellt aus wirtschaftswissenschaftlicher Sicht eine Form der Organisation dar, die direkt die Prozesse der Wertschöpfung beschreibt. In den Wirtschaftswissenschaften werden zur Bewertung von Extreme Programming auch Erkenntnisse anderer Sozialwissenschaften, insbesondere der Soziologie, genutzt.
Dem Risikomanagement dient diese Alternative vor allem zur Steuerung von Risiken. Wie bei vielen Prozessen der Wertschöpfung sind besonders in der Softwareentwicklung Risiken meist operative Risiken: Die Wertschöpfung ist ineffektiv, wenn die Kundenwünsche nicht getroffen und gesteckte Ziele somit verfehlt wurden. Die Wertschöpfung ist ineffizient, wenn zum Erreichen des Ergebnisses ein zu hoher Aufwand entstand. Risikoverminderung, und dadurch Effektivität und Effizienz, soll bei Extreme Programming durch die Art des Umgangs mit Fehlern, mit Mitarbeitern und mit Kunden erreicht werden:
- Kompensation von Krankheitsausfällen
- Kundennahe Entwicklung
- Weniger Fehler im Ergebnis
Ein möglichst genaues Erkennen von Risiken durch das Verfahren selbst soll über angepasste Aufwandsschätzungen eine Bewertung des zu akzeptierenden Risikos ermöglichen. Extreme Programming kann dagegen eine Risikoverlagerung erschweren. Aus der Sicht des Risikomanagements ist Extreme Programming also nur eine Möglichkeit, mit Risiken umzugehen, und zwar eine Möglichkeit, die Vor- und Nachteile besitzt.
Das Personalwesen in Unternehmen betrachtet Extreme Programming insbesondere im Hinblick auf seine Auswirkungen auf die Mitarbeiterzufriedenheit. Extreme Programming soll dabei bewusst oder unbewusst zum kooperativen Lernen beitragen. Für das Personalwesen ist dieses Verfahren also besonders aus Sicht der Personalentwicklung interessant. Durch höhere Mitarbeiterzufriedenheit und durch die Vermeidung von Überstunden soll die gesamte Produktivität erhöht werden. Die Praktik des Pair-Programming lässt allerdings – rein mathematisch betrachtet – Gegenteiliges vermuten. Die Vermeidung von Spezialistentum und individuellem Besitz von Wissen über Teile der Software dient der kollektiven Wissenskonstruktion und kann die Ersetzung von Entwicklern vereinfachen.
Die gesamte Betriebswirtschaftslehre ist in den letzten Jahren von der prozess- bzw. wertschöpfungsorientierten zur kunden- bzw. marktorientierten Unternehmensführung übergegangen. Auch wenn Extreme Programming die Wertschöpfung beschreibt, bietet es Möglichkeiten zu kundennaher Vorgehensweise. Über Extreme Programming soll – wie in anderen Branchen schon länger üblich – eine größere Einbindung des Kunden in den Wertschöpfungsprozess möglich sein. Wichtig wird dies umso mehr, wenn Software weniger als Faktorgut, sondern mehr als Vorprodukt erstellt und vertrieben wird.
Ebenfalls muss in Extreme Programming und dessen Aufwand aus Sicht des Informationsmanagements betrachtet werden, dass der Aufwand den unbedingt notwendigen Informationsaustausch festlegt, der ökonomisch bewertet wird. Genutzt werden dazu Erkenntnisse der Informations- und Kommunikationswissenschaft. Dabei kann insbesondere die Medienreichhaltigkeitstheorie eingesetzt werden: Weil die zu diskutierenden und kommunizierenden Sachverhalte in der Regel komplex sind, werden auch komplexe, reichhaltige Kommunikationsmedien gewählt: direkte, persönliche Gespräche. Kritisch zu hinterfragen ist hierbei die schwierige räumliche Verteilbarkeit der Entwicklungsprozesse sowie die Einbindung des Kunden, da unter Umständen eine räumliche Trennung zwischen Entwicklern und Kunden besteht.
Vorgehen
[Bearbeiten | Quelltext bearbeiten]Vereinzelt wird Extreme Programming als informelle (und damit unverbindliche) Methode bezeichnet. Das trifft jedoch weder den Ansatz noch das Ziel. Tatsächlich ist die Formalisierung der Methode des Extreme Programming bewusst flach und schlank gehalten. Hingegen muss ein Einvernehmen zwischen Kunden und Programmierern hinsichtlich der Verbindlichkeit der erstellten Unterlagen hergestellt werden, solange diese noch nicht durch neuere Fassungen ersetzt wurden. Weiter muss der Vorgang des Ersetzens einer Fassung einer Unterlage durch eine neuere Fassung dieser Unterlage soweit formalisiert sein, dass beide Parteien Kenntnis von dieser Ersetzung haben und diese Ersetzung annehmen.
Aufbauorganisation
[Bearbeiten | Quelltext bearbeiten]Neben dem Entwicklungsteam gibt es im Wesentlichen den Kunden und den Product-Owner. Innerhalb des Entwicklerteams soll es keine Rollentrennung geben. So wird nicht unterschieden, wer im Team welches Spezialgebiet hat, beziehungsweise welche besonderen Fähigkeiten er mitbringt. Jede Person im Team wird als Entwickler (Developer) bezeichnet. Ein Manager ist gewöhnlich eine Person mit Führungsbefugnis, also ein disziplinarischer Vorgesetzter. Dieser hat in XP weniger Wichtigkeit. Dagegen gibt es einen „Leiter“ des Teams, also jemand, der die Kommunikation mit Kunden oder untereinander koordiniert. Auch der Nutzer der zu erstellenden Software kann das Team durch das Projekt führen. Die Unterscheidung zwischen Manager und „Leiter“ ist für agile Vorgehensmodelle typisch. Der Product-Owner, der über die genaue Vorgehensweise entscheidet, trägt die Verantwortung. Product-Owner im Sinne von XP kann beispielsweise ein Vertreter des Produktmanagements, ein Kunde oder ein Nutzer des Produktes sein. Die Rollen sind je nach Projekt und Umgebung unterschiedlich, häufig auch in Personalunion, verteilt.
Rolle | Beispiel | Aufgaben |
---|---|---|
Produktbesitzer | Produktmanagement, Marketing, ein Benutzer, Kunde, Manager des Benutzers, Analyst, Sponsor | Hat Verantwortung, setzt Prioritäten, Entscheider für bestes ROI |
Kunde | Auftraggeber, kann auch der Produktbesitzer sein, kann, muss aber nicht der Benutzer sein | Entscheidet, was gemacht wird, gibt regelmäßig Rückmeldung, Auftraggeber |
Entwickler | Bestandteil des Teams, das ganze Entwicklungsteam besteht aus Entwicklern: Programmierer, Tester, DB-Experten, Architekt, Designer | Entwickelt das Produkt |
Projektmanager | Ist gewöhnlich der Produktbesitzer. Kann auch Entwickler aber nicht Manager des Teams sein | Führung des Teams |
Benutzer | Der Nutzer des zu erstellenden Produktes | Wird das zu erstellende Produkt nutzen |
Anforderungsmanagement
[Bearbeiten | Quelltext bearbeiten]Der Umgang mit den Anforderungen und deren Verwirklichung ist eine zentrale Komponente XPs. Durch eine Mischung verschiedener, in den folgenden Abschnitten dargestellter Maßnahmen soll die Qualität und Flexibilität der Software gesteigert werden, so dass sich der Zusammenhang zwischen dem Zeitpunkt der Anforderungsstellung und den damit entstehenden Kosten weitgehend linear darstellt.

Bei einem weitgehend linearen Verlauf einer ableitbaren Änderungskostenkurve wird auf eine vollständige Erhebung aller Anforderungen zu Beginn des Projektes verzichtet. Stattdessen werden die sich erst im Laufe der Umsetzung ergebenden Anforderungen berücksichtigt. Dieses Vorgehen resultiert aus den Beobachtungen, dass einerseits der Kunde zu Beginn des Projektes noch gar nicht genau weiß, was er möchte, andererseits sich diese Anforderungen im Laufe eines Projektes ändern. Darüber hinaus sind Fehler umso teurer, je später man sie findet. Im schlimmsten Fall erhält der Kunde nach einem langen Projekt etwas geliefert, was er in dieser Form gar nicht haben möchte. Ständiger Gedankenaustausch mit dem Kunden, Offenheit für Änderungen und stetige Integration wirken diesen Risiken entgegen. Anforderungen werden nicht selten zunächst als Prototypen bereitgestellt. Dabei handelt es sich um Versionen, die noch nicht die volle, endgültige Funktionalität besitzen.
Planung
[Bearbeiten | Quelltext bearbeiten]
Im Rahmen der Planung wird gewöhnlich folgende Unterscheidung vorgenommen: ein Release beinhaltet die Funktionen, die insgesamt und für sich geschlossen die Bereitstellung einer neuen Version des Produktes rechtfertigen. Um zu dem Release zu kommen, ist ein Release-Plan aufzustellen, der im Wesentlichen aus Iterationen besteht. Unter anderem abhängig von der geschätzten Entwicklungsdauer des Release werden die Iterationen in Anzahl und Dauer festgelegt. Iterationen dauern üblicherweise zwischen einer und vier Wochen. Der Zeitpunkt der Fertigstellung wird als Zeitintervall diskutiert, dessen Größe im Laufe des Release aufgrund gewonnener Erkenntnisse und des durchgeführten Fortschritts ständig abnimmt.

User-Storys
[Bearbeiten | Quelltext bearbeiten]Die innerhalb der Iterationen umzusetzenden einzelnen Neuerungen werden mit dem Kunden durch User-Storys beschrieben.
Das ganze Team ist bei der Erstellung beteiligt. Die abzuarbeitenden Anforderungen werden auf einzelnen Karten (Story Cards) geschrieben und für alle sichtbar platziert. Neben diesem Vorgehen ist es auch üblich Class Responsibility Collaboration Models auf CRC Cards zu verfassen. CRC Models nehmen sich dabei einen Akteur im System vor und beschreiben dessen Verantwortlichkeiten und Interaktionen mit anderen Akteuren.
Den User-Storys werden Prioritätswerte zugeordnet. Dazu muss das Team zusammen mit dem Kunden zunächst Klarheit gewinnen, welche User-Storys das höchste Risiko bezüglich Zeitplan, Kosten oder Funktionalität besitzen und welche User-Storys dem Produkt den höchsten, respektive den niedrigsten Mehrwert bieten, wobei ein Diagramm hilfreich sein kann. Das Release sollte mit den User-Storys begonnen werden, die das höchste Risiko und den höchsten Nutzen auf sich vereinen. Danach sind diejenige User-Storys zu verwirklichen, die geringes Risiko aber hohen Nutzen haben. Anschließend geht das Team die User-Storys an, die geringes Risiko und geringen Nutzen auf sich vereinen. Die Fertigstellung von User-Storys mit geringem Nutzen aber hohem Risiko ist zu vermeiden.

Neben einer Abschätzung nach Nutzen und Risiko ist für die Entscheidung, welche User-Storys in dem Release beziehungsweise in den ersten Iterationen umgesetzt werden sollen, noch eine Analyse der Kundenwünsche von Bedeutung. Dabei bedient sich ein XP-Projekt häufig des Kano-Modells. Dabei werden in einer systematischen Kundenbefragung Fragen in funktionaler Form und in dysfunktionaler Form gestellt. Es lässt sich anschließend bestimmen, welche User-Storys unbedingt fertiggestellt werden müssen (Must-haves), welche linearer Natur sind (je mehr, desto besser; siehe auch proportional.) und welche Exciters sind (Der Kunde rechnet nicht mit diesen Merkmalen, nutzt das Produkt auch ohne. Es lässt sich dadurch der Preis erhöhen.). Die so gewonnenen Erkenntnisse werden diskutiert.
XP zeichnet sich dadurch aus, dass die Betrachtung der Größe einer Einheit, wie Release oder Iteration, unabhängig von ihrer Dauer ist.
Aufwandsabschätzung
[Bearbeiten | Quelltext bearbeiten]Bei der Release-Planung sind User-Storys noch recht grobkörnig. Beschäftigt sich ein Team mit einer User-Story genauer, so wird sie, zusammen mit dem Kunden, detaillierter beschrieben. User-Storys werden gewöhnlich in Story-Points abgeschätzt, wobei auch eine Abschätzung in idealen Tagen möglich ist. Story-Points sind relative Aufwandsabschätzungen, also der Entwicklungsaufwand für eine Story im Vergleich zu anderen. Dabei kann es sein, dass erste Abschätzungen im Verlaufe des Projektes geändert werden. Es wird vom ganzen Team, in mehreren Runden, in einem Planning-Game eine Punkteanzahl für die User-Storys geschätzt.
Nachdem User-Storys abgeschätzt, priorisiert und einer Iteration zugewiesen wurden, beginnt das Team mit der Umsetzung. User-Storys werden zu Beginn der Iteration in feinkörnige, technische Arbeitspakete (Tasks) zerlegt, die gewöhnlich einen Umfang von Stunden besitzen. Das Team führt diese Zerlegung durch und schätzt die Dauer eines jeden Tasks. Es wird allerdings noch nicht festgelegt wer den Task zugeteilt bekommt. Zu Beginn der Arbeiten nehmen sich die Entwickler jeweils ein Arbeitspaket vor, gewöhnlich nach Fähigkeiten. Dieser Vorgang wird im Team kurz diskutiert. Nach der anfänglichen Zuweisung der Arbeitspakete wird ein weiterer Task begonnen, wenn ein Teammitglied Zeit dafür findet, also seinen vorangegangenen Task abgeschlossen hat. Die Implementierung einer User-Story, also der Funktionalität, ist erst abgeschlossen, wenn alle einzelnen Tasks dieser User-Story abgearbeitet und die Tests geschrieben und alle erfolgreich durchlaufen sind.
Der Demonstration dieser Vorgehensweise soll eine Tabelle mit Aufwandsabschätzungen in einer fiktiven Arztpraxis dienen. Jeder Arzt hat eine Software, die ihm hilft, seine Patienten und die Termine zu verwalten:
Story No. | Story | Abschätzung (Story Points) |
---|---|---|
1 | Als Arzt kann ich alle Patienten sehen, die ich am Tage habe. | 3 |
2 | Als Arzt kann ich über die Gesundheitsgeschichte meiner Patienten Auskunft geben. | 5 |
3 | Als Assistentin kann ich einem Patienten einen Termin geben. | 2 |
4 | Als Assistentin kann ich einem Patienten eine Verschreibung ausdrucken. | 1 |
Der Begriff Velocity (Geschwindigkeit) beschreibt den Durchsatz des Teams, also die Anzahl der innerhalb einer Iteration erreichten Story-Points. Die Bestimmung der Velocity hilft abzuschätzen, wie lange die Entwicklung der gewünschten Funktionalität für ein Release dauert, beziehungsweise wie viele Iterationen notwendig sind. Es ist normal, dass die Geschwindigkeit des Teams nicht immer die gleiche ist.
Entwicklung und Abschluss
[Bearbeiten | Quelltext bearbeiten]
Es gibt eine tägliche kurze Besprechung (Stand-up Meeting), bei der jeder Entwickler berichtet, was er am Vortag geleistet hat, wo es gegebenenfalls Probleme gab und was er heute leisten möchte. Ferner werden situationsabhängig Arbeitspaare gebildet (Pair-Programming). Im Laufe des Tages findet, während die Entwickler die Funktionalität und die Tests programmieren, weiterer stetiger Austausch (Pair-Negotiations) statt.
Kann eine User-Story in einer Iteration nicht abgeschlossen werden, zum Beispiel weil die Tests nicht erfolgreich waren oder sich die Abschätzung als zu knapp beziehungsweise der Umfang als zu groß herausgestellt hat, so wird sie gewöhnlich in mehrere kleinere aufgeteilt oder komplett in die nächste Iteration verschoben. Auch während einer Iteration kann sich, durch sich ändernde Prioritäten des Kunden oder durch neue Erkenntnisse, an der Zusammenstellung der Iteration etwas ändern. Ist die Iteration abgeschlossen, schauen sich Vertreter des Managements, der Kunde (Akzeptanztest) oder andere Personen, die an dem Produkt Interesse haben, das Produkt in der aktuellen Ausbaustufe an und geben Rückmeldungen. So ist es denkbar, dass der Kunde während des Akzeptanztests neue Prioritäten setzt oder weitere Ideen einbringt.
Technische Unterstützung muss differenziert betrachtet werden. Einerseits wird bewusst auf technische Hilfsmittel verzichtet, so etwa bei der Erstellung von User-Storys. Diese werden gewöhnlich manuell erstellt. Andererseits wird die Technik aber auch exzessiv genutzt, so etwa bei der automatisierten Integration und der automatisierten Durchführung von Tests. Darüber hinaus existieren Projektmanagement-Werkzeuge, die sich auf die speziellen Rahmenbedingungen und Anforderungen XPs konzentriert haben.
Abgrenzung von herkömmlichem Vorgehen
[Bearbeiten | Quelltext bearbeiten]Die zu entwickelnde Funktionalität wird kurz und formlos in User-Storys beschrieben. Das meiste Wissen über die Funktionalität ihrer Entwicklung befindet sich in den Köpfen der Beteiligten. User-Storys werden gewöhnlich nur relativ zueinander geschätzt. Zu Beginn einer Iteration wird deren Inhalt festgelegt. Anschließend kommt erst die Aufteilung der gewählten User-Storys in Tasks. Neuartig an dem XP-Ansatz ist ebenfalls, dass nicht nur einzelne Personen, sondern das ganze Team den jeweiligen Aufwand schätzt. Auch das Verfahren der Schätzung ist neu. Der Zeitpunkt, wann und wie die Tasks den einzelnen Entwicklern zugeteilt werden, ist ebenfalls ein Abgrenzungskriterium. Erst im Laufe der Iteration nehmen sich die einzelnen Entwickler, je nach ihrer Verfügbarkeit, eines Tasks an. Zu allen User-Storys gibt es zahlreiche Tests. Eine User-Story ist erst komplett abgeschlossen, wenn alle Tests erfolgreich abgelaufen sind. Der tägliche kurze Austausch ist für die agile Methodik üblich.
Bestandteile
[Bearbeiten | Quelltext bearbeiten]XP besteht aus Werten, Prinzipien und Praktiken. Obwohl es auch andere maßgebliche Quellen gibt (siehe Weblinks und Literatur), orientiert sich die Zusammenstellung der Werte, Prinzipien und Praktiken an Kent Beck,[2] dessen noch recht neue, evolutionäre Weiterentwicklungen XPs hier ebenfalls Berücksichtigung finden.[3] Es existiert keine eindeutige Definition von XP, wobei allerdings die Diskussionen und Ausführungen der drei Originalverfasser XP am signifikantesten prägen.
Werte
[Bearbeiten | Quelltext bearbeiten]XP definiert fünf zentrale Werte, abstrakte Elemente, die von zentraler Bedeutung sind: Kommunikation, Einfachheit, Rückmeldung, Mut und Respekt, wobei Respekt erst später dazukam. Ohne stetige Beachtung dieser zentralen Werte ist es laut XP nicht möglich, erfolgreich Software zu entwickeln.
Das Team kommuniziert stetig, um Informationen auszutauschen. Der Prozess selbst erfordert hohe Kommunikationsbereitschaft. Es gibt einen stetigen Austausch aller Beteiligten, also auch zwischen dem Entwicklungsteam und dem Kunden. Es kommen auch Personen zu Wort, die in einer gerade diskutierten technischen Aufgabenstellung keine Experten sind. So werden sie miteinbezogen, es gibt zusätzliche Rückmeldungen und jeder fühlt sich dem Team und dem Produkt verpflichtet. Stetige Kommunikation mit dem Kunden, Aufnahme seines Feedbacks und Erfüllung seiner Wünsche, also auch eines lauffähigen Produktes, das seinen Wünschen voll entspricht, ist wichtiger als Vertragsverhandlungen. Die Kommunikation zeichnet sich ferner durch einen respektvollen Umgang aus, sowohl im Team untereinander als auch mit dem Kunden. Unterschiedliche Meinungen werden akzeptiert.
Die Entwickler sollen mutig sein und die Kommunikation offen gestalten. Falls eine Anforderung nicht in einer Iteration umgesetzt werden kann, wird in offener und ehrlicher Art und Weise direkt darauf hingewiesen. Es muss eine Atmosphäre geschaffen werden, die herkömmliche Störungen (wie unnatürlichen Konkurrenzkampf innerhalb des Teams zu Lasten des Produktes) minimiert. Um die Offenheit und den Mut zu fördern und gruppendynamischen, psychologischen Schwierigkeiten entgegenzutreten, kann bewusst ein Doomsayer zur offenen, zeitnahen Aussprache von schlechten Nachrichten oder möglichen Schwierigkeiten oder auch ein Advocatus Diaboli eingesetzt werden.
Es soll die einfachste Lösung für eine Problemstellung umgesetzt werden. In jeder Iteration konzentriert sich das komplette Team genau auf die momentan umzusetzenden Anforderungen. Die Lösungen sind technisch immer möglichst einfach zu halten.
Prinzipien
[Bearbeiten | Quelltext bearbeiten]Es gibt 14 Prinzipien, die eine Brücke bilden zwischen den abstrakten Werten und den konkret anwendbaren Praktiken. Diese Prinzipien sollten immer Berücksichtigung finden. Sie sind Menschlichkeit, Wirtschaftlichkeit, Beidseitiger Vorteil, Selbstgleichheit, Verbesserungen, Vielfältigkeit, Reflexion, Lauf, Gelegenheiten wahrnehmen, Redundanzen vermeiden, Fehlschläge hinnehmen, Qualität, Kleine Schritte sowie Akzeptierte Verantwortung.
Software wird von Menschen entwickelt. Menschen bilden also den Faktor, dem laut XP besondere Aufmerksamkeit gilt. Durch Schaffung einer menschlichen Atmosphäre soll den Grundbedürfnissen der Entwickler (Sicherheit, Vollendung, Identifikation mit der Gruppe, Perspektive und Verständnis) entsprochen werden.
Die erstellte Software beziehungsweise eine einzelne Funktionalität muss einerseits wirtschaftlich sein und dennoch einen echten Wert bringen. Andererseits muss sie für beide Seiten von Vorteil sein und alle Beteiligten (Entwicklungsteam und Kunde) zufriedenstellen.
Die Wiederverwendung bestehender Lösungen, wozu beispielsweise die zahlreichen unterschiedlichen Tests gehören, die stetig automatisiert durchlaufen werden, ist wichtig. Es ist jedem klar, dass erste Lösungen meist nicht optimal sind. Aus Feedback und selbst gewonnenen, neuen Erkenntnissen wird die Lösung stetig verbessert. Immer bessere Lösungen zu erkennen, gelingt nur durch stetige Reflexion und ein kontinuierliches Hinterfragen der jeweiligen Vorgehensweisen im Team. Die Produktivität dieses Verfahrens steigt proportional zur Uneinheitlichkeit des aus Personen mit unterschiedlichen Fähigkeiten und Charakteren bestehenden Teams. Verschiedene Meinungen werden nicht nur geduldet, sondern sogar gefördert. Dazu muss ein Konfliktmanagement etabliert werden.
Die Lauffähigkeit der Software muss zu jedem Zeitpunkt garantiert sein. Obwohl kurze Iterationen mit permanentem Feedback dabei helfen, das Projekt in einem Lauf zu halten, müssen Fehlschläge dennoch miteinkalkuliert werden. Es ist durchaus üblich und wird akzeptiert, eine Umsetzung durchzuführen, die zunächst nicht optimal oder sogar fehlerhaft sein kann. Diese Schwierigkeiten müssen als Gelegenheit und Chance begriffen werden, das Produkt und das Team noch weiter reifen zu lassen. Ein offener, konstruktiver Umgang mit den Herausforderungen der Softwareentwicklung gelingt umso besser, je mehr alle Beteiligten bereit sind, ihre Verantwortung zu akzeptieren. Einem Entwickler eine Aktivität und Verantwortung nur disziplinarisch aufzutragen, reicht nicht aus, da er die Verantwortung aktiv annehmen und leben muss.
Ein weiterer wichtiger Punkt ist die hohe Qualität, die gemäß XP im Gegensatz zu anderen Faktoren wie Ressourcen, Funktionsumfang oder Endtermin nicht zur Diskussion steht. Diese Grundeinstellung unterscheidet sich von vielen anderen Methoden der Softwareerstellung, bei denen Software zu einem bestimmten Zeitpunkt und in einem definierten Funktionsumfang fertiggestellt werden soll, worunter fast immer die Softwarequalität leidet. Gerade die Qualität ist allerdings wichtig, um das Produkt einsatzfähig, fehlerfrei und erweiterbar zu halten. Software mit gutem Design und hoher Qualität ist mittelfristig kostengünstiger, erweiterbarer und weniger fehlerbehaftet als schnell erstellte, sogenannte Quick-and-dirty-Software.
Zu guter Qualität gehört auch die Vermeidung von Redundanzen (unnötig mehrfach oder wiederholt ausgeführte oder auch manuell ausgeführte automatisierbare Schritte).
Durch schnelle, kleine Schritte bleibt das Team flexibel und kann sich schnell neuen Rahmenbedingungen anpassen und auf Feedback eingehen. Die negativen Folgen eines einzelnen kleinen, nicht erfolgreichen Schrittes können wesentlich schneller durch einen neuen Schritt kompensiert werden, als dies bei einem einzelnen größeren Schritt der Fall wäre.
Praktiken
[Bearbeiten | Quelltext bearbeiten]Es lassen sich traditionelle und evolutionäre Praktiken unterscheiden. Die traditionellen sind in der XP-Welt weit verbreitet und genutzt. Die evolutionären nehmen verschiedene neue Erkenntnisse aus der jahrelangen Anwendung XPs auf. Sie verfeinern oder modifizieren die ursprünglichen Praktiken geringfügig und machen damit die Nutzung klarer und verständlicher.
XP wird häufig mit den traditionellen Praktiken verbunden, beziehungsweise darauf reduziert.
Traditionelle Praktiken
[Bearbeiten | Quelltext bearbeiten]- Pair-Programming
- Bei der Paarprogrammierung teilen sich zwei Programmierer einen Computer – einer codiert (der Driver) und der andere denkt mit und hat das Gesamtbild im Kopf (der Partner). Die Rollen werden regelmäßig getauscht. Dieses Vorgehen steigert den Wissenstransfer. Anfänger sollen schneller von der Arbeit eines Spezialisten lernen. Das Wissen wird verteilt. Das Projekt ist nicht mehr so anfällig gegen den Ausfall eines Einzelnen. Durch ständigen Codereview der Entwicklung und Kommunikation wird das Design verbessert und Fehler schneller gefunden (siehe auch Vier-Augen-Prinzip).
- Kollektives Eigentum
- Aktivitäten werden zunächst nicht an einzelne Personen verteilt, sondern an das ganze Team. Es existiert laut Methodik das Bewusstsein und die Verpflichtung nur als Team erfolgreich sein zu können. Einzelne Teammitglieder besitzen kein Wissensmonopol. Pair-Programming und wechselhafte Einsatzgebiete sollen der Strömung entgegenwirken, dass einzelne Personen Teile als ihren Besitz betrachten.
- Permanente Integration
- Kontinuierliche Integration der einzelnen Komponenten zu einem lauffähigen Gesamtsystem in kurzen Zeitabständen. Je häufiger integriert wird, desto höher wird laut XP die eintretende Routine. Fehler werden damit früh aufgedeckt. Die mit der Integration verbundenen Kosten sollen fast auf Null minimiert werden, da die Integration zu einem täglichen Schritt gehört, der weitestgehend vollautomatisiert und selbst stabil und durchgetestet sein muss.
- Testgetriebene Entwicklung bzw. Permanentes Testen
- Bei der testgetriebenen Entwicklung werden erst die Modultests (Unit-Test) geschrieben, bevor die eigentliche Funktionalität programmiert wird. Der Entwickler befasst sich dadurch früh mit dem Design des Codes und überdenkt seine Programmierarbeit genau. Die Tests werden nach jedem Programmierschritt ausgeführt und liefern Rückmeldung über den Entwicklungsstand. Die Tests sind automatisiert. Im Laufe einer Integration werden Integrationstests durchgeführt. Es wird zwischen Regressionstest und Modultest unterschieden. Während Modultests (Unit-Tests) einzelne Module testen, ist ein Regressionstest die kollektive Ausführung aller Tests, um die unveränderte Lauffähigkeit der alten, bereits vor der Iteration existenten Funktionalität zu überprüfen. Auch Performancetests, bei denen die Leistungs- und Geschwindigkeitsmerkmale in Bezug auf die geforderten Werte gemessen werden, sind üblich. Der Entwickler bekommt Rückmeldung (Feedback), wie viele und welche Tests nicht erfolgreich waren. Ein Akzeptanztest ist die Präsentation des Standes des Produktes, um die Zufriedenheit des Kunden und die Nutzbarkeit zu validieren.

- Kundeneinbeziehung
- Enge Einbeziehung des Kunden, das heißt, der Kunde gibt das Iterationsziel mit einer Auswahl der zu realisierenden User-Storys vor und hat kurz danach die Möglichkeit, Akzeptanztests durchzuführen. Story-Cards dienen als Medium, um die kurzen Anwendungsfälle in Form von User-Storys aufzunehmen. Der Kunde muss immer anwesend oder zumindest erreichbar sein. Neben User-Storys auf Story-Cards existiert noch der Ansatz, CRC-Modelle auf CRC-Karten zu verfassen.
- Refactoring
- Laufendes Refactoring, ständige Architektur-, Design- und Code-Verbesserungen, auch um Anti-Patterns umgehend erkennen und beseitigen zu können. XP bejaht die Existenz von Code, der am Beginn nicht perfekt ist. Stattdessen sind sämtliche Teile einem stetigen Review unterworfen. Gefundene, optimierungsfähige Stellen werden gewöhnlich sofort verbessert oder als Fehler (Bugs) definiert, die in einer späteren Iteration behoben werden.
- Keine Überstunden
- 40-Stunden-Woche, d. h. Überstunden sind zu vermeiden, weil darunter die Freude an der Arbeit, mittelfristig die Konzentrationsfähigkeit der Programmierer und somit auch die Qualität des Produktes leidet. Nachweislich sinkt die Produktivität eines Entwicklers durch Überstunden. Arbeit außerhalb der regulären Arbeitszeit wird im Einzelfall zwar geduldet, aber auf keinen Fall besonders entlohnt oder erwartet. Überstunden zeugen gewöhnlich einfach nur von falscher Planung.
- Iterationen
- Kurze Iterationen, um dem Kunden in regelmäßigen Zeitabständen einen lauffähigen Zwischenstand des Produkts zu liefern. Eine Iteration ist eine zeitlich und fachlich in sich abgeschlossene Einheit. Kurze Iterationen und damit verbundene Akzeptanztests erlauben schnelle Feedbackschleifen zwischen Entwicklung und Kunde.
- Metapher
- Da in traditionell aufgesetzten Softwareprojekten ein latentes Missverständnis zwischen Kunde und Entwicklungsteam ein häufiges Problem darstellt – der Entwickler hat Schwierigkeiten mit der Fachsprache des Kunden und umgekehrt –, werden die Anforderungen im fachlichen Vokabular des Kunden, idealerweise auch von ihm selbst, in Form von User-Storys beschrieben. Alle sprechen eine Sprache, was durch ein Glossar noch verstärkt werden kann. Es wird eine Metapher gewählt, eine inhaltlich ähnliche, für beide Seiten verständliche Alltagsgeschichte.
- Coding-Standards
- Das Team hält sich bei der Programmierarbeit an Standards, welche erst die gemeinschaftliche Verantwortung des Teams bei dieser Aufgabe ermöglichen. Wechselnder Einsatz der Entwickler in allen Bereichen der Software ist laut XP nur durch gemeinsame Standards sinnvoll möglich.
- Einfaches Design
- Es soll die einfachste Lösung angestrebt werden, also diejenige, die genau das Gewünschte erreicht (und nicht mehr). Bewusst allgemein (generisch) gehaltene Lösungen oder vorbereitende Maßnahmen für potentiell zukünftige Anforderungen werden vermieden. Zum Thema Einfachheit sind die umgangssprachlichen Akronyme KISS („Keep it simple, stupid“) und YAGNI („You Ain’t Gonna Need It“) verbreitet.
- Planning-Game
- Neue Versionen der Software werden in einem Planning-Game, auch als Planning-Poker bekannt, spezifiziert und der Aufwand zu deren Umsetzung abgeschätzt. An diesem iterativen Prozess sind sowohl Entwicklungsmannschaft als auch Kunde beteiligt.
Evolutionäre Praktiken
[Bearbeiten | Quelltext bearbeiten]Die evolutionären Praktiken wurden fünf Jahre nach den ursprünglichen publiziert und ersetzen diese. Sie lassen sich unterteilen in Hauptpraktiken und ergänzende Begleitpraktiken. Inhaltlich sind die neuen Praktiken mit den alten, traditionellen Praktiken vergleichbar. Die Bezeichnungen der alten Praktiken wurden teilweise modifiziert oder in einzelne Unterpraktiken aufgeteilt. Zwei Praktiken sind weggefallen: die Praktik Metapher war zu schwer zu vermitteln und hat sich laut Literatur nicht durchgesetzt. Coding-Standards werden als selbstverständlich vorausgesetzt und nicht mehr explizit erwähnt.
Hauptpraktiken
[Bearbeiten | Quelltext bearbeiten]Die Hauptpraktiken sind: Räumlich zusammen sitzen, Informativer Arbeitsplatz, Team, Pair-Programming, Energievolle Arbeit, Entspannte Arbeit, Stories, Wöchentlicher Zyklus, Quartalsweiser Zyklus, 10-Minuten-Build, Kontinuierliche Integration, Test-First-Programmierung und Inkrementelles Design.
Durch offene, gemeinsame Anordnung der Arbeitsplätze soll die Kommunikation optimiert werden. Diese Form ist aufgrund der besseren Kommunikationsmöglichkeiten einer räumlichen Trennung der Beteiligten vorzuziehen. Der Arbeitsplatz muss ferner „informativ“ sein, indem zum Beispiel aktuelle Tasks, der Stand des Projektes und andere wichtige Informationen vom Arbeitsplatz aus immer gut sichtbar sind. Empfehlenswert ist es hier zum Beispiel, die User-Storys zentral an einer Wand anzubringen.
Das Team ist laut XP wichtiger als die Individuen. Es fällt, im Bewusstsein, nur als Gemeinschaft erfolgreich zu sein, gemeinsame Entscheidungen. Dies wird dadurch gefördert, dass die einzelnen technischen Aktivitäten in der Planung nicht einzelnen Personen, sondern dem Team zugeordnet werden. Probleme löst das Team ohne den Eingriff eines Managers von außen. Mit dem Thema selbstregulierendes Team befasst sich auch der Essay Die Kathedrale und der Basar. Pair-Programming mit abwechselnden Partnern soll diese Grundeinstellung weiter fördern.
Die Arbeit soll mit voller Motivation und gleichzeitig in einer entspannten, kollegialen Atmosphäre ablaufen, da die Entwickler ohne Überstunden arbeiten und somit maximale Produktivität erreicht wird. Es werden Sicherheitspuffer einkalkuliert. Nicht einhaltbare Versprechen werden vermieden.
Die zu entwickelnde Funktionalität wird in Form von Storys beschrieben, beispielsweise User-Storys. In wöchentlichem Zyklus wird entschieden, welche Kundenwünsche als Nächstes in Angriff genommen werden. Das Projekt selbst wird in einem quartalsweisen Zyklus geplant. Die vorgegebenen Zyklen sind Richtwerte, deren Größen im täglichen Einsatz variieren können.
Die Software zu erstellen und alle Testläufe durchzuführen soll in maximal zehn Minuten abgeschlossen sein. Durch diesen 10-Minuten-Build werden die Kosten für Erstellung und das Testen der Software minimiert. Alle von einem Entwickler gemachten Änderungen sollten circa alle zwei Stunden bereitgestellt werden. Diese kontinuierliche Integration soll einem potentiellen Chaos vorbeugen, das entstehen könnte, wenn die Entwickler ihre Änderungen und Erweiterungen am Produkt selten in das zentrale Datenhaltungssystem (Repository) einstellen würden. Alle Mitarbeiter haben so die Änderungen rasch zur Verfügung. Sowohl die zehn Minuten beim Build als auch die zwei Stunden bei der Integration sind Zielvorgaben, die in konkreten Projekten variieren können. Gerade bei großen Projekten mit einer großen Menge an Quelltext und Entwicklern wird ein Build deutlich länger dauern, und die Integrationsintervalle werden oft größer sein. Die Praktiken betonen nur die Richtung und geben einen Idealwert vor, der angestrebt werden sollte. Durch Automatisierung lässt sich die Build-Zeit weitestgehend minimieren.
Die Entwicklung ist gekennzeichnet durch den Test-First-Programmieransatz: vor der Realisierung der Funktionalität muss der Test geschrieben werden. Ein inkrementelles Design, das neue Erkenntnisse und Feedback aufnimmt, verbessert das Design der Software stetig.
Begleitpraktiken
[Bearbeiten | Quelltext bearbeiten]Die Begleitpraktiken sind:
- richtige Kundeneinbeziehung
- inkrementelles Deployment
- Team-Konstanz
- schrumpfende Teams
- ursachliche Analysen
- geteilter Code
- Codierung und Testen
- eine zentrale Codebasis
- tägliches Deployment
- verhandelbarer, vertraglicher Funktionsumfang
- Zahlen-pro-Nutzung.
Der Kunde nimmt aktiv an der Entwicklung teil. Er ist Teilnehmer an den regelmäßigen Treffen und wird aktiv miteinbezogen. Die Einbeziehung zeigt sich auch beim zu entwickelnden Funktionsumfang, der verhandelbar bleiben muss. Mehrere kleinere Verträge anstatt eines großen Vertrags können in derartig betriebenen Projekten Risiken minimieren und die Flexibilität erhöhen. Da iterativ stetig neue Versionen bereitgestellt werden, müssen die Zahlungen des Kunden unabhängig von der Anzahl der bereitgestellten Versionen sein. Der Kunde zahlt nicht für jede Version der Software, sondern pro Nutzung.
Das Team soll einerseits von seiner Konstanz leben, kann aber auch personell verkleinert werden. Das Entwicklerteam muss über mehrere Projekte hinweg das gleiche sein. Es erwirbt im Rahmen der Produktentwicklung die Fähigkeiten, als Team zusammenzuarbeiten, welche für weitere Projekte genutzt werden kann. Sobald das Team leistungsstärker und produktiver wird, sollte seine Arbeitslast, trotz einer Verlagerung von Ressourcen zu anderen Teams, konstant bleiben.
Dem Code als dem im Zentrum stehenden Medium kommt eine zentrale Rolle zu. Er wird in einer zentralen, datenbankähnlichen Struktur (Repository) gehalten. Es existiert nur eine offizielle Version (Codebasis) des Systems. Dieser Code wird, bildlich gesprochen, zwischen den Entwicklern geteilt. Jeder Entwickler im Team muss in der Lage sein, auch „fremden“ Code jederzeit ändern zu können (Collective-Code-Ownership). Neben dem Code existieren immer die Tests, die zusammen mit dem Code die einzigen zu erstellenden, durch die Entwicklungsarbeit bereitgestellten Medien („Artefakte“) sind. Alle anderen Medien, zum Beispiel die Dokumentation, werden allein aus Code und Tests generiert.
Um Schwierigkeiten früh zu identifizieren, wird inkrementelles Deployment (die Überführung der Anwendung auf das Zielsystem) durchgeführt. Wenn Altsysteme durch neue Software ersetzt werden sollen, muss ein Teil nach dem anderen ersetzt werden. Dieses Vorgehen soll die Umstellung planbarer machen. Das Deployment ist täglich inkrementell durchzuführen. Jeden Tag soll eine neue Version der Software produktiv gestellt werden. Dies macht das Deployment zur Routine, minimiert dessen Kosten und Fehler und ermöglicht stetige Integrations- und Akzeptanztests. Falls einmal ein technisches Fehlverhalten eintritt, muss eine ursächliche Analyse durchgeführt werden.
Flexibilitätsgrad vs. Steifheit
[Bearbeiten | Quelltext bearbeiten]Eine der theoretischen Grundlagen des Extreme Programming ist der Flexibilitätsgrad des zu entwickelnden Softwaresystems. XP geht von einem mindestens proportionalen Zusammenhang zwischen dem Gegenteil der Flexibilität, der sogenannten Steifheit, und den Pflegekosten zur Fehlerbehebung oder Erweiterung des Systems aus. Je flexibler ein Softwaresystem, desto geringer sind die Pflegekosten, je steifer, desto höher.
Einige Steifheitskriterien:
- Die Anzahl überflüssiger bzw. ungenutzter Merkmale
- Eine schlechte, fehlende, schwer verständliche oder zu umfangreiche Dokumentation
- Ein schwer verständlicher oder unflexibler Entwurf
- Fehlende Regressionstests
- Ein schwerfälliges Gesamtsystem
Die Flexibilitätskriterien sind das Gegenteil der Steifheitskriterien, zum Beispiel ein leicht verständlicher und flexibler Entwurf.
Einige der als Bestandteil des Extreme Programming definierten Mechanismen dienen laut XP der Erhöhung der Flexibilität:
- Die testgetriebene Entwicklung sorgt für ein ausreichendes Vorhandensein von Regressionstests und eine verbesserte Testbarkeit der Software
- Das ständige Refactoring führt zur Fehlerbeseitigung, einem leicht verständlichen und flexiblen Entwurf sowie guter Dokumentation
- Die kontinuierliche Integration erfordert zwangsläufig ein leichtgewichtiges Gesamtsystem
- Um die zu entwickelnde Funktionalität zu bestimmen, und zwischen Kunde und Entwicklungsteam auszuarbeiten, werden User-Storys eingesetzt
Ursprung und Abgrenzung
[Bearbeiten | Quelltext bearbeiten]XP ist ein Vertreter der agilen Softwareentwicklung. Im Vergleich zu traditionellen Vorgehensmodellen wählt es alternative Ansätze, um Herausforderungen während der Softwareentwicklung zu adressieren.
Traditionelle Vorgehensmodelle
[Bearbeiten | Quelltext bearbeiten]In aus heutiger Sicht traditionellen Vorgehensmodellen ist der Softwareentwicklungsprozess in aufeinanderfolgenden Phasen organisiert. Nach Jahren der Anwendung von traditionellen Vorgehensmodellen, wie dem ab 1970 genutzten Wasserfallmodell, haben es, aus Sicht der XP-Vertreter, Projektverantwortliche nur unzureichend verstanden, die Probleme und Risiken der Softwareentwicklung in den Griff zu bekommen. Viele Projekte kamen nie zu einem Abschluss oder überstiegen zeitlich und/oder kostenmäßig die Planung. Viele, gerade über lange Zeiträume laufende Projekte deckten mit Abschluss zwar die zu Beginn spezifizierten Anforderungen ab, berücksichtigten allerdings unzureichend, dass Anforderungen sich ändern können oder erst im Laufe eines Projektes dem Kunden wirklich klar ist, wie das Endergebnis aussehen soll. Über Erfolg und Schwierigkeiten von Softwareprojekten liefert der Chaos-Report von The Standish Group regelmäßig fundierte Untersuchungen, wie beispielsweise 1994.[4]
In Abgrenzung zu traditionellen Vorgehensmodellen durchläuft der Entwicklungsprozess in XP immer wieder iterativ in kurzen Zyklen sämtliche Disziplinen der klassischen Softwareentwicklung (zum Beispiel Anforderungsanalyse, Design, Implementierung, Test). Durch diese inkrementelle Vorgehensweise werden nur die im aktuellen Iterationsschritt benötigten Merkmale verwirklicht (implementiert). XP ist dadurch leichtgewichtiger: Es wird keine komplette technische Spezifikation der zu entwickelnden Lösung vorausgesetzt (so gibt es beispielsweise kein Pflichtenheft).
Geschichte von XP
[Bearbeiten | Quelltext bearbeiten]Extreme Programming, und damit einher Standards wie JUnit, wurden von Kent Beck, Ward Cunningham und Ron Jeffries (allesamt Erstunterzeichner des Agile Manifesto) während ihrer Arbeit im Projekt Comprehensive Compensation System bei Chrysler zur Erstellung von Software entwickelt. Die Arbeiten am sogenannten C3-Projekt begannen 1995 und wurden 2000 nach der Übernahme durch Daimler eingestellt. Die dabei entwickelte Software wurde im Bereich der Lohnabrechnung eingesetzt und basierte hauptsächlich auf Smalltalk. Das C3-Projekt wurde ursprünglich nach dem Wasserfallmodell umgesetzt. Nachdem nach knapp einem Jahr kein wesentlicher Fortschritt zu verzeichnen war, wurde der Entwicklungsansatz geändert. Das Projekt zeichnete sich aus durch häufig wechselnde Anforderungen und einer hohen Mitarbeiterfluktuation.[5][6][7]
XP ist ein agiles Vorgehensmodell. Die folgende Tabelle stellt den von XP identifizierten Kerndisziplinen den historischen, weitverbreiteten Ansatz mitsamt seinen Risiken der Softwareentwicklung gegenüber. Unternehmen, die XP nicht einsetzen, können Vorgehensmodelle verwenden, die sich – bewusst oder unbewusst – mit diesen Disziplinen positiv auseinandersetzen.
Praktik | Richtiges Vorgehen nach XP | Traditionelles oder falsches Vorgehen/Risiko nach XP |
---|---|---|
Kommunikation | Stetiger Austausch wird gefördert und erwartet. | Jeder muss zunächst mal seine Aufgaben lösen. |
Mut | Offene Atmosphäre. | Angst vor versäumten Terminen und Missverständnissen mit Kunden. |
Kollektives Eigentum | Programmcode, Dokumente etc. gehören dem Team. | Jeder fühlt sich nur für seine Artefakte verantwortlich. |
Pair-Programming | Zu zweit am Rechner. | Jeder will und muss zunächst auf seine ihm zugewiesenen Aufgaben schauen. |
Integration | Stetige Integrationen erlauben Feedback und erhöhen Qualität. | Selten Integrationen, da vermeintlich unnütz und Zeitverschwendung. |
Testgetriebene Entwicklung | Testen hat einen hohen Stellenwert. | Testen kostet nur Zeit. Wenige manuelle Tests. |
Kundeneinbeziehung | Der Kunde wird zur aktiven Mitarbeit aufgerufen. | Der Kunde ist selten wirklicher Partner, sondern nur die „andere Seite des Vertrages“. |
Refactoring | Suboptimales Design und Fehler werden akzeptiert. | Fehler sind verpönt. Erstellte Artefakte laufen angeblich immer direkt perfekt. |
Keine Überstunden | Einhaltung der regulären Arbeitszeit. | Stetige, regelmäßige Überschreitung der regulären Arbeitszeit. |
Iterationen | Ein Release wird in viele handliche Iterationen unterteilt. | Iterationen sind nicht nötig, es wird an einem Release gearbeitet. |
Stand-up-Meeting | Täglicher, strukturierter Austausch. | Große, lange, seltenere Projektmeetings. Die Personenanzahl und der Inhalt sind häufig zu aufgebläht. |
Dokumentation | Wo es sinnvoll ist. | Wichtiges Artefakt. Alles muss standardisiert dokumentiert sein. Dokumentation wird aber nicht genutzt. |
Metapher | Ein gemeinsames Vokabular. | Kunde und Entwicklung sprechen in zwei Sprachen, häufig aneinander vorbei. |
Team | Das Team ist wichtig. Es existieren keine Rollen. Feedback wird von jedem erwartet. | Spezialistentum. Abschottung. Wissensmonopole. |
Standards | Standards, wo es sinnvoll erscheint. | Überregulierung. Starrer Prozess. |
Qualität | Inhärenter Bestandteil. | Der Faktor, der als erster vernachlässigt wird, wenn Zeit oder Geld knapp werden. |
Aufgrund der wachsenden Nutzung wird XP weiter optimiert: je mehr Projekte gemäß XP entwickelt werden, desto mehr Erfahrungen fließen in die Weiterentwicklung von XP ein. Da es auch eine Summe von Best practices ist, lässt sich somit sagen: „Es wird in der Praxis für die Praxis angepasst“.
Andere agile Vorgehensmodelle
[Bearbeiten | Quelltext bearbeiten]Der kleinste gemeinsame Nenner aller agilen Vorgehensmodelle ist das „Agile Manifest“:[8]
- Individuen und Interaktionen haben Vorrang vor Prozessen und Werkzeugen
- Lauffähige Software hat Vorrang vor ausgedehnter Dokumentation
- Zusammenarbeit mit dem Kunden hat Vorrang vor Vertragsverhandlungen
- Das Eingehen auf Änderungen hat Vorrang vor strikter Planverfolgung
Neben XP hat auch Scrum einen gewissen Bekanntheitsgrad erlangt. Neben vielen Ähnlichkeiten mit XP gibt Scrum in bestimmten Bereichen Vorgaben bezüglich Iterationslänge, Protokollierung und Verfahren. Scrum nutzt ein eigenes Vokabular.
Eine weitere gerne in diesem Zusammenhang angeführte Disziplin ist das Feature Driven Development, eine Methodik, die den Schwerpunkt ebenfalls auf die bereitzustellende Funktionalität legt.
Ähnlichkeiten zwischen XP und Kaizen, einem in Japan vor allem in der Autoindustrie entwickelten Konzept (Kontinuierlicher Verbesserungsprozess) zur Sicherung der Qualität im Fertigungsprozess und einer Optimierung der Fertigungs- und Managementkosten mittels „schlankerer“ Ansätze (Schlanke Produktion), sind nicht zu übersehen.
Ein weiteres agiles Vorgehensmodell ist Crystal, eine Familie von Methoden, deren Mitglieder meist mit Farben gekennzeichnet werden.
Auch traditionelle Vorgehensmodelle, wie das V-Modell, wurden zwischenzeitlich um neue Erkenntnisse in der Softwareentwicklung angereichert. Als Ergebnis bedient sich der Nachfolger, das V-Modell XT, agiler Ansätze. So gibt das V-Modell XT keine strikte Sequenz an zu durchlaufenden Phasen mehr vor.
XP in Projekten
[Bearbeiten | Quelltext bearbeiten]Im Jahr 2005, über zehn Jahre nach den ersten XP-Schritten, erfreuten sich XP und andere agile Methoden wachsender Beliebtheit. Untersuchungen von „Forrester Research“ ergaben, dass in Nordamerika und Europa 2005 circa 14 % aller Projekte mit agilen Methoden durchgeführt wurden[9] (von denen XP die verbreitetste ist) und viele andere einen Einsatz prüfen.
Zu den Nutzern XPs zählten im Juli 2006 sowohl Unternehmen, die kommerziell Software herstellen und vertreiben, als auch Unternehmen, deren eigentliches Geschäft nicht die Erstellung von Software ist: Dresdner Kleinwort Wasserstein, Encyclopaedia Britannica, Fidelity, Progressive, Capital One, Royal & Sunalliance, Channel One, Daedalos International, Gemplus, it-agile, Qwest und O&O Services.[10][11]
Viele Unternehmen berichten öffentlich von ihren Erfahrungen mit XP. Sie schildern, wie sie XP im Detail eingesetzt haben, welche Schwierigkeiten dabei auftraten und wie der Erfolg einzuschätzen war. Symantec hat seine Änderung des Vorgehensmodells hin zu XP publiziert.[12] Sabre Airline Solutions hat mit XP sowohl die Fehler in ihrer Software als auch die Entwicklungszeit reduziert:[13]
“It was XP […] that produced the dramatic quality improvements […] You have the weaker people paired with the stronger people, and business knowledge and coding knowledge are transferred very quickly.”
„Es war XP [...], das die dramatischen Qualitätsverbesserungen hervorbrachte [...] Sie haben die schwächeren mit den stärkeren Menschen verbunden, und Geschäftswissen und Programmierkenntnisse werden sehr schnell übertragen.“
Kritik
[Bearbeiten | Quelltext bearbeiten]Das Alles-oder-Nichts-Prinzip
[Bearbeiten | Quelltext bearbeiten]Gemäß einigen Protagonisten des XP-Ansatzes wirken die einzelnen Methoden so eng zusammen, dass diese ohne Ausnahme eingesetzt werden sollen. Bereits der Verzicht auf einzelne Methoden soll die Wirksamkeit des Gesamtansatzes massiv einschränken. Da jedoch der Einsatz der Methoden oftmals auf zahlreichen Voraussetzungen basiert (siehe z. B. die Abschnitte Der ideale Kunde und Der ideale Programmierer), ist es wahrscheinlich, dass in konkreten Projekten einzelne Methoden eben gerade nicht angewandt werden können. Das liefert dann auch auf einfache Weise eine Erklärung für das Scheitern von XP-Projekten: Meist dürfte sich eine vernachlässigte Methode finden lassen, so dass das Scheitern nicht auf XP als Gesamtansatz, sondern auf die Vernachlässigung dieser Methode zurückgeführt werden kann. Mittlerweile ist es umstritten, ob tatsächlich alle Methoden angewendet werden müssen, um durch XP die Wahrscheinlichkeit auf einen erfolgreichen Projektverlauf zu erhöhen.
Bewegliche Anforderungen
[Bearbeiten | Quelltext bearbeiten]Ein Hauptgrund für die Spezifikation von Anforderungen besteht bei klassischen Vorgehensmodellen in der Schaffung einer verlässlichen Basis für die Entwicklungsarbeit, so dass später notwendige Änderungen an der Realisierung möglichst gering bleiben. Die implizite Annahme dieser Haltung ist, dass Änderungen umso teurer werden, je später sie durchgeführt werden müssen. Obwohl sich diese Annahme in vielen Projekten bestätigt hat, geht XP gewissermaßen davon aus, dass Änderungen grundsätzlich „billig“ sind, wenn man sie kontinuierlich durchführt. Auch verneint XP implizit die Annahme, dass spätere Änderungen teurer werden, und begründet dies damit, dass die Änderungen dann nicht – wie in anderen Ansätzen – in mehreren Artefakten zugleich (Spezifikation, Dokumentation, Quellcode) umgesetzt werden müssen.
Die diesbezüglichen Annahmen von XP treffen sicher dann zu, wenn die Anforderungen unvermeidlich Änderungen unterworfen sein werden. In diesem Fall kann eine Spezifikation der Anforderungen unter Umständen größeren Aufwand nach sich ziehen als das Auslassen der Spezifikation – schon allein deswegen, weil die Spezifikation immer mitgeändert werden muss. Es ist jedoch unklar, warum es schädlich sein sollte, Anforderungen zumindest dann zu spezifizieren, wenn sie mit einiger Sicherheit bis zum Projektende Bestand haben werden. Durch den Verzicht auf eine Spezifikation läuft man Gefahr, Anforderungen zu übersehen oder hinsichtlich ihrer Bedeutung falsch einzuschätzen. Auch ist denkbar, dass der Kunde im Projektverlauf seine Anforderungen bewusst ändert, jedoch gegenüber dem Entwicklungsteam bekundet, seine Auffassung sei bislang nur falsch verstanden worden. Hinsichtlich der Einschätzung, dass spätere Änderungen nicht teurer sind als frühe, ist einzuwenden, dass späte Änderungen dann sehr teuer sein können, wenn sie das Design der Anwendung in grundlegender Weise betreffen. So ist die Änderung der Architektur einer Anwendung nicht ohne erheblichen Aufwand durchzuführen, ja sie kann ggf. teurer sein als eine Neuimplementierung. Es ist nicht ersichtlich und erscheint daher als eine Glaubensfrage, ob XP durch den Einsatz seiner Methoden derartige Situationen verhindern kann.
Der ideale Kunde
[Bearbeiten | Quelltext bearbeiten]Der Einsatz von XP verlangt einen experimentierfreudigen Kunden, der nicht nur auf eine Reihe von üblichen Vorgehensweisen verzichten, sondern zudem selbst erhebliche Ressourcen aufwenden muss. Zu den Aspekten, auf die ein Kunde ungern verzichtet, gehören:
- Dokumentation
- Software kann in komplexen Systemlandschaften eingeführt werden, so dass unterschiedlichste Beteiligte (z. B. Schnittstellenverantwortliche, Mitarbeiter von externen Providern usw.) Kenntnis von technischen Details erlangen müssen. In solchen Umgebungen verbieten meist schon die Firmenrichtlinien den Verzicht auf eine ausführliche Dokumentation. Aber selbst wenn dies nicht der Fall ist, bleibt zu klären, wie die Kenntnisse über technische Details an die Betroffenen vermittelt werden sollen, wenn keine Dokumentation existiert, und mehr noch, wenn davon ausgegangen werden muss, dass künftige Änderungen die relevanten technischen Einzelheiten betreffen.
- Spezifikation
- Insbesondere beim Abschluss von Werkverträgen stellt sich für den Kunden die Frage, worin präzise eigentlich das Gewerk besteht, das durch den vereinbarten Preis erworben wird. Des Weiteren können firmenweite Richtlinien die Erstellung einer Spezifikation verlangen.
- Termine
- Da der projektleitende Vertreter des Kunden oftmals selbst den Projektfortschritt berichten muss, stellt die Fertigstellung bestimmter Funktionen zu festgelegten Terminen, somit also die Aufstellung eines Projektplans, oftmals einen unverzichtbaren Bestandteil der gemeinsamen Vorgehensweise dar.
Über diese Punkte hinaus stellt das „Kunde vor Ort“-Prinzip eine Anforderung dar, die in der Realität nur äußerst selten umsetzbar ist. Um seine Aufgabe erfüllen zu können, muss der Mitarbeiter offensichtlich über einen erheblichen Wissensumfang verfügen. Ist dies aber der Fall, so ist der Mitarbeiter sehr wahrscheinlich auch in seinem eigenen Unternehmen nicht für mehrere Monate entbehrlich. Nicht selten werden IT-Projekte zudem gerade deshalb an externe Dienstleister vergeben, um den eigenen Ressourcenaufwand zu beschränken. Das Kunde-vor-Ort-Prinzip stellt somit eine der am schwierigsten erfüllbaren Anforderungen des Extreme Programming dar.
Der ideale Programmierer
[Bearbeiten | Quelltext bearbeiten]XP stellt zahlreiche Anforderungen an die beteiligten Programmierer.
- Die Programmierer müssen über sehr gute Fähigkeiten verfügen, da der auf häufigen Änderungen basierende Ansatz unter Verwendung von Refactorings nicht ohne umfangreiche Programmiererfahrung und ohne den Einsatz von dafür geeigneten Werkzeugen realisiert werden kann.
- Programmierer weisen oftmals ein recht ausgeprägtes Ego auf, das sich in großer Überzeugung von „richtigen Lösungen“ und einem gewissen Besitzdenken hinsichtlich des geschriebenen Codes äußert. Nicht alle Programmierer können damit umgehen, dass – gemäß XP – jeder den Code aller anderen modifizieren darf.
- XP weist eine Reihe von Merkmalen auf, die hohe Disziplin erfordern (wie z. B. der Test-first-Ansatz, das permanente Durchführen von Refactorings, Programmieren in Paaren usw.), und einige andere, die eine gewisse Disziplinlosigkeit fördern (z. B. das Auslassen von Spezifikation und Dokumentation). Es besteht die Gefahr, dass die letzteren Ansätze gegenüber den Ersteren betont werden. Die Einhaltung der Ansätze mit hoher Disziplin erfordert fähige Beteiligte und eine funktionierende Selbstregulierung des Teams. Da aber unter Umständen kein Projektverantwortlicher benannt wurde, fragt sich, wer letztlich für die konsequente Einhaltung aller Aspekte sorgt.
Die Anforderungen zeigen, dass XP nicht auf beliebige Teams angewandt werden kann.
Beschränkte Team- und damit Projektgröße
[Bearbeiten | Quelltext bearbeiten]Mehrere XP-Methoden erfordern einen hohen Grad an gegenseitiger Informiertheit und somit ein hohes Maß an Kommunikation zwischen den Beteiligten. So bedingt das kontinuierliche Refactoring unter Umständen Änderungen gemeinsam genutzter Komponenten, über die möglichst das gesamte Team unterrichtet sein muss. Das Fehlen eines Projektmanagers erfordert gemeinsame Absprachen zur Arbeitsteilung. Da zudem eine präzise Spezifikation und Dokumentation fehlt, müssen alle Informationen zur Umsetzung in den Köpfen der Beteiligten verfügbar sein. Mit der Größe des Teams steigt jedoch der Kommunikationsaufwand quadratisch an, so dass XP-Projekten eine natürliche Grenze hinsichtlich der Teamgröße gesetzt ist. Die maximale Größe wird gemeinhin bei zehn Teammitgliedern angesetzt.
Fehlende Eignung für Festpreisprojekte
[Bearbeiten | Quelltext bearbeiten]Ein weiterer häufiger Kritikpunkt ist, dass XP für Festpreisprojekte nicht geeignet sei. Da der Kunde einen festen Preis zahlt, muss der Auftragnehmer in irgendeiner Form sicherstellen, dass er für diesen Preis auch nur eine festgelegte Leistung erbringen muss. Die Leistungserbringung erfolgt so lange, bis der Kunde zufrieden ist, kann in immer neuen Kundenanforderungen münden, so dass die Aufwände für die Realisierung nicht abzusehen sind. Die Festlegung der Festleistung als Inhalt des Werkvertrages entspräche jedoch einer Spezifikation und ist somit in XP verpönt. Es gibt einige Ansätze, XP dennoch mit Festpreisprojekten kompatibel zu machen:
- Versicherungsprämien auf die Schätzung
- User-Storys (bzw. die Story-Cards) werden zum Vertragsgegenstand
- besondere Preismodelle wie Aufwandspreis mit Obergrenze, Phasenfestpreis oder Anforderungseinheitspreis.
Die Wirksamkeit dieser Ansätze ist jedoch unklar. User-Storys können zu unpräzise sein, um das Gewerk gegen unerwartete technische Anforderungen abzusichern. Die angesprochenen Preismodelle entsprechen nur noch bedingt einem Festpreis und damit Werkvertrag, so dass fraglich ist, ob ein Kunde mit der Vorgabe eines Festpreises darauf eingehen würde. Selbiges gilt auch für Versicherungsprämien.
Feste Fertigstellungstermine
[Bearbeiten | Quelltext bearbeiten]Die iterative Vorgehensweise von XP und der fehlende Projektplan legen bereits nahe, dass die Fertigstellung eines fachlich gewünschten Funktionsumfangs zu einem gesetzten Termin nicht ohne weiteres garantiert werden kann. Zwar wird zu dem gesetzten Termin etwas fertig sein (da der Fokus jeder Iteration auf einer ausführbaren, ggf. sogar produktionsfähigen Software liegt), welche fachlichen Aspekte dies jedoch tatsächlich sind, kann nicht vorherbestimmt werden – umso weniger als Überstunden verpönt sind und das Ausmaß nötiger Refactorings auf Grund beweglicher Anforderungen nur schwer abgeschätzt werden kann.
Einsatz in verteilten Umgebungen
[Bearbeiten | Quelltext bearbeiten]XP gilt in verteilten Umgebungen als schwerer einsetzbar als herkömmliche Modelle. Der direkte Kontakt der Entwickler untereinander und zum Kunden ist problematisch, falls verschiedene Kunden existieren oder die Beteiligten räumlich getrennt arbeiten, so zum Beispiel bei teilweise ausgelagerten Entwicklungen (Outsourcing).
Kritik an einzelnen Praktiken
[Bearbeiten | Quelltext bearbeiten]Die stets erneute Erstellung von Testfällen und die automatisierte, permanente Ausführung der Tests kann in komplexen oder nebenläufigen Anwendungen und verteilten Systemen aufwändig sein. Wenn sich keine Rollen ausbilden, muss jeder alles wissen, statt einzelne Schwerpunkte im Team zu setzen (klassisches Beispiel: GUI-Entwicklung und Datenbank-Entwicklung), was die Gesamtleistung des Teams vermindern kann.
Personalpolitik
[Bearbeiten | Quelltext bearbeiten]Da das Team im Vordergrund steht, dürfen einzelne Entwickler nicht nach dem Umfang ihrer entwickelten Funktionalität honoriert werden. Insbesondere der Honorarvertrag ist kein geeignetes Vergütungsmodell bei Anwendung des Vorgehensmodells der XP.
Siehe auch
[Bearbeiten | Quelltext bearbeiten]Literatur
[Bearbeiten | Quelltext bearbeiten]- Kent Beck: Extreme Programming Explained, Embrace Change. Addison-Wesley, 1999, ISBN 0-201-61641-6 (2. Auflage, 2004, ISBN 0-321-27865-8).
- Kent Beck: Extreme Programming, Das Manifest. Addison-Wesley, 2000, ISBN 3-8273-1709-6. (deutsche Übersetzung)
- The XP Series:
- Kent Beck, Martin Fowler: Planning Extreme Programming. Addison-Wesley, 2000, ISBN 0-201-71091-9.
- Ron Jeffries et al.: Extreme Programming Installed. Addison-Wesley, 2000, ISBN 0-201-70842-6.
- Giancarlo Succi, Michele Marchesi: Extreme Programming Examined. Addison-Wesley, 2001, ISBN 0-201-71040-4.
- James Newkirk, Robert C. Martin: Extreme Programming in Practice. Addison-Wesley, 2001, ISBN 0-201-70937-6.
- William C. Wake: Extreme Programming Explored. Addison-Wesley, 2001, ISBN 0-201-73397-8.
- Ken Auer, Roy Miller: Extreme Programming Applied. Addison-Wesley, 2001, ISBN 0-201-61640-8.
- Pete McBreen: Questioning Extreme Programming. Addison-Wesley, 2002, ISBN 0-201-61640-8.
- Giancarlo Succi et al.: Extreme Programming Perspectives. Addison-Wesley, 2002, ISBN 0-201-77005-9.
- Doug Wallace et al.: Extreme Programming for Web Projects. Addison-Wesley, 2002, ISBN 0-201-79427-6.
- Lisa Crispin, Tip House: Testing Extreme Programming. Addison-Wesley, 2002, ISBN 0-321-11355-1.
- Scott W. Ambler: Agile Modeling: Effective Practices for eXtreme Programming and the Unified Process. Wiley, John & Sons, 2002, ISBN 0-471-20282-7.
- Ron Jeffries: Extreme Programming Adventures in C#. Microsoft Press, 2004, ISBN 0-7356-1949-2.
- Henning Wolf et al.: eXtreme Programming, Eine Einführung mit Empfehlungen und Erfahrungen aus der Praxis. dpunkt, 2. Auflage, 2005, ISBN 3-89864-339-5.
Weblinks
[Bearbeiten | Quelltext bearbeiten]Deutsch
- Podcast zum Thema Extreme Programming vom Chaosradio Express
- Artikel aus Die Zeit
- Extreme Programming – Back to Basics? ( vom 8. August 2017 im Internet Archive) (PDF, 110 KiB)
- Was ist Extreme Programming? – von Frank Westphal
- OpenSource Entwicklung und ihre Dynamiken ( vom 18. März 2013 im Internet Archive) (mit Kapiteln über Agile Methoden und XP)
Englisch
- Agile Alliance
- Extreme Programming: A gentle introduction.
- XP (Ron Jeffries)
- XP (Ward Cunningham)
- XP-The New Methodology (Martin Fowler)
Fachkonferenzen zum Thema
- XP Days Deutschland, die jährliche XP-Konferenz in Deutschland
Einzelnachweise
[Bearbeiten | Quelltext bearbeiten]- ↑ Tom DeMarco, Timothy Lister: Bärentango, Hanser Fachbuch, März 2003, ISBN 3-446-22333-9.
- ↑ Kent Beck: Extreme Programming Explained. Embrace Change. 1st Edition, Addison-Wesley, 2000, ISBN 0-201-61641-6.
- ↑ Kent Beck, Cynthia Andres: Extreme Programming Explained. Embrace Change. 2nd Edition, Addison-Wesley, Dezember 2004, ISBN 0-321-27865-8.
- ↑ The Standish Group: The CHAOS Report (1994). Abgerufen am 12. Januar 2020. (englisch), 12. Juni 2006.
- ↑ Chrysler Comprehensive Compensation System: Chrysler Goes To Extremes ( vom 13. Januar 2015 im Internet Archive) (PDF, englisch; 188 kB), 9. Juni 2006.
- ↑ Chrysler Comprehensive Compensation System: Extreme Programming Considered Harmful for Reliable Software Development (PDF, englisch), 6. Februar 2002.
- ↑ Chrysler Comprehensive Compensation: Project to replace existing payroll applications with a single application. (englisch), 16. Oktober 2013.
- ↑ Ward Cunningham, Kent Beck et al.: Manifesto for Agile Software Development (englisch), 2001.
- ↑ Forrester Research: Corporate IT Leads The Second Wave Of Agile Adoption ( vom 16. Oktober 2007 im Internet Archive) (englisch), 30. November 2005.
- ↑ C2: Companies Doing Xp (englisch), 23. Juli 2006.
- ↑ Object Mentor, Inc.: Companies using XP, Customers ( vom 23. April 2006 im Internet Archive) (englisch), 23. Juli 2006.
- ↑ Dr. Dobb’s: Going to Extremes (englisch), 2. Januar 2002.
- ↑ a b Computerworld: Sabre takes extreme measures ( vom 13. März 2009 im Internet Archive) (englisch), 29. März 2004.
- ↑ Henrik Kniberg: Scrum and XP from the Trenches (PDF, englisch), 27. Juni 2007.