Programming by contract