dependence-cache slicing: a slicing method using lightweight dynamic information
DESCRIPTION
Dependence-Cache Slicing: A Slicing Method Using Lightweight Dynamic Information. Tomonori Takada, Fumiaki Ohata, Katsuro Inoue Osaka University. Background of Research. Software Systems are becoming large and complex Debugging, testing, and maintaining costs are increasing - PowerPoint PPT PresentationTRANSCRIPT
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Dependence-Cache Slicing: A Slicing Method Using Lightweight Dynamic
Information
Tomonori Takada, Fumiaki Ohata, Katsuro Inoue
Osaka University
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Background of Research
Software Systems are becoming large and complex
Debugging, testing, and maintaining costs are increasing
To reduce development costs, techniques for improving efficiency of such activities are essential
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Comprehension
Comprehending large source programs is difficult
If we could select specific portions in the source programs and we can concentrate our attentions only to those portions, the performance of the activities would increase
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
A technique of extracting all program statements affecting the value of a variable
Slicing: Extraction
Slice: Collection of extracted statements
Developers can concentrate their attentions to the extracted statements
Program Slicing
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Kusumoto, S., Nishimatsu, A., Nishie, K. and Inoue, K. : ``Experimental Evaluation of Program Slicing for Fault Localization'', Empirical Software Engineering, Vol.7, No.1, pp. 49-76 (2002).
To evaluate the validity of slice
With two independent groups
Measured bug detection timewith slice: 122 minutes
without slice: 165 minutes
Experiment Using Program Slice
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Static Slicing
Program is analysed statically (without execution)
All possible input data sets are assumed.
Extract all possible statements affecting the value of the focused statement.
Program Dependence Graph (PDG) is used.
Static slices are extracted by traversing edges in PDG.
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Program Dependence Graph
PDG shows dependence relations between statements in a source program.
nodes statements
conditional predicates
edges control dependence edges
data dependence edges
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Dependences
Control Dependence (CD)Statement s1 has a control dependence to statement s2 if the execution of s2 is decided by s1’s result.
Data Dependence (DD) Def-Use relation.
s1: if a=0 thens2: b :=1;
s1 s2
s3: a := 1;s4: writeln(a);
s3 s4a
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Example of PDGprogram test(input, output);var a : array [0..9] of integer;var b, i, c : integer;begin writeln("input array : "); for i:=0 to 9 do a[i] := i * i; writeln("input number : "); readln(b); if b < 10 then c := a[b] else c := -1;
writeln(c)end.
writeln(“inp..
a[i] := i * i
readln(b)
writeln(“inp..
c := a[b]
a[]b
i
if b<10
c := -1
writeln(c)
c
c
for i:=0 to 9
CD DD
b
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Example of static sliceprogram test(input, output);var a : array [0..9] of integer;var b, i, c : integer;begin writeln("input array : "); for i:=0 to 9 do a[i] := i * i; writeln("input number : "); readln(b); if b < 10 then c := a[b] else c := -1;
writeln(c)end.
writeln(“inp..
a[i] := i * i
readln(b)
writeln(“inp..
c := a[b]
a[]b
i
if b<10
c := -1
writeln(c)
c
c
for i:=0 to 9
b
Slicing Criteria writeln(c)
writeln(c)
for i:=0 to 9 do a[i] := i * i;
readln(b); if b < 10 then c := a[b] else c := -1;
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Dynamic Slicing
Program is analysed dynamically (executed with a particular input data)
Extract statements actually affecting the value of a slicing criteria
Execution trace is recorded
Dynamic Dependence Graph(DDG) is constructed from the exection trace.
Dynamic slices are extracted by traversing edges in DDG.
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
writeln("input array : ");for i:=0 to 9 doa[0] := 0 *0;for i:=0 to 9 doa[1] := 1 *1;for i:=0 to 9 doa[2] :=2 *2;for i:=0 to 9 doa[3] := 3 *3;for i:=0 to 9 doa[4] := 4 *4;for i:=0 to 9 doa[5] := 5 *5;for i:=0 to 9 doa[6] := 6 *6;for i:=0 to 9 doa[7] := 7 *7;for i:=0 to 9 doa[8] := 8 *8;for i:=0 to 9 doa[9] := 9 *9;writeln("input number : ");readln(b);if b < 10 thenc := a[b]writeln(c)
Example of dynamic sliceprogram test(input, output);var a : array [0..9] of integer;var b, i, c : integer;begin writeln("input array : "); for i:=0 to 9 do a[i] := i * i; writeln("input number : "); readln(b); if b < 10 then c := a[b] else c := -1;
writeln(c)end.
for i:=0 to 9 do a[i] := i * i;
readln(b); if b < 10 then c := a[b]
readln(b) writeln(“inp..
c := a[5]
a[]b
i
if b<10
writeln(c)
c
b
b
a[5]
for i:=0 to 9
writeln(“inp..
a[0] := 0*0
for a[1] := 1 * 1
for a[2] := 2 * 2
for a[3] := 3 * 3
for a[4] := 4 * 4
fora[5] := 5 * 5
fora[6] := 6 * 6
fora[7] := 7 * 7
for a[8] := 8 * 8for
a[9] := 9 * 9
inputb=5
writeln(c)
writeln(c)
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Static and Dynamic Slicing
Analysis cost: static < dynamicRecording execution trace is exhaustive
Determining data dependence and cotrol dependence on execution trace is expensive
Slice size: static > dynamicStatic slicing considers all possible flows
Dynamic slicing only considers one trace
Efficient and Effective SlicingEfficient and Effective Slicing
unify
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Unified Slicing MethodsFocusing on Dynamic Control-Flow Information
Hybird Slicing (Gupta, 1997)Collect all traces between break points and procedure callsNeed to specify break points / Trace can be huge
Call-Mark Slicing (Nishimatsu, 1999; our group)Dynamically set call-marks (flags that shows a caller statement is executed or not) Eliminate non-executed statements from PDG by using call-mark and execution dependence relations.
Focusing on Dynamic Data-Flow Information Reduced DDG Method (Agrawal, 1990)
The same sub-structure of DDG is shared with one structure.Run-time overhead is serious.
Dependence-Cache Slicing
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Dependence-Cache Slicing
Dependence-Cache Slicing (DC slicing) : A slicing method focused on dynamic data-flow information
Control Dependence Easily obtained by syntax analysis
Data Dependence static analysis is difficult
Computation Step1: Pre-Execution Analysis
Statically compute control dependence relations and
construct PDG having control dependence edges and
nodes
Computation Step2: Execution-time Analysis
Collect dynamic data dependence relations by using
Caches and add data dependence edges to PDG
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
s1: a[0]:=0;s2: a[1]:=3;s3: readln(b);s4: a[b]:=2;s5: c:=a[0]+4;s6: writeln(c);
a[0] a[1] b c
s1s1 s2s1 s2 s3
Data Dependence Collection
Input: b=0
b
a[0]
c
Value of cache
s4 s2 s3s4 s2 s3 s5
Each cache holds the statement where the variable is defined
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Example of DC sliceprogram test(input, output);var a : array [0..9] of integer;var b, i, c : integer;begin writeln("input array : "); for i:=0 to 9 do a[i] := i * i; writeln("input number : "); readln(b); if b < 10 then c := a[b] else c := -1;
writeln(c)end.
writeln(“inp..
a[i] := i * i
readln(b)
writeln(“inp..
c := a[b]
if b<10
c := -1
writeln(c)
for i:=0 to 9
inputb=5
a[5]
b
i
c
b
writeln(c)writeln(c)
for i:=0 to 9 do a[i] := i * i;
readln(b); if b < 10 then c := a[b]
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
ExperimentMeasured some metric values on our slicing system “Osaka Slicing System (OSS)”
OSS had already implemented features to extract static, call-mark and dynamic slices.
Add function to compute DC slice
Three sample PASCAL programsP1: calendar program (85 lines)
P2 : wholesaler program (387 lines)
P3 : wholesaler program2 (871 lines)
Slicing criterion were randomly chosen
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Slice Size
21
182 187
17
162 166
15 16
61
5 5 80
20
40
60
80
100
120
140
160
180
200
P1 P2 P3
staticcall-markdependence-cachedynamic
lines
static > call-mark >> DC > dynamic
DC and dynamic slicing can analyze actual dependence.P2, P3 use array variables.
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Pre-Execution Analysis Time
11
213
710
14
215
698
5 19 48N/AN/AN/A
0
100
200
300
400
500
600
700
800
P1 P2 P3
static
call-mark
dependence-cache
dynamic
time(ms)
static call-mark ≒ > DC
DC slicing analyses only control dependence relations.
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
47 43
4700
47 43
4731
51 45174
4540
206464
4834
0
1000
2000
3000
4000
5000
6000
P1 P2 P3
staticcall-markdependence-cachedynamic
Execution time
time(ms)
Static CM DC ≒ ≒ << Dynamic
DC slicing can be computed with small overhead increase.
Execution time for static slicing shows the execution time for “original” program.
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Slice Computation Time
0.4
1.93.0
0.6
1.8
3.0
0.3 0.71.2
76 101 24969
0
2
4
6
8
10
P1 P2 P3
static
call-mark
dependence-cachedynamic
time(ms)
DC < static call-mark ≒ << dynamic
DC slicing uses PDG that has less DD edges than that of static slicing.
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
DiscussionAnalysis cost: static DC << dynamic
Collect dynamic data dependence relatios by simple method
Slice size: static DC dynamiconly “actual” data dependence relations are added to PDG
Reasonable slice results with reasonable analysis timePromising approach to get effective program localization
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Limit of DC slicing
DC slice’s accuracy is less than dynamic slice’s.s1: a[0] := 0;s2: a[1] := 1;s3: i:= 0;s4: while i<2 do begins5: b := a[i];s6: i := i + 1 end;s7: writeln(b);
DC slicing analyse dependence relations between statements, not between execution trace.
For this program, DC slicing can’t distinct between first and second execution of s5. (Dynamic slicing can distinct it.)
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
ApplicationsWe have applied DC slicing to several language environments.
Pascal (Interpreter) OSS mentioned before.
Java source code (Preprocessor) Translate program to collect dynamic data dependence relations.
Java byte code (Compiler, VM) Virtual Machine collects dynamic data dependence Relations Most of Java libraries are provided by byte code
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Technology and Science, Osaka University
Conclusions and Future Works
Proposed dependence-cache slicingPractical and efficient approach to get reasonable slices
Confirmed validity through an experiment
Applicable to various environments
Future Works
Evaluation through user testing
Apply to other language environments