Agile Softwareentwicklung und Ihre Bedeutung für verteilte Anwendungsarchitekturen

Dozent:

Prof. Dr. Michael Eichberg

Kontakt:

michael.eichberg@dhbw-mannheim.de

Version:
2024-05-09

Agiles Manifest (Agile Manifesto) [Martin2003]

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

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 Methoden bauen auf iterativen Ansätzen auf, die es schon viel früher gab.

Die Notwendigkeit auf Veränderungen reagieren zu können ist essentiell, da sich die Anforderungen an die Software bzw. die auftauchenden Probleme sich während der Entwicklung verändern können bzw. im Normalfall bei Projektstart noch nicht vollständig verstanden sind.

Es ist dennoch essentiell zentrale Anforderungen, die ggf. eine massive Auswirkung auf den Entwurf haben, am Anfang zu erfassen: eine neue Anforderung auch die Titel der Kunden zu erfassen ist ggf. immer umsetzbar. Eine Anforderung wie zum Beispiel Mandantenfähigkeit oder Anforderungen an die Skalierbarkeit sind dagegen anders zu bewerten.

Agile Softwareentwicklung

Schlüsselaspekte mit Relevanz für Softwarearchitekturen:

Große Teams haben sich im Allgemeinen als nicht-effektiv erwiesen.

Aspekte Agiler Prozessmodelle mit Bezug zu Softwarearchitekturen

YAGNI:

You ain't gonna need it

Once and only once:

Jede Funktionalität wird nur einmal implementiert und dann wiederverwendet.

TDD erfordert modulare Softwarearchitekturen, die es erlauben einzelne Komponenten zu testen.

Kurze Releasezyklen sind notwendig, um das Verständnis der Anforderungen bzw. Problemdomäne zu verbessern.

Anforderungsermittlung in agilen Prozessen

Anforderung

Eine Bedingung oder Fähigkeit, die ein Benutzer benötigt, um ein Problem zu lösen oder ein Ziel zu erreichen.

—IEEE Standard Glossary of Software Engineering Terminology

Anforderungsermittlung mittels Domain-driven Design (DDD) [Evans2004]

Hauptaspekte von Domain-driven Design:

Häufig wird DDD in Kombination mit User Stories eingesetzt, um die Anforderungen zu ermitteln und zu dokumentieren.

Zur Erinnerung: User Stories beschreiben was erreicht werden soll und nicht wie. Das Ziel muss klar sein, aber der Weg nicht! (Ggf. können User Stories noch das warum adressieren.)

Ausgewählte Konzepte des Domain-driven Design (DDD) [Evans2004]

Ubiquitäre Sprache (Ubiquitous Language):

Die Sprache, welche in allen Bereichen der Softwareerstellung verwendet werden sollte (Fachlichkeit, Domänenmodell, Methoden, Klassen, …)

Aggregate:

Repräsentation eines atomaren Konzeptes der DomäneEine Entität/transaktionale Einheit, die als einziges Zugriff auf die dahinterliegende, zusammengefassten Entitäten erlaubt.

Kontextgrenzen (Bounded Context):

Repräsentation einer Organisationsgrenze

DevOps

Ergänzen bestehende agile Methoden.

images/dev-ops.svg

DevOps integriert und automatisiert die Arbeit von Softwareentwicklung (Dev) und IT-Betrieb (Ops) als Mittel zur Verbesserung und Verkürzung des Lebenszyklus der Systementwicklung.

DevOps Prinzipien:

Wie erreichen wir, dass unsere Softwareentwicklung agil ist?

Um Agilität zu erreichen, müssen wir…

Referenzen

[Martin2003]

Agile Software Development - Principles, Patterns, and Practices; Robert C. Martin; 2003

[Evans2004] (1,2)

Domain-Driven Design: Tackling Complexity in the Heart of Software; Eric Evans; 2004