Reliable Object-Oriented Software: Applying Analysis and Design