Experience Embedded

Professionelle Schulungen, Beratung und Projektunterstützung

Versionierung: Die Herausforderung bei der Modellierung

Autor: Dr. Konrad Wieland, LieberLieber Software

Beitrag - Embedded Software Engineering Kongress 2015

 

Sowohl die zunehmende Komplexität als auch immer kürzere Release-Zyklen moderner eingebetteter Softwaresysteme machen es notwendig, verschiedene Versionen parallel zu entwickeln. 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 paralleln Versionen eines Modells effizient zu arbeiten. 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 Betrag 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 folgende drei Ziele:

  1. 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.
  2. Sie helfen dabei, verschiedene "Branches", d.h. parallele Entwicklungsstränge, zu verwalten, die durch die Entwicklung von Software-Varianten erforderlich sind.
  3. 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 Abbildung 1, PDF). 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:

  1. Identifizierung der Änderungen zwischen den beiden Versionen
  2. Erkennung von Konflikten zwischen den Änderungen
  3. Automatische oder manuelle Auflösung dieser Konflikte
  4. 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 verwendert, sondern sind integraler Bestandteil in allen Stadien des Entwicklungsprozesses. Diese Modelle setzt man meist unter Versionskontrolle ein, 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 freingranularer 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), welche 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 Abbildung 2 (siehe PDF) 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. Abbildung 3 (siehe PDF) zeigt einen Screenshot des LieberLieber Model Versioner, der die berechneten Unterschiede zweier Enterprise Architect1 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 100.00en 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 (graphischen) Modellen zur Verfügung stellt und Konflikte fein-granular 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 Wahrnehmung der Validität der Modelle ein wichtiger Bestandteil eines zeitgemäßen Modellversionierungssystems.

_____________________________________________

1 Enterprise Architect ist ein Modellierungswerkzeug von SparxSystems, mit dem sich u.a. UML, SysML oder BPMN Modelle erstellen lassen. Die Integration eines VCS ist möglich, jedoch kann auf von XML Export nur pessimistisch versioniert werden.

 

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.

 

Beitrag als PDF downloaden

 


Modellierung - MicroConsult Trainings & Coachings

Wollen Sie sich auf den aktuellen Stand der Technik bringen?

Dann informieren Sie sich hier zu Schulungen/ Seminaren/ Trainings/ Workshops und individuellen Coachings von MircoConsult zum Thema Modellierung /Embedded- und Echtzeit-Softwareentwicklung.

 

Training & Coaching zu den weiteren Themen unseren Portfolios finden Sie hier.


Modellierung - Fachwissen

Wertvolles Fachwissen zum Thema Modellierung /Embedded- und Echtzeit-Softwareentwicklung steht hier für Sie zum kostenfreien Download bereit.

Zu den Fachinformationen

 
Fachwissen zu weiteren Themen unseren Portfolios finden Sie hier.