Implementierung einer Versionsverwaltung in ein Plug-In für verteilte Paarprogrammierung
bearbeitet von: Christian Zygmunt Jeschke (
christian.jeschke@fu-berlin.de)
Zusammenfassung
Die Paarprogrammierung basiert auf der Idee das zwei Programmierer zusammen Programmcode und dessen Dokumentation erstellen. Ziel ist es Qualitätssicherung zu betreiben. Erreicht wird dies durch folgende zwei Aspekte der Paarprogrammierung. Erstens erfolgt durch die zweite Person eine ständige Durchsicht und zweitens gibt es immer zwei Personen, die ein tiefes Verständnis über das Geschriebene besitzen. Erfolgt diese Arbeit an zwei Rechnern nennen wir dies verteilte Paarprogrammierung. Eine Software, die dies ermöglicht ist Saros, die an der Freien Universität entwickelt wird.
Versionsverwaltung erlaubt es, das Speichern von aktuellem Inhalt des Arbeitsverzeichnisses, erleichtern somit den Umgang mit mehreren Versionen einer Software und dient der Koordination von gleichzeitiger Entwicklung verschiedener Änderungen. Sie erleichtert vor allem das anschließende Zusammenführen. Git ist eine Versionsverwaltung, die sich dadurch auszeichnet, dass sie verteiltes Arbeiten unterstützt und das sie den Speicher effizient nutzt.
Ich wollte in dieser Arbeit diskutieren, warum die Software Saros um eine Unterstützung für Git erweitern werden sollte. Dazu habe ich eine Anforderungsanalyse durchgeführt, daraus Anforderungen bestimmt und diese priorisiert. Eine Implementierung der am höchst priorisierten Anforderungen war ebenfalls Teil dieser Arbeit, wobei ich bei der Implementierung auf jedem Fall Datenverlust vermeiden wollte. Die Unterstützung von Git in Saros konnte mit dieser Arbeit in folgenden Punkten erreicht werden:
- Es existiert die Möglichkeit bei Nutzung von Saros seinem Partner (oder seinen Partnern) neue Versionen/Commits zuzusenden. Dafür ist keine zusätzliche Verbindung notwendig. Sie werden automatisch in sein Repository gefetched. Danach können sie bei ihm gemerged werden. Ziel bzw. das Szenario bei welchem dies eingesetzt werden soll, ist wenn nach gemeinsamer Bearbeitung des Programmcodes eine neuer Commit bei einem der Partner erstellt werden soll und dem/den anderen dieser nur noch gesendet.
- Der vorherige Punkt ist die gewünschte Anforderung an eine Unterstützung von Git. Es wurden ebenfalls Anforderungen gefunden die nicht existieren. Eine davon: Beim Session Start ein Repository senden, anstatt nur die Dateien.
- Eine GUI -Implementierung des ersten Punkts für die IDE Eclipse.
- Das Einbinden von ausgewählten Funktionen der Bibliothek JGit über die JGitFacade.
- Das Einführen vom GitManager, einem Objekt welches beim Benutzer am Beginn einer Sitzung erstellt wird und welches Zuständig ist den Speicherorts festzuhalten in welchem sich das .git Verzeichnis befindet und für das Steuern beim Versenden von Commits.
- Das Implementieren vom Merge. Diesen habe ich so implementiert das Dateien, die über Saros geteilt werden respektiert werden. Dazu habe ich die Annahme formuliert das alle Dateien im Arbeitsverzeichnis auch von Saros geteilt werden, weil dies im Allgemeinen erwartet ist. Ich unterscheide, beim Empfänger, den Zustand in denen Änderungen im Index, aber nicht im Arbeitsverzeichnis enthalten sind (also auch nicht von Saros sichtbar) und der wo dies nicht der Fall ist. Für den ersten Fall erlaube ich keinen Merge. Der Sender ist nicht so stark eingeschränkt aber bei ihm gilt die Einschränkung: Alle Änderungen sollten in einem Commit enthalten sein, wenn sie von Saros sichtbar sind. Im Programmcode habe ich die Einschränkung des Empfängers abgesichert und auch das es nur ein Fast-Forward-Merge sein darf.
Kommentare (Kontakt per Mail wird bevorzugt)