34
1 Graph Coverage (3) Graph Coverage (3)

Graph Coverage (3)

  • Upload
    pascha

  • View
    41

  • Download
    0

Embed Size (px)

DESCRIPTION

Graph Coverage (3). Reading Assignment. P. Ammann and J. Offutt “Introduction to Software Testing” Section 2.2 Section 2.3. Outline. Data Flow Criteria DU Pairs and DU Paths Graph Coverage for Source Code Basic Block Control Flow Graph (CFG) – If statements CFG – Loops - PowerPoint PPT Presentation

Citation preview

Page 1: Graph Coverage (3)

1

Graph Coverage (3)Graph Coverage (3)

Page 2: Graph Coverage (3)

Reading AssignmentReading AssignmentP. Ammann and J. Offutt

“Introduction to Software Testing”◦Section 2.2◦Section 2.3

2

Page 3: Graph Coverage (3)

3

OutlineOutlineData Flow Criteria

◦DU Pairs and DU PathsGraph Coverage for Source Code

◦Basic Block◦Control Flow Graph (CFG) – If statements◦CFG – Loops

CFG – Test requirements and Test paths

Data Flow Graph Coverage for Source Code

Page 4: Graph Coverage (3)

4

Data Flow CriteriaData Flow Criteria

Definition (def) : A location where a value for a variable is stored into memory

Use : A location where a variable’s value is accessed

Goal: Try to ensure that values are computed and used correctly

Page 5: Graph Coverage (3)

5

Data Flow CriteriaData Flow Criteria

0

2

1

63

5

4X = 42

Z = X-8

Z = X*2

Defs: def (0) = {X}

def (4) = {Z}

def (5) = {Z}

Uses: use (4) = {X}

use (5) = {X}

Page 6: Graph Coverage (3)

6

DU Pairs and DU PathsDU Pairs and DU PathsDU pair : A pair of locations (li, lj)

such that a variable v is defined at li and used at lj

Def-clear : A path from li to lj is def-clear with respect to variable v if v is not given another value on any of the nodes or edges in the path

Page 7: Graph Coverage (3)

7

DU Pairs and DU PathsDU Pairs and DU PathsReach : If there is a def-clear path

from li to lj with respect to v, the def of v at li reaches the use at lj

du-path : A simple subpath that is def-clear with respect to v from a def of v to a use of v

du (ni, nj, v) – the set of du-paths from ni to nj

du (ni, v) – the set of du-paths that start at ni

Page 8: Graph Coverage (3)

8

Data Flow Test CriteriaData Flow Test Criteria

All-defs coverage (ADC)All-defs coverage (ADC) : For each set of du-paths : For each set of du-paths SS = = dudu ( (nn, , vv), TR contains at least one path ), TR contains at least one path dd in in SS..

All-uses coverage (AUC)All-uses coverage (AUC) : For each set of du-paths to : For each set of du-paths to uses uses SS = = dudu ( (nnii, n, njj, , vv), TR contains at least one path ), TR contains at least one path dd

in in SS..

• Then we make sure that every def reaches all possible uses

• First, we make sure every def reaches a use

Page 9: Graph Coverage (3)

9

Data Flow Test CriteriaData Flow Test Criteria

All-du-paths coverage (ADUPC)All-du-paths coverage (ADUPC) : For each set : For each set SS = = dudu ( (ni, njni, nj, , vv), TR contains every path ), TR contains every path dd in in SS..

• Finally, we cover all the paths between defs and uses

Page 10: Graph Coverage (3)

10

Data Flow Testing Data Flow Testing ExampleExample

0

2

1

63

5

4X = 42

Z = X-8

Z = X*2

All-defs for X

[ 0, 1, 3, 4 ]

All-uses for X

[ 0, 1, 3, 4 ]

[ 0, 1, 3, 5 ]

All-du-paths for X

[ 0, 1, 3, 4 ]

[ 0, 2, 3, 4 ]

[ 0, 1, 3, 5 ]

[ 0, 2, 3, 5 ]

Page 11: Graph Coverage (3)

11

Graph Coverage Criteria Graph Coverage Criteria Subsumption Subsumption

Node Coverage

NC

Edge Coverage

EC

Edge-Pair Coverage

EPC

Prime Path Coverage

PPC

Complete Path Coverage

CPC

All-DU-Paths Coverage

ADUP

All-uses Coverage

AUC

All-defs Coverage

ADC

Page 12: Graph Coverage (3)

12

Control Flow Graphs (CFG) – Control Flow Graphs (CFG) – Source CodeSource CodeA CFG models all executions of a

method by describing control structures

Nodes : Statements or sequences of statements (basic blocks)

Edges : Transfers of control

Page 13: Graph Coverage (3)

13

Control Flow Graphs (CFG) – Control Flow Graphs (CFG) – Source CodeSource CodeBasic Block : A sequence of

statements such that if the first statement is executed, all statements will be (no branches)

CFGs are sometimes annotated with extra information◦ branch predicates◦ defs◦ uses

Rules for translating statements into graphs …

Page 14: Graph Coverage (3)

14

CFG : The if Statement CFG : The if Statement if (x < y){ y = 0; x = x + 1;}else{ x = y;}

4

1

2 3

x >= yx < y

x = yy = 0

x = x + 1

if (x < y){ y = 0; x = x + 1;}

3

1

2x >= y

x < y

y = 0x = x + 1

Page 15: Graph Coverage (3)

15

CFG : The if-Return StatementCFG : The if-Return Statement

if (x < y){ return;}print (x);return;

3

1

2x >= y

x < y

return

print (x)return

No edge from node 2 to 3.The return nodes must be distinct.

Page 16: Graph Coverage (3)

16

LoopsLoops

Loops require “extra” nodes to be added

Nodes that do not represent statements or basic blocks

Page 17: Graph Coverage (3)

17

CFG : while and for LoopsCFG : while and for Loops

x = 0;while (x < y){ y = f (x, y); x = x + 1;}

1x = 0

43y =f(x,y)x = x + 1

x >= yx < y

for (x = 0; x < y; x++){ y = f (x, y);}

1

x = x + 1

2

3 5

x >= yx < y

y = f (x, y)

4

2

dummy node

x = 0implicitly

initializes loop

implicitly increments loop

Page 18: Graph Coverage (3)

18

CFG : The case (switch) CFG : The case (switch) StructureStructure

read ( c) ;switch ( c ){ case ‘N’: y = 25; break; case ‘Y’: y = 50; break; default: y = 0; break;}print (y);

5

1 read ( c );

c == ‘N’

y = 0;break;

2 43

c == ‘Y’ default

y = 50;break;

y = 25;break;

print (y);

Page 19: Graph Coverage (3)

19

Example Control Flow – Example Control Flow – computeStatscomputeStatspublic 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;

varsum = 0; for (int i = 0; i < length; i++) { varsum = varsum + ((numbers [ I ] - mean) * (numbers [ I ] - mean)); } var = varsum / ( length - 1.0 ); sd = Math.sqrt ( var );

System.out.println ("length: " + length); System.out.println ("mean: " + mean); System.out.println ("median: " + med); System.out.println ("variance: " + var); System.out.println ("standard deviation: " + sd);}

Page 20: Graph Coverage (3)

20

Control Flow Graph for Control Flow Graph for computeStatscomputeStatspublic 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;

varsum = 0; for (int i = 0; i < length; i++) { varsum = varsum + ((numbers [ I ] - mean) * (numbers [ I ] - mean)); } var = varsum / ( length - 1.0 ); sd = Math.sqrt ( var );

System.out.println ("length: " + length); System.out.println ("mean: " + mean); System.out.println ("median: " + med); System.out.println ("variance: " + var); System.out.println ("standard deviation: " + sd);}

i = 0

i >= length

i < lengthi++

i >= lengthi < length

i = 0

i++

1

2

3

54

6

87

Page 21: Graph Coverage (3)

21

Control Flow TRs and Test Control Flow TRs and Test Paths – ECPaths – EC

1

2

3

54

6

87

TRA. [ 1, 2 ]B. [ 2, 3 ]C. [ 3, 4 ]D. [ 3, 5 ]E. [ 4, 3 ]F. [ 5, 6 ]G. [ 6, 7 ]H. [ 6, 8 ]I. [ 7, 6 ]

Test Path[ 1, 2, 3, 4, 3, 5, 6, 7, 6, 8 ]

Edge Coverage

Page 22: Graph Coverage (3)

22

Control Flow TRs and Test Paths Control Flow TRs and Test Paths – EPC– EPC

1

2

3

54

6

87

TRA. [ 1, 2, 3 ]B. [ 2, 3, 4 ]C. [ 2, 3, 5 ]D. [ 3, 4, 3 ]E. [ 3, 5, 6 ]F. [ 4, 3, 5 ]G. [ 5, 6, 7 ]H. [ 5, 6, 8 ]I. [ 6, 7, 6 ]J. [ 7, 6, 8 ]K. [ 4, 3, 4 ]L. [ 7, 6, 7 ]

Test Pathsi. [ 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 ]

Edge-Pair Coverage

Page 23: Graph Coverage (3)

23

Control Flow TRs and Test Paths Control Flow TRs and Test Paths – PPC– PPC

1

2

3

54

6

87

TRA. [ 3, 4, 3 ]B. [ 4, 3, 4 ]C. [ 7, 6, 7 ]D. [ 7, 6, 8 ]E. [ 6, 7, 6 ]F. [ 1, 2, 3, 4 ]G. [ 4, 3, 5, 6, 7 ]H. [ 4, 3, 5, 6, 8 ]I. [ 1, 2, 3, 5, 6, 7 ]J. [ 1, 2, 3, 5, 6, 8 ]

Test Pathsi. [ 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 ]

Prime Path Coverage

Page 24: Graph Coverage (3)

24

Data Flow Graph Coverage Data Flow Graph Coverage for Source Codefor Source Codedef : 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 an input to a program

Page 25: Graph Coverage (3)

25

Data Flow Graph Coverage for Data Flow Graph Coverage for Source CodeSource Codeuse : 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

Page 26: Graph Coverage (3)

26

Example Data Flow – Example Data Flow – computeStatscomputeStatspublic 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;

varsum = 0; for (int i = 0; i < length; i++) { varsum = varsum + ((numbers [ I ] - mean) * (numbers [ I ] - mean)); } var = varsum / ( length - 1.0 ); sd = Math.sqrt ( var );

System.out.println ("length: " + length); System.out.println ("mean: " + mean); System.out.println ("median: " + med); System.out.println ("variance: " + var); System.out.println ("standard deviation: " + sd);}

Page 27: Graph Coverage (3)

27

8

1

2

4

3

5

6

7

Control Flow Graph for Control Flow Graph for computeStats computeStats

( numbers )sum = 0length = numbers.length

i = 0

i >= length

i < length

sum += numbers [ i ]i++

med = numbers [ length / 2 ]mean = sum / (double) length;varsum = 0i = 0

i >= length

i < length

varsum = …i++

var = varsum / ( length - 1.0 )sd = Math.sqrt ( var )print (length, mean, med, var, sd)

Page 28: Graph Coverage (3)

28

8

1

2

4

3

5

6

7

CFG for computeStats – With Defs CFG for computeStats – With Defs & Uses& Uses

def (1) = { numbers, sum, length }

def (2) = { i }

def (5) = { med, mean, varsum, i }use (5) = { numbers, length, sum }

def (8) = { var, sd }use (8) = { varsum, length, mean, med, var, sd }

use (3, 5) = { i, length }

use (3, 4) = { i, length }

def (4) = { sum, i }use (4) = { sum, numbers, i }

use (6, 8) = { i, length }

use (6, 7) = { i, length }

def (7) = { varsum, i }use (7) = { varsum, numbers, i, mean }

Page 29: Graph Coverage (3)

29

Defs and Uses Tables for Defs and Uses Tables for computeStatscomputeStats

Node Def Use

1 { numbers, sum, length }

2 { i }

3

4 { sum, i } { numbers, i, sum }

5 { med, mean, varsum, i }

{ numbers, length, sum }

6

7 { varsum, i } { varsum, numbers, i, mean }

8 { var, sd } { varsum, length, var, mean, med, var, sd }

Edge Use

(1, 2)

(2, 3)

(3, 4) { i, length }

(4, 3)

(3, 5) { i, length }

(5, 6)

(6, 7) { i, length }

(7, 6)

(6, 8) { i, length }

Page 30: Graph Coverage (3)

30

DU Paths for computeStatsDU Paths for computeStatsvariable DU Pairs DU Paths

numbers (1, 4)(1, 5)(1, 7)

[ 1, 2, 3, 4 ][ 1, 2, 3, 5 ][ 1, 2, 3, 5, 6, 7 ]

length (1, 5)(1, 8)(1, (3,4))(1, (3,5))(1, (6,7))(1, (6,8))

[ 1, 2, 3, 5 ][ 1, 2, 3, 5, 6, 8 ][ 1, 2, 3, 4 ][ 1, 2, 3, 5 ][ 1, 2, 3, 5, 6, 7 ][ 1, 2, 3, 5, 6, 8 ]

med (5, 8) [ 5, 6, 8 ]var (8, 8) No path neededsd (8, 8) No path neededsum (1, 4)

(1, 5)(4, 4)(4, 5)

[ 1, 2, 3, 4 ][ 1, 2, 3, 5 ][ 4, 3, 4 ][ 4, 3, 5 ]

variable DU Pairs DU Pathsmean (5, 7)

(5, 8)[ 5, 6, 7 ][ 5, 6, 8 ]

varsum (5, 7)(5, 8)(7, 7)(7, 8)

[ 5, 6, 7 ][ 5, 6, 8 ][ 7, 6, 7 ][ 7, 6, 8 ]

i (2, 4)(2, (3,4))(2, (3,5))(4, 4)(4, (3,4))(4, (3,5))(5, 7)(5, (6,7))(5, (6,8))(7, 7)(7, (6,7))(7, (6,8))

[ 2, 3, 4 ][ 2, 3, 4 ][ 2, 3, 5 ][ 4, 3, 4 ][ 4, 3, 4 ][ 4, 3, 5 ][ 5, 6, 7 ][ 5, 6, 7 ][ 5, 6, 8 ][ 7, 6, 7 ][ 7, 6, 7 ][ 7, 6, 8 ]

Page 31: Graph Coverage (3)

31

Test Cases and Test PathsTest Cases and Test Paths

There are 12 unique DU paths[ 1, 2, 3, 4 ][ 1, 2, 3, 5 ][ 1, 2, 3, 5, 6, 7 ][ 1, 2, 3, 5, 6, 8 ][ 2, 3, 4 ][ 2, 3, 5 ]

[ 4, 3, 4 ][ 4, 3, 5 ][ 5, 6, 7 ][ 5, 6, 8 ][ 7, 6, 7 ][ 7, 6, 8 ]

5 expect a loop not to be “entered”

5 require at least one iteration of a loop

2 require at least two iteration of a loop

Page 32: Graph Coverage (3)

32

Test Cases and Test PathsTest Cases and Test Paths

Test Case : numbers = (44) ; length = 1Test Path : [ 1, 2, 3, 4, 3, 5, 6, 7, 6, 8 ]Note: At least one iteration of a loop

Test Case : numbers = (2, 10, 15) ; length = 3Test Path : [ 1, 2, 3, 4, 3, 4, 3, 4, 3, 5, 6, 7, 6, 7, 6, 7, 6, 8 ]Note: At least two iterations of a loop

Other DU paths require arrays with length 0 to skip loopsBut the method fails with divide by zero on the statement … mean = sum / (double) length;

A fault wasfound

Page 33: Graph Coverage (3)

33

Key Points (1/2)Key Points (1/2)Data Flow Criteria tries to ensure that

values are computed and used correctly.Graph coverage criteria sub-sumptionControl Flow Graph – Source Code

◦ If statement◦ Loops◦ Case statements

Applying the graph test criteria to control flow graphs is relatively straightforward◦ Most of the developmental research work

was done with CFGs◦ A few subtle decisions must be made to

translate control structures into the graph

Page 34: Graph Coverage (3)

Key Points (2/2)Key Points (2/2)DU Pairs

◦ def : a location where a value is stored into memory

◦ use : a location where variable’s value is accessed

◦ Test cases and DU Paths

34