Object-oriented programming languages and methodologies are now in wide-spread use. As software organizations adopt object-oriented methods and languages into their software development practices, more systematic testing methods for object-oriented programs have been sought after extensively. This thesis presents specification-based testing techniques for object-oriented software based on Unified Modeling Language (UML). We discuss the main two levels in object-oriented software testing: classes and interactions between classes. We show how specifications written in UML can be applied to the specification-testing of these two levels. In particular, we present test cases generation methods for state diagrams and sequence diagrams which have been extensively used for specifying dynamic behavior of systems. First, we show how UML state diagrams can be applied to class testing. We generate test cases from state diagrams by translating them into extended finite state machines (EFSMs) and identifying control and data flow information in the resulting EFSMs. Second, we show how interactions between classes can be tested using UML state diagrams. We reduce the internal structure of EFSMs for each state diagram and then compose reduced EFSMs into one EFSM. The interaction between classes is identified as transitions in the resulting EFSM. Third, we show how interactions between classes can be tested using UML sequence diagrams. A method is given that generates test cases as a set of sequences of member functions in sequence diagrams. We develop a prototype tool that generates test cases based on approach.