Applying Genetic Architectural Synthesis in Software Development and Run-time Maintenance

Software systems are becoming complex entities with an increasing diffusion into many new domains. A complex software system requires more resources to develop and maintain. Some domains demand continuous operation like security or control systems, web services and communication systems etc. The trend will lead software industry to a situation where it will be difficult to develop software systems through traditional manual software engineering practices in a feasible budget. Any level of automation can relieve the pressure on the cost. This thesis work explores the potential of genetic architectural synthesis to introduce automation in software development and maintenance.

The genetic algorithm operates at the architectural level. The fitness functions envelop the expert knowledge needed to gauge the quality (modifiability, efficiency and complexity) of architectures. The algorithm uses solutions which can be design patterns, architectural styles, best practices or application specific solutions to maintain the quality attributes. Each solution has a positive or negative impact on one or more quality attributes. Once calibrated, the genetic algorithm has been able to suggest good quality architectures. An empirical study has also been performed that suggests that the genetic algorithm’s proposals are comparatively better than the under-graduate level students’ designs. Tool support has been provided in the form of the Darwin environment. It facilitates a human architect to initiate, modify, monitor and analyze the results of a genetic architectural synthesis. Moreover, the genetic algorithm has been used to evolve software architectures to be easily distributable among the teams involved in its development. The algorithm takes into account the organizational information and proposes an initial work distribution plan along with the improved architecture.

The SAGA (Self-Architecting using Genetic Algorithms) infrastructure has been developed to enable self-adaptive and manual run-time maintenance in Java-based applications. SAGA allows Java-based distributed systems to self-maintain reliability and efficiency. Furthermore, non-self-maintainable properties of a system can be maintained manually at run-time. The decision making engine is the genetic algorithm. The unit of run-time modification is an architectural solution which in its entirety enters of leaves the running instance of a system therefore affecting the system’s run-time quality. A solution is composed of roles which are bound to real artifacts in the system. Multiple attributes concerning reliability and efficiency of the running system are monitored by SAGA. In the case of poor system quality in a changed environment, SAGA triggers the genetic algorithm to propose improvements in the architecture taking into account the monitoring data. The proposal is then reflected to the run-time and the cycle continues. In the experiments, an example distributed system used in changing environment has been implemented with self-maintaining capability. A significant improvement in both reliability and efficiency of the running system has been observed.

Hadaytullah (Tampere University of Technology):  Applying Genetic Architectural Synthesis in Software Development and Run-time Maintenance