A Survey about Self-Healing Systems ( Desktop and Web Application )

The complexity of computer architectures, software, web applications, and its large spread worldwide using the internet and the rapid increase in the number of users in companion with the increase of maintenance cost are all factors guided many researchers to develop software, web applications and systems that have the ability of self-healing. The aim of the self healing software feature is to fast recover the application and keep it running and available for 24/7 as optimal as possible. This survey provides an overview of self-healing software and system that is especially useful in all of those situations in which the involvement of humans is costly and hard to recover and needs to be automated with self healing. There are different aspects which will make us understand the different benefits of these self-healing systems. Finally, the approaches, techniques, mechanisms and individual characteristics of self healing are classified in different tables and then summarized.


Introduction
Software development engages a lot of researchers for the development of software system which is typically secure, significantly used, reliable, configured, most effective, self controlled, facilely updatable, healed and distinguished.The word self-healing is deeply connected the field of Autonomic computing.
The development of computer and software systems and applications that can manage themselves in accordance with high-level guidance from humans has been called the Autonomic Computing systems (ACS), which is inspired by the human autonomic nervous system which regulates vital body functions without the need for conscious human involvement.i.e. human body is able to heal himself in case of injury using the control of the brain and nervous system with corporation of different body systems [1] [2] [3].ACS extends the adaptive behavior of the nervous system to computing systems and software.Autonomic systems respond to changes in their environment according to goals set by the system administrator.A dedicated self-management infrastructure is then responsible for maintaining a system state that adheres to those goals.This is achieved by automating low-level decisions and tasks while allowing administrators to specify system behavior as high-level policies [4] [5].
Autonomic computing (AC) was IBM's suggest resolution to the issue related to the growing involvement of software and computing systems developing.Autonomic computing beginning was published in October 2001 and depicted a view of computing systems which administer themselves related to main level goals.The model looks to qualify the load of gathering and administering extremely comprehend systems with raising automation and objective nomination [7].The phrase autonomic is come from autonomic nervous system (ANS) of human, which detects dynamic physical functions with no need to the necessity for aware of human partnership.Like, while someone gets into climate that has high temperature, the ANS directly contains race to cold the body and keep a stable temperature.Autonomic computing expands the fit actions of the ANS for software and computing systems [8].Autonomic systems reply to alteration in its environment related to the objectives set through system administrator.Present with self administered infrastructure that is consequently in charge of keeping system condition which involves these objectives.This is accomplished through automating minimum level of tasks; by letting administrators to determine system attitude as top scale of policies [9].
Self healing term is also applied to web applications, self healing of web application require a 24/7 auto monitoring of the web application and a fast mechanism of recovery that can keep the online functionality and service offering to the customer available all the time [10] [11] [12].The importance of developing fast automated self-healing web applications was generated from the effect that may be caused if the web application for a business or a company is stopped to run for few hours.For example, an online business such as a bank may lose customer trust and lose financially if it is not functioning for a few hours.Many factors may affect a web application and cause it to stop.These factors may be either internal or external.The internal factor include viruses, worms that may affect the server that hosts the web application.The external factors include attackers that attack the website and change the content of web pages for a web application for different reasons including the use of different methods such as xss, sql injection.You need to have references for this information![14] [15] [16].
After publishing the web application on the hosting server many problems rise including deletion of a component, replacing of a component or modifying a component.The risk of having one of these three factors is very high.For exam-ple replacing a web application checkout component by an attacker that function the same way as the main component but with minor changes would allow the attacker to steal credit card information which will cause a major problem and loss to the web application owner and customers.Most of web application owner do not perform tests to check if the component has been changed or not and that is because of the complex architecture of the web application and lack of knowledge at the owner level [17].
Self healing main aim is to have an automated system that is able to heal itself without human interaction.It has different pre defined actions and procedures that are suitable for system recovery from different expected failure states.It is able to make the system to change from the infected state to the healthy state.
The self-healing property has control over a set of environmental factors that the system run into [18].
The rest of this paper is organized as follows.Section 1 provides a definition of some terminology related to the term self-healing, section two to section ten try to answer the following questions [19].
• What is self healing?History and Definition.
• Why using self healing software?
• What are the types of self healing and the mechanisms used?
• Where we can use self healing software?
• What is the future perspective of self healing?
• What are the methodology, techniques, tools developed in self healing and there classification.
It provides a deep look to the self-healing software systems history, definition, and aim of using, type, mechanisms, use and future perspective [20] [21] [22].

Self-Adaptation
The systems that are able either to enhance their status or keep it running under different situations; it is able to give evaluation for it current status or after enhancement has been done to the system.And it is able to decide it need any enhancement [17].

Self-Optimization
It means to find the optimal solution either minimum or maximum to meet specific goal by the system itself, and that the system adjust its path according to resources provided to find the goal [26].

Self-Monitoring:
The software system will have the capability and functions that is required to monitor its internal functions as well as its performance.The system will also be able to generate reports that has feedback and learning or adaptive capabilities [20] [21].

Self Testing
Is the process that is happening by the device when it is turned on for malfunction, discover any change in its configuration or miss in its component, so error message is being displayed by the device to specify what is happening and what user should do [23].

Self Diagnoses
Process to identify and diagnoses condition in one self to reduce errors, that could be dangerous if unsuitable decisions are taken on the basis of a misdiagnosis [24].

Self Management
The techniques in which computer system manage their own functions without human intervention self repair is the process that software is automatically find a solution to software bugs, without human intervention, by observe unacceptable error behavior [25].

Self Control
It is the process of controlling that agent has over its own state and behavior.Depending on the complexity of the agents internal state which is evaluated as a function of structural complexity and internal state size and of its behavior complexity [26].

Self Configuration
Process in which establishment and monitoring system configurations by a specific component, that the area of execution is supporting configuration testing by reusing of the created tests with every supported hardware and software configurations [27].

Self Healing Definition
The term self-healing for software is inspired from the biological healing process for human and animals, where the body heals itself by repairing the affected tissue or bone, the process of healing is carried out internally from inside the body, the cells will gather in the place that has been affected (ex.Tissue insured or bold vessel cut) and the heal process retain the affected place to its original health status [28].The process of healing is controlled by the brain and nervous system.Note that some types of damages can't be self healed to retain to its original status (i.e.Hand cut) but a method of compensating to stop the damage from leading the system to complete fail will be applied (ex.Stopping the blood bleeding by cell gathering at the place of hand cut will prevent dying).Some healing processes may fail from and the reason is external factors (i.e.Bacteria may infect the hand cut place and lead to death of body or the place of cut very big and bleeding continuo).These different processes and cases have been applied in the field of self healing for software systems [29] [30] [31].
The term self healing first appeared with the appearance of the concept autonomic computing that was invented by IBM, Autonomic computing includes designing modern systems which includes four major design objectives.Related to IBM, systems like this should be: self-healing, self-configuring, self-optimizing, self-protecting.Ever after the cast of this prevision, several significant researches have been generated concentrating fundamentally on basics and architecture for designing distributed autonomic systems.Every schema participate a general objective of inquiring much perceivable future of computing [32] [33] [34].That is set to be completed through developed and implement systems that efficiently keep them with small or not skilled intervention.Self Healing Characteristics are shown in Figure 1 [11].
When design a self healing software system many questions should be taken into consideration:  Will the Self healing software system that be able to heal the software in case of failure? Will the Self healing software system that be able to heal every failure type? Will the Self healing software system that be able to heal the software if there is other affecting or attacking factors?[35] [36].

Automatic Self-Healing Software
Automatic Self-Healing Software concept is a kind of highly efficient, adaptive and a thoughtful system design which is further applied to security for appropriate reaction against every possible threat.As far as any software is concerned, it is a kind of never stopping process.It is a bridge between a long term reliability and Short-term unity [6].
Every self-healing software system will have the ability to return from the abnormal state to normalcy state [20].In some cases, Automatic Self-healing software is considered to be a subordinate to every fault tolerant system [13].Self healing contain the term self recovery that include the following methods:

What Are the Types of Self Healing and the Mechanisms Used?
At this stage, what are the types of self healing and the mechanisms used?Before moving on with the concept, this is another question that we need to answer immediately.Self-healing is a kind of virtual mechanism based on four different stages: First of all, Automatic Self-healing software monitors everything.
Secondly, according to this mechanism, the problem is diagnosed.
Thirdly, the relevant solution is automatically found.
Lastly, comes the most crucial stage when the solution is tested and finally implemented to restore the software back to normalcy.After the problem is fixed, the software is tested once again and starts a Self-Healing loop.Self-Healing loop is the most defining stage of self-healing process which is a cycle that loops throughout the process and performs the five most important functions.

1) Monitoring
It is a process for gathering all the vital information.For this purpose, information are brought into use for analyzing the task.

2) Analyzing
Analyzing the task helps you determine the action to be taken that is entirely done by comparing the status info to the system's requirements.

3) Diagnosis
It is a process for capturing all the vital faults, errors or changes in the system.
Using comparison or different techniques.
4) Healing: The healing consist of planning and execution.A plan is charted out to carry the task successfully like Accuracy, sound as well as properly planned action which is definitely required.Execution: At this stage, the whole plan is executed to perfection for achieving the desired result of a healthy software or system [37] [38].

5) Knowledge
This phase is important as it contains all the relevant knowledge consumed and produced by the earlier four tasks [21].
It is clearly evident that the process of developing Self-healing Software is not as easy as it appears to be [9].The self-healing life cycle which is a vital component of self-healing approach that It is a vital design component related to the design element .At this stage, the idea of constant multi-stage processing loop is good for self-healing approaches [1] [42].The operating environment of selfhealing extensions holds a lot of features such as: 1. Unreliable systems.
2. Many types of sources related to errors.

Self-Healing Policies and Executed Approaches and Applications
According to the researches that is influenced by human behavior and conducted by AI Research, there are at-least three level model of self-healing.These models are based on following policies [43]

Classification
It is challengeable task that only a failure that can help to move the deployment of appropriate recovery strategies impeccable either affects one unit or the entire system.Despite all of this, general classification of failure can be found in selfhealing concerned researches, System fitness and evaluation which is an integral part of this process.
Self-healing mechanisms, systems, tools provide a great solution for the huge and complicated system that require great effort, cost, time and knowledge to be recovered from different types of errors either big or simple.And form the errors that are hard to manage by human.The concept of self healing that were raised from autonomic computing included the different categories of autonomic computing (self-configuration, self-optimization, self-restoration and selfprotection) [10] [46] [47].When we talk about the computer world and the automation of systems then we should certainly develop a Software that has the ability to actively control itself rather than passively being controlled through a human.Maximum self properties can be achieved by the responsibility of standalone self reliable entity which controls a hierarchy of different situations that the software face in the environment.
Self healing and autonomic computing may be categorized to centralized and decentralize (Figure 3) from the controlling perspective.The centralize have a control manager which track, analyse, make plans and execute.Whereas the decentralized don't have a controlling manager and require human interaction, it may have rules and policies to be applied [48] [49].
Furthermore, researchers have done many researches for the implementation of self-healing techniques.Such researches are still developing.Despite this, Hewlett-Packard, an American global information firm took a giant leap in this direction and launched self healing software services to support self-healing [5].
In accordance with the reviews provided by the experts, this move is expected to be a positive and a productive push for the software engineering industry to produce self-healing software and operating systems.Moreover, this will be a great help to ease the problem of repairing faults.The company expects the operating systems to be extra smart.In simple words, the operating system should be able to react exactly like a human body.Being this smart will allow the operating systems to take appropriate actions to fight against the possible threats.Attempted to characterize self-healing software systems by surveying some of the existing work in the field.focusing on systems that effect structural changes to the software under protection, as opposed to block level system reconfiguration.

Locasto et al., 2007
introduced and explored the concept of Application Communities: collections of large numbers of independent instances of the same application, and demonstrated the feasibility of the scheme using Selective Transactional EMulation (STEM) as both the monitoring and remediation mechanism for low-level software faults, and provided some preliminary experimental results using the Apache web server as the protected application.
Goutam K. S., 2007 described various issues on designing a self-healing software application system that relies on the on-the-fly error detection and repair of web application or service agent code and data, illustrated critical points of the emergent research topic of Self-Healing Software System Dashofy, et al., 2002   Presented tools and methods that implemented infrastructure elements in the context of an overall architecture-based vision for building self-healing systems, and concluded with a gap analysis of current infrastructure vs. the overall vision, and plans for fulfilling that vision.
Philip Koopman, 2003 Proposed a taxonomy for describing the problem space for self-healing systems including fault models, system responses, system completeness, and design context.Jiang, et al.   presented a generic modeling framework to facilitate the development of self-healing software system and introduced a modeling framework to specify and implement self-healing focusing on the software aspects of a system George et al., 2002   Presented a cell-based programming model inspired from biology and speculate on biologically inspired strategies for producing robust, scalable and self-healing software systems.Fuad, et al., 2009   presented a new technique of finding self-healing actions by matching a fault scenario to already established fault models Azim, et al.,   presented an approach that uses automatic error detection and patch construction towards providing a certain degree of self-healing capabilities to Android apps.
Michael E. Shin described an approach to designing self-healing component for robust, concurrent and distributed software architecture Montani et al., described a CBR approach for providing large-scale, distributed software systems with self-healing capabilities, and demonstrated the practical applicability of methodology by means of some experimental results on a real world application.

Park et al.
proposed a self-healing mechanism that monitors, diagnoses and heals its own internal problems using self-awareness as contextual information.
Naftaly H. Minsky identified one of the necessary conditions for self-healing, or self-repair, in complex systems, and proposed means for satisfying this condition in heterogeneous distributed software Diaconescu, et al.,   Proposed the use of component redundancy for enabling self-optimisation, self-healing and dynamic adaptation capabilities in component-based software systems.

Keromytis
provided first attempt to characterize self-healing software systems by surveying some of the existing work in the field and focused on systems that effect structural changes to the software under protection, as opposed to block level system reconfiguration.
PARK, et al., Proposed a self-healing software architecture supported automatic code generation approach using productions of design level.and proposed an automated code generation approach to determine problems arising in external and internal system environment.

Brumley et al.
Presented a self-healing architecture for software systems where programs self-monitor and detect exploits, self-diagnose the root cause of the vulnerability, self-harden against future attacks, and self-recover from attacks.

Continued
Dinkel et al., Presented a novel approach for self-healing in distributed embedded systems containing black-box application software.Abdullah et al. presented a self-healing architecture for software system based on one of the biological processes that have the ability to heal by itself-the wound-healing process, which is divided into two layers, functional layer and healing layer.Michael E. Harald et al., Focused on the self healing branch of the research and gave an overview of the current existing approaches.Dabrowski et al., 2002   Used architectural models to characterize how architecture, topology, consistency-maintenance mechanism, and failure-recovery strategy each contribute to self-healing during communication failure.
Elkorobarrutia et al., described an approach of inserting a self-healing mechanism in components that are specified according to a state chart and whose implementations also offer the possibility to act on them in terms of state; i.e.
forcing the component to some state and rolling back one transition.Anand et al.,   self-healing systems prove increasingly important in countering system software based attacks, which recover and secure to the data from interrupted services.Self-healing systems offer an active form of decision support, without human intervention that can detect the fault and recover from the fault.

Azim et al
Presented an approach that uses automatic error detection and patch construction towards providing a cetain degree of self-healing capabilities to Android apps.

Zhang et al.,
Proposed a fully dynamic solution to locating execution omission errors using dynamic slices.We introduce the notion of implicit dependences which are dependences that are normally invisible to dynamic slicing due to the omission of execution of some statements.

Fuad et al.
Proposed a new technique of matching unknown fault scenarios to already established fault models.By capturing runtime parameters and execution pathways, stable execution models are established and later are used to match with an unstable execution scenario.

Ehlers et al.,
Proposed an approach for localizing performance anomalies in software systems employing self-adaptive monitoring.

Kramer et al
Focused on architectural approaches to self-management, not because the language-level or network-level approaches are uninteresting or less promising, but because we believe that the architectural level seems to provide the required level of abstraction and generality to deal with the challenges posed.Primarily, the development of the Automatic Self-healing software will focus on the following areas: 1. Self-optimization.
The possibility to develop self-healing software that can be work effectively.At the same time, it works to perfection.a lot of research is required in this direction.This is also the part of complexity engineering [7] [41] [51].

Researcher Investigated Self Healing Methodology, Tool, and Technique Developed
Table 1 presented a summary of self healing Methodology, tool, and technique developed and the name of the researchers that have developed them.While Table 2 shows a classification of self healing features according to the features and research developed to investigate the feature.And Table 3 shows other authors who investigated the self healing features and it shows a classification of self healing features and the name of researchers who have investigated this feature deeply in there researches [41].

Summary
There are different features that characterize the self healing mechanisms; different researches explored these researches.Looking at the tables provided above, it is clear that the Self-healing software can be a reality as many researchers have investigated this field deeply as it took the intention of many top researches and researchers.Although some precious standards are required to ensure that application's participative approach can be very useful in this direction.

[ 40 ]
[52] [53].The concept of Automatic self-healing software appears to be very interesting.Most of the IT companies get attracted towards it.Again, the reality is not what it actually appears to be! Very frankly, the reality is entirely vice-a-versa and involves a lot of snags.These snags are a kind of road block in the process of replacing the existing software technologies with the one that can heal itself automatically[49] [50].
Katti et al.Presented and compares two novel failure detection and consensus algorithms and proposed algorithms are based on Gossip protocols and are inherently fault-tolerant and scalable.Huang et al., Investigated the effects of using an unsupervised log data abstraction method to aid the supervised learning processes of problem determination.Ada Diaconescu Proposed a framework that uses component redundancy for enabling self-adaptation, self-optimisation and self-healing capabilities in component-based enterprise software systems.Janssen et al, Zoltar toolset was discussed, which adopts a technique to localize software faults based on statistical information retrieved from an instrumented version of the program under analysis.Carzaniga et al.Develop the idea of automatic workarounds.They proposed a general architecture for the deployment of automatic workarounds and examine its essential requirements.Thorat et al.Proposed a self-healing SDN framework which can optimize the recovery by applying autonomic principles.Included a rapid recovery (RR) mechanism to perform an immediate link recovery at the switch level without overburdening the controller.Stehle et al.Presented a computational geometry technique and a supporting tool to tackle the problem of timely fault detection during the execution of a software application.

Table 1 .
Summary of self healing methodology, tool, and technique developed and the name of the researchers that have developed them.
Gorla et al.,Discusses the challenges underlying the construction of self-healing systems with particular focus on functional failures, and presents a set of techniques to build software systems that can automatically heal such failures.
Ardagna et al.,Proposed a classification of Web service faults, discussing three levels of faults, namely infrastructural & middleware, Web service, and Web application, and their mutual dependencies.

Table 2 .
Classification of self healing features according to the features and research developed to investigate the feature.Cheng, 2004) "architecture-based self-adaptation with reusable infrastructure" B. Schmerl, P. Steenkiste, N. Hu, G. Kaiser, 2004 "An approach to autonomizing legacy systems, Workshop on Self-Healing, Adaptive and self-MAN aged Systems" P. Gross, G. Kc, J. Parekh,