A Practical Guide to Testing Object-Oriented Software