Nowadays, it is still common to find software systems designed with a monolithic architecture, mainly the legacy systems, even with the popularization of the Model View Control (MVC). The development of systems based on MVC, introduced by Trygve Reenskaug into Smalltalk-79, is a software design pattern, which the components of the software are organized in three layers, forming a software architecture. In Software Process (SP), the elaboration of Software Architecture (SA) is an activity just as important as the other SP activities. But, after all, what is a SA?
There is a myriad of definitions of Software Architecture (SA). Bass et al., (2021) present the following delineation: The software architecture of a system is the set of structures needed to reason about of system. These structures comprise software elements, relations among them, and properties of both. I chose this definition because there is concern about software elements and their aspects in relationships, regardless of the architecture style selected. Therefore, establishing an SA for an application/software product is not activity straightforward, since is necessary to meet their requirements, especially the non-functional.
The complexity of an SA increases when the requirements are associated with a domain of systems as Adaptative System, IoT/IIoT, Frog Computing, Cybersecurity, and Quality of Service (QoS) or domains that require many architectural elements. These systems make the orchestration and organization of its elements very hard for software architects. Furthermore, one or more unsuitable elements inserted into SA can implicate in the QoS, such as security breach, lack of performance, data inconsistency, etc. Without mentioning the quality of the architecture itself, such as reuse, interoperability, availability, deployability, modifiability, enter others.
Given the domain of an application, how to provide a software architecture suitable for this domain?
How to help the software architect in designing software architecture for fog computing applications, for example?