What is software architecture?

Definition

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 relationship among them.

Software Architecture is not the operational software. It is a representation that enables a software engineer to
• Analyze the effectiveness of the design in meeting its stated requirements.
• Consider architectural alternative at a stage when making design changes is still relatively easy.
• Reduces the risk associated with the construction of the software.

Why is architecture important?

Three key reasons
— Representations of software architecture enables communication and understanding between stakeholders.
— Highlights early design decisions to create an operational entity.
— Constitutes a model of software components and their interconnection.

Architectural styles

Describes a system category that encompasses:
• A set of components (e.g., a database, computational modules) that perform a function required by a system.
• A set of connectors that enable “communication, coordination and cooperation” among components.
• Constraints that define how components can be integrated to form the system.
• Semantic models that enable a designer to understand the overall properties of a system by analyzing the known properties of its constituent parts.

Architectural pattern

An architectural pattern, like an architectural style, imposes a transformation on the design of an architecture. However, a pattern differs from a style in a number of fundamental ways:
(1) The scope of a pattern is less broad, focusing on one aspect of the architecture rather than the architecture in its entirety.
(2) A pattern imposes a rule on the architecture, describing how the software will handle some aspect of its functionality at the infrastructure level (e.g., concurrency).
(3) Architectural patterns tend to address specific behavioral issues within the context of the architecture.

The software needs an architectural design to represent the design of the software. IEEE defines architectural design as “the process of defining a collection of hardware and software components and their interfaces to establish the framework for the development of a computer system.” The software that is built for computer-based systems can exhibit one of these many architectural styles.

System category consists of

• A set of components (e.g., a database, computational modules) that will perform a function required by the system.
• The set of connectors will help in coordination, communication, and cooperation between the components.
• Conditions that defines how components can be integrated to form the system.
• Semantic models that help the designer to understand the overall properties of the system.

The use of architectural styles is to establish a structure for all the components of the system.

Taxonomy of architectural styles

1. Data centered architectures

• A data store will reside at the center of this architecture and is accessed frequently by the other components that update, add, delete, or modify the data present within the store.
• The figure illustrates a typical data-centered style. The client software accesses a central repository. Variations of this approach are used to transform the repository into a blackboard when data related to the client or data of interest for the client change the notifications to client software.
• This data-centered architecture will promote integrability. This means that the existing components can be changed and new client components can be added to the architecture without the permission or concern of other clients.
• Data can be passed among clients using the blackboard mechanism.] Data centered architectures

Advantages of Data centered architecture:
• Repository of data is independent of clients
• Client work independent of each other
• It may be simple to add additional clients.
• Modification can be very easy

2. Data flow architectures

• This kind of architecture is used when input data is transformed into output data through a series of computational manipulative components.
• The figure represents pipe-and-filter architecture since it uses both pipe and filter and it has a set of components called filters connected by lines.
• Pipes are used to transmitting data from one component to the next.
• Each filter will work independently and is designed to take data input of a certain form and produces data output to the next filter of a specified form. The filters don’t require any knowledge of the working of neighboring filters.
• If the data flow degenerates into a single line of transforms, then it is termed as batch sequential. This structure accepts the batch of data and then applies a series of sequential components to transform it. Data flow architectures

Advantages of Data Flow architecture:
• It encourages upkeep, repurposing, and modification.
• With this design, concurrent execution is supported.

Disadvantage of Data Flow architecture:
• It frequently degenerates to batch sequential system
• Data flow architecture does not allow applications that require greater user engagement.
• It is not easy to coordinate two different but related streams

3. Call and return architectures

It is used to create a program that is easy to scale and modify. Many sub-styles exist within this category. Two of them are explained below.

• Remote procedure call architecture: This components is used to present in a main program or sub program architecture distributed among multiple computers on a network.
• Main program or Subprogram architectures: The main program structure decomposes into number of subprograms or function into a control hierarchy. Main program contains number of subprograms that can invoke other components. Call and Return architectures

4. Object oriented architecture

The components of a system encapsulate data and the operations that must be applied to manipulate the data. The coordination and communication between the components are established via the message passing.

Characteristics of Object Oriented architecture:
• Object protect the system’s integrity.
• An object is unaware of the depiction of other items.

Advantage of Object Oriented architecture:
• It enables the designer to separate a challenge into a collection of autonomous objects.
• Other objects are aware of the implementation details of the object, allowing changes to be made without having an impact on other objects.

5. Layered architecture

• A number of different layers are defined with each layer performing a well-defined set of operations. Each layer will do some operations that becomes closer to machine instruction set progressively.
• At the outer layer, components will receive the user interface operations and at the inner layers, components will perform the operating system interfacing (communication and coordination with OS)
• Intermediate layers to utility services and application software functions.
• One common example of this architectural style is OSI-ISO (Open Systems Interconnection-International Organisation for Standardisation) communication system.Layered architecture