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    . 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   .
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  . 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  . Autonomic systems reply to alteration in its environment related to the objectives set through system administrator. Pre- sent 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  .
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 example 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  .
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  .
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  .
• 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    .
2. Related Terminology
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  .
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  .
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   .
2.4. 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  .
2.5. 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  .
2.6. 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  .
2.7. 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  .
2.8. 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  .
3. 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  . 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    .
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-optimiz- ing, 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    . 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  .
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?   .
4. 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  .
Every self-healing software system will have the ability to return from the abnormal state to normalcy state  . In some cases, Automatic Self-healing software is considered to be a subordinate to every fault tolerant system  . Self healing contain the term self recovery that include the following methods:
Figure 1. Self Healing Characteristics (Dionysis et al., 2011).
5. 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-Heal- ing 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. Self healing life cycle are shown in Figure 2 (Herald Pasier?Scharam Dustdar, 2010  .
6. Self Healing Life Cycle
It is a process for gathering all the vital information. For this purpose, information are brought into use for analyzing the task.
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.
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.
Figure 2. Self healing life cycle.
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   .
This phase is important as it contains all the relevant knowledge consumed and produced by the earlier four tasks  .
It is clearly evident that the process of developing Self-healing Software is not as easy as it appears to be  . 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   . The operating environment of self- healing extensions holds a lot of features such as:
1. Unreliable systems.
2. Many types of sources related to errors.
3. Fluctuating over time.
7. 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    :
All of these three levels further vary in terms of deep processing (Norman DA, et al., 2003). This processing is further involved between the following two factors:
Evaluation of the nearby world.
Cognition of the world.
Many of self-healing approaches has been emerged in various application areas with various features such as:
1. Survey index and guide.
2. Embedded systems.
3. Operating systems.
4. Architecture based.
5. Cross-layer based.
6. Multiple agent based.
7. Reflective Middleware.
8. Legacy application and Aop.
9. Website services and Qos Based  .
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 self- healing 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 self- protection)    . 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   .
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  . 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.    .
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 re- placing the existing software technologies with the one that can heal itself automatically   .
Figure 3. Self healing control type.
Table 1. Summary of self healing methodology, tool, and technique developed and the name of the researchers that have developed them.
Table 2. Classification of self healing features according to the features and research developed to investigate the feature.
Table 3. Classification of self healing features and the name of researchers who have investigated this feature deeply in there researches.
Primarily, the development of the Automatic Self-healing software will focus on the following areas:
3. Self-Configuration  .
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    .
9. 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  .
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.
 Avizienis, A., Gilley, G., Mathur, F., Rennels, D., Rohr, J. and Rubin, D. (1971) The STAR (Self-Testing and Repairing) Computer: An Investigation of the Theory and Practice of Fault-Tolerant Computer Design. IEEE Transactions on Computers, 20, 1312-1321.
 Dabrowski, C. and Mills, K.L. (2002) Understanding Self-Healing in Service Discovery Systems. Proceedings of the First Workshop on Self-Healing Systems, Charleston, 18-19 November 2002, 15-20.
 Saran, C. (2003) Could Self-Healing Software Be the IT Director’s Way of Cutting Support Costs?
 Athanasopoulos, D., Zarras, A.V., Vassiliadis, P. and Issarny, V. (2011) Mining Service Abstractions: NIER Track. 2011 33rd International Conference on Software Engineering, Honolulu, 21-28 May 2011, 944-947.
 Frei, R., McWilliam, R., Derrick, B., Purvis, A., Tiwari, A. and Serugendo, G.D.M. (2013) Self-Healing and Self-Repairing Technologies. The International Journal of Advanced Manufacturing Technology, 69, 1033-1061.
 Dashofy, E.M., Hoek, A.V.D. and Taylor, R.N. (2002) Towards Architecture-Based Self-Healing Systems. Proceedings of the 1st Workshop on Self-Healing Systems, Charleston, 18-19 November 2002, 21-26.
 Blair, G.S., Coulson, G., Blair, L., Limon, H.D., Grace, P., Moreira, R. and Parlavantzas, N. (2002) Reflection, Self-Awareness and Self-Healing in Open ORB. Proceedings of the 1st Workshop on Self-Healing Systems, Charleston, 18-19 November 2002, 9-14.
 Thatte, S.M. and Abraham, J.A. (1978) A Methodology for Functional Level Testing of Microprocessors. Highlights from Twenty-Five Years, Twenty-Fifth International Symposium on Fault-Tolerant Computing, 27-30 June 1995, 326.
 Georgiadis, J. and Kramer, M.J. (2002) Self-Organizing Software Architectures for Distributed Systems. Proceedings of the 1st Workshop on Self-Healing Systems, Charleston, 18-19 November 2002, 33-38.
 Trumler, W., Bagci, F., Petzold, J. and Ungerer, T. (2005) AMUN—Autonomic Middleware for Ubiquitous Environments Applied to the Smart Doorplate Project. Advanced Engineering Informatics, 19, 243-252.
 George, S., Evans, D. and Marchette, S. (2003) A Biological Programming Model for Self-Healing. 1st ACM Workshop on Survivable and Self-Regenerative Systems, Fair-fax, 31 October 2003, 72-81.
 Valetto, G. and Kaiser, G.E. (2002) Case Study in Software Adaptation. Proceedings of the 1st Workshop on Self-Healing Systems, Charleston, 18-19 November 2002, 73-78.
 Aldrich, J., Sazawal, V., Chambers, C. and Nokin, D. (2002) Architecture Centric Programming for Adaptive Systems. Proceedings of the 1st Workshop on Self-Healing Systems, Charleston, 18-19 November 2002, 93-95.
 Knop, M.W., Schopf, J.M. and Dinda, P.A. (2002) Windows Performance Monitoring and Data Reduction Using Watch Tower. Workshop on Self-Healing, Adaptive and Self-MANaged Systems (SHAMAN), New York City, 23 June 2002.
 Michiels, S., Desmet, L., Janssens, N., Mahieu, T. and Verbaeten, P. (2002) Self-Adapting Concurrency: The DMonA Architecture. Proceedings of the 1st Workshop on Self-Healing Systems, Charleston, 18-19 November 2002, 43-48.
 Fuad, M.M., Deb, D. and Baek, J. (2012) Self-Healing by Means of Runtime Execution Profiling. Proceedings of 14th International Conference on Computer and Information Technology (ICCIT 2011), Dhaka, 22-24 December 2011, 202-207.
 Shin, M.E. (2005) Self-Healing Component in Robust Software Architecture for Concurrent and Distributed Systems. Science of Computer Programming, 57, 27-44.
 Combs, N. and Vagle, J. (2002) Adaptive Mirroring of System of Systems Architectures. Proceedings of the 1st Workshop on Self-Healing Systems, Charleston, 18-19 November 2002, 96-98.
 Raz, O., Koopman, P. and Shaw, M. (2002) Semantic Anomaly Detection in Online Data Sources. Proceedings of the 24th International Conference on Software Engineering (ICSE’02), Orlando, 25 May 2002, 302-312.
 Raz, O., Koopman, P. and Shaw, M. (2002) Enabling Automatic Adaptation in Systems with Under-Specific Elements. Proceedings of the 1st Workshop on Self-Healing Systems, Charleston, 18-19 November 2002, 55-60.
 Al Zaghoul, F., Rababah, O. and Fakhouri, H. (2014) Website Search Engine Optimization: Geographical and Cultural Point of View, Computer Modelling and Simulation (UKSim). 2014 UKSim-AMSS 16th International Conference.
 Anand, M., Chouhan, K., Ravi, S. and Ahmed, S.M. (2011) Context Switching Semaphore with Data Security Issues using Self-Healing Approach. International Journal of Advanced Computer Science and Applications, 2.