  Over the last years, machine learning techniques have been applied to more
and more application domains, including software engineering and, especially,
software quality assurance. Important application domains have been, e.g.,
software defect prediction or test case selection and prioritization. The
ability to predict which components in a large software system are most likely
to contain the largest numbers of faults in the next release helps to better
manage projects, including early estimation of possible release delays, and
affordably guide corrective actions to improve the quality of the software.
However, developing robust fault prediction models is a challenging task and
many techniques have been proposed in the literature. Closely related to
estimating defect-prone parts of a software system is the question of how to
select and prioritize test cases, and indeed test case prioritization has been
extensively researched as a means for reducing the time taken to discover
regressions in software. In this survey, we discuss various approaches in both
fault prediction and test case prioritization, also explaining how in recent
studies deep learning algorithms for fault prediction help to bridge the gap
between programs' semantics and fault prediction features. We also review
recently proposed machine learning methods for test case prioritization (TCP),
and their ability to reduce the cost of regression testing without negatively
affecting fault detection capabilities.

Software Engineering;Artificial Intelligence