Nowadays, due to the constant evolution of the software systems’ operating environment, modern software systems become increasingly complex and larger which makes their management and evolution difficult for a development team. These challenges pushed the IT (Information Technology) community to develop solutions that aim to assign the responsibilities of adaptation and decision-making to the software itself. These are called self-adaptive systems. In addition, modern software systems require an elevated level of scalability, reliability, and security to serve millions of users around the world. In a dynamic environment, certain attributes may continuously evolve. This makes a software system more difficult to manage, thus, making this issue an important challenge that needs to be overcome. Based on this identified limitation, Emergent Software Systems (ESSs) aim to reduce the initial effort to create autonomous solutions and support fully adaptive systems that can autonomously learn the system’s structure and operating environment without predefined knowledge or predictions. The key role of these models is to remove or reduce the role of a programmer in the composition, maintenance, and evolution processes of a software system.
Berger Levrault, through the research program “Organic and Adaptive Software Architectures”, would like to invest the advantages of ESSs by exploring how to develop intelligent systems that are able to adapt themselves (i.e., their microservices) following the changes in the users’ needs and the operating environments while minimizing the cost of this adaptation. As a first step in this investment, we aim to understand existing ESSs by analyzing a state of the art of emergent software systems and test some of their approaches. We analyzed 35 published articles collected from main conferences and journals. Based on this analysis, we build a taxonomy tree to classify existing ESS approaches mainly based on their goals, the process applied and the usability of these approaches.
Our study of ESS
Analyzing the multiple definitions of ESS allowed us to identify their main characteristics. Moreover, the implementation of these different features in ESS approaches allowed us to create a classification taxonomy.
ESS can be defined as a software that is composed of reusable software units (e.g., components, services) that are capable of autonomously organizing themselves to better adapt to their environment of use.
A Taxonomy of Emergent Software Systems approaches
The approaches can be classified along three main axes:
- the goal of using ESSs,
- the process applied to realize ESSs,
- and the usability of ESSs.
The main purpose of an ESS is to achieve adaptation. The adaptation can take different forms (functional or non-functional requirements). In software engineering, a non-functional requirement is a requirement that specifies criteria that can be used to judge the operation of a system, rather than specific behaviors. They are contrasted with functional requirements that define specific behavior or functions.
Process of ESSs
The process of ESSs corresponds to the set of activities that enable the creation of ESSs. It is mainly composed of three aspects. These involve how to monitor the systems and the environments, how to compose software building blocks, and how to learn information that facilitates adaptation.
We understand that in order to adapt to an environment, a software must be able to evaluate the state of the environment and how it reacts to it. We identified 3 different monitoring approaches used by existing ESSs approaches, namely the Proxy approach, the Sensor factory pattern combined with Observer design pattern, and Prometheus.
The definition of ESS is based on the composition of a fully functional application from small software units. So, we identified methods used to compose an application in ESS. We found 4 major methods, namely Component based language, Service oriented architecture, Dependency injection and Goal driven composition.
To cope with the increasing variability of modern operating environments, humans can not generalize to all situations. Not only does this require a lot of expertise, but it neglects unexpected situations. Therefore, the learning process is essential for the realization of ESSs. Most learning approaches are based on Reinforcement Learning (RL). RL is broad, and many different techniques are used in the studied articles. We classify the learning approaches in two categories, learning based on RL and learning based on other types of algorithms. We also identified if learning is done online or offline.
Usability of ESSs
In this branch, we identify what application domains are suitable to apply ESSs, what programming languages are used for the implementation of ESSs, and how do researchers evaluate their approaches. The main application domains of ESSs are Internet of Things (IoT), Cyber Physical Systems, Web Service Computing and some generic solutions. We have not made a qualitative evaluation of the different discovered approaches in terms of implementation, but we have assessed the accessibility and the ability to maintain some of them.
ESSs aim at reducing the initial effort to create autonomous solutions, and support fully adaptive systems that can autonomously learn the structure and the operating environment of the system without predefined knowledge or predictions. The objective was to understand the issues of ESSs by making a state of the art on this topic and a taxonomy. To this end, we collected 35 papers from the main conferences and journals in the domain of ESSs. These 35 papers have been deeply analyzed to build a taxonomy tree to classify existing ESS approaches. The taxonomy tree is based on the goals of ESSs, the processes applied by them, and their usability. It is our hope that this study offers an opportunity for review and reflection on the current state of emergent software systems research and its progress, and will allow Berger Levrault to implement emergent software systems.
by Elie Faye and Anas Shatnawi