Agile Softwareentwicklung

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Agile Software-Entwicklung)
Zur Navigation springen Zur Suche springen

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

[Bearbeiten | Quelltext bearbeiten]

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

[Bearbeiten | Quelltext bearbeiten]

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

Agile Alliance, 2018[12]

Agile Leitsätze

[Bearbeiten | Quelltext bearbeiten]

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.“

Kent Beck, Mike Beedle, Arie van Bennekum, Alistair Cockburn, Ward Cunningham, Martin Fowler, James Grenning, Jim Highsmith, Andrew Hunt, Ron Jeffries, Jon Kern, Brian Marick, Robert C. Martin, Steve Mellor, Ken Schwaber, Jeff Sutherland und Dave Thomas[13]

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

[Bearbeiten | Quelltext bearbeiten]

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 Frameworks

[Bearbeiten | Quelltext bearbeiten]

Zu den bekannten agilen Frameworks zählen:

Agile Praktiken

[Bearbeiten | Quelltext bearbeiten]

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:

Agile Bewertung

[Bearbeiten | Quelltext bearbeiten]

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

[Bearbeiten | Quelltext bearbeiten]

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]

Wiktionary: agil – Bedeutungserklärungen, Wortherkunft, Synonyme, Übersetzungen

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Agile Softwareentwicklung. In: Gabler Wirtschaftslexikon; abgerufen am 15. Juli 2020
  2. Fidelity – The Lost Dimension of the Iron TriangleAvailAgility. In: AvailAgility. 22. Dezember 2009, abgerufen am 3. März 2017 (englisch).
  3. 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.'"
  4. Evolutionary Project Management (Original page, external archive). Gilb, archiviert vom Original am 27. März 2016; abgerufen am 30. April 2017 (englisch).
  5. Evolutionary Project Management (New page). Gilb, archiviert vom Original am 7. Februar 2018; abgerufen am 30. April 2017 (englisch).
  6. 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 (englisch).
  7. 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).
  8. 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 (englisch, elsevier.com [abgerufen am 22. Juli 2022]).
  9. nku.edu (Memento vom 24. Januar 2021 im Internet Archive) (PDF; 170 kB). Abgerufen am 7. April 2024.
  10. 15th Annual State Of Agile Report | Digital.ai. Abgerufen am 27. Mai 2022 (englisch).
  11. State of Agile Survey | State of Agile. 24. April 2020, archiviert vom Original am 24. April 2020; abgerufen am 4. Januar 2022 (englisch).
  12. The Agile Alliance: What is Agile Software Development? Abgerufen am 25. März 2018 (englisch).
  13. Manifesto for Agile Software Development. Abgerufen am 15. Juli 2020 (englisch).
  14. Prinzipien hinter dem Agilen Manifest. Abgerufen am 27. Mai 2022 (englisch).
  15. David Bock’s Weblog. Jroller.com, archiviert vom Original am 11. Januar 2006; abgerufen am 15. Juli 2020 (englisch).
  16. 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 (englisch).
  17. Joe Little: Agile & Business: The Nokia Test. In: Agile & Business. 2. Dezember 2007, abgerufen am 4. Januar 2022 (englisch).
  18. Kelly Waters: How Agile Are You? (Take This 42 Point Test). 28. Januar 2008, archiviert vom Original (nicht mehr online verfügbar) am 5. Mai 2014; abgerufen am 15. Juli 2020 (englisch).
  19. Mayberg: Karlskrona test. Abgerufen am 4. Januar 2022 (englisch).
  20. XP und RUP – Passt das zusammen? (PDF; 139 kB)
  21. Status Quo (Scaled) Agile 2020. Hochschule Koblenz, abgerufen am 20. Juli 2020 (englisch).