Now there are few people who will argue with the assertion that our world is increasingly dependent on software (software). And this is not surprising. After all, the software is used in cell phones, integrated air traffic control systems, on personal computers, car electronics, and much more. Many innovations that we take for granted, as well as a large number of different organizations like Yandex, Amazon or Google, are simply impossible without software. Yes, even in the traditional trading, public and financial sectors, it is very difficult to do without software.
general information
One has only to touch on the concept of architecture, so one thing immediately becomes clear - there is no shortage of definitions. Therefore, in order not to confuse readers, the article will use the IEEE 1471 and IEEE Std 1472000 standards as samples for consideration. Now let's look at what architecture is. This term refers to the organization of the system, which is embodied in its components, the relationship between them and the environment, as well as the principles that determine its design and development. But first, let's recall those who made a significant contribution to the development of the theory and concept of software.
First of all, you need to remember Lance Bass. “Software architecture in practice” is a rather old work of this author (the Russian translation was released in 2006), but nonetheless allows you to get a good idea about the process of creating software.
The next interesting author is Robert Martin and his creation, Pure Architecture. The art of software development. " The translation and publication of the book in Russian was carried out in time for the beginning of 2018. Therefore, we can confidently say that this is literally a novelty, in which there is a lot of fresh and relevant information. The book “Pure architecture. The Art of Software Development ”tells how to achieve the heights of professionalism. It describes what and how to do, and why a particular decision will be critical to success.
Some terminology
Consider a few concepts that will help us understand the topic:
- A system is a specific set of components that have been combined to perform a specific function or set of them.
- Mission - an application (action) that one or more interested parties are going to complete in accordance with the required set of conditions.
- A component is a logical, physical, technologically related (independent), finely or coarse-grained modular part of the system that encapsulates its contents.
And a few more interpretations on the main topic:
- Architecture is a set of significant decisions that affect the organization of a software system. A set of structural elements, as well as their interfaces, through which the layout is carried out.
- The architecture of a program (computer system) is a structure that includes certain elements, their properties visible from the outside, and also the connections between them. It consists of all the important design decisions made. This provides the desired set of properties that are necessary for a successful operation.
- Architecture is the structure of the organization, as well as the system behavior associated with it. It can be recursively disassembled into parts, relationships, and assembly conditions.
Although these definitions have some differences, it is not difficult to notice a certain degree of similarity. So, attention is focused on structure, behavior and meaningful decisions. And it’s not in vain.
The influence of architecture on the structure

There is one interesting point. It is worth asking to describe the word "architecture", as most people are mentioned about the structure. And this is not surprising. Indeed, the software architecture in practice is often built according to a scheme that depicts the structural aspects of the system. And it doesn’t matter what we are talking about - about levels, components or distributed nodes. Structure is an essential characteristic of architecture. Its aspects and features are manifested in many ways. The structural element may be a database, a library, a process, a subsystem, a computing node, and so on. Moreover, attention must be paid to them not only individually, but also to compositions from them, established connections, interfaces, and partitions. It should be borne in mind that each of these elements can be represented in different ways. An example is the connecting link. It can be a / synchronous, a socket, be associated with a specific protocol, and so on.
The influence of architecture on behavior
It is simply impossible to underestimate. Designing a software architecture has a big impact on its implementation and subsequent availability. Software behavior, possible freezes, problems and the like very much depend on how everything developed from the very beginning. Architecture affects the interaction between structural elements, it must ensure the transfer of data exactly where it is necessary in order to ultimately get the desired result. How does this happen with our standards? You can consider a small scheme of activities. Let's say we have an enterprise. It is necessary to make the employee accept the order using an instance of the “Blank” class. It contains all the necessary information about the client. If the order is filled out for the first time, then the information is entered into the “Form” using the control system. Then, an instance of the class "Start Order Processing" is used, which starts all the necessary processes in the enterprise. A total of five elements are used. In this case, a certain dependence is observed. For example, placing an order is not possible without an employee. And if the “Form” is not filled, then it will not be accepted for execution.
Concentration of architecture on significant elements

So, we have already examined the effect on structure and behavior. But here it is necessary to note one important point. Namely, that architecture does not determine the entire structure and not all behavior. It affects those elements that are considered significant. What is meant by them? Significant are those elements that have a long and stable effect. For example, the main structural. Or those that depend on the reliability and scalability of software. Moreover, architecture, as a rule, has nothing to do with the granular details of all these elements. The main attribute by which some are valued more than others is the cost of creation and change. Architecture focuses on significant elements. Therefore, it should offer a concrete perspective, that which is most significant. We can say that architecture is some generalization of the entire software system, which allows the developer to manage the existing complexity. One important point should be noted here. Namely, the set of significant elements is not a static list of something, and it can change over time. In what cases does this happen? As an example, we can cite situations when clarification of the result of requirements comes, identification of risks and other similar moments. It should be noted that the relative stability of the architecture, despite the changes introduced, is a sign of a job well done and a properly set development process, as well as the experience and qualifications of the staff.
Stakeholder Needs Balancing

In practice, the software architecture should be convenient for both users and administrative staff. It should be noted that often it is not possible to fulfill all the wishes expressed. As an example, you can bring a situation where an interested person asks that certain functionality be performed for a specific time period. But these two needs are mutually exclusive. That is, it is possible either to reduce the boundaries of the function performed so that it matches the requested schedule, or to leave everything in full, but then too much time will be used. Similarly to the described example, stakeholders may have needs of varying degrees of controversy. In such cases, it is necessary to achieve a certain balance. A compromise solution is almost an integral aspect of the architecture development process. And here, alas, nothing can be done - you have to overcome difficulties. To get an idea of the real situation, let's simulate a situation when it is necessary to satisfy the needs of several stakeholders:
- End user. He is interested in making the software intuitive, productive, reliable, easy to use, safe and affordable, and have the right behavior.
- System Administrator. He is interested in the availability of intuitive controls, monitoring tools and the behavior of the whole complex.
- Specialist in advertising and promotion. He is interested in the availability of unique functions that make the software competitive, with an estimated time until development on the market, the cost of the product and its position among analogues.
- Developer He is interested in having clear requirements and consistent principles of internal structure.
- Project Manager. He is interested in making predictable progress in design, planning and implementation. It is also necessary to take care of the rational use of the available budget and funds.
The architecture is based on rationale
When working, it is necessary to pay attention not only to the final result. Of course, architecture deserves attention. As well as the rationale used as its basis. Therefore, it is necessary to provide documentation of decisions, thanks to which they came to the creation of the existing architecture. It is also necessary to provide a rationale for them. Despite the simplicity and simplicity of the task, this information is important for interested parties, especially those among those who service the system. Also, documentation is of value to developers in cases where it is necessary to revise the rationale for decisions made in order to avoid unnecessary repetition of already completed actions. For example, when revising architecture. Indeed, in such cases, it is necessary to explain why such decisions were made.
About architectural style
What and how in this case? If you look at the description of the software architecture for many products, you will notice that they are built on the basis of systems that use similar sets of interests. A number of similarities can be framed in a specific style. He, in turn, can be considered as a special kind of template, very complex and composite. This is an experience codifier, and it’s pretty good for developers to reuse it. After all, this will allow you to do similar work more quickly and efficiently. What are the main styles of software architecture? Examples include:
- Distributed.
- Channels and filters.
- With centralized data processing.
- Built on the rules.
It should be noted that individual systems may exhibit more than one style. What is the confirmation of these words? First of all, one can recall the architectural style of the Show and Garlan. How is it manifested? An architectural style is, in essence, a nomenclature of components, as well as types of connecting links and sets of conditions according to which they can be connected. The reuse of experience in the form of applying the architectural style makes life easier due to the fact that it is already well documented and the rational kernel of using something is justified.
About the influence of the environment. And vice versa
Or in other words, about architecture as part of semantic content.
It is necessary to determine the boundaries within which the software system will work . This is mainly what the environment does. The software architecture of the system in such cases should take into account factors of influence. More specifically, you need to focus on stakeholders, missions, internal and external technical constraints. In addition, software architecture can have an impact on your environment. And not only from a technological point of view, but also allowing the reuse of assets and the work environment.
What do the standards say about this? If we talk about predominantly software systems, it is necessary to take into account certain aspects of the environment. So that the program is useful, it must work. To do this, it must be run on certain hardware. Computer architecture is of great importance here. Computer software created for Windows will not work on the hardware MacOS is installed on. Although, of course, you can make an emulator, run it through a virtual machine, or use another intermediary and run the software. But the effectiveness of its work will be significantly less than in cases of working with target systems. Therefore, the PC architecture and software must be the same in order to work properly. After all, the same MacOS can only work under a specific configuration. Yes, and Windows has certain limitations, although it is less tied to hardware.
About species diversity
What models can I create software for? We briefly list the types of software architecture that are quite widely used:
- Client-server model.
- Monolithic application.
- Event architecture.
- Structured.
- Three level.
- Service oriented architecture.
- Implicit calls.
- Search-oriented architecture.
This is just a small part of a large number of different approaches and patterns. And far from single. It should be noted that the development of software architecture is not something complicated and impossible, so many create them on their own (very often copying what already exists, but did not know about). Of course, there are slight differences in the details, but they are the result of tailoring the template to the specific requirements of the programming teams. This, perhaps, can stop. It should be noted that in the framework of the article, the main emphasis was placed on the characterization of software architecture. A number of important issues, which are somewhat beyond the scope of the main topic, have not been considered. Among them - the role of the developer, what basic actions he should perform and some others.