Due to the increasing complexity of software systems, it becomes extremely difficult to develop these systems and ensure their dependability. Software architectures, as the highest level abstraction of software systems, are critical and essential in the overall software development process. A software architecture description enables us to record crucial design decisions on important aspects of a system, and to analyze and detect costly design mistakes before the system is implemented and deployed. This study examines how software architectures can be modeled and specified in a rigorous and unambiguous way, and how the model can be analyzed using well established formal methods. This book studies both functional properties including safety and liveness as well as non-functional properties such as performance, reliability, and availability. This book also presents a framework to facilitate the modeling and analysis tasks. This book is addressed to researchers in software architecture and formal specification and analysis; as well as to software practitioners involved in software architecture design.