A model-based approach to software debugging