Software product line engineering foundations, principles and techniques (Springer, 2005)