I. Introduction
Testing is a vital activity in software engineering that controls the quality of software by detecting errors and verifying the completion of software functionality as defined by the requirements. Regression testing is a type of software testing concerned with testing changes done to a software to ensure that any modifications are done successfully without imposing other modules to produce unexpected results. It is typically done by re-running all the previous test cases which is an expensive and time-consuming activity that increases by increasing the size and complexity of software. Different techniques have been studied to solve regression testing problems; (i) test cases reduction, which permanently eliminates test cases from the test suite, (ii) test cases prioritization, which orders the test cases by certain measures and (iii) test cases selection which seeks to select test cases that are relevant to some set of recent changes [1], [2], [3].