# Agile Softwareentwicklung

Agile Softwareentwicklung (von lateinisch agilis „flink, beweglich“) bezeichnet Ansätze im Softwareentwicklungsprozess, die die Transparenz und Veränderungsgeschwindigkeit erhöhen und zu einem schnelleren Einsatz des entwickelten Systems führen sollen, um so Risiken und Fehlentwicklungen im Entwicklungsprozess zu minimieren. Dazu wird versucht, die Entwurfsphase auf ein Mindestmaß zu reduzieren und im Entwicklungsprozess so früh wie möglich zu ausführbarer Software zu gelangen. Diese wird in regelmäßigen, kurzen Abständen mit dem Kunden abgestimmt. So soll es möglich sein, flexibel auf Kundenwünsche einzugehen, um so die Kundenzufriedenheit insgesamt zu erhöhen.
Agile Softwareentwicklung zeichnet sich durch selbstorganisierende Teams sowie eine iterative und inkrementelle Vorgehensweise aus.
Agile Ansätze können sich auf Teile der Softwareentwicklung beziehen (z. B. bei Agile Modeling) oder auf den gesamten Softwareentwicklungsprozess (z. B. bei Extreme Programming oder Scrum). Das Ziel dabei ist, den Entwicklungsprozess flexibler und schlanker zu machen, als das bei den klassischen, plangetriebenen Vorgehensmodellen der Fall ist.
Klassische Ansätze gelten oft als schwergewichtig und bürokratisch (z. B. Rational Unified Process oder V-Modell). Ein Vorwurf ihnen gegenüber lautet: Je mehr nach Plan gearbeitet wird, desto mehr bekommt man das, was geplant wurde, aber nicht das, was gebraucht wird.

## Geschichtliche Entwicklung

Die agile Softwareentwicklung als Methode der kontinuierlichen Anpassung hat ihren Ursprung im inkrementellen Vorgehensmodell in der Softwareentwicklung. Dessen Entstehung kann bis ins Jahr 1957 zurückverfolgt werden. Das evolutionäre Projektmanagement und die adaptive Software-Entwicklung entstanden in den frühen 1970er Jahren und können als Vorläufer der agilen Softwareentwicklung verstanden werden. Die adaptive Softwareentwicklung entwickelte sich parallel zum Design Thinking als iterative und evolutionäre Herangehensweise zur Behandlung komplexer Probleme.
Die ersten konkreten Ansätze zu agiler Softwareentwicklung sind Anfang der 1990er Jahre zu finden und erreichten 1999 erstmals Popularität, als Kent Beck das erste Buch zu Extreme Programming veröffentlichte. Dies ebnete den Weg für andere agile Prozesse und Methoden. Zu Beginn war das Extreme Programming die gängigste agile Methode, spätestens seit der ersten jährlichen Umfrage von VersionOne (2006) ist mit weitem Abstand Scrum die gängigste agile Methode.
Die Bezeichnung agil wurde im Februar 2001 bei einem Treffen in Utah auf Vorschlag von Mike Beedle ausgewählt, als Ersatz für das bis dahin gebräuchliche leichtgewichtig (engl. lightweight). Bei diesem Treffen wurde auch das Agile Manifest (siehe unten) formuliert.
2005 wurde von Forrester Research untersucht, dass 14 % der Unternehmungen in Nordamerika und Europa ihre Software mit agilen Prozessen entwickeln; weitere 19 % dachten über die Nutzung nach. VersionOne stellte 2013 fest, dass bereits 84 % aller Unternehmen agile Prozesse einsetzen, 2016 waren es 95 %.

## Bestandteile agiler Softwareentwicklung

   „Agile Softwareentwicklung ist ein Sammelbegriff für eine Reihe von Methoden und Praktiken, die auf Werten und Prinzipien des Manifests Agiler Softwareentwicklung basieren.“

### Agile Leitsätze

Vier Leitsätze wurden im Februar 2001 als Agiles Manifest (englisch Manifesto for Agile Software Development oder kurz Agile Manifesto) formuliert:
   „Wir erschließen bessere Wege, Software zu entwickeln, indem wir es selbst tun und anderen dabei helfen. Durch diese Tätigkeit haben wir diese Werte zu schätzen gelernt:
   * Individuen und Interaktionen sind wichtiger als Prozesse und Werkzeuge
   * Funktionierende Software ist wichtiger als umfassende Dokumentationen
   * Zusammenarbeit mit dem Kunden ist wichtiger als Vertragsverhandlungen
   * Reagieren auf Veränderung ist wichtiger als das Befolgen eines Plans
   Das heißt, obwohl wir die Werte auf der rechten Seite wichtig finden, schätzen wir die Werte auf der linken Seite höher ein.“
Unter den 17 Erstunterzeichnern befinden sich die Begründer des Extreme Programming (Kent Beck, Ward Cunningham, Ron Jeffries), die Begründer von Scrum (Ken Schwaber, Jeff Sutherland), Vertreter von DSDM (Arie van Bennekum) und FDD (Jon Kern) sowie die Begründer von ASD (Jim Highsmith), Crystal (Alistair Cockburn) und pragmatic programming (Dave Thomas, Andrew Hunt).

### Agile Prinzipien

Agile Prinzipien dienen als Leitsätze für agile Arbeit. Manchmal werden agile Prinzipien auch als Methode bezeichnet. Bei schwergewichtigen Prozessen werden Prinzipien von umfangreichen Methodenbeschreibungen überlagert und lassen Prinzipien in den Hintergrund treten; zudem wurden Prozesse früher hauptsächlich über Methoden, nicht über Prinzipien definiert. Die Benennung der Prinzipien soll ihnen gegenüber formalen Methoden wieder mehr Gewicht verleihen.
Im Agilen Manifest sind zwölf Prinzipien aufgelistet.
* Unsere höchste Priorität ist es, den Kunden durch frühe und kontinuierliche Auslieferung wertvoller Software zufrieden zu stellen.
* Heiße Anforderungsänderungen selbst spät in der Entwicklung willkommen. Agile Prozesse nutzen Veränderungen zum Wettbewerbsvorteil des Kunden.
* Liefere funktionierende Software regelmäßig innerhalb weniger Wochen oder Monate und bevorzuge dabei die kürzere Zeitspanne.
* Fachexperten und Entwickler müssen während des Projektes täglich zusammenarbeiten.
* Errichte Projekte rund um motivierte Individuen. Gib ihnen das Umfeld und die Unterstützung, die sie benötigen und vertraue darauf, dass sie die Aufgabe erledigen.
* Die effizienteste und effektivste Methode, Informationen an und innerhalb eines Entwicklungsteams zu übermitteln, ist im Gespräch von Angesicht zu Angesicht.
* Funktionierende Software ist das wichtigste Fortschrittsmaß.
* Agile Prozesse fördern nachhaltige Entwicklung. Die Auftraggeber, Entwickler und Benutzer sollten ein gleichmäßiges Tempo auf unbegrenzte Zeit halten können.
* Ständiges Augenmerk auf technische Exzellenz und gutes Design fördert Agilität.
* Einfachheit -- die Kunst, die Menge nicht getaner Arbeit zu maximieren -- ist essenziell.
* Die besten Architekturen, Anforderungen und Entwürfe entstehen durch selbstorganisierte Teams.
* In regelmäßigen Abständen reflektiert das Team, wie es effektiver werden kann und passt sein Verhalten entsprechend an.
Der Übergang zwischen Prinzipien und Methoden ist fließend.

## Agile Methoden
### Agile Frameworks

Zu den bekannten agilen Frameworks zählen:
* Scrum
* Extreme Programming (XP)
* Kanban
* Scrumban
* DSDM
* Feature Driven Development (FDD)
* Adaptive Software Development (ASD)
* Crystal
* Lean Startup

### Agile Praktiken

Agile Praktiken sollen dazu dienen, dass die Aufwandskurve möglichst flach bleibt; d. h., Änderungen oder neue Anforderungen sollen mit wenig Aufwand berücksichtigt werden können. Beispiele für agile Praktiken sind:
* Kontinuierliche Integration
* ständige Refaktorierungen
* Continuous Delivery
* Continuous Deployment
* Paarprogrammierung
* Testgetriebene Entwicklung
* Behavior Driven Development
* Story-Cards
* schnelle Codereviews
* Agiles Testen
* Rapid Application Development

## Agile Bewertung

Eine agile Bewertung kann Auskunft geben, inwieweit agile Werte in Prozesse und Methoden umgesetzt wurden.
Mit dem Agility Index Measurements gibt es den Vorschlag, Softwareprojekte genauso wie bei CMMI anhand fester Faktoren zu bewerten. Der ähnlich benannte Agility Measurement Index bewertet die Entwicklung von Softwareprojekten in fünf unterschiedlichen Dimensionen (Dauer, Risiko, Erfindungsreichheit, Aufwand und Interaktion). Weiterhin gibt es agile Selbstbewertungen, um zu bestimmen, ob ein Team auf agile Weise arbeitet (Nokia Test, 42-Points-Test, Karlskrona Test).

## Kritische Betrachtung

Wesentliche Gründe für agile Herangehensweisen sind, dass sich die Ziele und das Umfeld (beteiligte Personen, Marktanforderungen, technisches Umfeld/Schnittstellen) im Laufe des Projektes ändern. Die agilen Methoden eignen sich daher besonders gut, um auf geänderte Anforderungen zu reagieren, da die Entwicklungszyklen in der Regel kurz angelegt sind. Die Anforderungen werden häufig nur knapp beschrieben und erst kurz vor Beginn von Umsetzung und Test ausformuliert. Durch die kurzen Zeiträume sind (nachträgliche) Änderungen der Anforderungen relativ leicht möglich.
Der Rational Unified Process (RUP) wird von vielen Vertretern agiler Methoden (viele von ihnen haben das Agile Manifest unterzeichnet) als nicht-agiler, schwergewichtiger Prozess aufgefasst. Das ist allerdings umstritten. Weder das V-Modell noch RUP verbieten den Einsatz von agilen Elementen, wie Rapid Prototyping; weder vor noch während der Phasen Anforderungsdefinition oder Design.
Auch plangetriebene Vorgehensmodelle regeln, wie Änderungen im Projekt berücksichtigt werden können; wenngleich der Aufwand und die geforderte Dokumentation vergleichsweise höher sind.
Klare inhaltliche Vorgaben (Pflichtenheft) sind bei einem agilen Vorgehen schwierig, da die Anforderungen per Definition erst zur Projektlaufzeit entwickelt werden.
Agile Methoden werden manchmal fälschlicherweise als Allheilmittel bei Projektproblemen angesehen. Hinderungsgründe für ein erfolgreiches Projekt (z. B. Interessens- oder Zielkonflikte, mangelnde Unterstützung durch Auftraggeber oder Sponsor) können für agile genauso wie für traditionelle Verfahren gelten.
Die Studie Status Quo (Scaled) Agile 2020 der Hochschule Koblenz zeigte eine in fast allen Dimensionen und in der Gesamtbewertung verbesserte Leistungsfähigkeit agiler Methoden gegenüber klassischem Projektmanagement. Dabei wurde Scrum als besonders erfolgreich bewertet.