Graph-based design and analysis of dynamic software architectures