Software architecture is the fundamental structure of a
software system
A software system is a system of intercommunicating components based on software forming part of a computer system (a combination of hardware and software). It "consists of a number of separate programs, configuration files, which are used to s ...
and the discipline of creating such structures and systems. Each structure comprises software elements, relations among them, and properties of both elements and relations.
The ''architecture'' of a software system is a metaphor, analogous to the
architecture
Architecture is the art and technique of designing and building, as distinguished from the skills associated with construction. It is both the process and the product of sketching, conceiving, planning, designing, and constructing buildings ...
of a building.
It functions as a blueprint for the system and the developing project, which
project management
Project management is the process of leading the work of a team to achieve all project goals within the given constraints. This information is usually described in project documentation, created at the beginning of the development process. T ...
can later use to extrapolate the tasks necessary to be executed by the teams and people involved.
Software architecture is about making fundamental structural choices that are costly to change once implemented. Software architecture choices include specific structural options from possibilities in
the design of the software.
For example, the systems that controlled the
Space Shuttle
The Space Shuttle is a retired, partially reusable low Earth orbital spacecraft system operated from 1981 to 2011 by the U.S. National Aeronautics and Space Administration (NASA) as part of the Space Shuttle program. Its official program na ...
launch vehicle had the requirement of being very fast and very reliable. Therefore, an appropriate
real-time computing
Real-time computing (RTC) is the computer science term for hardware and software systems subject to a "real-time constraint", for example from event to system response. Real-time programs must guarantee response within specified time constra ...
language would need to be chosen. Additionally, to satisfy the need for reliability the choice could be made to have multiple redundant and independently produced copies of the program, and to run these copies on independent hardware while cross-checking results.
Documenting software architecture facilitates communication between
stakeholders, captures early decisions about the high-level design, and allows reuse of design components between projects.
Scope
Opinions vary as to the scope of software architectures:
* Macroscopic system structure: this refers to architecture as a higher-level
abstraction
Abstraction in its main sense is a conceptual process wherein general rules and concepts are derived from the usage and classification of specific examples, literal ("real" or " concrete") signifiers, first principles, or other methods.
"An a ...
of a software system that consists of a collection of computational ''components'' together with ''connectors'' that describe the interaction between these components.
* The important stuff—whatever that is: this refers to the fact that software architects should concern themselves with those decisions that have high impact on the system and its stakeholders.
* That which is fundamental to understanding a system in its environment
* Things that people perceive as hard to change: since designing the architecture takes place at the beginning of a software system's lifecycle, the architect should focus on decisions that "have to" be right the first time. Following this line of thought, architectural design issues may become non-architectural once their irreversibility can be overcome.
* A set of architectural design decisions: software architecture should not be considered merely a set of models or structures, but should include the decisions that lead to these particular structures, and the rationale behind them.
This insight has led to substantial research into software architecture
knowledge management
Knowledge management (KM) is the collection of methods relating to creating, sharing, using and managing the knowledge and information of an organization. It refers to a multidisciplinary approach to achieve organisational objectives by making ...
.
There is no sharp distinction between software architecture versus design and requirements engineering (see
Related fields below). They are all part of a "chain of intentionality" from high-level intentions to low-level details.
Characteristics
Software architecture exhibits the following:
Multitude of stakeholders: software systems have to cater to a variety of stakeholders such as business managers, owners, users, and operators. These stakeholders all have their own concerns with respect to the system. Balancing these concerns and demonstrating that they are addressed is part of designing the system.
This implies that architecture involves dealing with a broad variety of concerns and stakeholders, and has a multidisciplinary nature.
Separation of concerns: the established way for architects to reduce complexity is to separate the concerns that drive the design. Architecture documentation shows that all stakeholder concerns are addressed by modeling and describing the architecture from separate points of view associated with the various stakeholder concerns.
These separate descriptions are called architectural views (see for example the
4+1 architectural view model).
Quality-driven: classic
software design
Software design is the process by which an agent creates a specification of a software artifact intended to accomplish goals, using a set of primitive components and subject to constraints. Software design may refer to either "all the activity ...
approaches (e.g.
Jackson Structured Programming) were driven by required functionality and the flow of data through the system, but the current insight
is that the architecture of a software system is more closely related to its
quality attributes such as
fault-tolerance,
backward compatibility
Backward compatibility (sometimes known as backwards compatibility) is a property of an operating system, product, or technology that allows for interoperability with an older legacy system, or with input designed for such a system, especially ...
,
extensibility
Extensibility is a software engineering and systems design principle that provides for future growth. Extensibility is a measure of the ability to extend a system and the level of effort required to implement the extension. Extensions can be th ...
,
reliability
Reliability, reliable, or unreliable may refer to:
Science, technology, and mathematics Computing
* Data reliability (disambiguation), a property of some disk arrays in computer storage
* High availability
* Reliability (computer networking), ...
,
maintainability
In engineering, maintainability is the ease with which a product can be maintained to:
* correct defects or their cause,
* Repair or replace faulty or worn-out components without having to replace still working parts,
* prevent unexpected working ...
,
availability, security, usability, and other such –
ilities. Stakeholder concerns often translate into
requirements on these quality attributes, which are variously called
non-functional requirements, extra-functional requirements, behavioral requirements, or quality attribute requirements.
Recurring styles: like building architecture, the software architecture discipline has developed standard ways to address recurring concerns. These "standard ways" are called by various names at various levels of abstraction. Common terms for recurring solutions are architectural style,
tactic,
reference architecture and
architectural pattern.
Conceptual integrity: a term introduced by
Fred Brooks
Frederick Phillips Brooks Jr. (April 19, 1931 – November 17, 2022) was an American computer architect, software engineer, and computer scientist, best known for managing the development of IBM's System/360 family of computers and the ...
in his 1975 book ''
The Mythical Man-Month
''The Mythical Man-Month: Essays on Software Engineering'' is a book on software engineering and project management by Fred Brooks first published in 1975, with subsequent editions in 1982 and 1995. Its central theme is that adding manpower to a ...
'' to denote the idea that the architecture of a software system represents an overall vision of what it should do and how it should do it. This vision should be separated from its implementation. The architect assumes the role of "keeper of the vision", making sure that additions to the system are in line with the architecture, hence preserving
conceptual integrity.
Cognitive constraints:
an observation first made in a 1967 paper by computer programmer
Melvin Conway that organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. As with conceptual integrity, it was Fred Brooks who introduced it to a wider audience when he cited the paper and the idea in his elegant classic ''The Mythical Man-Month'', calling it "Conway's Law."
Motivation
Software architecture is an "intellectually graspable" abstraction of a complex system.
This abstraction provides a number of benefits:
* ''It gives a basis for analysis of software systems' behavior before the system has been built.''
The ability to verify that a future software system fulfills its stakeholders' needs without actually having to build it represents substantial cost-saving and risk-mitigation.
A number of techniques have been developed to perform such analyses, such as
ATAM or by creating a visual representation of the software system.
* ''It provides a basis for re-use of elements and decisions.''
A complete software architecture or parts of it, like individual architectural strategies and decisions, can be re-used across multiple systems whose stakeholders require similar quality attributes or functionality, saving design costs and mitigating the risk of design mistakes.
* ''It supports early design decisions that impact a system's development, deployment, and maintenance life.''
Getting the early, high-impact decisions right is important to prevent schedule and
budget overruns.
* ''It facilitates communication with stakeholders, contributing to a system that better fulfills their needs.''
Communicating about complex systems from the point of view of stakeholders helps them understand the consequences of their stated requirements and the design decisions based on them. Architecture gives the ability to communicate about design decisions before the system is implemented, when they are still relatively easy to adapt.
* ''It helps in risk management.'' Software architecture helps to reduce risks and chance of failure.
* ''It enables
cost reduction.'' Software architecture is a means to manage risk and costs in complex IT projects.
History
The comparison between software design and (civil) architecture was first drawn in the late 1960s, but the term "software architecture" did not see widespread usage until the 1990s. The field of
computer science
Computer science is the study of computation, automation, and information. Computer science spans theoretical disciplines (such as algorithms, theory of computation, information theory, and automation) to practical disciplines (includin ...
had encountered problems associated with complexity since its formation. Earlier problems of complexity were solved by developers by choosing the right
data structure
In computer science, a data structure is a data organization, management, and storage format that is usually chosen for Efficiency, efficient Data access, access to data. More precisely, a data structure is a collection of data values, the rel ...
s, developing
algorithm
In mathematics and computer science, an algorithm () is a finite sequence of rigorous instructions, typically used to solve a class of specific problems or to perform a computation. Algorithms are used as specifications for performing ...
s, and by applying the concept of
separation of concerns. Although the term "software architecture" is relatively new to the industry, the fundamental principles of the field have been applied sporadically by
software engineering
Software engineering is a systematic engineering approach to software development.
A software engineer is a person who applies the principles of software engineering to design, develop, maintain, test, and evaluate computer software. The term ' ...
pioneers since the mid-1980s. Early attempts to capture and explain software architecture of a system were imprecise and disorganized, often characterized by a set of box-and-line
diagram
A diagram is a symbolic representation of information using visualization techniques. Diagrams have been used since prehistoric times on walls of caves, but became more prevalent during the Enlightenment. Sometimes, the technique uses a three ...
s.
Software architecture as a concept has its origins in the research of
Edsger Dijkstra in 1968 and
David Parnas in the early 1970s. These scientists emphasized that the structure of a software system matters and