Modellgetriebene Entwicklung Versionierung: Die Herausforderung bei der Modellierung

Autor / Redakteur: Dr. Konrad Wieland* / Christine Kremser

Sowohl die zunehmende Komplexität als auch immer kürzer werdende Release-Zyklen moderner, eingebetteter Softwaresysteme machen es notwendig, verschiedene Versionen parallel zu entwickeln.

Firmen zum Thema

Softwaremodelle erlauben es, Codestrukturen zu visualisieren. Aber auch hier spielt die Versionierung eine zentrale Rolle.
Softwaremodelle erlauben es, Codestrukturen zu visualisieren. Aber auch hier spielt die Versionierung eine zentrale Rolle.
(Bild: Clipdealer)

Dazu addiert sich die Herausforderung, dass diese Systeme in immer größeren und verteilten Teams entwickelt werden. Bei Verwendung eines modellgetriebenen Ansatzes müssen solche Teams die Möglichkeit erhalten, an parallelen Versionen eines Modells effizient zu arbeiten.

Bildergalerie

Bei der Generierung von Source Code werden die Vorteile von Versionierungssystemen seit Jahren erfolgreich genutzt. Die wichtigste Funktion ist hier der Vergleich und die Zusammenführung von verschiedenen Versionen. Herkömmliche Ansätze verwenden dafür zeilen- und textbasierte Anwendungen, die jedoch bei grafischen Modellen nicht ausreichend sind. In diesem Beitrag wird aufgezeigt, wie Modelle praxistauglich verglichen und zusammengeführt werden können, um so eine effiziente Versionierung zu ermöglichen.

Während des gesamten Softwareentwicklungsprozesses werden die unterschiedlichsten Software Artefakte zahlreichen Veränderungen unterzogen. Werkzeuge, die diese Evolution der Artefakte unterstützen, sind unverzichtbar [2] [3]. Daher wurden und werden unter dem Begriff des Software Configuration Managements (SCM) Techniken entwickelt, die diese Änderungsprozesse unterstützen oder gar erst ermöglichen. Versionierungssysteme (VCS) fallen in diese Gruppe und haben ihren Ursprung bereits in den 1970er Jahren.

Versionierungssysteme verfolgen drei Ziele:

  • Sie archivieren verschiedene Versionen, die sich durch Änderungen ergeben haben, um jederzeit Änderungen rückgängig machen und auf eine ältere Version zurückgreifen zu können.
  • Sie helfen dabei, verschiedene „Branches“, d.h. parallele Entwicklungsstränge, zu verwalten, die durch die Entwicklung von Software-Varianten erforderlich sind.
  • Sie können die parallele Entwicklung von (verteilten) Teams koordinieren.

Bei allen drei Punkten sind der Vergleich und/oder die Zusammenführung von Versionen von zentraler Bedeutung. Beim letzten Punkt wachsen die Anzahl der Anforderungen und die Komplexität durch die native Integration in ein Versionierungssystem. Dabei lassen sich grundsätzlich zwei Ansätze unterscheiden, die ich im nächsten Absatz kurz vorstelle.

Pessimistisches und Optimistisches Versionieren

Beim sogenannten pessimistischen Versionieren sperrt man die einzelnen Artefakte, damit sie parallel nicht verändert werden können. Konflikte werden so vollständig umgangen, Wartezeiten sind allerdings kaum zu vermeiden.

Beim optimistischen Versionieren dagegen wird dasselbe Artefakt zeitgleich bzw. parallel bearbeitet (siehe Bild 1 in der Bildergalerie). Beide Entwickler führen ein sogenanntes „Check Out“ durch und arbeiten parallel an einer Kopie. Bevor auch der Zweite seine Änderungen speichern kann, müssen diese Änderungen mit den bereits übernommenen vom ersten Entwickler zusammengeführt werden (Merge). Dieser Prozess wird in vier Schritte aufgeteilt:

  • Identifizierung der Änderungen zwischen den beiden Versionen.
  • Erkennung von Konflikten zwischen den Änderungen.
  • Automatische oder manuelle Auflösung dieser Konflikte.
  • Erstellung einer neuen Version, die (im besten Fall) alle Änderungen von beiden Versionen beinhaltet.

Vergleichen von Modellen

Durch das Aufkommen der Modellierung und der modellgetriebenen Softwareentwicklung in den letzten Jahren werden Modelle nicht nur für Brainstorming und Analyse verwendet, sondern sind integraler Bestandteil in allen Stadien des Entwicklungsprozesses.

Diese Modelle setzt man meist unter Versionskontrolle, sie werden von einem Entwicklerteam parallel weiterentwickelt. Da dies mit herkömmlichen Werkzeugen ein sehr aufwendiger und mühsamer Prozess ist, wurde der Ruf der Industrie nach Werkzeugen für die Versionierung und parallele Entwicklung von Modellen immer lauter [1] [4].

Allerdings erwiesen sich die zeilen- und textbasierenden Ansätze, die sich für Source Code durchgesetzt haben, als nicht ausreichend. Vielmehr ermöglicht erst ein fein-granularer 3-Wege-Vergleichsalgorithmus, der die Graphenstruktur der Modelle berücksichtigt, einen genauen Vergleich zwischen zwei Modellen.

Erst dieser 3-Wege-Vergleich für Modelle, der die Basisversion berücksichtigt, erlaubt es, die Änderungen der jeweiligen Modellversionen so zu berechnen, dass sie der Benutzer nachvollziehen kann. Für jede Version ist dabei zu berechnen, welche Eigenschaft eines Modellelements sich verändert hat (Update), welches Element verschoben wurde (Move), welches hinzugekommen ist (Insert), referenziert wird (Use) oder gelöscht wurde (Delete).

Die Berechnung und Darstellung möglicher Konflikte zwischen zwei Versionen ist integraler Bestandteil eines Merge-Werkzeugs. Eine Kategorisierung der möglichen Konflikte ist in Bild 2 (siehe Bildergalerie) dargestellt [5].

Darstellung von Änderungen und Konflikten

Konflikte zwischen zwei Versionen sind zur Erreichung einer konsolidierten Version aufzulösen. Um diesen Vorgang zu automatisieren, entstanden zwar die unterschiedlichsten Strategien, jedoch ist die manuelle Auflösung durch einen Benutzer oft unumgänglich. Dazu müssen Änderungen und Konflikte allerdings für den Benutzer leicht verständlich dargestellt werden.

Da Änderungen an grafischen Modellen meist auch auf Diagramm-Ebene erfolgen, ist es hier besonders wichtig, Änderungen auch im Diagramm darzustellen. Bild 3 (siehe Bildergalerie) zeigt einen Screenshot des LieberLieber Model Versioner, der die berechneten Unterschiede zweier Enterprise Architect Modelle fein-granular nebeneinander auflistet und diese auch im jeweiligen Diagramm visualisiert.

Eine der größten Herausforderungen bei diesem Vorgang ist die Performance (Geschwindigkeit und Ressourcenverbrauch), wenn etwa Modelle mit vielen Hunderttausenden Modellelementen und Konnektoren zu vergleichen sind. Gerade auch bei der Kombination mit einem Versionierungssystem wie Subversion oder Git ist daher zu gewährleisten, dass der Entwickler, der seine Änderungen in das Repository einchecken möchte, nicht in seiner täglichen Arbeit aufgehalten wird.

Darüber hinaus ist auf die Korrektheit des Modells bei der Zusammenführung paralleler Änderungen zu achten, damit es bei diesem komplexen Vorgang nicht zu Verfälschungen kommt. Unter allen Umständen ist zu vermeiden, dass sich das Modell nach der Zusammenführung im Modellierungseditor nicht mehr öffnen lässt. Obwohl semantische Inkonsistenzen oder optische Unschönheiten beim Layout zusammengeführter Diagramme auch ein wichtiges Thema darstellen, sollten sie in diesem Stadium nicht vorrangig behandelt werden.

Zusammenfassung

Versionierungssysteme sind heute bei der Entwicklung von Systemen oder auch Software nicht mehr wegzudenken. Jedoch reichen traditionelle zeilen- bzw. textbasierte Ansätze nicht aus, um auch für Modelle eine Unterstützung zu bieten. Vielmehr bedarf es eines Werkzeugs, das einen präzisen Vergleich zwischen (grafischen) Modellen zur Verfügung stellt und Konflikte feingranular berechnet, um verschiedene Versionen von Modellen effizient und nutzerfreundlich zu verwalten.

Darüber hinaus ist eine native Integration in bestehende Versionierungssysteme unabdingbar, um Modellierer in ihrer täglichen Arbeit zu unterstützen. Neben der Performance ist die nutzerfreundliche Darstellung von Diagrammänderungen sowie die Wahrung der Validität der Modelle ein wichtiger Bestandteil eines zeitgemäßen Modellversionierungssystems.

Literatur- und Quellenverzeichnis

[1] L. Bendix, P. Emanuelsson: Requirements for Practical Model Merge - An Industrial Perspective. MoDELS 2009: pp.167-180, 2009.

​[2] J. Estublier, D. Leblang, A. Hoek, R. Conradi, G. Clemm, W. Tichy, and D. Wiborg-Weber. Impact of software engineering research on the practice of software configuration management. ACM Transactions on Software Engineering and Methodology, vol. 14, no. 4, pp. 383-430, 2005.

​[3] Mens, Tom: A State-of-the-Art Survey on Software Merging. IEEE Transactions on Software Engineering, vol. 28, no. 5, pp. 449-462, 2002.

​[4] K. Wieland, G. Fitzpatrick, G. Kappel, M. Seidl, M. Wimmer: "Towards an Understanding of Requirements for Model Versioning Support"; International Journal of People-Oriented Programming (IJPOP), 2; 1 – 23, 2011.

​[5] K. Wieland, P. Langer, M. Seidl, M. Wimmer, G. Kappel: "Turning Conflicts into Collaboration - Concurrent Modeling in the Early Phases of Software Development"; Computer Supported Cooperative Work: The Journal of Collaborative Computing, 22 (2013), 2-3; 181 - 240.


* Dr. Konrad Wieland arbeitet seit 2012 bei LieberLieber als Consultant und Produktmanager im Bereich Modellierung und modellgetriebene Software- und Systementwicklung.

(ID:44106527)