Modeling the Variability Space of Self-Adaptive Applications