WerkzeugeAndere Sprachen
|
Extreme ProgrammingExtreme-Programming (XP), auch Extremprogrammierung, ist eine agile Methode, die das Lösen einer Programmieraufgabe in den Vordergrund der Softwareentwicklung stellt und die Formalisierung des Vorgehens mindert. Die Extremprogrammierung definiert ein flexibles Vorgehensmodell in der Softwaretechnik, das sich den Anforderungen des Kunden in wiederholten kleinen Schritten unter Verwendung von RĂŒckkoppelungen sowie einer kommunikationsintensiven Herangehensweise zielgerichtet annĂ€hert.
[Bearbeiten] GeschichteExtreme Programming wurde von Kent Beck, Ward Cunningham und Ron Jeffries 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 [1]. [Bearbeiten] GrundlagenXP ist ein besonders gering formalisiertes, aber durch fortlaufende Iterationen gut strukturierendes Vorgehensmodell. XP entstand durch die Synthese zahlreicher Kerndisziplinen der Softwareentwicklung und basiert auf in der Praxis bewĂ€hrten Methoden und Standards, auch Best Practices genannt. XP bejaht die Ungewissheit, die mit der Softwareentwicklung verbunden ist, stellt aber keinen Freibrief zum Chaos aus. Es folgt vielmehr einem klaren, strukturierten Vorgehen und stellt die Teamarbeit, Offenheit und stete Kommunikation zwischen allen Beteiligten in den Vordergrund. Kommunikation ist dabei eine GrundsĂ€ule dieses Vorgehensmodells. Sollte die Kommunikation eines Teams sozial gestört sein oder von der Hierarchie behindert werden, kann XP nicht funktionieren. Um den SpaĂ an der Arbeit und auf lange Sicht die ArbeitsfĂ€higkeit selbst zu erhalten, und um Personalfluktuation zu vermeiden, sollten die Arbeitsbelastung gleichmĂ€Ăig auf das Team verteilt und ungeregelte Nachtschichten vermieden werden. (siehe Traditionelle Praktiken weiter unten). Die Methode des XP berĂŒcksichtigt, dass der Kunde die wirklichen Anforderungen an die zu erstellende Software zu Projektbeginn meist noch nicht komplett kennt und nicht hinreichend strukturieren kann beziehungsweise das mit der Realisierung betraute Entwicklerteam nicht ĂŒber alle (technischen) Informationen verfĂŒgt, um eine verlĂ€ssliche AufwandsschĂ€tzung ĂŒber die notwendige Dauer bis zum Abschluss zu geben. Im Laufe eines Projektes Ă€ndern sich darĂŒber hinaus 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 bekommt nach dem Vorgehensmodell der XP ein einsatzbereites Produkt, an dessen Herstellung er aktiv teilgenommen hat. Angefangen mit einer ersten kleinen Version der Software vergröĂert sich der Entwicklungsrahmen stĂ€ndig. Neue FunktionalitĂ€t wird permanent entwickelt, integriert und getestet. Um zu der zu entwickelnden FunktionalitĂ€t zu gelangen, werden gewöhnlich jeweils die Schritte Risikoanalyse, Nutzenanalyse, die Bereitstellung einer ersten ausfĂŒhrbaren Version (Prototyping) und ein Akzeptanztest durchgefĂŒhrt. Das Vorgehensmodell lĂ€sst sich als agil, iterativ und inkrementell charakterisieren. XP ist einerseits definiert als eine Summe von wichtigen einzelnen Bestandteilen (Werte, Prinzipien und Best Practices), andererseits auch ein strukturiertes Vorgehensmodell. [Bearbeiten] NutzenNach Vertretern dieses Vorgehensmodells ist XP âgelebtes Risikomanagementâ: in anderen Vorgehensmodellen wird das mit der Softwareerstellung verbundene Risiko hĂ€ufig nicht unmittelbar berĂŒcksichtigt. XP pflegt einen impliziten Umgang mit dem Risiko. 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[2]. Softwareentwicklungsprojekte sind unterschiedlichen Gefahren ausgesetzt, fĂŒr die Extreme Programming Lösungen anbietet. [Bearbeiten] KundensichtDem Kunden bietet XP, gerade durch seine kurzen Entwicklungszyklen, jederzeit die Möglichkeit, steuernd auf das Projekt einzuwirken. Dieser Nutzen steigt fĂŒr den Kunden mit der ProjektgröĂe oder -dauer. Dadurch soll im Besonderen 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). Vor jedem der kurzen Entwicklungsschritte wird zusammen mit dem Kunden genau festgelegt, was wirklich sinnvoll ist entwickelt zu werden. Die so genannte â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. [Bearbeiten] ProgrammierersichtDen Programmierern möchte XP durch seine in ihrer Zusammenstellung stĂ€ndig wechselnden, zusammenarbeitenden Paare und durch stetig stattfindenden Gedankenaustausch und gemeinsame AbschĂ€tzung einen besseren Ăberblick ĂŒber das Projekt und damit mehr Fachwissen verschaffen, sowohl ĂŒber das Fachkonzept als auch ĂŒber die eingesetzten Technologien. 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, wohingegen der Druck auf einer Person lastet, wenn diese sich als Einzige in einem Modul auskennt. Durch die gleichmĂ€Ăige Verteilung der Programmierer auf die Entwicklungsschritte ist die Arbeitsauslastung laut Methodik gleichmĂ€Ăig verteilt. 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 Behebung. AuĂerdem soll die testgetriebene Entwicklung zu einem leichter wartbaren Programmcode mit besserem Design fĂŒhren. [Bearbeiten] ProjektsichtDem 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 Krankheit 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 fertig zu stellen. 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. [Bearbeiten] Betriebswirtschaftliche SichtExtreme-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. Unternehmen bietet sich Extreme-Programming als eine strategische Alternative bei der Erstellung von Software an. 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:
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 betrachtet werden muss Extreme-Programming und dessen Aufwand aus Sicht des Informationsmanagements, das den Aufwand fĂŒr den unbedingt notwendigen Informationsaustausch festlegt und ökonomisch bewertet. 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 sehr komplex sind, werden auch sehr 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. [Bearbeiten] VorgehenVereinzelt 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 Programmmierern 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. [Bearbeiten] AufbauorganisationNeben 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.
[Bearbeiten] AnforderungsmanagementDer Umgang mit den Anforderungen und deren Verwirklichung ist eine zentrale Komponente XPs. Durch eine Mischung verschiedener, in den folgenden Abschnitten dargestellten 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. [Bearbeiten] PlanungIm 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. Die innerhalb der Iterationen umzusetzenden einzelnen Neuerungen werden mit dem Kunden durch User-Storys, einer schlankeren Form der AnwendungsfĂ€lle (Use-Cases), beschrieben. User-Stories beschreiben die Funktionsanforderungen an ein System aus Sicht eines Akteurs. Eine User-Story folgt dem Muster âAls x kann ich y tun, um z zu erreichen.â Wobei der um-Zweig auch weggelassen werden kann falls die dahinterstehende Absicht klar erkennbar ist. Diese Formulierung dient als Vorlage (Template) der abzuarbeitenden Anforderungen und ist situationsabhĂ€ngig Ă€nderbar. 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. [Bearbeiten] User-StoriesDen User-Stories werden PrioritĂ€tswerte zugeordnet. 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, wobei ein Diagramm hilfreich sein kann. Das Release sollte mit den User-Stories begonnen werden, die das höchste Risiko und den höchsten Nutzen auf sich vereinen. Danach sind diejenige User-Stories zu verwirklichen, die geringes Risiko aber hohen Nutzen haben. AnschlieĂend geht das Team die User-Stories an, die geringes Risiko und geringen Nutzen auf sich vereinen. Die Fertigstellung von User-Stories mit geringem Nutzen aber hohem Risiko ist zu vermeiden. Neben einer AbschĂ€tzung nach Nutzen und Risiko ist fĂŒr die Entscheidung welche User-Stories 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-Stories unbedingt fertiggestellt werden mĂŒssen (Must-haves), welche linearer Natur sind (Je mehr, desto besser. Die Kundenzufriedenheit steigt linear.) 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. [Bearbeiten] AufwandsabschĂ€tzungBei 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-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-Poker, auch als Planning-Game bekannt, eine Punkteanzahl fĂŒr die User-Stories geschĂ€tzt. Nachdem User-Stories abgeschĂ€tzt, priorisiert und einer Iteration zugewiesen wurden, beginnt das Team mit der Umsetzung. User-Stories 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:
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. [Bearbeiten] Entwicklung und AbschlussEs 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 (Stakeholder) das Produkt in der aktuellen Ausbaustufe an und geben RĂŒckmeldungen (Feedback). 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-Stories. 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 (siehe Tools). [Bearbeiten] Abgrenzung zu herkömmlichem VorgehenDie zu entwickelnde FunktionalitĂ€t wird kurz und formlos in User-Stories beschrieben. Das meiste Wissen ĂŒber die FunktionalitĂ€t ihrer Entwicklung befindet sich in den Köpfen der Beteiligten. User-Stories 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-Stories 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-Stories 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. [Bearbeiten] BestandteileXP 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 [3], dessen noch recht neue, evolutionĂ€re Weiterentwicklungen XPs hier ebenfalls BerĂŒcksichtigung finden [4]. Es existiert keine eindeutige Definition von XP, wobei allerdings die Diskussionen und AusfĂŒhrungen der drei Originalverfasser XP am signifikantesten prĂ€gen. [Bearbeiten] WerteXP definiert fĂŒnf zentrale Werte, abstrakte Elemente, die von zentraler Bedeutung sind: Kommunikation, Einfachheit, Feedback, Mut und Respekt, wobei Respekt erst spĂ€ter dazukam. Ohne stetige Beachtung der rudimentĂ€ren 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 existiert ein stetiger 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Ă€tzliches Feedback 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Ă€higes 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 realisiert 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. [Bearbeiten] PrinzipienEs 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 sehr 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 sehr 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ĂŒhrter oder auch manuell ausgefĂŒhrter automatisierbarer 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 einzelnem gröĂeren Schritt der Fall ist. [Bearbeiten] PraktikenExtreme-Programming ist die Summe einzelner, gemeinsam zur Optimierung des Nutzens eingesetzter Best-Practices. XP definiert sich selbst mit diesen Prinzipien allerdings nicht als Allheilmittel. Da, wo es speziellen oder individuellen Anforderungen nicht genĂŒgt, soll es angepasst werden. Viele Prinzipien greifen verzahnt ineinander. Einzelne Praktiken sind an sich nicht neu und werden teilweise bereits lange genutzt, oder sind sogar von trivialer und doch oft unterschĂ€tzter Natur. Die Praktiken sind die greifbaren, konkreten MaĂnahmen, die sich aus den Werten und den Prinzipien ableiten lassen. 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. [Bearbeiten] Traditionelle PraktikenPair-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 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: 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. Man spricht in diesem Zusammenhang auch von Grey-Box-Tests. 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, d. h. der Kunde gibt das Iterationsziel mit einer Auswahl der zu realisierenden User-Stories 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-Stories aufzunehmen. Der Kunde muss immer anwesend oder zumindest erreichbar sein. Neben User-Stories 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. Die Behebung von gefundenen, optimierungsfĂ€higen Stellen wird gewöhnlich sofort durchgefĂŒhrt oder als Fehler (Bug) definiert, der in einer spĂ€teren Iteration behoben wird. 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-Stories 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 small and simpleâ) 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. [Bearbeiten] EvolutionĂ€re PraktikenDie 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. [Bearbeiten] HauptpraktikenDie 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-Stories 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 Stories beschrieben, beispielsweise User-Stories. 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 bauen 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 sehr 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. [Bearbeiten] BegleitpraktikenDie 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. 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, muss die finanzielle Kompensation 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. [Bearbeiten] FlexibilitĂ€tsgrad vs. SteifheitEine 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 Pflege-Kosten, je steifer, desto höher. Einige Steifheitskriterien:
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:
[Bearbeiten] Diskussion[Bearbeiten] Ursprung und AbgrenzungIn Abgrenzung zu traditionellen Vorgehensmodellen wie dem ab 1970 genutzten Wasserfallmodell, bei dem der Softwareentwicklungsprozess in aufeinanderfolgenden Phasen organisiert wird, 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). Nach Jahren der Anwendung von aus heutiger Sicht traditionellen Vorgehensmodellen wie dem 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 [5]. 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.
Der kleinste gemeinsame Nenner aller agilen Vorgehensmodellen ist das âAgile Manifestâ [6]:
Neben XP hat auch Scrum einen gewissen Bekanntheitsgrad erlangt. Neben vielen Ăhnlichkeiten zu 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 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. Aufgrund der wachsenden Nutzung wird XP weiter optimiert: je mehr Projekte gemÀà XP entwickelt werden, desto mehr RĂŒcklauf flieĂt in die Entwicklung 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â. [Bearbeiten] XP und das C3-ProjektDas C3-Projekt wurde ursprĂŒnglich nach dem Wasserfallmodell und mit der Hilfe eines externen Dienstleisters umgesetzt. Nachdem nach knapp einem Jahr kein wesentlicher Fortschritt zu verzeichnen war, wurde der Entwicklungsansatz geĂ€ndert. Nach dem Zusammenschluss der Unternehmen Daimler und Chrysler zu DaimlerChrysler im Jahr 2000 wurde es eingestellt. Es wurde zwar eine 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 die Kommunikation gestaltete sich aufgrund der Mitarbeiterfluktuation schwierig. Die Einstellung des Projektes wurde damit begrĂŒndet, dass das Management das Interesse an dem Projekt verloren hatte [7][8]. Anderen Quellen zufolge 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 bis zum Schluss sowohl ein technischer als auch wirtschaftlicher Erfolg. Eingestellt wurde es aus zwei GrĂŒnden: Es wurde in Smalltalk entwickelt, obwohl Java in dieser Zeit ungemein an PopularitĂ€t und Verbreitung gewann. Das Unternehmen wollte kein System weiterentwickeln das 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-Abteilung finanziert. Der Bitte der IT an andere Abteilungen die Finanzierung fĂŒr spĂ€tere Ausbaustufen zu ĂŒbernehmen wurde nicht entsprochen. Das Projekt wurde daraufhin eingestellt [4]. [Bearbeiten] XP in anderen ProjektenHeute, ĂŒber zehn Jahre nach den ersten XP-Schritten, erfreuen sich XP und andere agile Methoden wachsender Beliebtheit. Untersuchungen von âForrester Researchâ ergaben, dass in Nordamerika und Europa 2005 circa 14 Prozent 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Ă€hlen 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]:
Sabre macht XP fĂŒr eine Steigerung in der ProduktivitĂ€t bei der Erstellung von Software um 42 Prozent verantwortlich. [Bearbeiten] KritikAuch das Vorgehensmodell des Extreme Programming kann unausgewogen eingesetzt werden und kann dann scheitern. Der âideale Kundeâ ist manchmal nicht verfĂŒgbar. Weniger kommunikationsfreudige Mitarbeiter können Schwierigkeiten haben bei XP-Projekten mitzuarbeiten. Sowohl Eigenheiten in der Aufbauorganisation als auch die KomplexitĂ€t und Anforderungen an die zu entwickelnde FunktionalitĂ€t lassen sich mit XP bei qualifizierter Wahrnehmung der Risiken meistern. 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 und/oder die Beteiligten rĂ€umlich getrennt arbeiten, zum Beispiel bei teilweise ausgelagerten Entwicklungen (Outsourcing). Der Einsatz von XP in hochsensiblen Bereichen mit genau zu spezifizierenden Merkmalen, beispielsweise im Automobilbereich, bedarf besonderer Aufmerksamkeit. Auch gröĂere Teams werden als nicht geeignet angesehen um gemÀà XP zu entwickeln. Hier kann eine Aufteilung in viele kleine Teams helfen, wobei die optimale TeamgröĂe bei bis zu ca. 10 Personen liegt. DarĂŒber hinaus gibt es spezifische Unternehmensumgebungen die auf den ersten Blick die Nutzung von XP erschweren. Dazu gehören:
Diesen 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 Funktionspuffer (Puffer im Funktionsumfang, Feature Buffers) und/oder Zeitpuffer (Puffer beim Fertigstellungstermin, Schedule Buffers) einzuplanen. Implizite Funktionspuffer in einer GröĂenordnung von 30 Prozent werden beispielsweise auch von Dynamic Systems Development Method (DSDM), einer weiteren agilen Entwicklungsmethode, angelegt. Ein weiterer hĂ€ufiger Kritikpunkt ist, dass XP fĂŒr Festpreisprojekte nicht geeignet sei. AnsĂ€tze, um XP in Festpreisprojekten einzusetzen, sind: VersicherungsprĂ€mien auf die SchĂ€tzung, User-Stories (bzw. die Story-Cards) werden zum Vertragsgegenstand, Prognosen von Risiken auf ProduktivitĂ€t und den verbleibenden Aufwand 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 das voll seinen WĂŒnschen entspricht. Auch einzelne Praktiken stehen in Kritik. So ist es teilweise schwer zu vermitteln, dass Pair-Programming tatsĂ€chlich eine ProduktivitĂ€tssteigerung und besseres Design nach sich ziehen. Viele halten zwei Personen an einem Rechner, von denen einer ânur zugucktâ, nicht fĂŒr effizient. Auch die Bestrebung immer das einfachste Design und die einfachste Lösung zu wĂ€hlen kann kontraproduktiv sein. HĂ€ufig sind allerdings spĂ€tere Ănderungen oder Erweiterungen schnell zu antizipieren und können bereits frĂŒhzeitig im Design der Software berĂŒcksichtigt werden. Die stets erneute Erstellung von TestfĂ€llen und die automatisierte, permanente AusfĂŒhrung der Tests kann in sehr komplexen oder nebenlĂ€ufigen Anwendungen und verteilten Systemen sehr aufwĂ€ndig sein. Aufgrund der strikten Ausrichtung auf die KundenwĂŒnsche kann es vorkommen, dass FunktionalitĂ€tsĂ€nderungen zu einer Ănderung von Kernbereichen einer Anwendung, z.B. von Datenstrukturen, fĂŒhren, wenn diese zu eng implementiert waren, um eine möglichst hohe Ăbereinstimmung der KundenwĂŒnsche mit der Programmlogik zu erzielen. Dies fĂŒhrt unter UmstĂ€nden zu langwierigen und kostenintensiven Pflegearbeiten. 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. [Bearbeiten] Siehe auch
[Bearbeiten] Literatur
[Bearbeiten] Quellen
[Bearbeiten] WeblinksDeutsch
Englisch
Tools (Auswahl)
Fachkonferenzen zum Thema
|