I. Introduction
Over the past decades, software has permeated into almost every economic activity, and is boosting economic growth from many perspectives. At the same time, like any other manmade artifacts, software suffers from various bugs which lead to incorrect results, deadlocks, or even crashes of the entire system. When this happens in a critical application, it can cause great loss of money or even human lives. For example, Zhivich and Cunningham [40] report that the software of a hospital miscalculated the proper dosage of radiation for patients. In this accident, at least eight patients died. To improve the quality of software, it is desirable to fix as many bugs as possible. The long battle with software bugs began ever since software existed. It requires much effort to fix bugs, e.g. Kim and Whitehead [14] report that the median time for fixing a single bug is about 200 days.