Software architecture specifies a high level of software system abstraction by employing decomposition, composition, architecture styles, and quality attributes. Every software architecture must describe its collection of components and the connections and interactions among these components. It must also specify the deployment configuration of all components and connections.