Model-based development of dynamically adaptive software