Software Architecture Analysis and Design