Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Testing Object- Oriented Programs CS 4311 J. McGregor and D. Sykes. A Practical Guide to Testing Object-Oriented Software, Addison-Wesley, 2001. I. Burnstein.

Similar presentations


Presentation on theme: "1 Testing Object- Oriented Programs CS 4311 J. McGregor and D. Sykes. A Practical Guide to Testing Object-Oriented Software, Addison-Wesley, 2001. I. Burnstein."— Presentation transcript:

1 1 Testing Object- Oriented Programs CS 4311 J. McGregor and D. Sykes. A Practical Guide to Testing Object-Oriented Software, Addison-Wesley, 2001. I. Burnstein. Practical Software Testing, Springer-Verlag, 2003.

2 2 Outline OO testing, why different? Class as unit Test harness Testing class hierarchies

3 3 What’s Different about Testing OO Programs? Encapsulation Polymorphism Inheritance Development

4 4 Unit Testing OO Programs Definition  A unit is the smallest possible testable software component, e.g., function, procedure, or module. What’s unit in OO?  Method vs. class

5 5 Method As Unit Methods tend to be small and less meaningful in isolation Impossible to test some methods (e.g., private methods) Overhead to test each method separately

6 6 Class As Unit Purpose  Test a class as a whole  Emphasizes interactions among methods Approach  Test critical methods individually  Test interactions among methods Test sequences of methods calls, e.g., pop after push

7 7 Testing Interactions Why test interactions?  An OOP is a collection of objects collaborating to solve some problem.  The correct collaboration (or interaction) is critical to the correctness of the program. Intra-class interactions  E.g., pop after push Inter-class interactions (integration test)  Test sequences of messages among collaborating objects.  Can use interaction diagrams (e.g., message sequence diagrams and communication diagrams) and use case scenarios to generate test cases.

8 8 Describing Test Cases Conventional definition  A pair of inputs and the expected output,  x i, o  In OO  Need to specify the receiver (often called object under test) and its state too, e.g., r in r.m(x 1, x 2, …, x n )  Thus, it is a tuple of  r pre, x i ’s, r post, o, e , where r : is the object under test r pre : the receiver r’s state in the pre-state x i ’s : the arguments r post : the receiver r’s state in the post-state o: expected return value e: expected exception

9 9 Example A test case for testing the method “void setX(int)” of the class Point with the instance fields x and y, e.g., Point r = new Point(10,10); r.setX(20); Input Output receiver (r) args (x)receiver (r) return-value exception r.x = 10 x = 20r.x = 20 none noner.y = 10

10 10 Constructing Test Cases Testing individual methods  Black-box test and white-box test Testing interactions  Random testing  State-based approach Can use state machine diagrams to generate sequences of method calls Testing exceptions  Design-by-Contract (DBC) vs. defensive design

11 11 Outline OO testing, why different? Class as unit Test harness Testing class hierarchies

12 12 Test Harness A test harness is the auxiliary code developed to support testing of units and components, consisting of:  Drivers that call the target code, and  Stubs that represents modules it calls. unit under test stub 1 call driverstub n ack call ack call result

13 13 Constructing Test Harness Conditionally compiled  Test code closely maintained with class code (e.g., in the same file)  Hard to reuse (e.g., to test a subclass)  Requires support for conditional compilation As static methods or nested classes  Test code closely maintained with class code  Easy to reuse (e.g., by inheritance)  Need to strip down test code before product delivery As separate tester class

14 14 Separate Test Class Strengths  Easy to reuse (e.g., to test a subclass)  Small and fast production code Weaknesses  Need to create a new tester class  Need to manage changes carefully  May not be able to access all features of the class under test Guideline  Use unit testing frameworks such as xUnit: JUnit, PHPUnit, CppUnit, NUnit (C#). TesterCTesterC

15 15 Outline OO testing, why different? Class as unit Test harness Testing class hierarchies

16 16 Testing Class Hierarchies If a new class D is added, what methods need to be tested?  Need test bar() of D?  What about inherited methods, e.g., foo()?  Can use existing test cases of C?  What if D adds a new method? C foo() bar() D bar()

17 17 Organizing Testing Harness Parallel architecture for class testing (PACT)  Use inheritance to organize test cases and test classes Tester CTester C DTester D

18 18 Testing Abstract Classes Can you test abstract classes? Approaches


Download ppt "1 Testing Object- Oriented Programs CS 4311 J. McGregor and D. Sykes. A Practical Guide to Testing Object-Oriented Software, Addison-Wesley, 2001. I. Burnstein."

Similar presentations


Ads by Google