Fundamentals of Software Architecture (A Modern Engineering Approach)