Dataflow Testing Chapter 10 Dataflow Testing Testing All-Nodes and - - PowerPoint PPT Presentation

dataflow testing
SMART_READER_LITE
LIVE PREVIEW

Dataflow Testing Chapter 10 Dataflow Testing Testing All-Nodes and - - PowerPoint PPT Presentation

Dataflow Testing Chapter 10 Dataflow Testing Testing All-Nodes and All-Edges in a control flow graph may miss significant test cases Testing All-Paths in a control flow graph is often too time- consuming Can we select a subset of


slide-1
SLIDE 1

Dataflow Testing

Chapter 10

slide-2
SLIDE 2

DFT–2

Dataflow Testing

 Testing All-Nodes and All-Edges in a control flow graph

may miss significant test cases

 Testing All-Paths in a control flow graph is often too time-

consuming

 Can we select a subset of these paths that will reveal the

most faults?

 Dataflow Testing focuses on the points at which variables

receive values and the points at which these values are used

slide-3
SLIDE 3

DFT–3

Concordance

 What is a concordance?

slide-4
SLIDE 4

DFT–4

Concordance – 2

 What is a concordance?

 An alphabetical list of the words (esp. the important

  • nes) present in a text, usually with citations of the

passages concerned

 Used to help find particular passages  Also used to analyze books to establish authorship

 A concordance to the Bible

 What is the a concordance wrt to program text?

 What is the analogue?

slide-5
SLIDE 5

DFT–5

Concordance – 2

 Data flow analysis is in part based concordance analysis

such as that shown below

 Result is a variable cross-reference table

18 beta ← 2 25 alpha ← 3 × gamma + 1 51 gamma ← gamma + alpha - beta 123 beta ← beta + 2 × alpha 124 beta ← gamma + beta + 1 Defined Used alpha 25 51, 123 beta 18, 123, 124 51, 123, 124 gamma 51 25, 51, 124

slide-6
SLIDE 6

DFT–6

Dataflow Analysis

 Can reveal interesting bugs

 A variable that is defined but never used  A variable that is used but never defined  A variable that is defined twice before it is used  Sending a modifier message to an object more than

  • nce between accesses

 Deallocating a variable before it used

 Container problem

 Deallocating container loses references to items in

the container, memory leak

slide-7
SLIDE 7

DFT–7

Dataflow Analysis – 2

 Bugs can be found from a cross-reference table using

static analysis

 Paths from the definition of a variable to its use are more

likely to contain bugs

slide-8
SLIDE 8

DFT–8

Definitions

 A node n in the program graph is a defining node for

variable v – DEF(v, n) – if the value of v is defined at the statement fragment in that node

 Input, assignment, procedure calls

 A node in the program graph is a usage node for variable

v – USE(v, n) – if the value of v is used at the statement fragment in that node

 Output, assignment, conditionals

slide-9
SLIDE 9

DFT–9

Definitions – 2

 A usage node is a predicate use, P-use, if variable v

appears in a predicate expression

 Always in nodes with outdegree ≥ 2

 A usage node is a computation use, C-use, if variable v

appears in a computation

 Always in nodes with outdegree ≤ 1

slide-10
SLIDE 10

DFT–10

Definitions – 3

 A node in the program is a kill node for a variable v

– KILL(v, n) – if the variable is deallocated at the statement fragment in that node

slide-11
SLIDE 11

DFT–11

Example 2 – Billing program

calculateBill (usage : INTEGER) : INTEGER double bill = 0; if usage > 0 then bill = 40 fi if usage > 100 then if usage ≤ 200 then bill = bill + (usage – 100) *0.5 else bill = bill + 50 + (usage – 200) * 0.1 if bill ≥ 100 then bill = bill * 0.9 fi fi fi return bill end Kill node for bill

slide-12
SLIDE 12

DFT–12

Definition-Use path

 What is a du-path?

slide-13
SLIDE 13

DFT–13

Definition-Use path – 2

 What is a du-path?

 A definition-use path, du-path, with respect to a variable

v is a path whose first node is a defining node for v, and its last node is a usage node for v

slide-14
SLIDE 14

DFT–14

Definition clear path

 What is a dc-path?

slide-15
SLIDE 15

DFT–15

Definition clear path – 2

 What is a dc-path?

 A du-path with no other defining node for v is a

definition-clear path

slide-16
SLIDE 16

DFT–16

1 int max = 0; 2 int j = s.nextInt(); 3 while (j > 0) 4 if (j > max) { 5 max = j; 6 } 7 j = s.nextInt(); 8 } 9 System.out.println(max); Example 1 – Max program

A definition of j A C-use of j P-uses of j & max A definition of j Definitions

  • f max

A C-use of max

slide-17
SLIDE 17

DFT–17

Max program – analysis

Legend A..F Segment name d defining node for j u use node for j int max = 0; int j = s.nextInt(); while (j > 0) System.out.println(max); max = j; if (j > max) j = s.nextInt(); A B C D E F d d u u u dc-paths j A B A B C A B C D E B E B C E B C D dc-paths max

A B F A B C D E B C D E B F

slide-18
SLIDE 18

DFT–18

Dataflow Coverage Metrics

 Based on these definitions we can define a set of

coverage metrics for a set of test cases

 We have already seen

 All-Nodes  All-Edges  All-Paths

 Data flow has additional test metrics for a set T of paths in

a program graph

 All assume that all paths in T are feasible

slide-19
SLIDE 19

DFT–19

All-Defs Criterion

 The set T satisfies the All-Def criterion

 For every variable v, T contains a dc-path from

every defining node for v to at least one usage node for v

 Not all use nodes need to be reached

"v #V(P),nd # prog_ graph(P) | DEF(v,nd)

  • $nu # prog_ graph(P) |USE(v,nu)
  • dc _ path(nd,nu) #T
slide-20
SLIDE 20

DFT–20

All-Uses Criterion

 The set T satisfies the All-Uses criterion iff

 For every variable v, T contains dc-paths that start at

every defining node for v, and terminate at every usage node for v

 Not DEF(v, n) × USE(v, n) – not possible to have a dc-

path from every defining node to every usage node

("v #V(P),nu # prog_ graph(P) |USE(v,nu)

  • $nd # prog_ graph(P) | DEF(v,nd) • dc _ path(nd,nu) #T)

% all_ defs_criterion

slide-21
SLIDE 21

DFT–21

All-P-uses / Some-C-uses

 The set T satisfies the All-P-uses/Some-C-uses criterion iff

 For every variable v in the program P, T contains a dc-

path from every defining node of v to every P-use node for v

 If a definition of v has no P-uses, a dc-path leads to

at least one C-use node for v

("v #V(P),nu # prog_ graph(P) | P _ use(v,nu)

  • $nd # prog_ graph(P) | DEF(v,nd) • dc _ path(nd,nu) #T)

% all_ defs_criterion

slide-22
SLIDE 22

DFT–22

All-C-uses / Some-P-uses

 The test set T satisfies the All-C-uses/Some-P-uses

criterion iff

 For every variable v in the program P, T contains a dc-

path from every defining node of v to every C-use of v

 If a definition of v has no C-uses, a dc-path leads to

at least one P-use

("v #V(P),nu # prog_ graph(P) |C _ use(v,nu)

  • $nd # prog_ graph(P) | DEF(v,nd) • dc _ path(nd,nu) #T)

% all_ defs_criterion

slide-23
SLIDE 23

DFT–23

Miles-per-gallon Program

miles_per_gallon ( miles, gallons, price : INTEGER ) if gallons = 0 then // Watch for division by zero!! Print(“You have “ + gallons + “gallons of gas”) else if miles/gallons > 25 then print( “Excellent car. Your mpg is “ + miles/gallon) else print( “You must be going broke. Your mpg is “ + miles/gallon + “ cost “ + gallons * price) fi end

slide-24
SLIDE 24

DFT–24

Miles-per-gallon Program – 2

 We want du- and dc-paths  What do you do next?

slide-25
SLIDE 25

DFT–25

Mile-per-gallon Program – Segmented

gasguzzler (miles, gallons, price : INTEGER) A if gallons = 0 then B // Watch for division by zero!! C Print(“You have “ + gallons + “gallons of gas”) else if miles/gallons > 25 D then print( “Excellent car. Your mpg is “ E + miles/gallon) else print( “You must be going broke. Your mpg is “ F + miles/gallon + “ cost “ + gallons * price) fi G end

slide-26
SLIDE 26

DFT–26

Miles-per-gallon Program – 3

 We want du- and dc-paths  What do you do next?

slide-27
SLIDE 27

DFT–27

MPG program graph What do you do now?

slide-28
SLIDE 28

DFT–28

MPG program graph

Def miles, gallons P-use gallons P-use miles, gallons C-use gallons C-use miles, gallons, price C-use miles, gallons Possible C-use miles, gallons But not common practice

slide-29
SLIDE 29

DFT–29

Miles-per-gallon Program – 4

 We want du- and dc-paths  What do you do next?

slide-30
SLIDE 30

DFT–30

Example du-paths

 For each variable in the miles_per_gallon program create

the test paths for the following dataflow path sets

 All-Defs (AD)  All-C-uses (ACU)  All-P-uses (APU)  All-C-uses/Some-P-uses (ACU+P)  All-P-uses/Some-C-uses (APU+C)  All-uses

slide-31
SLIDE 31

DFT–31

MPG – DU-Paths for Miles

 All-Defs

 Each definition of each variable for at least one use of

the definition

 A B D

 All-C-uses

 At least one path of each variable to each c-use of the

definition

 A B D E

A B D F A B D

slide-32
SLIDE 32

DFT–32

MPG – DU-Paths for Miles – 2

 All-P-uses

 At last one path of each variable to each p-use of the

definition

 A B D

 All-C-uses/Some-P-uses

 At least one path of each variable definition to each c-

use of the variable. If any variable definitions are not covered use p-use

 A B D E

A B D F A B D

slide-33
SLIDE 33

DFT–33

MPG – DU-Paths for Miles – 3

 All-P-uses/Some-C-uses

 At least one path of each variable definition to each p-

use of the variable. If any variable definitions are not covered by p-use, then use c-use

 A B D

 All-uses

 At least one path of each variable definition to each p-

use and each c-use of the definition

 A B D

A B D E A B D F

slide-34
SLIDE 34

DFT–34

MPG – DU-Paths for Gallons

All-Defs

Each definition of each variable for at least one use of the definition

 A B

All-C-uses

At least one path of each variable to each c-use of the definition

 A B C A B D E A B D F A B D

slide-35
SLIDE 35

DFT–35

MPG – DU-Paths for Gallons – 2

All-P-uses

 At least one path of each variable definition to each p-

use of the definition

 A B

A B D

 All-C-uses/Some-P-uses

 At least one path of each variable definition to each c-

use of the variable. If any variable definitions are not covered by c-use, then use p-use

 A B C A B D E A B D F A B D

slide-36
SLIDE 36

DFT–36

MPG – DU-Paths for Gallons – 3

 All-P-uses/Some-C-uses

 At least one path of each variable definition to each p-

use of the variable. If any variable definitions are not covered use c-use

 A B

A B D

 All-uses

 At least one path of each variable definition to each p-

use and each c-use of the definition

 A B A B C A B D A B D E A B D F

slide-37
SLIDE 37

DFT–37

MPG – DU-Paths for Price

 All-Defs

 Each definition of each variable for at least one use of

the definition

 A B D F

 All-C-uses

 At least one path of each variable to each c-use of the

definition

 A B D F

slide-38
SLIDE 38

DFT–38

MPG – DU-Paths for Price – 2

 All-P-uses

 At least one path of each variable definition to each p-

use of the definition

 None

 All-C-uses/Some-P-uses

 At least one path of each variable definition to each c-

use of the variable. If any variable definitions are not covered use p-use

 A B D F

slide-39
SLIDE 39

DFT–39

MPG – DU-Paths for Price – 2

 All-P-uses/Some-C-uses

 At least one path of each variable definition to each p-

use of the variable. If any variable definitions are not covered use c-use

 A B D F

 All-uses

 At least one path of each variable definition to each p-

use and each c-use of the definition

 A B D F

slide-40
SLIDE 40

DFT–40

Rapps-Weyuker data flow hierarchy

All-Paths All-DU-Paths All-Uses All-C-uses Some-P-uses All-Defs All-P-uses All-Edges All-Nodes All-P-uses Some-C-uses

slide-41
SLIDE 41

DFT–41

Potential Anomalies – static analysis

Anomalies Explanation ~ d first define ??? du define-use ??? dk define-kill ??? ~ u first use ??? ud use-define ??? uk use-kill ??? ~ k first kill ??? ku kill-use ???

Data flow node combinations for a variable Allowed? – Potential Bug? – Serious defect?

slide-42
SLIDE 42

DFT–42

Potential Anomalies – static analysis – 2 Data flow node combinations for a variable Allowed? – Potential Bug? – Serious defect?

Anomalies Explanation kd kill-define ??? dd define-define ??? uu use-use ??? kk kill-kill ??? d ~ define last ??? u ~ use last ??? k ~ kill last ???

slide-43
SLIDE 43

DFT–43

Potential Anomalies – static analysis – 3

Anomalies Explanation ~ d first define Allowed – normal case du define-use Allowed – normal case dk define-kill Potential bug ~ u first use Potential bug ud use-define Allowed – redefine uk use-kill Allowed – normal case ~ k first kill Serious defect ku kill-use Serious defect

slide-44
SLIDE 44

DFT–44

Potential Anomalies – static analysis – 4

Anomalies Explanation kd kill-define Allowed - redefined dd define-define Potential bug uu use-use Allowed - normal case kk kill-kill Serious defect d ~ define last Potential bug u ~ use last Allowed- normal case k ~ kill last Allowed - normal case

slide-45
SLIDE 45

DFT–45

Data flow guidelines

 When is dataflow analysis good to use?

slide-46
SLIDE 46

DFT–46

Data flow guidelines – 2

 When is dataflow analysis good to use?

 Data flow testing is good for computationally/control

intensive programs

 If P-use of variables are computed, then P-use data

flow testing is good

 Define/use testing provides a rigorous, systematic way

to examine points at which faults may occur.

slide-47
SLIDE 47

DFT–47

Data flow guidelines – 3

 Aliasing of variables causes serious problems!  Working things out by hand for anything but small

methods is hopeless

 Compiler-based tools help in determining coverage values