Agile Softwareentwicklung
Kernpunkte agiler Entwicklungsmethoden
nach \cite{Bleek2008}
priorisierte Anforderungen sind die Grundlage der Entwicklung
Kommunikation mit dem Kunden
-
Kunde entscheidet über Prioritäten (neue Features, Bugfixing etc.)
zusätzliche Anforderungen können leicht und schnell integriert werden
das Team soll ständig dazulernen
lauffähige Software abliefern
die verfügbare Arbeitszeit muss realistisch
verplant werden
überschaubare Länge der Tasks/Aufgaben der Entwickler (max. 1 Woche)
z.B. 70% produktive Zeit wegen Urlaub, unvorhergesehenen Aufgaben etc.
Zeit für Bugfixing, Retrospektiven etc. muss eingeplant werden
Timeboxing → Termine stehen fest, Funktionen werden ggfs. reduziert
einfache Regeln → keine Zeitverschwendung durch lange Lernzeiten für Prozessmodell
viel Freiheit für die Entwickler → dennoch sollten die wenigen Regeln strikt eingehalten werden
wenig Dokumentation
Agile Werte
nach \cite[S. 10ff.]{Bleek2008}
Kommunikation
Einfachheit
technisch: nur das bauen, was benötigt wird
organisatotisch: Entwickler organisieren sich weitestgehend selbst
methodisch: keine überbordenden Prozesse, sondern einfach umzusetzendes Vorgehen
Rückkopplung
Mut
Respekt
Das agile Manifest
Das Original: Manifesto for Agile Software Development
Individuen und Interaktionen vor Prozessen und Werkzeugen
laufende Software vor ausgedehnter Dokumentation
Zusammenarbeit mit dem Kunden vor Vertragsverhandlungen
Reaktion auf Veränderungen vor Planverfolgung
Pro und Contra
nach \cite[S. 159ff.]{Bleek2008}
Contra aufgrund des Kunden
kein SMARTes Projektziel
Prozess ist fest vorgegeben (z.B. bei Behörden)
Nice-to-have-Projekt → es gibt keinen Kunden, der Anforderungen definiert
lange Entscheidungswege beim Kunden → mangelhafte Rückkopplung
langwierige Change-Request-Verfahren → langer Stillstand im Projekt
kein Anwenderkontakt möglich → keine Rückkopplung möglich
Kundenrolle nicht oder zeitlich zu knapp besetzt → lange Entscheidungswege, keine klare Vision des Kunden vorhanden
Erstellung von lebenskritischer Software → wichtige Vorgaben zu Tests, Dokumentation etc.
Angst und organisierte Unverantwortlichkeit → niemand übernimmt Verantwortung
Kunde steht nicht hinter dem Vorgehen → Kunde nimmt seine Rolle nicht ernst oder fürchtet Mehrarbeit
keine Arbeit vor Ort möglich → mangelhafte Rückkopplung
Festpreisprojekte → Erkenntnisse können/dürfen nicht in den laufenden Prozess eingearbeitet werden
Kunde ist eine Behörde → meist treffen mehrere der obigen Punkte zu
Contra aufgrund der Entwickler
keine Erfahrung mit agilen Projekten und kein Coach vorhanden
Lernunfähigkeit oder -unwillen → agile Entwicklung bedeutet Lernen
Kultur von Befehl und Gehorsam → agile Entwicklung bedeutet Eigenverantwortung, Fehler machen dürfen etc.
Entwickler scheuen Anwenderkontakt → keine Rückkopplung möglich
hohe Mitarbeiterfluktuation → Team kann sich nicht einspielen
keine Arbeit vor Ort gewünscht → Rückkopplung wird behindert
kein Management-Commitment auf agile Methoden → Erlaubnis, Fehler machen zu dürfen ist sehr wichtig
Contra aufgrund der Technologien
Pro aufgrund des Kunden
Start-ups → müssen schnell Ergebnisse liefern
innovative Projekte → brauchen Lernerfolge, haben Commitment der Teilnehmer
neue Anwendungsbereiche → schnelle Lernerfolge
schnelle Auslieferung notwendig (Time-to-Market)
nutzenorientierte Perspektive des Kunden (anstatt kostenorientiert)
Transparenz des Projektfortschritts → Risikominimierung
Pro aufgrund der Entwickler
neugierige Entwickler → wollen Kunden verstehen, wollen Neues ausprobieren, sind risikobereit, wollen sich einbringen
Arbeit vor Ort ist sowieso gegeben
konkrete (Team-)Probleme sind bekannt → agile Entwicklung kann durch Rückkopplungen gezielt Probleme lösen
Pro aufgrund von Technologien
inkrementelle Compiler → schnelle Rückkopplung beim Entwickler
interpretierte Scriptsprachen
Refactoring-Browser vorhanden → leichte Änderbarkeit des Quelltextes
Test-Frameworks vorhanden oder bekannt
Ist Agile Entwicklung ingenieursmäßig?
nach \cite{Coldewey2008}
Agiles Arbeiten ist ingenieursmäßiges Arbeiten
Agiles Arbeiten hat die gleichen Wurzeln wie traditionelle Prozesse
bereits auf der Software-Engineering-Konferenz in Garmisch 1968 sagte Andy Kinslow, dass er Design als Prozess versteht aus Entwurf in Form von Flussdiagrammen, Programmieren nach diesen Diagrammen und zurückgehen, wenn man feststellt, dass das Diagramm falsch ist → iterative Entwicklung
auf derselben Konferenz wurde das Vorgehen, erst alles detailliert zu spezifizieren und dann erst zu implementieren als "das tödlichste in der Softwareentwicklung" bezeichnet (Douglas Ross)
viele Unterzeichner des agilen Manifests waren vorher in der Pattern-Bewegung aktiv
viele Methoden der traditionellen Verfahren werden auch bei agiler Entwicklung benutzt: Testautomatisierung, Versionskontrolle, Kapselung, Schichtentrennung etc.
Agiles Arbeiten verfolgt die Linie der betriebswirtschaftlichen Ausrichtung
die Erfahrung zeigt, dass es wesentlich wirtschaftlicher sein kann, die Anforderungen möglichst lange änderbar zu halten, als von Anfang an, alles haarklein zu spezifizieren
die detaillierte Spezifikation kostet viel und kann zum Scheitern von Projekten führen
Entwickler und Kunde verhandeln bei agiler Entwicklung gemeinsam, sodass bessere Ergebnisse (→ Fachbereich und Entwickler arbeiten zusammen) dabei herauskommen