A State-Based Approach to Integration Testing Based on UML Models