1 Introduction
Regression testing consists of re-testing software that has been modified. Such an activity is required to verify whether new changes have introduced errors into unchanged parts, endangering their behaviors [69]. Re-testing the whole software system by executing all the available test cases might be too expensive and unfeasible, especially for large systems [25] , [55]. Running some test suites can take hours, even days, so developers cannot exercise the system instantly or in reasonable time [58]. The problem is clearly amplified by the growth of the test suites as the system evolves.