Software Architecture
Software Architecting is a means to create systems efficient and effective, by
supplying overview, by guarding consistency and integrity, and by balancing.
The software architecture of a program or computing system is the structure or
structures of the system, which comprise software components, the externally
visible properties of those components, and the relationships between them. The
term also refers to documentation of a system's software architecture. Documenting
software architecture facilitates communication between stakeholders, documents
early decisions about high-level design, and allows reuse of design components
and patterns between projects.
Software architecture topics
Architecture description languages
Architecture description languages (ADLs) are used to describe a Software
Architecture. Common elements of an ADL are component, connector and
configuration.
Views
Software architecture is commonly organized in views[7], which are
analogous to the different types of blueprints made in building architecture.
Within the ontology established by ANSI/IEEE 1471-2000, views are
instances of viewpoints, where a viewpoint exists to describe the
architecture in question from the perspective of a given set of stakeholders
and their concerns.
Some possible views are:
Functional/logic view
Code/module view
Development/structural view
Concurrency/process/thread view
Physical/deployment view
User action/feedback view
Data view
Several languages for describing software architectures have been
devised, but no consensus has yet been reached on which symbol-set and
view-system should be adopted. The UML was established as
a standard "to model systems (and not just software)," and thus applies to
views about software architecture.
Architecture frameworks
Frameworks related to the domain of software architecture are:
4+1
RM-ODP (Reference Model of Open Distributed Processing)
Service-Oriented Modeling Framework (SOMF)
The distinction from detailed design
Software architecture is the realization of non-functional requirements,
while software design is the realization of functional requirements. Software
architecture, also described as strategic design, is an activity concerned
with global design constraints, such as programming paradigms,
architectural styles, component-based software engineering standards,
design principles, and law-governed regularities. Architecture is design but
not all design is architectural. In practice, the architect is the one who
draws the line between software architecture (architectural design) and
detailed design (non-architectural design).