Model-driven evolution of software architectures