I. Introduction
Testing is performed to evaluate and improve product quality by identifying defects. Software testing consists of the dynamic verification of a program's behavior on a finite set of test cases suitably selected from the usually infinity executions domain, against the expected behavior [1]. It can be performed at different levels—unit, integration and system, along the development life cycle and can focus on different aspects such as purpose, use, behavior, or structure of the system.