Reconfiguring software means adding or disabling functionalities, adapting core functions, or tailoring the software interactions with the external environment. Configuration may mean: changing the source code and rebuilding; changing configuration files and restarting the application; dynamically changing the software state. The latter is called runtime reconfiguration, and is a hot topic in dynamic software product lines and adaptive applications. However, the exact nature of the artifacts and concepts which are actually manipulated by software developers  for dealing with configuration is still not fully understood.
The objective of this internship is to study in which manner and to what extent configuration means are implemented in existing software, with a focus on the Java programming language and its component models (Guice, Fractal, OSGI). In particular, we would like to classify source code conditionals (e.g. "if/then" and "switch") as domain logic / configuration / runtime configuration and quantify each kind of configuration. The work to be done during this internship is as follows: