FeatureIDE: One Size fits all?

Festlegen gültiger Featurekombinationen

Bestimmte Kombinationen von Features führen nicht zu sinnvollen Varianten, z. B. dürfen Mobile und PC in unserem Beispiel nicht zusammen ausgewählt werden, weil die Software entweder auf einem PC oder einem mobilen Gerät laufen kann. FeatureIDE unterstützt uns bei der Auswahl von Features, indem Optionen, die zu solchen ungültigen Konfigurationen führen, deaktiviert werden. Z. B. wird, nachdem Mobile selektiert wurde, das Feature PC im Konfigurationseditor ausgegraut dargestellt, da es sich um alternative, d. h. sich gegenseitig ausschließende, Features handelt. Genauer gesagt bedeutet es, dass unsere Anwendung nicht beide Features in ein und derselben Variante erlaubt.

Abb. 4: FeaturemodellAbb. 4: Featuremodell (Vergrößern)

Um festzulegen, wie Features miteinander in Beziehung stehen, wird ein Featuremodell erstellt. Bei einem Featuremodell handelt es sich um eine hierarchische Darstellung von Features, die in FeatureIDE grafisch oder textuell bearbeitet werden kann (Abb. 4).

Das Wurzelfeature, also das oberste in der Hierarchie, muss in jeder Konfiguration ausgewählt sein. Es kann Basisfunktionalitäten enthalten, die alle Varianten gemeinsam haben. Weitere Features können auf verschiedene Arten hinzugefügt werden. Dabei sind verschiedene Formen von Abhängigkeiten möglich. Grundsätzlich wird eine Abhängigkeit zwischen zwei Features durch eine Verbindung im Featuremodell dargestellt. Das untergeordnete Feature kann nur selektiert werden, falls das darüber liegende Feature ebenfalls ausgewählt ist. So kann zum Beispiel Multiplication nur ausgewählt werden, falls Operations ausgewählt ist. Ein Feature kann mehrere unterliegende Features besitzen, aber umgekehrt höchstens ein darüber liegendes Feature.

Darüber hinaus gibt es noch weitere Beziehungen, die zwischen Features auftreten können. Z. B. ist das Feature Multiplication optional und kann auch weggelassen werden. Die Features Mobile und PC sind Alternativen und können nicht zusammen ausgewählt werden. Die Features Graphical und Console befinden sich in einer Oder-Gruppe, d. h. mindestens eine der beiden muss in jeder Konfiguration ausgewählt werden.

Das Featuremodell hilft außerdem, die Features übersichtlich anzuordnen und zu strukturieren. So kann man z. B. leicht erkennen, dass es sich bei Addition und Multiplication um Operationen handelt. Besonders bei größeren Projekten kann das sehr nützlich sein.

Hintergrund

FeatureIDE wird als Open-Source-Werkzeug in einem akademischen Umfeld entwickelt. Es unterstützt eine Vielzahl an Programmiersprachen, darunter Java, C, C++, C#, Haskell, XML und JavaCC. Die in diesem Artikel präsentierte Technik wird Feature-oriented-Programming genannt. Zusätzlich werden weitere Techniken unterstützt, die auf Präprozessoren (Antenna, Munge), aspektorientierter Programmierung (AspectJ) und Delta-orientierter Programmierung (DeltaJ) basieren. FeatureIDE wird ständig erweitert und verbessert, um die Entwicklung von Softwarevarianten weiter zu vereinfachen.

Zusammenfassung

FeatureIDE ermöglicht es, Softwarevarianten effizient zu entwickeln. Ob für die Entwicklung einiger Varianten einer Software oder für eine ausgewachsene Produktlinie – die nahtlose Einbindung in Eclipse macht den Einstieg leicht. Viele interessante Beispielprojekte und ein Tutorial helfen außerdem bei den ersten Schritten. FeatureIDE ist als Open-Source-Eclipse-Plug-in verfügbar und über den Eclipse Marketplace oder die FeatureIDE-Webseite erhältlich [1].

Thomas Thüm ist seit 2010 Doktorand an der Otto-von-Guericke
Universität in Magdeburg und Projektleiter von FeatureIDE. Er hat
zusammen mit zwei anderen Studenten im Jahr 2007 einen Prototyp
von FeatureIDE für die Lehre in Magdeburg entwickelt, der
ständig erweitert wurde und inzwischen weltweit in Forschung und
Lehre eingesetzt wird.

Fabian Benduhn (fabian.benduhn[at]st.ovgu.de) studiert Informatik
an der Otto-von-Guericke-Universität Magdeburg und ist als studentische
Hilfskraft in der Arbeitsgruppe Datenbanken am Institut
für Technische und Betriebliche Informationssysteme tätig. Er ist
seit 2010 Mitglied des FeatureIDE-Entwicklungsteams.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.