Software Product Line Engineering: Foundations, Principles and Techniques