Feature Interactions
Feature interactions occur between features of a software that crosscut each other. Interactions
often enforce a particular composition order of features and can result in
special interaction code, a.k.a derivatives.
Derivatives in FeatureC++
Derivatives are modularized code fragments that represents interactions between multiple features.
See here for a more detailed description.
In FeatureC++ the composition order is defined by the order of features in the composition file. Derivatives can be modularized
and are automatically applied in the code generation process.
Using FeatureC++, derivatives are stored each in a separate folder usually in a
special location used only for derivatives. Since a derivative belongs to at least
two features symbolic links within folders of the corresponding features are used
to ease navigation.
- Derivatives are handled by FeatureC++ by following symlinks within features that
point to folders that store the derivatives.
- Derivatives have to be placed in a different folder, one folder for a derivative.
- The symlinks pointing to these derivatives have to have the same name as the Feature
that this belongs to. E.g.,
- Derivative A/B of features A and B might be placed in directory "A_B"
- The symlinks can be placed in directoy A and/or B
- Symlink in directory A has to be named "B", Symlink in directory B has to be named
"A".
- Feature C++ generates special ".link" files based on OS-symlinks to allow portability
between different types of operating systems (e.g., between Windows and Linux).
After copying source code with ".link" files to another OS FeatureC++ regenerates
the OS specific symlinks to allow easy navigation.
Known problems
- Windows OS: fc++ creates symbolic filesystem links to allow easy navigation between features
and derivatives. If sources with existing links are copied Windows cannot
properly handle the copies of such links. To avoid problems,
symlinks in a source
directory have to be deleted ("*.lnk"). These files are regenerated
when running
fc++.
- LinuxOS + Eclipse + CVS: Exclipse does not handle Linux OS-links
correctly. You cannot do a CVS-commit with OS symlinks in the source and thus you cannot do the commit with FeatureC++ source code. Two workarounds: (1) commit
manually from the command line or (2) delete alle OS symlinks before commit.