1. A method of testing a first piece of computer code that is an implementation of a specification against a second piece of computer code that is a different implementation of the specification, the method comprising: defining corresponding synchronization points in the first and second pieces of code, including respective first synchronization points in the first and second pieces of code; executing the first piece of code to the first synchronization point of the first piece of code; generating a state before message; sending the state before message to the second piece of code; executing the second piece of code to the first synchronization point of the second piece of code; generating a state after message; sending the state after message to the first piece of code; and comparing the state before message to the state after message.