The Application of Graph Criteria: Source Code It is usually defined with the control flow graph (CFG) Node coverage is used to execute every statement Edge coverage is used to execute every branch Loops are used to execute looping structures such as for loops, while loops, etc. Data flow coverage is the extended form of control flow graph (CFG) with defs and uses defs are statements that assign values to variables uses are statements that use variables Tests with Data Flow Criteria Data flow criteria require tests that tour subpaths from specific definitions of variables to specific uses Nodes where a variable is assigned a value are called definitions (or defs) Nodes where the value of a variable is accessed are called uses. Data Flow Coverage for Source def : A location where a value is stored into memory x appears on the left side of an assignment (x = 44; x is an actual parameter in a call and the method changes its value x is a formal parameter of a method (implicit def when method starts) x is an input to a program use : A location where variable’s value is accessed x appears on the right side of an assignment x appears in a conditional test x is an actual parameter to a method x is an output of the program x is an output of a method in a return statement If a def and a use appear on the same node, then it is only a DU-pair if the def occurs after the use and the node is in a loop 3 A definition d for a variable x reaches a use u if there is a path from d to u that has no other definitions of x (def-clear). The all-uses (AU) criterion requires tests to tour at least one subpath from each definition to each reachable use. // EXAMPLE: return index of the last element in x that equals y. // if y is not in x, return -1. public int findLast (int []x, int y) { for (int i = x.length-1; i>=0; i--) { if (x[i] == y) return i; } return -1; Annotated Control Graph Nodes 4 and 6 are final nodes, corresponding to the return statements. Node 2 is introduced to capture the for loop; it has no executable use(3)= statements. DU (def-use) pairs are shown as a variable name followed by the def node, then the use node. def (5) = { i } use (5) = { i } Def -Use Pairs = { (1, 1,x), (1,3,x), (1,3,y), (1, 2,i), (1, 3,i), (1,5,i), (1,6,i), (5, 2,i), (5, 3,i), ( 5, 6,i), (5, 5,i)} public static void computeStats (int [ ] numbers) { int length = numbers.length; double med, var, sd, mean, sum, varsum; sum = 0; for (int i = 0; i < length; i++) { sum += numbers [ i ]; } med = numbers [ length / 2]; mean = sum / (double) length; 1 2 i=0 3 varsum = 0; for (int i = 0; i < length; i++) 4 { 5 varsum = varsum + ((numbers [ I ] - mean) * (numbers [ I ] - mean)); i=0 } var = varsum / ( length - 1.0 ); sd = Math.sqrt ( var ); 6 System.out.println ("length: " + length); i < length System.out.println ("mean: " + mean); i >= length System.out.println ("median: " + med); 7 System.out.println ("variance: " + var); 8 System.out.println ("standard deviation: " + sd); } i++ 6 Edge Coverage 1 TR = {[ 1, 2 ],[ 2, 3 ],[ 3, 4 ], [ 3, 5 ], [ 4, 3 ], [ 5, 6 ], [ 6, 7 ], [ 6, 8 ],[ 7, 6 ]} 2 3 4 5 Test Path , 3, 4, 3, 5, 6, 7, 6, 8 ] [ 1, 2, 3,4, 3, 5, 6, 7, 6, 8] ] 6 7 8 7 Edge-Pair Coverage TR={ [ 1, 2, 3 ], [ 2, 3, 4 ], [ 2, 3, 5 ], [ 3, 4, 3 ], [ 3, 5, 6 ], [ 4, 3, 5 ],[ 5, 6, 7 ],[ 5, 6, 8 ], [ 6, 7, 6 ], [ 7, 6, 8 ], [ 4, 3, 4 ], [ 7, 6, 7 ]} Test Paths i.[ 1, 2, 3, 4, 3, 5, 6, 7, 6, 8 ] ii. [ 1, 2, 3, 5, 6, 8 ] iii. [ 1, 2, 3, 4, 3, 4, 3, 5, 6, 7, 6, 7, 6, 8 ] Test Requirements Toured i.[ 1, 2, 3 ], [ 2, 3, 4 ], [ 3, 4, 3 ], [ 3, 5, 6 ], [ 4, 3, 5 ], [ 5, 6, 7] , [ 6, 7, 6 ], [ 7, 6, 8 ] ii. [ 1, 2, 3 ], [ 2, 3, 5 ], [ 3, 5, 6 ], [ 5, 6, 8 ] iii. [ 1, 2, 3 ], [ 2, 3, 4 ], [ 3, 4, 3 ], [ 3, 5, 6 ], [ 4, 3, 5 ], [ 5, 6, 7 ],[ 6, 7, 6 ],[ 7, 6, 8 ], [ 4, 3, 4 ], [ 7, 6, 7 ] 8 Prime Path Coverage TR={ [ 3, 4, 3 ],[ 4, 3, 4 ],[ 7, 6, 7 ], [ 7, 6, 8 ], [ 6, 7, 6 ], [ 1, 2, 3, 4 ], [ 4, 3, 5, 6, 7 ], [ 4, 3, 5, 6, 8 ], [ 1, 2, 3, 5, 6, 7 ], [ 1, 2, 3, 5, 6, 8 ]} Test Paths i. [ 1, 2, 3, 4, 3, 5, 6, 7, 6, 8 ] ii. [ 1, 2, 3, 4, 3, 4, 3, 5, 6, 7, 6, 7, 6, 8 ] iii. [ 1, 2, 3, 4, 3, 5, 6, 8 ] iv. [ 1, 2, 3, 5, 6, 7, 6, 8 ] v. [ 1, 2, 3, 5, 6, 8 ] Test Requirements Toured i. [ 3, 4, 3 ], [ 7, 6, 8 ], [ 6, 7, 6 ], [ 1, 2, 3, 4 ], [ 4, 3, 5, 6, 7 ] ii. [ 3, 4, 3 ], [ 4, 3, 4 ], [ 7, 6, 7 ], [ 7, 6, 8 ], [ 6, 7, 6 ], [ 1, 2, 3, 4 ] [ 4, 3, 5, 6, 7 ] iii. [ 3, 4, 3 ], [ 1, 2, 3, 4 ], [ 4, 3, 5, 6, 8 ] iv. [ 7, 6, 8 ], [ 6, 7, 6 ], [ 1, 2, 3, 4 ], [ 1, 2, 3, 5, 6, 7 ] v. . [ 1, 2, 3, 5, 6, 8 ] 9