Faculty of Computer Science Database Workgroup
FeatureIDE

FeatureIDE

An Eclipse plug-in for Feature-Oriented Software Development.

Please cite as: Thomas Thüm, Christian Kästner, Fabian Benduhn, Jens Meinicke, Gunter Saake, and Thomas Leich. FeatureIDE: An Extensible Framework for Feature-Oriented Software Development. Science of Computer Programming, 2013. To appear; accepted 2012-06-07.

Description

Software product lines (SPL) have a long tradition and will gain momentum in the future. Today's research tries to move software development to a new quality of industrial production. Several solutions concerning different phases of the software development process have been proposed in order to cope with different problems of program family development. A major problem of program family engineering is still the missing tool support. The vision is an IDE that brings all phases of the development process together, consistently and in a user-friendly manner.

FeatureIDE is an Eclipse-based IDE that supports all phases of feature-oriented software development for the development of SPLs: domain analysis, domain implementation, requirements analysis, and software generation. Different SPL implementation techniques are integrated such as feature-oriented programming (FOP), aspect-oriented programming (AOP), delta-oriented programming (DOP), and preprocessors. Currently, FeatureIDE provides tool support for AHEAD, FeatureC++, FeatureHouse, AspectJ, DeltaJ, Munge, and Antenna.

FeatureIDE is under constant development. The following features are implemented:

  • Full Eclipse Integration
  • Feature Model Editor, graphical and text based.
  • Constraint Editor with content assist, syntax, and semantic checking, e.g., dead feature detection.
  • Abstraction from the SPL source code for several outline and navigation tools, among others and overview how mixins are composed and which methods are present in previous features.
  • Configuration Editor to create and edit configurations and with support for deriving valid configuration.
  • Support for edits on feature models, i.e., categorizing edits into refactorings, generalizations, specializations or none of these.
  • Integration of AHEAD
    • Editor with syntax highlighting, content assist and outline view for Jak files.
    • Error propagation to show compiler errors at non-generated code.
    • Refactoring support for Jak files
  • Integration of FeatureC++
  • Integration of FeatureHouse with support for C, C#, Java 1.5, Haskell, XML, JavaCC, ...
  • Integration of AspectJ
  • Integration of DeltaJ (only available for Eclipse 3.6)
  • Integration of the preprocessor Munge
  • Integration of the preprocessor Antenna

Screenshots

Some new functionality to appear soon is explained in the following screencasts:

Some new functionality in FeatureIDE 2.6.3 is explained in the following screencasts:

Some new functionality in FeatureIDE 2.6.0 is explained in the following screencasts:

Please check out the new tutorial by Don Batory including videos explaining the usage.

You may also want to watch a screencast of an older FeatureIDE version, namely FeatureIDE 2.3.6.

Publications

Research based on FeatureIDE

Related Publications

Documentation

We prepared slides as documentation for FeatureIDE.
  1. FeatureIDE: Background - Short overview of Feature-Oriented Software Development
  2. FeatureIDE: Overview: Description of FeatureIDE's Functionality
  3. FeatureIDE: Get Started - How to install FeatureIDE and retrieve example projects
  4. FeatureIDE: Development - How to extend FeatureIDE, i.e., how is the SVN organized and which plug-in implements which functionalities

Download/Installation

How to install FeatureIDE and retrieve example projects? FeatureIDE: Get Started

Please support FeatureIDE by downloading it within Eclipse using Help > Eclipse Marketplace > Search for FeatureIDE! We would like to get your feedback and comments on FeatureIDE and you can rate our plug-in at the Eclipse MarketPlace.

You can download and test the current version of FeatureIDE using the Eclipse Update Mechanism or the Eclipse Marketplace. If you do not have Eclipse installed, you might choose the "Eclipse IDE for Java Developers" in the current version. We also prepared an Eclipse 3.6 for Windows with FeatureIDE, CDT, and AJDT installed:

Open the FeatureIDE perspective in the right upper corner of the Eclipse window. You also may want to open the FeatureIDE cheat sheet using "Help > Cheat Sheets... > FeatureIDE".

Java 1.6 is required!

Eclipse Helios (3.6), Java 1.6

  1. Open Eclipse and go to "Help > Install New Software..."
  2. Add the following remote site: http://wwwiti.cs.uni-magdeburg.de/iti_db/research/featureide/deploy/
  3. Select the the features FeatureIDE, Feature Modeling, and the required FeatureIDE extensions. You may need to add further update sites to install FeatureIDE extensions:
  4. Continue with "Install..."

Eclipse Galileo (3.5), Java 1.6

  1. Open Eclipse and go to "Help > Software Updates... > Available Software > Add Site..."
  2. Add the following remote site: http://wwwiti.cs.uni-magdeburg.de/iti_db/research/featureide/deploy/
  3. Select the the features FeatureIDE, Feature Modeling, and the required FeatureIDE extensions. You may need to add further update sites to install FeatureIDE extensions:
  4. Continue with "Install..."

Eclipse Ganymede (3.4), Java 1.6

  1. Open Eclipse and go to "Help > Software Updates... > Available Software > Add Site..."
  2. Add the following remote site: http://wwwiti.cs.uni-magdeburg.de/iti_db/research/featureide/deploy/
  3. Select the the features FeatureIDE, Feature Modeling, and the required FeatureIDE extensions. You may need to add further update sites to install FeatureIDE extensions:
  4. Continue with "Install..."

Older Versions

Using the above update site you can only access recent versions of FeatureIDE. Older versions can be accessed using the following update site:
FeatureIDE 2.5 and earlier versions: http://wwwiti.cs.uni-magdeburg.de/iti_db/research/featureide/deploy/2.5/

Nighly Builds

For nightly builds, use the following update site: http://wwwiti.cs.uni-magdeburg.de/iti_db/research/featureide/deploy/nightly/p2-updateSite/

Source Code

FeatureIDE is released under GPL license. The source code is available in the following SVN repository: https://faracvs.cs.uni-magdeburg.de/svn/tthuem-FeatureIDE (login:anonymous, no password). See also our Bug Tracker and Wiki.

Usage

For a current step-by-step tutorial see the FeatureIDE cheat sheet in Eclipse (help menu). Examples can be found using "New > Examples > FeatureIDE".

1. Open the FeatureIDE Perspective

Open the FeatureIDE Perspective on the right upper corner of Eclipse.

2. Create a Feature Project

Use the wizard to create a new Feature Project or convert a Java project by adding the FeatureIDE nature (right click on the project in package explorer).

3. Edit the Feature Model

Open the model.xml file and edit the graphical (Feature Diagram) or textual version (Source). You can add or delete features using the context menu and rename using simple click. Features can be moved along the diagram using drag and drop. Double click on features or connections will change the feature to optional/mandantory or the connection type to And/Or/Alternative.

Create new constraints (context menu) or open existing ones (double click) with the Constraint Editor. You can add features by double clicking on their name, add operators using the buttons, or simply with the content assist. The constraint will be checked towards syntactical (missing brackets) and semantical validity (causes dead features).

Support for editing is provided by the Feature Model Edit View which can be opened at "Window > Show View > Other...". This view calculates whether the change you made to the feature model will cause addition or deletion of products. Additionally, an example product (added/deleted) is given if it exists.

4. Create Configuration files

Use the wizard to create new Configuration files in the folder "configs". In the Advanced Configuration Editor, features can be selected/deselected by a double click. A configuration that is not allowed along to the feature model gets an error marker.

If there is more than one Configuration file, only the one you have selected using right click and "Set as current configuration" is build.

5. Create Jak files or other FeatureIDE source files

Use the wizard to create new FeatureIDE files and add your code.

Hint: AHEAD forces that only Java 1.4 constructs are used.

Hint: Use of state machines in Jak files is not supported.

6. Create Run Configurations

Create run configurations as usual in Eclipse, e.g., right click on a generated Java file and use "Run As...".

FAQ

Why are the symbols in cross-tree constraints below the feature diagram are not displayed correctly?

Please make sure that the font "Arial Unicode MS" is installed on your operating system so that FeatureIDE can use it to display the cross-tree constraints.

How can I use external jar files in my FeatureIDE project?

For FeatureIDE 2.4 and older: Please create a folder named "lib" at the project root and insert all jar files which you intent to reference. The jar files are detected by the compiler and added as parameters if you run your FeatureIDE application.
For FeatureIDE 2.5 and newer: Right click the jar files in package explorer and add them to the Java build path.

How can I compare two different feature models in FeatureIDE?

  1. Prepare two FeatureIDE projects (A and B) that contain the feature models you want to compare. Either edit them using FeatureIDE or import them from other formats, e.g., GUIDSL.
  2. Open the feature model of project A, switch to the tab Source, and copy the whole document.
  3. Open the feature model of project B, switch to the tab Source, and paste the clipboard.
  4. Switch back to the tab Feature Diagram in editor of project B and the feature model edit view will show the results.
Checkout this video to see how to do it.

How can I import/export the feature model from/to other tools?

Select the file model.xml in Package Explorer and open the context menu > FeatureIDE > Import/Export ...

How can I store my feature model to a bitmap graphic or PDF file?

Select or open your feature model and then choose "File" > "Save As" or "File" > "Print". The later option requires that you have an PDF printer installed and have a program to crop PDFs (such as Adobe Acrobat).
Note, that you can change the layout of the feature model since FeatureIDE 2.6 using "Set Layout" in the context menu of the feature model editor. There are pre-defined layouts, but you can also manually move features for compact positioning.

Contact

FeatureIDE is developed mainly at the University of Magdeburg, Germany. It is open source, to acquire the source code see SVN repository and bug tracker above. For information about the project, technical questions and bug reports: please contact the development team via thomas.thuem@ovgu.de. You can also use our bug tracker.

FeatureIDE Project Members:

  • Thomas Thüm (University of Magdeburg, Germany; University of Texas at Austin, USA)
  • Reimar Schröter (University of Magdeburg, Germany)
  • Jens Meinicke (University of Magdeburg, Germany)
  • Fabian Benduhn (University of Magdeburg, Germany)
  • Sebastian Krieter (University of Magdeburg, Germany)
  • Sven Schuster (University of Braunschweig, Germany)
  • Felix Rieger (University of Marburg, Germany)
  • Christian Kästner (Carnegie Mellon University, USA)
  • Sandro Schulze (University of Braunschweig, Germany)
  • Thomas Leich (Metop Research Institute, Magdeburg, Germany)
  • Sven Apel (University of Passau, Germany)
  • Don Batory (University of Texas at Austin, USA)

Former Project Members:

  • Constanze Adler (University of Magdeburg, Germany)
  • Christian Becker (University of Magdeburg, Germany)
  • Stephan Besecke (University of Magdeburg, Germany)
  • David Broneske (University of Magdeburg, Germany)
  • Tom Brosch (University of Magdeburg, Germany)
  • Alexander Dreiling (University of Magdeburg, Germany)
  • Janet Siegmund (Feigenspan) (Metop Research Institute, Magdeburg, Germany)
  • Christoph Giesel (University of Magdeburg, Germany)
  • David Halm (University of Magdeburg, Germany)
  • Sebastian Henneberg (University of Passau, Germany)
  • Sönke Holthusen (University of Magdeburg, Germany)
  • Marcus Kamieth (University of Magdeburg, Germany)
  • Stephan Kauschka (University of Magdeburg, Germany)
  • Dariusz Krolikowski (University of Magdeburg, Germany)
  • Stefan Krüger (University of Magdeburg, Germany)
  • Maik Lampe (University of Magdeburg, Germany)
  • Christian Lausberger (University of Magdeburg, Germany)
  • Tim Lautenschläger (University of Magdeburg, Germany)
  • Laura Marnitz (University of Magdeburg, Germany)
  • Cyrill Meier (University of Magdeburg, Germany)
  • Marcus Leich (University of Magdeburg, Germany)
  • Melanie Pflaume (University of Magdeburg, Germany)
  • Florian Proksch (University of Magdeburg, Germany)
  • Eric Schubert (University of Magdeburg, Germany)
  • Steffen Schulze (University of Magdeburg, Germany)
  • Ingo Siemers (University of Magdeburg, Germany)
  • Hannes Smuracsky (University of Magdeburg, Germany)
  • Torsten Stöter (University of Magdeburg, Germany)
  • Patrick Sulkowski(University of Magdeburg, Germany)
  • Patrick Venohr (University of Magdeburg, Germany)
  • Jan Wedding (University of Magdeburg, Germany)
  • Fabian Wielgorz (University of Passau, Germany)

Statistics

Since December 2010 FeatureIDE is listed at the Eclipse marketplace.

Since 2007 we received support request from the following cities:


View FeatureIDE Support Requests on a larger map

Related Downloads

FeatureIDE is extended for "An Homogeneous Feature-based Approach" separating and linking different variability spaces: http://modalis.polytech.unice.fr/softwares/hfm.

We generated 2000 feature models for our current research which are available for download. There are 200 models in ten different sizes: 10, 20, 50, 100, 200, 500, 1000, 2000, 5000 and 10000 features. All feature models contain cross-tree constaints growing with the number of features and are not void, i.e., they contain at least one product.

Guidsl jar file: guidsl.jar