Software architecture easy to learn

Mehmet Akif Cifci
4 min readFeb 13, 2022

--

The software architecture of a program or a system is the structure or structures that consist of software components, externally observable properties of software components, and the relationships between software components. Architecture is defined as the basic organization of a system. This organization consists of system components, the relationships between components and their environment, and design and development rules principles. By component, we mean a method, class, package, module, and executable code in an object-oriented language.

Software architecture is, simply, the organization of a system. This organization includes all components, how they interact with each other, the environment in which they operate, and the principles used to design the software.

According to tutorialspoint.com (2022), Architecture serves as a blueprint for a system. It provides an abstraction to manage the system complexity and establish a communication and coordination mechanism among components.

The software architecture includes the software decisions that are difficult to change later, such as the system's performance, security, changeability, and the type of hardware that it will run on.

One of the main aspects of software architecture is dividing software into components (modules). The architectural work should answer what components I will create a whole system from. Have I created all the necessary components for the solution, and can these components integrate and work together harmoniously? At the same time, it considers what each component will do, what kind of interfaces the component will have, and the communication and dependencies between the components.

Aims are as follows:

1. Expose the structure of the system but conceal its implementation specifics.

2. Realize all the use-cases and situations.

3. Try to meet the requirements of many stakeholders.

4. Handle both functional and quality requirements.

5. Reduce the aspiration of ownership and improve the company's market position.

6. Improve quality and functionality given by the system.

7. Externally, improve trust in the organization or system.

Architectural Views

Software architecture is multidimensional. We define these dimensions as different viewpoints. The logical view summarizes the outline of the system as objects and classes. The operating point of view shows the uptime of the system. The development perspective indicates in which parts the system will be developed. The material point of view shows the system as hardware and which pieces of software will run on which processors.

Role of Software Architect

1. Design Expertise

2. Domain Expertise

3. Technology Expertise

4. Methodological Expertise

Why Software Architecture:

Making high-level abstraction allows one to understand the system better to be developed from a higher level. It allows us to better analyze complex systems by abstracting from the details.

Developed software needs to be updated after being used. Sometimes new versions of the same software come with new features and integrations. With the software architecture study, the developmental aspects of the software developed are foreseen, and it is ensured that the changes are made effective with the design.

Since the software architecture is to be developed and its sub-components and related interfaces are determined, it forms the basis for dividing the teams that will develop this software into teams, estimating the size of the work, extracting the work tree, and organizing the documents to be created. It allows components developed with a well-designed software architecture to be reused in other similar software products. In a broader sense, it enables presenting more than one model to the user by differentiating a product that we call the product line.

Software Architecture Design

Source : t.ly/rODp
Source: t.ly/rODp

The software architecture development process is iterative, as shown in Figure. The software architecture designed in line with the architectural requirements is documented. It is necessary to evaluate with the architectural analysis process that this architecture meets the requirements of the relevant stakeholders and that the project can be developed. The designed system is developed. At this stage, architectural concerns and approaches are considered at every stage.

Requirements Affecting Architecture

Functional requirements define what the software should do and respond to a given input at runtime.

Non-functional requirements, on the other hand, include the quality attributes of the software, such as performance, security, and interchangeability. In addition, architectural and business-based design constraints are also requirements that affect architecture.

Architectural Solution Tools

Architectural tactics, architectural patterns, reference architectures, and components developed by others are used as solution tools in architectural software design.

Architectural tactics are basic-level solution techniques. Software developers have been using these basic-level tactics for years. For example, to increase the performance of the software, keeping more than one copy of the data, increasing the resources, and providing parallel work are among the tactics that can be used.

On the other hand, architectural patterns are solutions to recurring design problems that have been found and proven to work. It is similar to the design patterns used in building architectural design. What kind of architect is to design a villa based on one of the ready-made design patterns, and a similar approach is adopted in software architecture. Architectural patterns are seen at a higher level than the design patterns used in software development.

On the other hand, reference architectures are holistic architecture that responds to the needs of the software architecture in a particular field and generally includes more than one design pattern. Based on a certain reference architecture, the software developer establishes the components defined in the reference architecture within the layers defined in the reference architecture and the defined relations between these components.

Components developed by others are the components we use while creating the software architecture. These can be middleware that provides data communication, databases that store data and enable us to query effectively, frameworks that allow us to develop fast software or user interface components. These components can come from different projects within the company, or they can be open-source libraries or commercial products. Such components are selected by the develop-buy-reuse analysis, which is recommended while the software architecture is being designed.

--

--

Mehmet Akif Cifci
Mehmet Akif Cifci

Written by Mehmet Akif Cifci

Mehmet Akif Cifci holds the position of associate professor in the field of computer science in Austria.

No responses yet