Presentation is loading. Please wait.

Presentation is loading. Please wait.

White-Box Testing Techniques II Originals prepared by Stephen M. Thebaut, Ph.D. University of Florida Dataflow Testing.

Similar presentations


Presentation on theme: "White-Box Testing Techniques II Originals prepared by Stephen M. Thebaut, Ph.D. University of Florida Dataflow Testing."— Presentation transcript:

1 White-Box Testing Techniques II Originals prepared by Stephen M. Thebaut, Ph.D. University of Florida Dataflow Testing

2 White-Box Testing Topics Logic coverage Dataflow coverage Path conditions and symbolic execution (lecture III) Other white-box testing strategies –e.g. fault-based testing

3 Dataflow Coverage Basic idea: –Program paths along which variables are defined and then used should be covered A family of path selection criteria has been defined, each providing a different degree of coverage CASE tool support is very desirable

4 Variable Definition A program variable is DEFINED when it appears: –on the left hand side of an assignment statement eg y = 17 –in an input statement eg read(y) –as an call-by-reference parameter in a subroutine call eg update(x, &y);

5 Variable Use A program variable is USED when it appears: –on the right hand side of an assignment statement eg y = x+17 –as an call-by-value parameter in a subroutine or function call eg y = sqrt(x) –in the predicate of a branch statement eg if ( x > 0 ) { … }

6 Variable Use: p-use and c-use Use in the predicate of a branch statement is a predicate-use or “p- use” Any other use is a computation-use or “c-use” For example, in the program fragment: if ( x > 0 ) { print(y); } there is a p-use of x and a c-use of y

7 Variable Use A variable can also be used and then re- defined in a single statement when it appears: –on both sides of an assignment statement eg y = y + x –as an call-by-reference parameter in a subroutine call eg increment( &y )

8 More Dataflow Terms and Definitions A path is definition clear (“def-clear”) with respect to a variable v if it has no variable re-definition of v on the path A complete path is a path whose initial node is a start node and whose final node is an exit node

9 Dataflow Terms and Definitions A definition-use pair (“du-pair”) with respect to a variable v is a double (d,u) such that –d is a node in the program’s flow graph at which v is defined, –u is a node or edge at which v is used and –there is a def-clear path with respect to v from d to u Note that the definition of a du-pair does not require the existence of a feasible def-clear path from d to u

10 Example 1 1. input(A,B) if (B>1) { 2. A = A+7 } 3. if (A>10) { 4. B = A+B } 5. output(A,B) 1 2 3 4 5 input(A,B) A = A+7 B = A+B B>1 B1B1 A>10 A  10 output(A,B)

11 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

12 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input( A,B) A := A +7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

13 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input( A,B) A := A+7 B := A +B B>1 B1B1 A>10 A  10 output(A,B)

14 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input( A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output( A,B)

15 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input( A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output( A,B)

16 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input( A,B) A := A+7 B := A+B B>1 B1B1 A >10 A  10 output(A,B)

17 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input( A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

18 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input(A,B) A := A+7 B := A +B B>1 B1B1 A>10 A  10 output(A,B)

19 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output( A,B)

20 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output( A,B)

21 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A >10 A  10 output(A,B)

22 Identifying DU-Pairs – Variable A du-pairpath(s) (1,2) (1,4) (1,5) (1, ) (1, ) (2,4) (2,5) (2, ) (2, ) 1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

23 Identifying DU-Pairs – Variable B du-pairpath(s) (1,4) (1,5) (1, ) (1, ) (4,5) 1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

24 Dataflow Test Coverage Criteria All-Defs for every program variable v, at least one def-clear path from every definition of v to at least one c-use or one p-use of v must be covered

25 Dataflow Test Coverage Criteria Consider a test case executing path: 1. Identify all def-clear paths covered ( ie subsumed) by this path for each variable Are all definitions for each variable associated with at least one of the subsumed def-clear paths?

26 Def-Clear Paths subsumed by for Variable A du-pairpath(s) (1,2)  (1,4) (1,5) (1, ) (1, ) (2,4)  (2,5)  (2, )  (2, ) 1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

27 Def-Clear Paths Subsumed by for Variable B du-pairpath(s) (1,4)  (1,5) (4,5)  (1, )  (1, ) 1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

28 Dataflow Test Coverage Criteria Since covers at least one def- clear path from every definition of A or B to at least one c-use or p-use of A or B, All-Defs coverage is achieved

29 Dataflow Test Coverage Criteria All-Uses: for every program variable v, at least one def-clear path from every definition of v to every c-use and every p-use of v must be covered Consider additional test cases executing paths: 2. 3. Do all three test cases provide All-Uses coverage?

30 Def-Clear Paths Subsumed by for Variable A du-pairpath(s) (1,2)  (1,4)  (1,5)  (1, )  (1, ) (2,4)  (2,5)  (2, )  (2, ) 1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

31 Def-Clear Paths Subsumed by for Variable B du-pairpath(s) (1,4)  (1,5) (4,5)  (1, )  (1, )  1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

32 Def-Clear Paths Subsumed by for Variable A du-pairpath(s) (1,2)   (1,4)  (1,5)  (1, )  (1, ) (2,4)  (2,5)  (2, )  (2, )  1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

33 Def-Clear Paths Subsumed by for Variable B du-pairpath(s) (1,4)  (1,5)  (4,5)  (1, )   (1, )  1 2 3 4 5 input(A,B) A := A+7 B := A+B B>1 B1B1 A>10 A  10 output(A,B)

34 Dataflow Test Coverage Criteria None of the three test cases covers the du-pair (1, ) for variable A, All-Uses Coverage is not achieved

35 Example 2 1. input (X,Y) 2. while (Y>0) { 3. if (X>0) 4. Y := Y-X else 5. input (X) 6. } 7. output (X,Y) 1 3 input(X,Y)) Y := Y-Xinput(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

36 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input(X,Y)) Y := Y-Xinput(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

37 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input( X,Y)) Y := Y- X input(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

38 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input( X,Y)) Y = Y- X input(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

39 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input( X,Y)) Y = Y- X input(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

40 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input(X,Y)) Y = Y-Xinput(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

41 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input(X,Y)) Y = Y-Xinput(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

42 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input(X,Y)) Y = Y-Xinput(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

43 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input(X,Y)) Y = Y-Xinput(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

44 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input(X,Y)) Y := Y-Xinput(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

45 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input( X,Y)) Y := Y-Xinput(X) Y>0 Y0Y0 X >0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

46 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input( X,Y)) Y := Y-Xinput(X) Y>0 Y0Y0 X >0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

47 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input( X,Y)) Y := Y-Xinput(X) Y>0 Y0Y0 X >0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

48 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input( X,Y)) Y = Y-Xinput(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

49 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input(X,Y)) Y := Y- X input( X ) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

50 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input(X,Y)) Y := Y- X input( X ) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

51 Identifying DU-Pairs – Variable X du-pairpath(s) (1,4) (1,7) (1, ) (1, ) (5,4) 1 3 input(X,Y)) Y := Y- X input( X ) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

52 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) (5, ) (5, ) 1 3 input(X,Y)) Y := Y-Xinput(X) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

53 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) † (5, ) (5, ) † infeasible 1 3 input(X,Y)) Y := Y-X input( X ) Y>0 Y0Y0 X>0 output( X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

54 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) † (5, ) (5, ) † infeasible 1 3 input(X,Y)) Y := Y-X input( X ) Y>0 Y0Y0 X>0 output( X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

55 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) † (5, ) (5, ) † infeasible 1 3 input(X,Y)) Y := Y-X input( X ) Y>0 Y0Y0 X>0 output( X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

56 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) † (5, ) (5, ) † infeasible 1 3 input(X,Y)) Y := Y-X input( X ) Y>0 Y0Y0 X>0 output( X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

57 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) † (5, ) (5, ) † infeasible 1 3 input(X,Y)) Y := Y-X input( X ) Y>0 Y0Y0 X>0 output( X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

58 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) † (5, ) (5, ) † infeasible 1 3 input(X,Y)) Y := Y-X input( X ) Y>0 Y0Y0 X >0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

59 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) † (5, ) (5, ) † infeasible 1 3 input(X,Y)) Y := Y-X input( X ) Y>0 Y0Y0 X >0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

60 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) † (5, ) (5, ) † infeasible 1 3 input(X,Y)) Y := Y-X input( X ) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

61 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) † (5, ) (5, ) † † infeasible 1 3 input(X,Y)) Y := Y-X input( X ) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

62 Identifying DU-Pairs – Variable X du-pairpath(s) (5,7) † (5, ) (5, ) † † infeasible 1 3 input(X,Y)) Y := Y-X input( X ) Y>0 Y0Y0 X>0 output(X,Y) X0X0 2 45 6 7 Y>0 Y0Y0

63 More Dataflow Terms and Definitions A path (either partial or complete) is simple if all edges within the path are distinct ie different A path is loop-free if all nodes within the path are distinct ie different

64 Simple and Loop-Free Paths pathSimple?Loop-free?

65 More Dataflow Terms and Definitions A path is a du-path with respect to a variable v if v is defined at node n1 and either: 1.there is a c-use of v at node nk and is a def-clear simple path, or 2.there is a p-use of v at edge and is a def-clear loop- free path.

66 More Dataflow Terms and Definitions A path is a du-path with respect to a variable v if v is defined at node n1 and either: 1.there is a c-use of v at node nk and is a def-clear simple path, or 2.there is a p-use of v at edge and is a def-clear loop- free path. NOTE!

67 Identifying du-paths du-pairpath(s)du-path? X: (5,7) † X: (5, ) X: (5, ) † † infeasible

68 Another Dataflow Test Coverage Criterion All-DU-Paths: for every program variable v, every du-path from every definition of v to every c-use and every p-use of v must be covered

69 Exercise Identify all c-uses and p-uses for variable Y in Example 2 For each c-use or p-use, identify (using the “ * ” notation) all def-clear paths Identify whether or not each def-clear path is feasible, and whether or not it is a du-path

70 White-Box Coverage Subsumption Relationships Path All du- paths All-Uses All-Defs Compound Condition Branch / Condition Basis PathsLoop Condition Statement Branch


Download ppt "White-Box Testing Techniques II Originals prepared by Stephen M. Thebaut, Ph.D. University of Florida Dataflow Testing."

Similar presentations


Ads by Google