Software architecture is the high-level structure of a software system. The software architecture of a program or computing system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them. It is a sketchy map of the system. Software architecture is commonly defined in terms of components and connectors. Software architecture describes the coarse grain components (usually describes the computation) of the system. The connectors between these components describe the communication, which are explicit and pictured in a relatively detailed way. In the implementation phase, the coarse components are refined into "actual components", e.g, classes and objects. In the object-oriented field, the connectors are usually implemented as interfaces.
Components are identified and assigned responsibilities that client components interact with through "contracted" interfaces. Component interconnections specify communication and control mechanisms, and support all component interactions needed to accomplish system behavior.
Software architecture forms the backbone for building successful software-intensive systems. An architecture largely permits or precludes a system's quality attributes such as performance or reliability. Architecture represents a capitalized investment, an abstract reusable model that can be transferred from one system to the next. It represents a common vehicle for communication among a system's stakeholders, and is the arena in which conflicting goals and requirements are mediated. The right architecture is the linchpin for software project success.
A division of Amrita specializes in the development of software architectures for large-scale, mission-critical software systems. We believe software architecture developed in combination with lightweight iterative development processes provide the best mix for most software projects.