Definition

Agile Software Development

Agile Software Development - auch einfach als Agile bezeichnet - ist eine Art von Entwicklungsmethodik, die die Notwendigkeit von Flexibilität antizipiert und ein gewisses Maß an Pragmatismus für die Fertigstellung/Lieferung des fertigen Produkts anwendet. Agile Software Development erfordert in vielen Unternehmen einen kulturellen Wandel, da sie sich auf die saubere Bereitstellung einzelner Teile der Software und nicht auf die gesamte Anwendung konzentriert.

Zu den Vorteilen von Agile gehört die Fähigkeit, Teams in einer sich wandelnden Landschaft zu unterstützen und sich gleichzeitig auf die effiziente Bereitstellung von Geschäftswert zu konzentrieren. Die von Agile unterstützte Kooperationskultur verbessert auch die Effizienz im gesamten Unternehmen, da die Teams zusammenarbeiten und ihre spezifischen Rollen im Prozess verstehen. Schließlich können Unternehmen, die Agile Softwareentwicklung einsetzen, sicher sein, dass sie ein qualitativ hochwertiges Produkt auf den Markt bringen, da die Tests während der gesamten Entwicklung durchgeführt werden, was die Möglichkeit bietet, bei Bedarf Änderungen vorzunehmen und die Teams über mögliche Probleme zu informieren.

Agile hat Waterfall als Entwicklungsmethodik der Wahl in den meisten Unternehmen ersetzt, ist aber selbst in Gefahr, von der wachsenden Popularität von DevOps in den Hintergrund gedrängt oder abgelöst zu werden.

Die vier Werte von Agile

Im Jahr 2001 versammelten sich 17 Softwareentwickler, um Konzepte rund um die Idee der „schlanken“ Softwareentwicklung zu diskutieren, und schließlich entstand das Agile Manifesto. Das Manifesto umreißt die vier Kernwerte von Agile, und obwohl es Diskussionen darüber gegeben hat, ob das Manifesto seinen Nutzen überlebt hat, setzt es sich im Kern der Agile-Bewegung fort.

Die vier im Agile Manifest dargestellten Kernwerte sind:

Individuelle Interaktionen sind wichtiger als Prozesse und Werkzeuge. Menschen treiben den Entwicklungsprozess voran und reagieren auf Geschäftsanforderungen. Sie sind der wichtigste Teil der Entwicklung und sollten über Prozessen und Werkzeugen stehen. Wenn die Prozesse oder Werkzeuge die Entwicklung vorantreiben, dann wird das Team weniger wahrscheinlich reagieren und sich an Veränderungen anpassen und somit weniger wahrscheinlich die Kundenbedürfnisse erfüllen.

Fokus auf funktionierende Software und nicht auf gründliche Dokumentation. Vor Agile wurde viel Zeit damit verbracht, das Produkt während der gesamten Entwicklung bis zur Auslieferung zu dokumentieren. Die Liste der dokumentierten Anforderungen war lang und würde zu großen Verzögerungen im Entwicklungsprozess führen. Agile verzichtet zwar nicht auf die Verwendung von Dokumentation, optimiert sie aber auf eine Weise, die dem Entwickler nur die Informationen liefert, die er für die Arbeit benötigt - wie z.B. User Stories. Das Agile Manifesto legt weiterhin Wert auf den Prozess der Dokumentation, aber es legt höheren Wert auf funktionierende Software.

Agiler Software-Entwicklungszyklus
Abbildung 1: Agiler Software-Entwicklungszyklus

Zusammenarbeit statt Vertragsverhandlungen. Agile konzentriert sich auf die Zusammenarbeit zwischen Kunde und Projektleiter und nicht auf die Verhandlungen zwischen beiden, um die Details der Lieferung festzulegen. Die Zusammenarbeit mit dem Kunden bedeutet, dass sie nicht nur am Anfang und Ende des Entwicklungsprozesses, sondern auch während des gesamten Entwicklungsprozesses einbezogen werden, was es den Teams erleichtert, die Bedürfnisse ihrer Kunden zu erfüllen. So kann beispielsweise bei der Agile Softwareentwicklung der Kunde in verschiedenen Zeitabständen für Demos des Produkts einbezogen werden. Der Kunde könnte aber auch täglich anwesend sein und mit den Teams interagieren, an allen Meetings teilnehmen und sicherstellen, dass das Produkt seinen Wünschen entspricht.

Fokus auf die Reaktion auf Veränderungen. Traditionelle Softwareentwicklung diente dazu, Veränderungen zu vermeiden, weil sie als unerwünschte Kosten angesehen wurden. Agile beseitigt diese Idee. Die kurzen Iterationen im Agile Zyklus ermöglichen einfache Änderungen und helfen dem Team, den Prozess an seine Bedürfnisse anzupassen und nicht umgekehrt. Insgesamt ist Agile Software Development der Ansicht, dass Veränderungen immer ein Weg sind, das Projekt zu verbessern und einen Mehrwert zu schaffen.

Die 12 Prinzipien von Agile

Das Agile Manifesto skizzierte auch 12 Grundprinzipien für den Entwicklungsprozess. Das sind sie:

  1. Kundenzufriedenheit durch frühzeitige und kontinuierliche Lieferung wertvoller Arbeit.
  2. Unterteilen Sie große Arbeiten in kleinere Aufgaben, die schnell erledigt werden können.
  3. Erkennen Sie, dass die beste Arbeit aus selbstorganisierten Teams entsteht.
  4. Motivierten Menschen das Umfeld und die Unterstützung bieten, die sie brauchen, und ihnen vertrauen, damit sie die Arbeit erledigen können.
  5. Prozesse schaffen, die nachhaltige Anstrengungen fördern.
  6. Halten Sie ein konstantes Tempo für abgeschlossene Arbeiten ein.
  7. Begrüßen Sie wechselnde Anforderungen, auch spät in einem Projekt.
  8. Stellen Sie das Projektteam und die Business Owner täglich während des gesamten Projekts zusammen.
  9. Lassen Sie das Team in regelmäßigen Abständen darüber nachdenken, wie Sie effektiver werden können, und passen Sie dann das Verhalten entsprechend an.
  10. Messen Sie den Fortschritt anhand des Umfangs der abgeschlossenen Arbeiten.
  11. Ständiges Streben nach Exzellenz.
  12. Nutzen Sie die Veränderung zu Ihrem Wettbewerbsvorteil.

Der Agile Software-Entwicklungszyklus

Der Entwicklungszyklus des Agile Software Developments kann in sechs Schritte unterteilt werden: Konzept, Beginn, Iteration/Konstruktion, Freigabe, Produktion und Stilllegung.

Der erste Schritt, das Konzept, enthält die Identifizierung von Geschäftsmöglichkeiten in jedem potenziellen Projekt sowie eine Schätzung der Zeit und des Arbeitsaufwands, die für den Abschluss des Projekts benötigt werden. Anhand dieser Informationen können dann Projekte priorisiert und nach technischer und wirtschaftlicher Machbarkeit beurteilt werden. Ebenso wird hier bestimmt, welche Projekte es wert sind, verfolgt zu werden.

Im zweiten Schritt, dem Beginn, werden die Teammitglieder identifiziert, die Finanzierung festgelegt und die ersten Anforderungen mit dem Kunden besprochen. Es sollte auch eine Zeitleiste erstellt werden, die die verschiedenen Verantwortlichkeiten der Teams umreißt und klar definiert, wann die Arbeit für jeden Sprint abgeschlossen sein soll. Ein Sprint ist eine bestimmte Zeitspanne, in der bestimmte Arbeiten abgeschlossen und zur Überprüfung vorbereitet werden müssen.

Der dritte Schritt, Iteration/Konstruktion, ist, wenn Teams beginnen, eine funktionierende Software zu erstellen, die auf Anforderungen und kontinuierlichem Feedback basiert. Der Agile Softwareentwicklungszyklus basiert auf Iterationen - oder einzelnen Entwicklungszyklen -, die aufeinander aufbauen und in den nächsten Schritt des gesamten Entwicklungsprozesses bis zum Abschluss des Projekts führen. Jede Iteration (oder auch Durchlauf) dauert in der Regel zwischen zwei und vier Wochen, mit einem festgelegten Abschlussdatum. Das Ziel ist es, ein funktionierendes Produkt am Ende jeder Iteration zu haben.

Im Laufe des Entwicklungszyklus finden mehrere Iterationen statt, die jeweils einen eigenen Workflow besitzen. Ein typischer Iterationsfluss besteht aus:

  • Definition von Anforderungen auf der Grundlage des Produkt-Backlogs, des Sprint-Backlogs sowie des Feedbacks von Kunden und Interessengruppen.
  • Entwicklung von Software auf der Grundlage der gestellten Anforderungen.
  • Durchführung von Qualitätssicherungsprüfungen, interne und externe Schulungen und Dokumentationen.
  • Lieferung und Integration des Arbeitsprodukts in die Produktion.
  • Sammlung von Kunden- und Stakeholder-Feedback zur Iteration, um neue Anforderungen für den nächsten Sprint zu definieren.

Der vierte Schritt, die Freigabe oder das Release, umfasst die abschließende Qualitätssicherungsprüfung, die Behebung verbleibender Mängel, die Fertigstellung des Systems und der Benutzerdokumentation und am Ende die Freigabe der endgültigen Iteration in die Produktion.

Nach dem Release konzentriert sich der fünfte Schritt, die Produktion, auf den laufenden Support, der für die Wartung der Software notwendig ist. Die Entwicklungsteams müssen die Software reibungslos laufen lassen und den Anwendern gleichzeitig die genaue Handhabung beibringen. Die Produktionsphase geht weiter, bis die Unterstützung beendet ist oder das Produkt für die Stilllegung vorgesehen ist.

Der letzte Schritt, die Stilllegung, umfasst alle Aktivitäten am Ende der Lebensdauer, wie die Benachrichtigung der Kunden und die endgültige Migration. Das Release muss aus der Produktion entfernt werden. Dies geschieht in der Regel, wenn ein System durch ein neues Release ersetzt werden muss oder wenn das System veraltet ist, unnötig ist oder gegen das Geschäftsmodell verstößt.

Während des Agile-Zyklus können dem Produkt-Backlog verschiedene Funktionen hinzugefügt werden, aber der gesamte Prozess sollte darin bestehen, jeden Schritt immer wieder zu wiederholen, bis alle Elemente im Backlog erfüllt sind. Dies macht den Agile Zyklus eher zu einer Schleife als zu einem linearen Prozess. Zu jeder Zeit kann ein Unternehmen mehrere Projekte gleichzeitig mit Iterationen durchführen, die in verschiedenen Produktlinien angemeldet sind, und eine Vielzahl von internen und externen Kunden, die unterschiedliche Geschäftsanforderungen erfüllen.

Arten von Agile Methodologie

Das Ziel jeder Agile-Methodik ist es, Veränderungen anzunehmen und sich anzupassen und gleichzeitig funktionierende Software so effizient wie möglich bereitzustellen. Allerdings variiert jede Methode in der Art und Weise, wie sie die Schritte der Softwareentwicklung definiert. Zu den am häufigsten verwendeten Agile-Methoden gehören:

  • Scrum
  • Schlanke Softwareentwicklung (Lean)
  • Extreme Programmierung
  • Crystal
  • Kanban
  • Dynamische Systementwicklung (Dynamic Systems Development)
  • Feature-getriebene Entwicklung (Feature-Driven Development)

Scrum ist ein „leichtgewichtiges“ Agile-Framework, das von Projektmanagern zur Steuerung aller Arten von iterativen und inkrementellen Projekten verwendet werden kann. In Scrum erstellt der Produkt-Owner einen Produkt-Backlog, der es ihm ermöglicht, mit seinem Team zusammenzuarbeiten, um die Systemfunktionalität zu identifizieren und zu priorisieren. Der Produkt-Backlog ist eine Liste aller Aufgaben, die erfüllt werden müssen, um ein erfolgreiches, funktionierendes Softwaresystem zu liefern - dazu gehören Bugfixes, Features und nicht-funktionale Anforderungen. Sobald der Produkt-Backlog definiert ist, kann keine zusätzliche Funktionalität hinzugefügt werden, außer durch das entsprechende Team.

Sobald das Team und der Produkt-Owner die Prioritäten festgelegt haben, treten funktionsübergreifende Teams ein und vereinbaren, während eines jeden Sprints - oft innerhalb von 30 Tagen - inkrementelle Software zu liefern. Nach jedem Sprint wird der Produktrückstand neu bewertet, analysiert und neu priorisiert, um einen neuen Satz von lieferbaren Funktionen für den nächsten Sprint auszuwählen. Scrum hat im Laufe der Jahre an Popularität gewonnen, da es einfach ist, sich als produktiv erwiesen hat und die verschiedenen übergreifenden Praktiken der anderen agilen Methoden integrieren kann.

Schlankes Software Development ist eine weitere iterative Methode, die sich auf die Verwendung eines effektiven Value Stream Mapping konzentriert, um sicherzustellen, dass das Team dem Kunden einen Mehrwert liefert. Diese Methode ist flexibel und entwickelt sich weiter; sie hat keine starren Richtlinien oder Regeln. Die Lean-Methode verwendet die folgenden Hauptprinzipien:

  • Verbessertes Lernen
  • Stärkung des Teams
  • Förderung der Integrität
  • Abfallentsorgung
  • Das Ganze verstehen
  • Entscheidungen so spät wie möglich treffen
  • Schnellstmögliche Lieferung des Produkts

Die Schlank-Methode basiert auf schnellem und zuverlässigem Feedback zwischen Kunden und Programmierern, um schnelle und effiziente Entwicklungsabläufe zu ermöglichen. Dazu gibt sie Einzelpersonen und kleinen Teams Entscheidungskompetenz, anstatt sich auf einen hierarchischen Kontrollfluss zu verlassen. Um Verschwendung zu vermeiden, fordert diese Methode den Benutzer auf, nur wirklich wertvolle Merkmale für sein System auszuwählen, diese ausgewählten Merkmale zu priorisieren und sie dann in kleinen Mengen zu liefern. Schlankes Software Development fördert auch automatisierte Unit-Tests, die gleichzeitig mit dem Code geschrieben werden und konzentriert sich darauf, sicherzustellen, dass jedes Mitglied des Teams so produktiv wie möglich ist.

Die Extreme Programming (XP)-Methode ist ein disziplinierter Ansatz, der sich auf Geschwindigkeit und kontinuierliche Lieferung konzentriert. Es fördert eine stärkere Kundenbindung, schnelle Feedbackschleifen, kontinuierliche Planung und Tests sowie eine enge Teamarbeit. Die Software wird in regelmäßigen Abständen geliefert - in der Regel alle ein bis drei Wochen. Ziel ist es, die Softwarequalität und die Reaktionsfähigkeit bei sich ändernden Kundenanforderungen zu verbessern.

Die XP-Methode basiert auf den Werten Kommunikation, Feedback, Einfachheit und Mut. Kunden arbeiten eng mit ihrem Entwicklungsteam zusammen, um die gewünschten User Stories zu definieren und zu priorisieren. Es liegt jedoch an dem Team, die Anwenderberichte mit der höchsten Priorität in Form von funktionierender Software zu liefern, die bei jeder Iteration getestet wurde. Um die Produktivität zu maximieren, bietet die XP-Methode den Benutzern ein unterstützendes, schlankes Framework, das sie unterstützt und die Veröffentlichung hochwertiger Unternehmenssoftware unterstützt.

Crystal ist die leichteste und anpassungsfähigste Methode. Im Mittelpunkt stehen Menschen und die Interaktionen, die bei der Arbeit an einem Agile-Projekt auftreten, sowie die Geschäftskritik und Priorität des zu entwickelnden Systems. Die Crystal-Methode basiert auf der Erkenntnis, dass jedes Projekt einzigartige Eigenschaften besitzt, die einen leicht zugeschnittenen Satz von Richtlinien, Praktiken und Prozessen erfordern. Sie besteht daher aus einer Sammlung von Agile-Prozessmodellen wie Crystal Orange, Crystal Clear und Crystal Yellow. Jedes Modell hat seine eigenen einzigartigen Eigenschaften, die von verschiedenen Faktoren beeinflusst werden, darunter Projektprioritäten, Teamgröße und Systemkritikalität.

Ähnlich wie bei anderen Agile-Methoden legt Crystal Wert auf die häufige Bereitstellung von funktionierender Software mit hoher Kundenbeteiligung, Anpassungsfähigkeit und der Beseitigung von Bürokratie und Ablenkungen. Zu den wichtigsten Prinzipien gehören Kommunikation, Teamarbeit und Einfachheit.

Kanban verwendet eine hoch visuelle Workflow-Management-Methode, die es Teams ermöglicht, die Produktentstehung aktiv zu steuern - mit dem Schwerpunkt auf kontinuierlicher Lieferung - ohne zusätzlichen Stress im Software Development Lifecycle (SDLC). Es ist bei Teams, die auch Lean-Softwareentwicklung betreiben, sehr beliebt geworden.

Kanban verwendet drei Grundprinzipien: Visualisierung des Workflows, Begrenzung der Menge der laufenden Arbeiten und Verbesserung des Arbeitsablaufs. Ähnlich wie das Scrum ist auch die Kanban-Methode darauf ausgelegt, Teams dabei zu unterstützen, effizienter miteinander zu arbeiten. Sie fördert die kontinuierliche Zusammenarbeit und versucht, den bestmöglichen Workflow zu definieren, um ein Umfeld mit aktivem und kontinuierlichem Lernen und Verbessern zu fördern.

Die Dynamic Systems Development Method (DSDM) ist eine Antwort auf die Notwendigkeit eines gemeinsamen Industrie-Frameworks für eine schnelle Softwarebereitstellung. Das DSDM basiert auf acht Schlüsselprinzipien; die Nichteinhaltung eines der Prinzipien birgt das Risiko eines erfolglosen Abschlusses des Projekts. Die acht Prinzipien sind:

  1. Kollaboration
  2. Pünktliche Lieferung
  3. Nachweisbare Kontrolle
  4. Kontinuierliche, klare Kommunikation
  5. Konstante Fokussierung auf die Geschäftsbedürfnisse
  6. Iterative Entwicklung
  7. Starke Fundamente zur Produkterstellung (in Inkrementen) nutzen
  8. Keine Kompromisse bei der Qualität eingehen

Im DSDM ist die Nacharbeit in den Prozess integriert und alle Änderungen müssen reversibel sein. Die Systemanforderungen werden mithilfe von MoSCoW-Regeln priorisiert, die die Priorität mit:

  • M -- muss sein, unbedingt notwendig.
  • S – kann sein, nicht zwingend erforderlich.
  • C – könnte sein, ist aber nicht kritisch.
  • W – wird nicht jetzt sein, könnte aber später erfolgen.

Für das DSDM ist es wichtig, dass nicht jede Anforderung als kritisch angesehen wird. Jede Iteration sollte weniger kritische Elemente enthalten, die entfernt werden können, damit höhere Prioritätsanforderungen nicht beeinträchtigt werden.

Schließlich verbindet die Feature-Driven Development (FDD) Best Practices der Softwareentwicklung - wie die Entwicklung durch Feature-, Code-Ownership- und Domain-Objektmodellierung - zu einem kohärenten, modellgetriebenen, kurzlebigen Prozess. FFD beginnt mit der Definition einer allgemeinen Modellform, die wiederum eine Feature-Liste erstellt. Die Methode fährt dann mit Iterationen fort, die zwei Wochen dauern und sich auf die Planung nach Merkmalen, das Design nach Merkmalen und das Erstellen nach Merkmalen konzentrieren. Wenn ein Feature mehr als zwei Wochen zum Erstellen benötigt, dann sollte es in kleinere Features aufgeteilt werden. Der Hauptvorteil von FDD ist, dass es skalierbar ist - auch für große Teams - da es das Konzept „Just Enough Design Initially“ oder JEDI verwendet.

Vor- und Nachteile von Agile

Im Laufe der Jahre wurde Agile viel mit Waterfall-Ansätzen verglichen.

In der Waterfall-Ära der Softwareentwicklung arbeiteten Programmierer allein, mit wenig bis gar keinem Input, bevor sie die Software an Tester und dann an die Produktion weitergaben. Fehler, Komplikationen und Funktionsänderungen wurden entweder nicht gut oder so spät im Prozess behandelt, dass Projekte stark verzögert oder sogar abgebrochen wurden.

Explore the effects of the Agile software development process.

Die Idee hinter dem Agile-Modell, bei dem alle - auch die Geschäftswelt - am Entwicklungsprozess beteiligt und informiert blieben, bedeutete einen tiefgreifenden Wandel in der Unternehmenskultur und die Fähigkeit, bessere Software schneller auf den Markt zu bringen.

Zusammenarbeit und Kommunikation wurden ebenso wichtig wie Technologie, und da das Agile Manifest offen für Interpretationen ist, wurde Agile an Unternehmen aller Größen und Arten angepasst und modifiziert. Der kulturelle Wandel durch Agile ebnete auch den Weg für die neueste Entwicklung der Softwareentwicklung: DevOps.

Auf der anderen Seite würden viele sagen, dass der größte Nachteil von Agile die Tatsache ist, dass es von vielen Organisationen modifiziert wurde - einige würden sagen, verwässert -. Dieses Phänomen ist so weit verbreitet, dass die „Agile my way“-Praktizierenden als „ScrumButs“ bekannt sind, wie in: „We do Scrum in our organization, but....“ („Wir nutzen Scrum, aber…“).

Obwohl Agile die Kommunikationslinien zwischen Entwicklern und der Geschäftsseite öffnet, war es weniger erfolgreich, Tests und Operationen in diesen Mix zu bringen - eine Auslassung, die der Idee von DevOps geholfen haben könnte, an Fahrt zu gewinnen.

Ein weiteres potenzielles Problem bei Agile ist der fehlende Fokus auf Technologie, was es schwierig machen kann, das Konzept an obere Führungskräfte zu verkaufen, die die Rolle der Kultur in der Softwareentwicklung nicht verstehen. Darüber hinaus kann die Notwendigkeit, Sprints rechtzeitig abzuschließen, eine belastende Arbeitsumgebung für Softwareentwickler schaffen. Sie können gezwungen sein, Überstunden zu leisten und länger zu bleiben, um die Termine einzuhalten.

Die Geschichte von Agile

In den späten 1970er Jahren kam es zu einer explosionsartigen Verbreitung des Personal Computing, was dazu führte, dass der Durchschnittsbürger Zugang zu modernen Computern hatte. Die neue Verbrauchernachfrage beschleunigte die Innovation und die Unternehmen wurden mit der Herausforderung konfrontiert, die ständig wechselnden Kundenwünsche zu erfüllen. Die starren Methoden, die zuvor die SDLC beherrscht hatten, konnten die Software nicht schnell genug liefern oder effektiv auf sich ändernde Anforderungen während der Entwicklung reagieren.

Anfang der 90er Jahre hatte eine kleine Gruppe von Führungskräften der Softwareindustrie damit begonnen, neue Ansätze für die SDLC zu entwickeln und zu fördern, die sich auf eine schnelle Reaktion und Anpassung an alle sich ändernden Anforderungen und Technologien konzentrierten. Rapid Application Development (RAD), Scrum, Extreme Programming und Rational Unified Process (RUP) entstanden zu dieser Zeit als neue, flexible und reaktionsschnelle Entwicklungsmethoden.

Im Jahr 2001 traf sich eine kleine Gruppe von 17 Branchenführern in Snowbird, Utah, mit der Absicht, diese neuen und aufkommenden Methoden zu diskutieren. Hier wurde der Begriff Agile Softwareentwicklung zunächst für die flexible Softwareentwicklung in iterativen Phasen verwendet; er wurde zum Sammelbegriff für die neuen Methoden. Um die Agile Softwareentwicklung von traditionellen Methoden zu unterscheiden, hat die Gruppe der Branchenführer eine Reihe von Werten für die Verwendung von Agile definiert und das Agile Manifesto erstellt.

Seit 2001 haben Agile-Methoden an Popularität gewonnen und da immer mehr Unternehmen und Teams die Methoden übernehmen, hat sich ein Ökosystem gebildet, das alle Personen umfasst, die Agile Softwareentwicklung nutzen, sowie die Personen und Organisationen, die den Prozess durch Training, Beratung, Frameworks und Tools unterstützen.

Diese Definition wurde zuletzt im Januar 2020 aktualisiert

Erfahren Sie mehr über IT-Berufe und Weiterbildung

ComputerWeekly.de
Close