Projekt: Development of Eclipse Plug-Ins for VariantSync

Wer kennt es nicht: Ihr oder euer Team entwickelt eine Software und eines Tages braucht ihr verschiedene Ausführungen (oder auch Varianten). Dabei kann es sich etwa um die Portierung auf andere Systeme, das Umkonfigurieren einzelner Variablen oder um weitreichende Anpassungen im Verhalten des Programms handeln. Zum Beispiel wollt ihr vielleicht, dass eure Desktopanwendung nun auch auf dem Smartphone läuft und je nachdem, ob GPS verfügbar ist andere Daten bereitstellt. Dazu müsst ihr nun eigentlich eine geeignete Softwarearchitektur entwerfen, für die euer Programm aber vielleicht nie gedacht war, und ein großes Refactoring anstoßen. Und hattet ihr nicht eigentlich dieses eine Feature oder jene Utility-Funktionen, die ihr jetzt gerade braucht, nicht vor ein paar Semestern eh schonmal für ein anderes Projekt geschrieben? Da ist es doch viel einfacher, die alte Software und die ganzen alten Codefragmente zu kopieren und fix anzupassen!

Was in diesem kleinen Beispiel noch einfach klingt, kann in Industrie und Praxis zu großen Problemen führen. Je mehr Varianten eurer Software ihr habt (z.B. in vielen Branches oder Forks), desto größer wird der Aufwand diese parallel zu entwicklen, zu warten und zu synchronisieren. Es passiert schnell, dass Entwickler den Überblick verlieren, Features doppelt implementieren oder Bugs zwar beheben, aber nicht in allen entsprechenden Varianten. Oft ist es aber auch völlig unklar, ob eine gefixter Bug so in den anderen Varianten überhaupt auftrat, vor allem, wenn es sich um Randfälle oder bestimmte Interaktionen von Features handelt. In der Praxis sind manche Entwickler sogar ausschließlich mit der Lösung von Merge-Konflikten beschäftigt.

VariantSync ist ein Forschungsprojekt in dem es darum geht Variabilität in solchen Clone-and-Own-Projekten zu verwalten. Wir wollen Entwicklern dabei helfen eine Übersicht über ihre Varianten und die darin implementierten Features zu gewinnen, damit die Varianten gezielt und vollständig synchronisiert werden können (z.B. nach einem Hotfix). Dazu implementiert ihr die Kernfunktionalität in einer Java-Bibliothek, sodass diese in anderen Werkzeugen wiederverwendet werden kann. Basierend auf dieser Bibliothek entwickelt ihr dann in Eclipse eine IDE.

Übersicht über unsere Forschungsvision

Externer Inhalt

Um diesen Inhalt zu verwenden (Quelle: www.xyz.de), klicken Sie bitte auf Akzeptieren. Wir möchten Sie darauf hinweisen, dass durch die Annahme dieser IFrames Daten an Dritte übertragen oder Cookies gespeichert werden könnten.

Weitere Informationen finden Sie in unserer Datenschutzerklärung.

Studiengänge

Das Projekt richtet sich an Studierende des Studiengangs Software Engineering im Bachelor oder Master und kann in den folgenden Modulen angerechnet werden:

  • Anwendungsprojekt Software Engineering - Verteilte Mobile Anwendungen (Bachelor)
  • SE Projekt A (Master)
  • SE Projekt B (Master)

In den Studiengängen Informatik und Medieninformatik kann das Projekt im Master in den folgenden Modulen angerechnet werden:

  • Individualprojekt Software Engineering
  • Projekt Anwendung von ausgewählten Prinzipien der Softwaretechnik bei der Anwendungsentwicklung mit 8 Leistungspunkten

Voraussetzungen

  • Solide Kenntnisse der Programmierung in Java sowie der darin üblichen Patterns und Techniken.
  • Elementare Kenntnisse im Umgang mit Git.
  • Besuch der Vorlesung zu Software-Produktlinien ist hilfreich, aber nicht notwendig.

Aufgaben

In einem Prototypen von VariantSync wurden erste Ideen ausprobiert und getestet (siehe Screencasts auf YouTube). Eure Aufgabe ist es, diesen Prototyp zu modernisieren und generalisieren. In einer neuen geeigneten Software-Architektur, sollen die bestehende Funktionalität integriert und erweitert werden. Die Idee ist es, den bisherigen Prototypen, der als reines Eclipse-Plugin existiert in zwei Teile aufzuteilen: Das Plugin, dass die VariantSync IDE umsetzt, und eine Library, die alle Forschungs-Ergebnisse und -Konzepte implementiert. Die Aufteilung soll so erfolgen, dass möglichst viel Funktionalität wiederverwendet werden kann, sodass in der Zukunft (aber nicht in diesem Projekt) z.B. auch andere Interfaces für VariantSync implementiert werden können, wie zum Beispiel ein Command Line Interface.

Inhalt

  • Nichts für die Schublade: Open-Source-Entwicklung von aktueller Forschungssoftware
  • Eclipse-Plugin Development
  • Java Library Development
  • Version Control
  • Code-Reviews
  • Entwicklung als Fork mit Pull-Requests
  • Meilensteine und wöchentliche Stand-Up-Meetings
  • Abschlussvortrag

Ziele

  • Kenntnisse über moderne, erweiterte Programmierparadigmen mit Fokus auf die Erstellung maßgeschneiderter Systeme erlangen
  • Erfahrungen mit der Entwicklung von Plug-Ins für Eclipse sammeln
  • Agile Softwareentwicklung im Pair-Programming Stil ausprobieren
  • Lernen, die Versionsverwaltungssoftware Git und die Plattform Github produktiv einzusetzen

Materialien