Übersicht Inhaltsverzeichnis Vorwort 1 Einführung 2 Agile und UML-basierte Methodik 2.1 Das Portfolio der Softwaretechnik 2.2 Extreme Programming (XP) 2.3 Ausgesuchte Entwicklungspraktiken 2.4 Agile UML-basierte Vorgehensweise 2.5 Zusammenfassung 3 Kompakte Übersicht zur UML/P 4 Prinzipien der Codegenerierung 5 Transformationen für die Codegenerierung 6 Grundlagen des Testens 7 Modellbasierte Tests 8 Testmuster im Einsatz 9 Refactoring als Modelltransformation 10 Refactoring von Modellen 11 Zusammenfassung und Ausblick Literatur |
2.4 Agile UML-basierte VorgehensweiseAufgrund der Diversität der Softwareentwicklungsprojekte in Größe, Fachdomäne, Kritikalität, Kontext etc. lässt sich folgern, dass eine einheitliche Vorgehensweise in der diversifizierten Projektlandschaft nicht sinnvoll und auch nicht möglich sein wird. Stattdessen ist, wie in Crystal [Coc06] vorgeschlagen, aus einer Sammlung von Vorgehensweisen nach Kriterien wie Größe und Art des Projekts, Kritikalität der Anwendung sowie Erfahrung und Kenntnissen der Projektbeteiligten eine geeignete Vorgehensweise zu wählen und bei Bedarf anzupassen. Entsprechend dieser Diversität wird hier ein Vorschlag einer leichtgewichtigen, agilen Methode unter Nutzung der UML skizziert. Dieser Vorschlag konzentriert sich vor allem auf den technischen Teil einer Vorgehensweise und stellt keinen Anspruch für alle Arten von Projekten geeignet zu sein. Definition des Begriffs „Agilität“Die Charakterisierung der Agilität einer Methode ist in Abbildung 2.6 skizziert.
Eine Vorgehensmethode wird als „agil“ bezeichnet, wenn sie verstärkt Wert auf folgende Kriterien legt:
Effizienz kann durch geschicktes Weglassen unnötiger Arbeit (Dokumentation, nicht benötigte Funktionalität, etc.) verbessert werden, aber auch durch die effizientere Erstellung der Implementierung. Die Qualität des entwickelten Produkts ist nicht notwendigerweise im Fokus aller Techniken einer agilen Methode. Bestimmte Elemente einer agilen Methode, wie zum Beispiel die Konzentration auf die Einfachheit des Entwurfs und die umfassende Entwicklung automatisierter Tests, unterstützen die Verbesserung der Qualität. Andere Vorgaben, die von manchen agilen Methoden getroffen werden, wie etwa das Fehlen detaillierter Spezifikationen und Reviews, stehen einer Verwendung für hochkritische Systeme eher entgegen, so dass dafür ein alternativer Prozess oder eine geeignete Erweiterung zu wählen ist. Unterstützung der Agilität durch verbesserte TechnikenDie Verbesserung der Agilität eines Projekts kann neben einer Neugestaltung der Aktivitäten insbesondere durch Erhöhung der Effizienz der einzelnen Entwickler erreicht werden. Dabei sind Effizienzsteigerungen bei der Erstellung von Modellen, der Implementierung und von Tests von Interesse. Besonders wirksam ist es, wenn die Implementierung und die Tests möglichst effizient oder sogar vollständig automatisch aus Modellen hergeleitet werden können. Eine solche automatische Generierung ist dann von Interesse, wenn die benutzte Quellsprache für die Modelle eine kompaktere Darstellung erlaubt, als es die Implementierung selbst könnte. Prämisse für diese Einsatzform von Modellen ist die schnellere Erstellung aufgrund größerer Kompaktheit, die aber dennoch eine vollständige Beschreibung des Systems erlaubt. Die UML ist in der im UML-Standard [OMG10] angebotenen Form dafür nicht ausreichend. Deshalb ist die UML/P so erweitert worden, dass sie eine vollständige Programmiersprache beinhaltet. Einsatzformen für ModelleModelle, aus denen Code generiert wird, erfordern einen hohen Detaillierungsgrad. Dafür entfällt die aufwendige Aktivität der sonst üblichen Codierung. Die detaillierte Modellierung und die Implementierung verschmelzen zu einer einzigen Tätigkeit. Codegenerierung ist also ein wichtiges Hilfsmittel für den erfolgreichen Einsatz von Modellen. Dadurch wird ein ähnliches Ziel wie in XP erreicht, bei dem Entwurfs- und Modellierungsvorgänge grundsätzlich im Code repräsentiert werden. Es gibt jedoch neben der Codegenerierung noch weitere Ziele für die Modelle eingesetzt werden können. Für die Kommunikation zwischen Entwicklern reichen abstrakte und relativ informelle Modelle aus. Abstraktion bedeutet, dass Details ausgelassen werden können, die zur Darstellung des kommunizierten Sachverhalts nicht von Interesse sind. Informalität bedeutet, dass die sprachliche Korrektheit des dargestellten Modells nicht präzise eingehalten werden muss. Beispielsweise können Diagramme auf Papier durchaus intuitive, aber nicht notwendigerweise zur Sprache gehörige notationelle Elemente nutzen, wenn die Entwickler sich über deren Bedeutung soweit wie notwendig einig sind. Außerdem muss bei informellen Diagrammen die Konsistenz des Diagramms mit dem modellierten Sachverhalt sowie anderen Diagrammen nicht vollständig gegeben sein. Modelle können darüber hinaus zur Dokumentation des Systems eingesetzt werden. Dokumentation ist eine in Schriftform gebrachte und damit für längeren Gebrauch vorgesehene Form der Kommunikation. Damit sind je nach Ziel der Dokumentation ein höherer Detaillierungsgrad, größere Formalität und Konsistenz sinnvoll. Für ein knappes Dokument zur Übersicht der Architektur eines Systems und eine Einführung in wesentliche Entscheidungen, die zu dieser Architektur führten, ist die Detaillierung niedrig, aber Formalität und Konsistenz innerhalb des Modells und mit der Implementierung wichtig. Für eine vollständige Dokumentation ist es ideal, die Übereinstimmung der Dokumentation mit dem implementierten System dadurch zu erreichen, dass die Implementierung und soweit möglich auch Tests aus den Modellen der Dokumentation generiert werden. In einem Projekt, das sich auf die UML/P zur Modellierung und zur Implementierung stützt, ist also zwischen
zu unterscheiden. Für alle Zwecke lässt sich die UML/P einsetzen, obwohl diese Modelle unterschiedliche Charakteristika besitzen. Ein wesentlicher Vorteil besteht aber darin, dass zwischen Spezifikation, Implementierung und Testfällen keine Notationsbrüche stattfinden. Die UML/P bietet die Möglichkeit, sowohl für detaillierte, als auch für abstrakte und unvollständige Modellbildungen verwendet zu werden. Bearbeitung von ModellenWenn ein Modell ausschließlich zur Kommunikation dient, liegt es typischerweise nur als informelle Zeichnung vor. Ein Modell, das durch ein Werkzeug erstellt wurde, besitzt eine formale Repräsentation der Syntax3 und kann daher zur werkzeuggestützten Weiterbearbeitung dienen. Die Syntax der UML/P ist deshalb in den Anhängen A, Band 1, B, Band 1 und C, Band 1 definiert. Als eine der wesentlichen Techniken für den Einsatz von Modellen wurde bereits die Codegenerierung identifiziert. Sie besitzt zwei Varianten. Zum einen kann der Produktionscode generiert werden. Zum anderen kann Testcode generiert werden. Die Notwendigkeit zur Adaption von Software aufgrund sich ändernder Bedingungen erfordert es außerdem, dass auch Techniken zur Transformation beziehungsweise für das Refactoring dieser Modelle zur Verfügung stehen. Die systematische, bei jedem Schritt durch automatisierte Tests und Invarianten überprüfte Adaption von Modellen auf neue und geänderte Funktionalitäten erlaubt diese bereits aus XP bekannte dynamische Anpassung. Da ein Modell nach den aufgestellten Anforderungen kompakter und damit leichter verständlich ist als der Code, wird die Anpassung von Modellen ebenfalls erleichtert. Zum Beispiel können strukturelle Anpassungen, die im Code über viele Dateien verstreut waren, innerhalb eines Klassendiagramms bearbeitet werden. Die Notwendigkeit der frühen Entwicklung und Fixierung einer adäquaten Architektur nimmt, wie bereits im XP-Ansatz beobachtet, weiter ab. Umgekehrt steigt die Flexibilität zur Einarbeitung neuer Funktionalität und damit die Agilität des Projekts weiter an. Als wesentliche Techniken im Umgang mit Modellen können daher
identifiziert werden [Rum02]. Darüber hinaus sind verschiedene Techniken zur Analyse von Modellen, wie zum Beispiel die Erreichbarkeit von Zuständen in Statecharts, von Interesse. Hilfreich zur effizienten Erstellung von Tests ist auch die Ableitung von Testfällen aus OCL-Bedingungen oder Statecharts. Spezielle Techniken, wie zum Beispiel zur Generierung von Datenbanktabellen, einer einfachen graphischen Oberfläche aus Datenmodellen oder zur Migration von zum alten Modell konformen Datenbeständen in ein neues Modell, sind ebenfalls wichtig und von einem geeignet parametrisierten Codegenerator zu unterstützen. Solche Techniken werden allerdings in diesem Buch nicht weiter vertieft. Weitere sinnvolle Prinzipien und PraktikenFür die Komplettierung einer Vorgehensweise sind projektspezifisch weitere Prinzipien und Praktiken zu wählen. Für kleine Projekte lässt sich zum Beispiel die folgende, vor allem an XP angelehnte Liste identifizieren:
Die Entwicklung von Tests vor einer Implementierung nach dem in Abschnitt 2.3.2 diskutierten Test-First-Ansatz lässt sich hervorragend auf UML/P übertragen. Sequenzdiagramme, die eine wesentliche Komponente von Tests sind, werden zunächst als Beschreibungen für Anwendungsfälle modelliert und können dann mit vertretbarem Aufwand in Testfälle transformiert werden. Ähnliches gilt für Objektdiagramme, die als Beispiele für Datensätze bei der Anforderungserfassung erstellt werden können. Ein projektweiter Modellierungsstandard ist notwendig, um die Lesbarkeit eines erstellten Modells, das von allen Projektbeteiligten bei Bedarf angepasst und erweitert werden kann, sicherzustellen. Analog zur Verwendung einer Programmiersprache ist es notwendig, dass die mit UML/P modellierenden Entwickler die benutzte Sprache beherrschen. Eine eventuell notwendige Lernphase kann durch Pair Programming, das jetzt besser als „paarweise Modellierung“ zu bezeichnen ist, unterstützt werden. Qualität, Ressourcen und ProjektzieleDie Effekte der in diesem Abschnitt skizzierten Vorgehensweise können anhand des in Abschnitt 2.2 diskutierten Wertesystems und der unter anderem ebenfalls in XP verwendeten vier Kriterien (Zeitverbrauch, Kosten, Qualität und Zielfokussierung) erörtert werden.
Die vier wesentlichen Variablen des Projektmanagements werden ebenfalls adressiert:
Probleme der agilen, UML-basierten SoftwareentwicklungNeben den diskutierten Vorteilen hat die skizzierte Vorgehensweise auch einige Nachteile, die beachtet werden sollten:
|
|||||||||