Effective Strategies for Testing Software Components