Wolkenkunde – Teil 7 (Agile Methoden)

In Teil 7 betrachten wir nun mal den Begriff “Agil” näher. Wichtig ist die Abgrenzung zur “Agilen IT” welche als Schlusshinweis noch extra genannt wird.

Agile Softwareentwicklung ist der Oberbegriff für den Einsatz von Agilität in der Softwareentwicklung. Je nach Kontext bezieht sich der Begriff auf Teilbereiche der Softwareentwicklung – wie im Fall von Agile Modeling – oder auf den gesamten Softwareentwicklungsprozess – exemplarisch sei Extreme Programming angeführt. Agile Softwareentwicklung versucht mit geringem bürokratischem Aufwand, wenigen Regeln und meist einem iterativen Vorgehen auszukommen.

Zielsetzung

Das Ziel agiler Softwareentwicklung ist es, den Softwareentwicklungsprozess flexibler und schlanker zu machen, als das bei den klassischen Vorgehensmodellen der Fall ist. Man möchte sich mehr auf die zu erreichenden Ziele konzentrieren und auf technische und soziale Probleme bei der Softwareentwicklung eingehen.

Bestandteile der agilen Softwareentwicklung

Agile Werte bilden das Fundament. Agile Prinzipien basieren auf den agilen Werten und bilden Handlungsgrundsätze. Agile Methoden sind konkrete Verfahren während der Softwareentwicklung, die sich auf die Werte und Prinzipien stützen. Der agile Prozess ist die Zusammenfassung aller angewandten Methoden und dient der agilen Softwareentwicklung.
Agile Werte
Die Werte agiler Softwareentwicklung bilden das Fundament. Im Februar 2001 haben 17 Erstunterzeichner diese Werte als Agiles Manifest (englisch Manifesto for Agile Software Development oder kurz Agile Manifesto) formuliert:

“We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

That is, while there is value in the items on the right, we value the items on the left more.”

„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:

  • Menschen und Interaktionen stehen über Prozessen und Werkzeugen
  • Funktionierende Software steht über einer umfassenden Dokumentation
  • Zusammenarbeit mit dem Kunden steht über der Vertragsverhandlung
  • Reagieren auf Veränderung steht über dem 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.“

Agiles Prinzip

Ein Agiles Prinzip ist ein Leitsatz für die agile Arbeit.

Manchmal werden agile Prinzipien auch als Methode bezeichnet. Die eigentlich falsche Verwendung des Begriffs Methode für Prinzipien wird von den Vertretern agiler Methoden teilweise bewusst eingesetzt. Bei schwergewichtigen Prozessen werden Prinzipien von umfangreichen Methodenbeschreibungen überlagert und lassen die Prinzipien häufig in Vergessenheit geraten. Zudem wurden Prozesse früher hauptsächlich über Methoden, nicht über Prinzipien definiert. Die Auflistung von Prinzipien als Methoden soll den Prinzipien gegenüber formalen Methoden wieder mehr Gewicht verleihen. Im Agilen Manifest sind zwölf Prinzipien aufgelistet.

  • Zufriedenstellung des Kunden durch frühe und kontinuierliche Auslieferung von wertvoller Software
  • Agile Prozesse nutzen Veränderungen (selbst spät in der Entwicklung) zum Wettbewerbsvorteil des Kunden.
  • Lieferung von funktionierender Software in regelmäßigen, bevorzugt kurzen Zeitspannen (wenige Wochen oder Monate)
  • Nahezu tägliche Zusammenarbeit von Fachexperten und Entwicklern während des Projektes (Bsp.: Gemeinsamer Code-Besitz (Collective Code Ownership))
  • Bereitstellung des Umfeldes und der Unterstützung, welche von motivierten Individuen für die Aufgabenerfüllung benötigt wird
  • Informationsübertragung nach Möglichkeit im Gespräch von Angesicht zu Angesicht
  • Als wichtigstes Fortschrittsmaß gilt die Funktionsfähigkeit der Software
  • Einhalten eines gleichmäßigen Arbeitstempos von Auftraggebern, Entwicklern und Benutzern für eine nachhaltige Entwicklung
  • Ständiges Augenmerk auf technische Exzellenz und gutes Design
  • Einfachheit ist essenziell (KISS-Prinzip)
  • Selbstorganisation der Teams bei Planung und Umsetzung
  • Selbstreflexion der Teams über das eigene Verhalten zur Anpassung im Hinblick auf Effizienzsteigerung

Der Übergang zwischen Prinzipien und Methoden ist fließend.

Agile Methode

Streng genommen bezeichnet agile Methode eine an Agilität ausgerichtete Methode zur Softwareentwicklung.

Ein Kennzeichen agiler Methoden ist, dass sie in einem Prozess dazu dienen können, die Aufwandskurve möglichst flach zu halten. Als Leitsatz gilt: Je mehr du nach Plan arbeitest, desto mehr bekommst du das, was du geplant hast, aber nicht das, was du brauchst. Daraus resultieren einige Prinzipien des agile Modelling und des extreme Programmings.

Agile Methoden lassen sich in zwei Gruppen unterteilen: die tatsächlichen Methoden und die den Methoden zu Grunde liegenden Prinzipien.

Beispiele für agile Methoden:

Agiler Prozess

Ziel der Vorgehensweise ist es, den Softwareentwicklungsprozess durch Abbau der Bürokratie und durch die stärkere Berücksichtigung der menschlichen Aspekte effizienter zu gestalten.

Zu den bekanntesten zählen unter anderem:

Agile Bewertung

Auf die Frage, inwieweit agile Werte in Prozesse und Methoden umgesetzt wurden, kann eine agile Bewertung Auskunft geben.

Mit dem sogenannten 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 5 unterschiedlichen Dimensionen (Dauer, Risiko, Erfindungsreichheit, Aufwand und Interaktion). Weiterhin gibt es agile Selbstbewertungen, um zu bestimmen, ob ein Team auf agile Weise arbeitet.

Es ist umstritten, ob der Entstehungsprozess von Software so gut verstanden wird, dass eine planmäßige Herstellung möglich ist: Kritiker argumentieren, dass Software nichts anderes sei als „ausführbares Wissen“. Wissen jedoch lässt sich nicht ingenieursmäßig herstellen, wie sich etwa eine Brücke oder ein Hochhaus herstellen lässt, sondern wird in einem kreativen Prozess gefunden. Mit ein Grund dafür ist, dass sowohl die Ziele, als auch das Umfeld (beteiligte Personen, Marktanforderungen, technisches Umfeld/Schnittstellen) flexibel sind und sich im Laufe der Zeit ändern.

Die agilen Methoden eignen sich daher besonders gut, um auf geänderte Anforderungen zu reagieren, da die Entwicklungszyklen in der Regel von vornherein nicht lange angelegt sind. Die Anforderungen werden in der Regel nur mit Kurzbeschreibungen festgehalten und erst kurz vor Beginn von Umsetzung und Testvorbereitung ausformuliert. Durch die kurzen Zeiträume sind die Anforderungen relativ frei von nachträglichen Änderungen.

Abgrenzung

Agile Softwareentwicklung ist beispielsweise nicht mit IT-Agilität zu verwechseln, welche die Anpassungsfähigkeit einer Unternehmens-IT bezeichnet.


Quellenhinweise:

Wikipedia – Agile Softwareentwicklung