Versionsverwaltung in der Softwareentwicklung

Für die Entwicklung größerer Softwareprojekte und die Verwaltung der dazugehörenden Sourcecodes ist eine Versionsverwaltung unverzichtbar. Aber auch für überschaubare Programme sind Versionierungstools hilfreiche Werkzeuge. Sie ermöglichen es, einzelne Entwicklungsschritte nachzuvollziehen. Letztendlich ist es das Ziel, ein hochwertiges Release einer Software zu erstellen, die Wege von der Anforderung zum fertigen Programm sind jedoch vielfältig.

Insbesondere wenn ein größeres Team gemeinsam an einem Softwareprojekt arbeitet, ist es wichtig, die Übersicht über die Dateimengen zu behalten und ggf. unterschiedliche Dateiversionen im Endprodukt zusammenzuführen. In diesem Beitrag fassen wir die Funktionsweise von Versionsverwaltungen zusammen und beschreiben die bekanntesten Tools.

Warum sollte ich Versionierungstools einsetzen?

Eine Versionsverwaltung – häufig auch kurz als VCS (Version Control System) bezeichnet – ist ein System, mit dem Sourcecode nachvollzogen und verwaltet werden kann. Dabei können Entwicklungsstände jederzeit optimiert oder aber ggf. auf einen früheren Entwicklungsstand zurückgeführt werden.

Da in komplexen Projekten häufig mehrere Softwareentwickler gemeinsam an den Sourcecodes arbeiten, treffen verschiedene Versionsstände der einzelnen Dateien aufeinander. Um Fehler bei der Zusammenführung sämtlicher Releases zu vermeiden, sind folgende Funktionen grundlegende Bestandteile einer Versionsverwaltung:

  • Änderungsprotokolle: Wer hat wann was gemacht und warum?
  • Archivierung, Zusammenführung und Wiederherstellung von einzelnen Entwicklungsständen (inkl. Vergabe von Release-Nummern)
  • Koordination und Delegierung von Aufgaben beteiligter Entwickler (ToDos)

In der Historie der Softwareentwicklung haben sich drei Typen der Versionsverwaltung herausgebildet:

  • Eine lokale Versionsverwaltung wird in der Regel nur auf einem Arbeitsplatz eingesetzt, deren Funktionsweise geht selten über die Versionierung von Dateien hinaus. Diese Art der Versionierung ist lediglich für einzelne Entwickler (z. B. kleine Entwicklungsbüros) sinnvoll. Im Grunde spielt diese Form der Versionsverwaltung heutzutage keine Rolle mehr.
  • Echte Teamfunktionen in der Softwareentwicklung bietet eine zentrale Versionsverwaltung. Hier wird das gesamte Softwareprojekt netzwerkbasiert auf einem System gespeichert und zugriffsberechtigten Entwicklern zur Verfügung gestellt. Die unterschiedlichen Versionsstände werden somit zentral auf einem Server abgelegt.
  • Eine verteilte Versionsverwaltung bietet den Entwicklern die Möglichkeit, sich von einem zentral gelagerten Softwarestand einen lokalen Klon zu erstellen, auf dem sie dann ortsunabhänig weiterarbeiten können. Die Änderungen werden später mit dem zentralen Datenbestand abgeglichen und wieder zusammengeführt. Zusätzlich haben alle beteiligten Entwickler die Möglichkeit, den neu eingebrachten Code zu überprüfen. Der Projektleiter führt dann den finalen Versionsstand zusammen.

Konzepte und deren Vor- und Nachteile

Zentrale Versionsverwaltungen arbeiten nach dem Prinzip „Lock-Modify-Write“ und wird in Fachkreisen auch als „pessimistische Versionsverwaltung“ bezeichnet. Bei diesem Verfahren werden einzelne Dateien eines zentralen Repositories durch den Entwickler gesperrt und nach dem Abspeichern der Änderungen wieder freigegeben.

Wesentlicher Vorteil dieses Konzeptes ist, dass keine Zusammenführung von unterschiedlichen Versionen notwendig ist, da immer nur ein einziger Entwickler eine Datei ändern kann. Daraus ergibt sich jedoch auch der Nachteil, dass weitere Entwickler auf die Freigabe der Datei warten müssen, damit sie ihrerseits Änderungen einbringen können.

Ein moderneres Verfahren ist das Prinzip „Copy-Modify-Merge“, das heutzutage bei fast allen zentralen und verteilten Versionsverwaltungen anzutreffen ist. Die zugrundeliegende Philosophie der „optimistischen Versionsverwaltung“ lässt gleichzeitige Änderungen von Dateien zu, die anschließend – automatisch oder auch manuell – zusammengeführt werden.

Dieses Verfahren erleichtert die Arbeit der Mitglieder eines Entwicklerteams sehr, da geplante Änderungen nicht angekündigt werden müssen. Es ermöglicht räumlich getrenntes Arbeiten an einem Softwareprojekt und steigert dadurch die Produktionseffizienz. Als einziger Nachteil ist die problematische Verarbeitung und Versionierung von fertig compilierten Binärdateien, dies ist meist nur mit zusätzlichen Tools zu bewerkstelligen. Aus diesem Grund wird bei Binärdateien oft weiterhin mit dem Lock-Modify-Write-Verfahren gearbeitet.

Mit modernem Versionsverwaltungssystemen ist es möglich, parallel mehrere unterschiedliche Softwareversionen zu erstellen. Eine solche Version wird als „Branch“ bezeichnet. Dies ist im Grunde nichts anderes als ein weiterer Zweig im Dateiverzeichnisbaum. Diese Branches sind dem so genannten „Trunk“, dem Hauptversionsstamm, untergeordnet. Des Weiteren gibt es „Tags“, dies sind Kopien weiter zurückliegender Versionsstände, die zu Archivierungszwecken gespeichert werden.

Welche Versionierungssoftware-Anbieter gibt es?

Die verbreitetsten Versionierungswerkzeuge sind das Subversion-Projekt (SVN) aus dem Hause Apache sowie Git mit seinen webbasierten Services GitHub, GitLab und Bitbucket. Das Open-Source-Projekt SVN zählt du den zentralen Versionsverwaltungsplattformen und unterstützt auch die Versionierung von Binärdateien. Insbesondere große Binär-Files wie z. B. grafische Elemente können automatisch erkannt und somit mit vorherigen Versionen abgeglichen werden.

Git ist den verteilten Versionsverwaltungen zuzurechnen und ermöglicht systembedingt im professionellen Umfeld eine schnelle Bearbeitung des Sourcecodes durch die lokale Version auf dem Rechner des Programmierers. Außerdem ermöglicht Git es allen beteiligten Entwicklern, den aktuellen Stand der Programmierung einzusehen und auf Fehler zu überprüfen, bevor dieses in das zentrale Repository eingespielt wird.

Insbesondere in der Webentwicklung werden zunehmend webbasierte Dienste eingesetzt. GitHub bietet mit seinen zahllosen Open-Source-Projekten die Möglichkeit, Software kostenlos einem Versionsmanagement zu unterziehen.

Im professionellen Bereich ist man jedoch aus rechtlichen Gründen auf kostenpflichtige Angebote angewiesen. Hier kommt z. B. GitLab als webbasierter Dienst zum Einsatz, da hierdurch die Codes einer Closed-Source-Software zusätzlich auf einem eigenen Server behalten werden können.

Was man bei der Auswahl einer passenden Versionierungsplattform beachten sollte

Bevor man sich für eine Versionsverwaltungssoftware entscheidet, sollte überprüft werden, ob die Plattform die Integration des verwendeten Versionskontrollsystems unterstützt.

Zu diesem Zweck bieten einige Anbieter gleich mehrere Schnittstellen an. Des Weiteren sollten Sie sich über den Umfang Ihrer Softwareprojekte und Businesspläne im Klaren sein, bevor Sie eine Entscheidung für oder gegen einen Provider fällen. Möglicherweise ist die Nutzeranzahl und die Speicherkapazität begrenzt oder mit Zusatzkosten verbunden.

Ein weiteres wesentliches Auswahlkriterium ist die Datensicherheit. Das ausgewählte Tool sollte auf jeden Fall eine Funktion für individuelle Zugriffsberechtigungen vorweisen können. Ein weiterer bedeutender Faktor sind mögliche Funktionen zur Unterstützung der Team-Kollaboration. Bei der teambasierten Softwareentwicklung ist ein funktionierender Austausch unter allen beteiligten Entwicklern eine Grundvoraussetzung, um Systemfehler auszuschließen.

Fazit

Professionelles Coding und das dazugehörende Projektmanagement funktioniert nicht mehr ohne eine zeitgemäße Versionsverwaltung. Eine effiziente Versionsverwaltung setzt wiederum eine passende Plattform voraus, die einem Entwicklerteam eine bestmögliche Zusammenarbeit ermöglicht.

Ob Sie sich für ein führendes Produkt entscheiden oder doch lieber für einen Nischenanbieter, der mit seinem Produkt den Workflow Ihres Projektteams optimal abbildet, entscheidet der Einzelfall. Der Markt der Versionierungsplattformen ist breit aufgestellt, für jede Projektgröße und jedes Budget findet sich ein passender Anbieter. Vergleichen Sie in Ruhe, dann steht dem fehlerfreien Coding und optimierten Arbeitsabläufen in der Softwareentwicklung nichts mehr im Wege.

Interessante Beiträge zum Thema:
Beschreibung zu Versionsverwaltung auf Wikipedia
Versionsverwaltungs-Tools im Vergleich

Bilder: Canva


Der Autor: Sascha Thattil arbeitet bei YUHIRO und hilft Unternehmern und Unternehmen beim einfachen Aufbau von Programmier-Teams in Indien. YUHIRO ist ein deutsch-indisches Unternehmen welches IT Firmen, Agenturen und IT Abteilungen Softwareentwickler bereitstellt.

Schreibe einen Kommentar