Presentation is loading. Please wait.

Presentation is loading. Please wait.

White-Box Testing Techniques II

Similar presentations


Presentation on theme: "White-Box Testing Techniques II"— Presentation transcript:

1 White-Box Testing Techniques II
Software Testing and Verification Lecture 8 Prepared by Stephen M. Thebaut, Ph.D. University of Florida

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

3 Dataflow Coverage Based on the idea that program paths along which variables are defined and then used should be covered. Families of path selection criteria have been defined based on somewhat different models/definitions. The different criteria reflect different degrees of coverage. The model/definitions we consider are representative. CASE tool support is very desirable.

4 Dataflow Coverage Based on the idea that program paths along which variables are defined and then used should be covered. Families of path selection criteria have been defined based on somewhat different models/definitions. The different criteria reflect different degrees of coverage. The model/definitions we consider are representative. CASE tool support is very desirable.

5 Dataflow Coverage Based on the idea that program paths along which variables are defined and then used should be covered. Families of path selection criteria have been defined based on somewhat different models/definitions. The different criteria reflect different degrees of coverage. The model/definitions we consider are representative. CASE tool support is very desirable.

6 Dataflow Coverage Based on the idea that program paths along which variables are defined and then used should be covered. Families of path selection criteria have been defined based on somewhat different models/definitions. The different criteria reflect different degrees of coverage. The model/definitions we consider are representative. CASE tool support is very desirable.

7 Variable Definitions and Uses
A program variable is DEFINED when it appears: on the left hand side of an assignment statement (e.g., Y := 17) in an input statement (e.g., input(Y)) as an OUT parameter in a subroutine call (e.g., DOIT(X:IN,Y:OUT))

8 Variable Definitions and Uses
A program variable is DEFINED when it appears: on the left hand side of an assignment statement (e.g., Y := 17) in an input statement (e.g., input(Y)) as an OUT parameter in a subroutine call (e.g., DOIT(X:IN,Y:OUT))

9 Variable Definitions and Uses
A program variable is DEFINED when it appears: on the left hand side of an assignment statement (e.g., Y := 17) in an input statement (e.g., input(Y)) as an OUT parameter in a subroutine call (e.g., DOIT(X:IN,Y:OUT))

10 Variable Definitions and Uses
A program variable is DEFINED when it appears: on the left hand side of an assignment statement (e.g., Y := 17) in an input statement (e.g., input(Y)) as an OUT parameter in a subroutine call (e.g., DOIT(X:IN,Y:OUT))

11 Variable Definitions and Uses (cont’d)
A program variable is USED when it appears: on the right hand side of an assignment statement (e.g., Y := X+17) as an IN parameter in a subroutine or function call (e.g., Y := SQRT(X)) in the predicate of a branch statement (e.g., if X>0 then...)

12 Variable Definitions and Uses (cont’d)
A program variable is USED when it appears: on the right hand side of an assignment statement (e.g., Y := X+17) as an IN parameter in a subroutine or function call (e.g., Y := SQRT(X)) in the predicate of a branch statement (e.g., if X>0 then...)

13 Variable Definitions and Uses (cont’d)
A program variable is USED when it appears: on the right hand side of an assignment statement (e.g., Y := X+17) as an IN parameter in a subroutine or function call (e.g., Y := SQRT(X)) in the predicate of a branch statement (e.g., if X>0 then...)

14 Variable Definitions and Uses (cont’d)
A program variable is USED when it appears: on the right hand side of an assignment statement (e.g., Y := X+17) as an IN parameter in a subroutine or function call (e.g., Y := SQRT(X)) in the predicate of a branch statement (e.g., if X>0 then...)

15 Variable Definitions and Uses (cont’d)
Use of a variable in the predicate of a branch statement is called a predicate-use (“p-use”). Any other use is called a computation-use (“c-use”). For example, in the program statement: If (X>0) then print(Y) end_if_then there is a p-use of X and a c-use of Y.

16 Variable Definitions and Uses (cont’d)
Use of a variable in the predicate of a branch statement is called a predicate-use (“p-use”). Any other use is called a computation-use (“c-use”). For example, in the program statement: If (X>0) then print(Y) end_if_then there is a p-use of X and a c-use of Y.

17 Variable Definitions and Uses (cont’d)
A variable can also be used and then re-defined in a single statement when it appears: on both sides of an assignment statement (e.g., Y := Y+X) as an IN/OUT parameter in a subroutine call (e.g., INCREMENT(Y:IN/OUT))

18 Variable Definitions and Uses (cont’d)
A variable can also be used and then re-defined in a single statement when it appears: on both sides of an assignment statement (e.g., Y := Y+X) as an IN/OUT parameter in a subroutine call (e.g., INCREMENT(Y:IN/OUT))

19 Variable Definitions and Uses (cont’d)
A variable can also be used and then re-defined in a single statement when it appears: on both sides of an assignment statement (e.g., Y := Y+X) as an IN/OUT parameter in a subroutine call (e.g., INCREMENT(Y:IN/OUT))

20 Other Dataflow Terms and (Informal) Definitions
A path is definition clear (“def-clear”) with respect to a variable v if there is no re-definition of v along the path. A complete path is a path whose initial node is a/the start node and whose final node is a/the exit node.

21 Other Dataflow Terms and (Informal) Definitions
A path is definition clear (“def-clear”) with respect to a variable v if there is no re-definition of v along the path. A complete path is a path whose initial node is a/the start node and whose final node is a/the exit node.

22 Other Dataflow Terms and (Informal) Definitions (cont’d)
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.)

23 Example 1 1. input(A,B) if (B>1) then 2. A := A+7 end_if
3. if (A>10) then B := A+B 5. output(A,B) input(A,B) 1 B>1 B1 2 A := A+7 3 A>10 A10 4 B := A+B 5 output(A,B)

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

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

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

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

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

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

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

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

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

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

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

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

36 Identifying DU-Pairs – Variable B
input(A,B) du-pair path(s) (1,4) <1,2,3,4> <1,3,4> (1,5) <1,2,3,5> <1,3,5> (1,<1,2>) <1,2> (1,<1,3>) <1,3> (4,5) <4,5> 1 B>1 B1 2 A := A+7 3 A>10 A10 4 B := A+B 5 output(A,B) (Verification of du-pairs/paths(s) left as an exercise...)

37 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.

38 Dataflow Test Coverage Criteria (cont’d)
Consider a test case executing path: 1. <1,2,3,4,5> Identify all def-clear paths (associated with du-pairs) covered (i.e., subsumed) by this test case for each variable. Are all definitions for each variable associated with at least one of the subsumed def-clear paths?

39 Dataflow Test Coverage Criteria (cont’d)
Consider a test case executing path: 1. <1,2,3,4,5> Identify all def-clear paths (associated with du-pairs) covered (i.e., subsumed) by this test case for each variable. Are all definitions for each variable associated with at least one of the subsumed def-clear paths?

40 Dataflow Test Coverage Criteria (cont’d)
Consider a test case executing path: 1. <1,2,3,4,5> Identify all def-clear paths (associated with du-pairs) covered (i.e., subsumed) by this test case for each variable. Are all definitions for each variable associated with at least one of the subsumed def-clear paths?

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

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

43 Dataflow Test Coverage Criteria (cont’d)
Since <1,2,3,4,5> covers at least one def-clear path from each of the two definitions of A/B to at least one c-use or p-use of A/B, All-Defs coverage is achieved.

44 Dataflow Test Coverage Criteria (cont’d)
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. <1,3,4,5> 3. <1,2,3,5> Do all three test cases provide All-Uses coverage?

45 Dataflow Test Coverage Criteria (cont’d)
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. <1,3,4,5> 3. <1,2,3,5> Do all three test cases provide All-Uses coverage?

46 Dataflow Test Coverage Criteria (cont’d)
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. <1,3,4,5> 3. <1,2,3,5> Do all three test cases provide All-Uses coverage?

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

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

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

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

51 Dataflow Test Coverage Criteria (cont’d)
Since none of the three test cases covers the du-pair (1,<3,5>) for variable A, All-Uses Coverage is not achieved. Exercise: Did the three test cases considered provide Branch coverage? Basis Path coverage? Path coverage?

52 Dataflow Test Coverage Criteria (cont’d)
Since none of the three test cases covers the du-pair (1,<3,5>) for variable A, All-Uses Coverage is not achieved. Exercise: Did the three test cases considered provide Branch coverage? Basis Paths coverage? Path coverage?

53 What would be even stronger than All-Uses?
We have considered the All-Defs and the All-Uses criteria so far. How could the definition of All-Uses be modified to make it even stronger? Recall: 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.

54 What would be even stronger than All-Uses?
We have considered the All-Defs and the All-Uses criteria so far. How could the definition of All-Uses be modified to make it even stronger? Recall: 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.

55 Example 2 1. input(X,Y) 2. while (Y>0) do 3. if (X>0) then
Y := Y-X else input(X) end_if_then_else 6. end_while 7. output(X,Y) 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

56 Note edges <6,7> and <6,3>.
Example 2 1. input(X,Y) 2. while (Y>0) do 3. if (X>0) then Y := Y-X else input(X) end_if_then_else 6. end_while 7. output(X,Y) 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) Note edges <6,7> and <6,3>.

57 Logic Coverage Control Flow Graph
input(a) while a do if b then s1 else s2 end_if_then_else end_while output(a)

58 Dataflow Coverage Control Flow Graph
input(a) while a do if b then s1 else s2 end_if_then_else end_while output(a)

59 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

60 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

61 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

62 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

63 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

64 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

65 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

66 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

67 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

68 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

69 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

70 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

71 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

72 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

73 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

74 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

75 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

76 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

77 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

78 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

79 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

80 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

81 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

82 Identifying DU-Pairs – Variable X
path(s) (1,4) <1,2,3,4> <1,2,3,4,(6,3,4)*> (1,7) <1,2,7> <1,2,3,4,6,7> <1,2,3,4,6,(3,4,6)*,7> (1,<3,4>) (1,<3,5>) <1,2,3,5> (5,4) <5,6,3,4> <5,6,3,4,(6,3,4)*> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y) (cont’d)

83 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

84 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

85 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

86 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

87 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

88 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

89 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

90 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

91 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

92 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

93 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

94 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

95 Identifying DU-Pairs – Variable X
path(s) (5,7) <5,6,7> † <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*7> (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible 1 input(X,Y)) 2 Y>0 Y0 3 X0 X>0 input(X) 5 4 Y := Y-X 6 Y0 Y>0 7 output(X,Y)

96 More Dataflow Terms and Definitions
A path (either partial or complete) is simple if all edges within the path are distinct (i.e., different). A path is loop-free if all nodes within the path are distinct (i.e., different).

97 More Dataflow Terms and Definitions
A path (either partial or complete) is simple if all edges within the path are distinct (i.e., different). A path is loop-free if all nodes within the path are distinct (i.e., different).

98 Simple and Loop-Free Paths
<1,3,4,2> ? <1,2,3,2> <1,2,3,1,2> <1,2,3,2,4>

99 Simple and Loop-Free Paths
<1,3,4,2> yes <1,2,3,2> <1,2,3,1,2> <1,2,3,2,4>

100 Simple and Loop-Free Paths
<1,3,4,2> yes <1,2,3,2> ? <1,2,3,1,2> <1,2,3,2,4>

101 Simple and Loop-Free Paths
<1,3,4,2> yes <1,2,3,2> no <1,2,3,1,2> <1,2,3,2,4>

102 Simple and Loop-Free Paths
<1,3,4,2> yes <1,2,3,2> no <1,2,3,1,2> ? <1,2,3,2,4>

103 Simple and Loop-Free Paths
<1,3,4,2> yes <1,2,3,2> no <1,2,3,1,2> <1,2,3,2,4>

104 Simple and Loop-Free Paths
<1,3,4,2> yes <1,2,3,2> no <1,2,3,1,2> <1,2,3,2,4> ?

105 Simple and Loop-Free Paths
<1,3,4,2> yes <1,2,3,2> no <1,2,3,1,2> <1,2,3,2,4>

106 Simple and Loop-Free Paths (cont’d)
Which is stronger, simple or loop-free? Loop-free => Simple Simple => Loop-free

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

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

109 Identifying du-paths X: (5,7) <5,6,7> † ? <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † ? <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

110 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

111 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> ? <5,6,3,4,6,(3,4,6)*,7> X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

112 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

113 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> ? X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

114 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

115 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> ? <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

116 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

117 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> ? X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

118 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

119 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> ? <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

120 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

121 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † ? <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

122 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

123 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † ? † infeasible

124 Identifying du-paths X: (5,7) <5,6,7> † yes <5,6,3,4,6,7>
du-pair path(s) du-path? X: (5,7) <5,6,7> † yes <5,6,3,4,6,7> <5,6,3,4,6,(3,4,6)*,7> no X: (5,<3,4>) <5,6,3,4> <5,6,3,4,(6,3,4)*> X: (5,<3,5>) <5,6,3,5> <5,6,3,4,6,3,5> † <5,6,3,4,6,(3,4,6)*,3,5> † † infeasible

125 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.

126 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.

127 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.

128 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.

129 Summary of White-Box Coverage Relationships
Path Compound Condition All du-paths Branch / Condition Basis Paths All-Uses Loop Condition Branch All-Defs * Statement * - nominal cases

130 White-Box Testing Techniques II
Software Testing and Verification Lecture 8 Prepared by Stephen M. Thebaut, Ph.D. University of Florida


Download ppt "White-Box Testing Techniques II"

Similar presentations


Ads by Google