Model Checking
Model checking gives us an algorithmic means to determine whether an abstract model, which represents, for example, a Java program, satisfies a property expressed in a particular logic. In case the property is not satisfied, it identifies a counterexample that shows why the property does not hold.