Agile Softwareentwicklung (von lateinischagilis „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.[1] 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[2] 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.
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,[9] spätestens seit der ersten jährlichen Umfrage von VersionOne (2006) ist mit weitem Abstand Scrum die gängigste agile Methode.[10]
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,[11] 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.“
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.“
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.[14]
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 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:
Eine agile Bewertung kann Auskunft geben, inwieweit agile Werte in Prozesse und Methoden umgesetzt wurden.
Mit dem Agility Index Measurements[15] gibt es den Vorschlag, Softwareprojekte genauso wie bei CMMI anhand fester Faktoren zu bewerten. Der ähnlich benannte Agility Measurement Index[16] 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,[17] 42-Points-Test[18], Karlskrona Test[19]).
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.[20] 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) Agile2020 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.[21]
Ingrid und Peter Gerstbach: Design Thinking in IT Projekten - Agile Problemlösungskompetenz in einer digitalen Welt. München 2020, ISBN 978-3-446-45959-5.
↑Gerald M. Weinberg, as quoted in Craig Larman, Victor R. Basili: Iterative and Incremental Development: A Brief History. In: IEEE Computer. 36. Jahrgang, Nr.3, Juni 2003, S.47–56, doi:10.1109/MC.2003.1204375 (englisch, acm.org): “Although many view iterative and incremental development as a modern practice, its application dates as far back as the mid-1950s.” "We were doing incremental development as early as 1957 in Los Angeles, under the direction of Bernie Dimsdale at IBM's Service Bureau Corporation. He was a colleague of John von Neumann, so perhaps he learned it there, or assumed it as totally natural. I do remember Herb Jacobs (primarily, though we all participated) developing a large simulation for Motorola, where the technique used was, as far as I can tell ... All of us, as far as I can remember, thought waterfalling of a huge project was rather stupid, or at least ignorant of the realities. I think what the waterfall description did for us was make us realize that we were doing something else, something unnamed except for 'software development.'"
↑E. A. Edmonds: A Process for the Development of Software for Nontechnical Users as an Adaptive System. In: General Systems. 19. Jahrgang, 1974, S.215–18.
↑Julio Cesar Pereira, Rosaria de F.S.M. Russo: Design Thinking Integrated in Agile Software Development: A Systematic Literature Review. In: Procedia Computer Science. Band138, 2018, S.775–782, doi:10.1016/j.procs.2018.10.101 (elsevier.com [abgerufen am 22. Juli 2022]).
↑Subhajit Datta: Agility Measurement Index: A Metric for the Crossroads of Software Development Methodologies. ACM, New York NY 2006, ISBN 1-59593-315-8, S.271–273, doi:10.1145/1185448.1185509.