Title: A%20Slicing%20Method%20for%20Object-Oriented%20Programs%20Using%20Lightweight%20Dynamic%20Information
1A Slicing Method forObject-Oriented
ProgramsUsingLightweight Dynamic Information
- Fumiaki OHATA, Kouya HIROSE,
- Masato FUJII and Katsuro INOUE
- Osaka University, JAPAN
2Contents
- Program Slice
- Dependence-Cache (DC) Slice
- Object-Oriented Dependence-Cache (OODC) Slice
- Implementation
- Evaluation
- Summary and Future Work
3Contents (1/6)
- Program Slice
- Dependence-Cache (DC) Slice
- Object-Oriented Dependence-Cache (OODC) Slice
- Implementation
- Evaluation
- Summary and Future Work
4Program Slice (Slice)
- Subprogram which affects the value of slicing
criterion lts, vgt in p - s Statement
- v Variable
- p Program
- Applications
- Program understanding
- Program debugging
5Application Example Program Debugging
- Slice is effective on fault localization process.
- The slice for lt9, maxgt indicates the statements
that might cause the unexpected value of max at
line 9, so that we have only to focus on them.
6Computation Process
- Phase 1 Defined and referred variables
extraction - Phase 2 Dependence analysis
- Data dependence (DD) analysis
- Control dependence (CD) analysis
- Phase 3 Program dependence graph (PDG)
construction - Phase 4 Slice extraction using PDG traversal
7Data Dependence (DD) Analysis
- Extract DD relations between two statements
- DD relation represents
- data-flow
- through variable.
1 a 3 2 b 2 3 scanf("d", c)
4 if ( c 0 ) 5 d a 6 else 7 d
a 1 8 e a b 9 printf("d",
d) 10 printf("d", e)
d
d
8Control Dependence (CD) Analysis
- Extract CD relations between two statements
- CD relation represents
- control-flow
- from conditional expression
- to conditional predicate
- or
- from method invocation
- to method definition.
1 a 3 2 b 2 3 scanf("d", c)
4 if ( c 0 ) 5 d a 6 else 7 d
a 1 8 e a b 9 printf("d",
d) 10 printf("d", e)
9Static Slice
- Scope all possible execution paths
- Target source code
- Execution not required
- Dependence analysis
- DD static
- CD static
- Advantage
- Small analysis cost
- Disadvantage
- Imprecise analysis results
1 a 3 2 b 2 3 scanf("d", c)
4 if ( c 0 ) 5 d a 6 else 7 d
a 1 8 e a b 9 printf("d",
d) 10 printf("d", e)
d
d
Slice for lt9, dgt
10Dynamic Slice
- Scope single execution path
- Target execution trace
- Execution required
- Dependence analysis
- DD dynamic
- CD dynamic
- Advantage
- Precise analysis results
- Disadvantage
- Large analysis cost
- input 0 for c -
1 a 3 2 b 2 3 scanf("d", c)
4 if ( c 0 ) 5 d a 6 else 7 d
a 1 8 e a b 9 printf("d",
d) 10 printf("d", e)
d
d
11Contents (2/6)
- Program Slice
- Dependence-Cache (DC) Slice
- Object-Oriented Dependence-Cache (OODC) Slice
- Implementation
- Evaluation
- Summary and Future Work
12Problems
- Static slice has two problems,
- array indexes problem it is difficult for us to
determine the values of array indices, and - pointer alias problem it is difficult for us to
determine the destination of pointer variables, - so that extracted DD relations are imprecise.
- Dynamic slice can resolve these problems
however, it requires large analysis cost.
13Dependence-Cache (DC) Slice
- Scope single execution path
- Target source code
- Execution required
- Dependence analysis
- DD dynamic
- CD static
- Advantage
- More precise analysis
- results than static slice
- Smaller analysis cost than dynamic slice
- input 0 for c -
1 a 3 2 b 2 3 scanf("d", c)
4 if ( c 0 ) 5 d a 6 else 7 d
a 1 8 e a b 9 printf("d",
d) 10 printf("d", e)
14Dynamic DD Analysis
- DD relation DD(s, t, v) exists when the following
conditions are all satisfied - statement s defines variable v, and
- statement t refers v, and
- at least one execution path from s to t without
re-defining v exists. - Dynamic analysis
- On program execution, we have only to trace the
most-recently defined statement for each variable
using cache.
15Cache
- Cache(v) statement that defined variable v
most-recently. - Operations for caches
- Before program execution,
- For each variable v, Cache(v) ? ?.
- On program execution,
- For each statement s,
- - when v is defined, Cache(v) ? s.
- - when v is referred, we extract DD relation
DD(Cache(v), s, v).
16Comparison withStatic Slice Dynamic Slice
- Analysis precision (slice size)
- Static slice ? DC slice ? Dynamic slice
- Analysis cost (memory space computation time)
- Static slice lt DC slice Dynamic slice
Static slice DC slice Dynamic slice
DD analysis Static Dynamic Dynamic
CD analysis Static Static Dynamic
Target Source code Source code Execution trace
Ashida, Y., Ohata, F. and Inoue, K. Slicing
Methods Using Static and Dynamic Information,
Proceedings of the 6th Asia Pacific Software
Engineering Conference, 344-350, 1999.
17Contents (3/6)
- Program Slice
- Dependence-Cache (DC) Slice
- Object-Oriented Dependence-Cache (OODC) Slice
- Implementation
- Evaluation
- Summary and Future Work
18Object-Oriented DC (OODC) Slice
- Extended DC slice for Object-Oriented (OO)
programs - OO languages have concepts which procedural
languages do not have. - Class, Object (Instance)
- Inheritance, Class hierarchy, Method overriding
- Dynamic binding based on the reference-type of
the object, an appropriate overriding method is
selected and invoked.
19Analysis Policy
- Character 1 object is a collection of
attributes and methods that operate them. - Character 2 dynamic binding feature exists
however, static analysis can not handle it
sufficiently. - Policy 1 when a variable is created, the
corresponding cache is also created. - Policy 2 we use dynamic CD analysis for method
invocation.
20Dynamic CD analysis for Method Invocation
- CD relation CD(s, t) about method invocation
exists when the following conditions are all
satisfied - statement t is a method definition, and
- statement s calls t.
- Dynamic analysis
- On program execution, we have only to watch the
execution trace from a method invocation to a
method definition.
21Contents (4/6)
- Program Slice
- Dependence-Cache (DC) Slice
- Object-Oriented Dependence-Cache (OODC) Slice
- Implementation
- Evaluation
- Summary and Future Work
22Implementation
- DC Slicing System for Java
- Analysis libraries
- GUI
- Developing environment
- JDK1.3.0_01
- JavaCC2.0
23Analysis Libraries
- 10,000 lines
- Analysis method preprocessor style
- Preprocessor loads target program p, and generate
program p that contains p and the code to
analyze p dynamically. - Easily development
- Easily optimization using JIT or JavaVM
24Example Preprocessed Code
- Preprocessed code -
- Original code -
- For each statement s,
- when variable v is referred,
- we insert ref(v, s) before s.
- when v is defined,
- we insert def(v, s) before s.
0 initPDG() 1 def(a, 1) 1 int a
10 2 def(b, 2) 2 int b 20 3 def(c,
3) 3 int c 4 ref(a, 4) 4 ref(b, 4)
4 def(c, 4) 4 c a b 5 ref(c, 5) 5
printf(d\n, c)
1 int a 10 2 int b 20 3 int c 4
c a b 5 printf(d\n, c)
Developed Preprocessor
25GUI
- 3,000 lines
- Features
- Program editing
- Slice computation
26Contents (5/6)
- Program Slice
- Dependence-Cache (DC) Slice
- Object-Oriented Dependence-Cache (OODC) Slice
- Implementation
- Evaluation
- Summary and Future Work
27Metrics Values (1/2)
- Sample programs
- Analysis precision (slice size) lines
Program Classes Override methods Lines Description
P1 2 0 223 CGI program
P2 3 7 226 Paint program
Slicing criterion Static DC Dynamic
P1(1) 26 15 15
P1(2) 83 27 27
P2(1) 48 14 14
P2(2) 45 12 12
28Metrics Values (2/2)
- Analysis cost
- Computation cost (execution time) ms
- T1 original code, T2 preprocessed code
(original code analysis code) - Space cost (memory use on execution) KByte
Program T1 T2 T2/T1
P1 138 582 4.22
P2 N/A N/A N/A
Program T1 T2 T2/T1
P1 478 645 1.35
P2 836 920 1.10
29Evaluation
- Analysis precision
- Slice size 30-60 of Static slice
- Static slice ? DC slice ? Dynamic slice
- Analysis cost
- Additional cost for dynamic DD analysis and
dynamic CD analysis for method invocation is not
so large. - - Computation cost ?4.2
- - Space cost ?1.2
Ashida, Y., Ohata, F. and Inoue, K. Slicing
Methods Using Static and Dynamic Information,
Proceedings of the 6th Asia Pacific Software
Engineering Conference, 344-350, 1999.
30Contents (6/6)
- Program Slice
- Dependence-Cache (DC) Slice
- Object-Oriented Dependence-Cache (OODC) Slice
- Implementation
- Evaluation
- Summary and Future Work
31Summary
- Classification of slicing methods
- OODC slice
- An intermediate slice between static slice and
dynamic slice for OO programs - Dynamic DD analysis
- Dynamic CD analysis for method invocation
- Static CD analysis (except method invocation)
- Implementation (DC Slicing System for Java)
- Evaluation (Experimentation using sample Java
programs)
32Future Work
- Application of dynamic CD analysis to other
dynamically determined elements in Java - Exception
- Thread
- Experimental comparison with other slicing
methods on analysis cost - Application of OODC slice to large programs
- JavaVM-based (interpreter style) DC Slicing
System for Java (now developing)
33End.
34Example Phase 2 (DD Analysis)
1 include ltstdio.hgt 2 3 float
absolute(float x) 4 5 if(x lt 0) 6
x -1 x 7 8 return x 9
10 11 float ave(int a, int b, int c) 12
13 int sum 14 float x 15 16
sum a b c 17 x (float) sum /
3.0 18 x absolute(x) 19 return
x 20 21 22 int main(void) 23 24
int a, b, c 25 float x 26 27
printf("Input a b c ?") 28 scanf("d d
d", a, b, c) 29 30 x ave(a, b,
c) 31 printf("Ave 9.3f\n", x) 32
return 0 33
35Example Phase 2 (CD Analysis)
1 include ltstdio.hgt 2 3 float
absolute(float x) 4 5 if(x lt 0) 6
x -1 x 7 8 return x 9
10 11 float ave(int a, int b, int c) 12
13 int sum 14 float x 15 16
sum a b c 17 x (float) sum /
3.0 18 x absolute(x) 19 return
x 20 21 22 int main(void) 23 24
int a, b, c 25 float x 26 27
printf("Input a b c ?") 28 scanf("d d
d", a, b, c) 29 30 x ave(a, b,
c) 31 printf("Ave 9.3f\n", x) 32
return 0 33
36Example Phase 3
1 include ltstdio.hgt 2 3 float
absolute(float x) 4 5 if(x lt 0) 6
x -1 x 7 8 return x 9
10 11 float ave(int a, int b, int c) 12
13 int sum 14 float x 15 16
sum a b c 17 x (float) sum /
3.0 18 x absolute(x) 19 return
x 20 21 22 int main(void) 23 24
int a, b, c 25 float x 26 27
printf("Input a b c ?") 28 scanf("d d
d", a, b, c) 29 30 x ave(a, b,
c) 31 printf("Ave 9.3f\n", x) 32
return 0 33
- Node statement or conditional expression
- Edge dependence relation between two nodes
37Example Phase 4 (Slice for lt30, xgt)
1 include ltstdio.hgt 2 3 float
absolute(float x) 4 5 if(x lt 0) 6
x -1 x 7 8 return x 9
10 11 float ave(int a, int b, int c) 12
13 int sum 14 float x 15 16
sum a b c 17 x (float) sum /
3.0 18 x absolute(x) 19 return
x 20 21 22 int main(void) 23 24
int a, b, c 25 float x 26 27
printf("Input a b c ?") 28 scanf("d d
d", a, b, c) 29 30 x ave(a, b,
c) 31 printf("Ave 9.3f\n", x) 32
return 0 33
- We start PDG traversal from the slicing criterion
node in reverse order. - The corresponding statements to the reachable
nodes form the slice.