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.[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.
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.[3] Das evolutionäre Projektmanagement[4][5] und die adaptive Software-Entwicklung[6] entstanden in den frühen 1970er Jahren und können als Vorläufer der agilen Softwareentwicklung verstanden werden.[7] Die adaptive Softwareentwicklung entwickelte sich parallel zum Design Thinking als iterative und evolutionäre Herangehensweise zur Behandlung komplexer Probleme.[8]
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.“
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.[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 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[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) 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.[21]
Siehe auch
Literatur
- Kent Beck: Extreme Programming. Die revolutionäre Methode für Softwareentwicklung in kleinen Teams. München u. a. 2000, ISBN 3-8273-1709-6.
- Ken Schwaber: Agiles Projektmanagement mit Scrum. Unterschleißheim 2007, ISBN 978-3-86645-631-0.
- 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.
Weblinks
- Manifest für Agile Softwareentwicklung
- The New Methodology, ein Artikel von Martin Fowler, in welchem u. a. Agile Methoden verglichen werden
- Agile Alliance (englisch)
Einzelnachweise
- ↑ Agile Softwareentwicklung. In: Gabler Wirtschaftslexikon; abgerufen am 15. Juli 2020
- ↑ Fidelity – The Lost Dimension of the Iron TriangleAvailAgility. In: AvailAgility. 22. Dezember 2009, abgerufen am 3. März 2017.
- ↑ 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.'"
- ↑ Evolutionary Project Management (Original page, external archive). Gilb, archiviert vom am 27. März 2016; abgerufen am 30. April 2017.
- ↑ Evolutionary Project Management (New page). Gilb, archiviert vom am 7. Februar 2018; abgerufen am 30. April 2017. Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- ↑ 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.
- ↑ Tom Gilb: Evolutionary development. In: ACM SIGSOFT Software Engineering Notes. 6. Jahrgang, Nr. 2, 1. April 1981, S. 17, doi:10.1145/1010865.1010868 (englisch).
- ↑ Julio Cesar Pereira, Rosaria de F.S.M. Russo: Design Thinking Integrated in Agile Software Development: A Systematic Literature Review. In: Procedia Computer Science. Band 138, 2018, S. 775–782, doi:10.1016/j.procs.2018.10.101 (elsevier.com [abgerufen am 22. Juli 2022]).
- ↑ nku.edu ( vom 24. Januar 2021 im Internet Archive) (PDF; 170 kB). Abgerufen am 7. April 2024.
- ↑ 15th Annual State Of Agile Report | Digital.ai. Abgerufen am 27. Mai 2022 (englisch).
- ↑ State of Agile Survey | State of Agile. 24. April 2020, archiviert vom am 24. April 2020; abgerufen am 4. Januar 2022. Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.
- ↑ The Agile Alliance: What is Agile Software Development? Abgerufen am 25. März 2018.
- ↑ Manifesto for Agile Software Development. Abgerufen am 15. Juli 2020.
- ↑ Prinzipien hinter dem Agilen Manifest. Abgerufen am 27. Mai 2022.
- ↑ David Bock’s Weblog. Jroller.com, archiviert vom am 11. Januar 2006; abgerufen am 15. Juli 2020.
- ↑ 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.
- ↑ Joe Little: Agile & Business: The Nokia Test. In: Agile & Business. 2. Dezember 2007, abgerufen am 4. Januar 2022.
- ↑ Kelly Waters: How Agile Are You? (Take This 42 Point Test). 28. Januar 2008, archiviert vom (nicht mehr online verfügbar) am 5. Mai 2014; abgerufen am 15. Juli 2020 (englisch).
- ↑ Mayberg: Karlskrona test. Abgerufen am 4. Januar 2022 (englisch).
- ↑ XP und RUP – Passt das zusammen? (PDF; 139 kB)
- ↑ Status Quo (Scaled) Agile 2020. Hochschule Koblenz, abgerufen am 20. Juli 2020.