Testing Object-Oriented Software: Life-Cycle Solutions