Software testing is the de facto technique for correctness verification. Although there are different motivations and approaches to testing, fundamentally, it involves the running of test cases against the software under test. An important aspect is the ability to tell whether the execution results agree with the expected outcomes. The mechanism to determine the correctness of the results is called a test oracle. Unfortunately, such a mechanism does not always exist or may exist but cannot be feasibly used, which is known as the oracle problem. This is a major challenge to software testers, severely curtailing the application of testing approaches and methods to practical situations.