Top Banner
Program Slicing
31

Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

Dec 16, 2015

Download

Documents

Asher Miller
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

Program Slicing

Page 2: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

2

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Outline

• What is slicing?• Why use slicing?• Static slicing of programs

• Dynamic Program SlicingData dependence detection

Control dependence detection

Backward Slicing Algorithm

Page 3: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

3

CS

510 S o f t w

a r e E n

g i n e e r i n

g

What is a slice?

S: …. = f (v)

Slice of v at S is the set of statements involved in computing v’s value at S. [Mark Weiser, 1982]

Void main ( ) { int I=0; int sum=0; while (I<N) { sum = sum + I; I = I + 1; } printf (“sum=%d\n”,sum); printf(“I=%d\n”,I);

1

2

3

4

5

6

7

Page 4: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

4

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Why Slice?

• Debugging: that’s why slicing was introduced.

• Data Flow Testing: Reduce cost of regression testing after modifications to the program.

• Code Reuse: Extracting modules for reuse.

• Partial Execution replay: Replay only part of the execution that is relevant to a failure.

• Information flow: prevent confidential information from being sent out to untrusted environment.

Page 5: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

5

CS

510 S o f t w

a r e E n

g i n e e r i n

g

How to Compute Static Slices?

Dependence GraphData dependencesControl dependences

X is data dependent on Y if (1)there is a variable v that is

defined at Y and used at X and

(2) there exists a path of nonzero length from Y to X along which v is not re-defined.

I=0

sum=0

I < N

sum=sum+I

I=I+1

print (sum);

print(I)

F

T

1

2

3

4

5

6

7

Page 6: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

6

CS

510 S o f t w

a r e E n

g i n e e r i n

g

How to Compute Static Slices?

Defn: Y is control-dependent on X iff X directly determines whether Y executes.

Defn: X is strictly post-dominated by Y if all paths from X to EXIT pass through Y and X!=Y.

Y is Control Dependent upon X– X is not strictly post-dominated by

Y

– there exists a path from X to Y s.t. every node in the path other than X and Y is post-dominated by Y

I=0

sum=0

I < N

sum=sum+I

I=I+1

print (sum);

print(I)

F

T

1

2

3

4

5

6

7

Page 7: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

7

CS

510 S o f t w

a r e E n

g i n e e r i n

g

How to Compute Static Slices?

Given a slicing criterion, i.e., the starting point, a slice is computed as the set of reachable nodes in the dependence graph

Slice(I@7) = {1,3,5,7}

Slice(6) = ?

I=0

sum=0

I < N

sum=sum+I

I=I+1

print (sum);

print(I)

F

T

1

2

3

4

5

6

7

Page 8: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

8

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Static Slices are Imprecise

• Don’t have dynamic control flow information

• Use of Pointers – static alias analysis is very imprecise

1: if (P)2: x=f(…);3: else4: x=g(…);5. …=x;

1: int a,b,c;2: a=…; 3: b=…;4: p=&a;5: …=p[i];

Page 9: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

9

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Dynamic Slicing

• Korel and Laski, 1988The set of executed statement instances that did contribute to the value of a variable.

• Dynamic slicing makes use of all information about a particular execution of a program.

• Dynamic slices are computed by constructing a dynamic program dependence graph (DPDG).

Each node is an executed statement.An edge is present between two nodes if there exists a dynamic data/control dependence.A dynamic slice criterion is a triple <Var, Execution Point, Input>The set of statements reachable in the DPDG from a criterion constitute the slice.

• Dynamic slices are smaller, more precise, more helpful to the user during debugging

Page 10: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

10

CS

510 S o f t w

a r e E n

g i n e e r i n

g

An Example

Trace (N=0)11: I=021: sum=031: I<N61: print(sum)71: print(I);

Slice(I@7)={1,3,5,7}

DSlice(I@71,,N=0) = {1,7}

I=0

sum=0

I < N

sum=sum+I

I=I+1

print (sum);

print(I)

F

T

1

2

3

4

5

6

7

Page 11: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

11

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Another Example

Trace (N=1)11: I=021: sum=031: I<N41: sum=sum+I51: I=I+132: I<N61: print(sum)71: print(I);

Slice(I@7) = {1,3,5,7}

DSlice(I@71,,N=1)={1,3,5,7}

I=0

sum=0

I < N

sum=sum+I

I=I+1

print (sum);

print(I)

F

T

1

2

3

4

5

6

7

Page 12: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

12

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Effectiveness of Dynamic Slicing

• Sometimes, static and dynamic get the same answers.

• Sometimes, static slice size explodes• On average, static slices can be many times larger

Program Static / Dynamic (25 slices)

AVG MIN MAX

126.gcc 5448 3.5 27820

099.go 1258 2 4246

134.perl 66 1 1598

130.li 149 1 1436

008.espresso

49 1 1359

Page 13: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

13

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Offline Algorithms – Data Dep

Instrument the program to generate the control flow and memory access trace

Void main ( ) { int I=0; int sum=0; while (I<N) { sum=add(sum,I); I=add(I,1); } printf (“sum=%d\n”,sum); printf(“I=%d\n”,I);

12345678

Page 14: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

14

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Offline Algorithms – Data Dep

Instrument the program to generate the control flow and memory access trace

Trace (N=1)1 W &I2 W &sum3 R &I &N4 R &I &sum W &sum5 R &I W &I3 R &I &N7 R &sum8 R &I

Void main ( ) { int I=0; trace(“1 W ”+&I); int sum=0; trace(“2 W ”+&sum); while (trace(“3 R ”+&I+&N),I<N) { sum=add(sum,I); trace(“4 R ”+&I+&sum+ “ W ” +&sum); I=add(I,1); } printf (“sum=%d\n”,sum); printf(“I=%d\n”,I);

1234

5678

Page 15: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

15

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Offline Algorithms – Data Dep

• Instrument the program to generate the control flow and memory access trace

For a “R, addr”, traverse backward to find the closest “W,addr”, introduce a DD edge, traverse further to find the corresponding writes of the reads on the identified write.

Trace (N=0)1 W &I2 W &sum3 R &I &N4 R &I &sum W &sum5 R &I W &I3 R &I &N7 R &sum8 R &I“8, R &I” -> “5, W &I”-> “5,

R &I”->”1, R&I”

Page 16: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

16

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Offline Algorithms – Control Dep

• Let CD(i) is the set of static control dependence ancestors of i.

• Traverse backward, find the closest x, s.t. x is in CD(i), introduce a dynamic CD from i to x.

Page 17: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

17

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Efficiently Computing Dynamic Dependences

• The previous mentioned graph construction algorithm implies offline traversals of long memory reference and control flow trace

• Efficient online algorithmsOnline data dependence detection.

Online control dependence detection.

Page 18: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

18

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Efficient Data Dependence Detection

Basic idea i: x=… => hashmap[x]= i j: … =x… => dependence detected j hashmap[x], which is

ji

Trace (N=1)11: I=021: sum=031: I<N41: sum=sum+I51: I=I+132: I<N61: print(sum)71: print(I);

HashMapI: 11

I: 11 sum: 21

31 hashmap[I]=11

I: 11 sum: 41 41 hashmap[sum]=21

I: 51 sum: 41 51 hashmap[I]=11

32 hashmap[I]=51

61 hashmap[sum]=41

71 hashmap[I]=51

Data Dep.

Page 19: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

19

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Efficient Dynamic Control Dependence (DCD) Detection

• Def: yj DCD on xi iff there exists a path from xi to Exit that does not pass yj and no such paths exits for nodes in the executed path from xi to yj.

• Region: executed statements between a predicate instance and its immediate post-dominator form a region.

Page 20: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

20

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Region Examples

1. for(i=0; i<N, i++) {2. if(i%2 == 0) 3. p = &a[i];4. foo(p);5. }6. a = a+1;

11. for(i=0; i<N, i++) {21. if(i%2 == 0) 31. p = &a[i];41. foo(p);…12. for(i=0; i<N, i++) {22. if(i%2 == 0) 42. foo(p);…13. for(i=0; i<N, i++) {61. a = a+1;

Page 21: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

21

CS

510 S o f t w

a r e E n

g i n e e r i n

g

DCD Properties

• Def: yj DCD on xi iff there exists a path from xi to Exit that does not pass yj and no such paths exist for nodes in the executed path from xi to yj.

• Region: executed statements between a predicate instance and its immediate post-dominator form a region.

• Property One: A statement instance xi DCD on the predicate instance leading xi ‘s enclosing region.

Page 22: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

22

CS

510 S o f t w

a r e E n

g i n e e r i n

g

DCD Properties

• Def: yj DCD on xi iff there exists a path from xi to Exit that does not pass yj and no such paths exist for nodes in the executed path from xi to yj.

• Region: executed statements between a predicate instance and its immediate post-dominator form a region.

• Property Two: regions are disjoint or nested, never overlap.

Page 23: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

23

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Efficient DCD Detection

• Observation: regions have the LIFO characteristic. Otherwise, some regions will overlap.

• Implication: the sequence of nested active regions for the current execution point can be maintained by a stack, called control dependence stack (CDS).

A region is nested in the region right below it in the stack.The enclosing region for the current execution point is always the top entry in the stack, therefore the execution point is control dependent on the predicate that leads the top region.An entry is pushed onto CDS if a branching point (predicates, switch statements, etc.) executes.The current entry is popped if the immediate post-dominator of the branching point executes, denoting the end of the current region.

Page 24: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

24

CS

510 S o f t w

a r e E n

g i n e e r i n

g

An Example1.2.3.4.5.6.7.8.9.10.11.12.13.14.

if ( p1 || p2 ) { s1; s2;}if (p3) { while (p4) { s3; } } else { if (p5) { return; }}s4;

1. p1

2. s1

1. p2

3. s2

5. p3

6. p4 10. p5

7. s3

14. s4

EXIT

control flow edgeBranching ( )Merging ( )

p1@11, 551, EXIT

p2@11, 561, 14

62, 14

Page 25: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

25

CS

510 S o f t w

a r e E n

g i n e e r i n

g

AlgorithmPredicate (xi){ CDS.push(<xi, IPD(x) >);}

Merge (tj){ while (CDS.top( ).second==t) CDS.pop( );}GetCurrentCD ( ){ return CDS.top( ).first;}

Page 26: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

26

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Forward Dynamic Slice Computation

• The approaches we have discussed so far are backwards.

Dependence graphs are traversed backwards from a slicing criterion.The space complexity is O (execution length).

• Forward computationA slice is represented as a set of statements that are involved in computing the value of the slicing criterion. A slice is always maintained for a variable.

Page 27: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

27

CS

510 S o f t w

a r e E n

g i n e e r i n

g

The Algorithm

• An assignment statement execution is formulated as

si: x= pj? op (src1, src2, …);

That is to say, the statement execution instance si is control

dependent on pj and operates on variables of src1, src2, etc.

• Upon the execution of si, the slice of x is updated

toSlice(x) = {s} U Slice(src1) U Slice(src2) U … U Slice(pj)

The slice of variable x is the union of the current statement, the slices of all variables that are used and the slice of the predicate instance that si is control dependent on. Because they are all

contributing to the value of x.

Slices are stored in a hashmap with variables being the keys.

Page 28: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

28

CS

510 S o f t w

a r e E n

g i n e e r i n

g

The Algorithm (continued)

• A predicate is formulated assi: pj? op (src1, src2, …)

That is to say, the predicate itself is control dependent on another predicate instance pj and the branch outcome is computed from variables of src1, src2, etc.

• Upon the execution of si

A triple is pushed to CDS with the format of <si, IPD(s), s U Slice (src1) U Slice (src2) U… U Slice(pj) >

The entry is popped at its immediate post dominator

• Slice(pj) can be retrieved from the top element of CDS.

Page 29: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

29

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Example

1: a=12: b=23: c=a+b4: if a<b then5: d=b*c6: ……..

11: a=1 Slice(a) = {1}

21: b=2 Slice(b) = {2}

31: c=a+b Slice(c) = {1,2,3}

41: if a<b then push(<41,6, {1,2,4}>)

51: d=b*c Slice(d) = {1,2,3,4,5}

Statements Executed Dynamic Slices

41, 6, {1,2,4}

… …

Page 30: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

30

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Interprocedural Control Dependence

• Annotate CDS entries with calling context.

12cc2, 4

11cc1, 4

13cc3, 4

Page 31: Program Slicing. 2 CS510 S o f t w a r e E n g i n e e r i n g Outline What is slicing? Why use slicing? Static slicing of programs Dynamic Program Slicing.

31

CS

510 S o f t w

a r e E n

g i n e e r i n

g

Wrap Up

• We have introduced the concept of slicing and dynamic slicing

• Offline dynamic slicing algorithms based on backwards traversal over traces is not efficient

• Online algorithms that detect data and control dependences are discussed and used for forward computation of dynamic slice.