|Title of host publication||Encyclopedia of Software Engineering|
|Place of Publication||United Kingdom|
|Number of pages||2|
|Publication status||Published - 2012|
Software maintenance nowadays comprises the largest portion of the total cost and effort of the software development process. Usually, maintenance is required to handle issues that arise once a software system is deployed and it targets either correction or enhancement of software. However, addressing changed requirements or fixing software defects requires effort that is proportional to the size of a software program. Complex contemporary software often exceeds millions of lines of code and locating a specific defect or deficiency that led to unexpected behavior can be painful, time consuming, and very expensive. This problem becomes more severe when we talk about critical systems or cases when errors must be fixed at runtime without stopping the program execution. This entry presents techniques and mechanisms for automatic repair of software systems. The aim of such automation is to reduce both diagnosis and repair time and, therefore, to react more quickly to fault occurrences. The entry spans over automatic verification, automatic diagnosis, and automatic repair approaches such as model checking, architecture-, correlation-, probabilistic-, and model-based diagnosis, rollback, genetic programming (GP) and mutations, event filtering, and machine learning.