“…In most cases, the expected behavior of the software is assumed to be provided by the test designer. This behavior may be specified in several ways: (1) as predicates represented in a tabular form to express functional specifications of the software [40], (2) as temporal constraints that specify conditions that must not be violated during software execution [8,9,43,44], (3) as logical expressions to be satisfied by the software [11], and (4) as formal specifications [1,4,6,10,14,15,41], e.g., algebraic specifications to represent abstract data types (ADTs) [4,10,15]. This expected behavior is then used by a verifier that either performs a table lookup [40], creates a state-machine model [9,20], or evaluates a boolean expression [11] to determine the correctness of the actual output.…”