Software Architecture: Foundations, Theory, and Practice