Download presentation
Presentation is loading. Please wait.
Published byEsmond Charles Modified over 9 years ago
1
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University A Slicing Method for Object-Oriented Programs Using Lightweight Dynamic Information Fumiaki OHATA, Kouya HIROSE, Masato FUJII and Katsuro INOUE Osaka University, JAPAN
2
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 2 Contents Program Slice Dependence-Cache (DC) Slice Object-Oriented Dependence-Cache (OODC) Slice Implementation Evaluation Summary and Future Work
3
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 3 Contents (1/6) Program Slice Dependence-Cache (DC) Slice Object-Oriented Dependence-Cache (OODC) Slice Implementation Evaluation Summary and Future Work
4
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 4 Program Slice (Slice) Subprogram which affects the value of slicing criterion in p s : Statement v : Variable p : Program Applications Program understanding Program debugging …
5
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 5 Application Example [Program Debugging] Slice is effective on fault localization process. The slice for indicates the statements that might cause the unexpected value of max at line 9, so that we have only to focus on them. 1: scanf("%d", &a); 2: scanf("%d", &b); 3: max = a; 4: min = b; 5: if (a > b) { 6: max = b; 7: min = a; 8: } 9: printf("%d", max); 1: scanf("%d", &a); 2: scanf("%d", &b); 3: max = a; 4: min = b; 5: if (a > b) { 6: max = b; 7: min = a; 8: } 9: printf("%d", max); Slice for 1: scanf("%d", &a); 2: scanf("%d", &b); 3: max = a; 4: min = b; 5: if (a > b) { 6: max = b; 7: min = a; 8: } 9: printf("%d", max); 1: scanf("%d", &a); 2: scanf("%d", &b); 3: max = a; 4: min = b; 5: if (a > b) { 6: max = b; 7: min = a; 8: } 9: printf("%d", max); - Incorrect program - 1: scanf("%d", &a); 2: scanf("%d", &b); 3: max = a; 4: min = b; 5: if (a < b) { 6: max = b; 7: min = a; 8: } 9: printf("%d", max); 1: scanf("%d", &a); 2: scanf("%d", &b); 3: max = a; 4: min = b; 5: if (a < b) { 6: max = b; 7: min = a; 8: } 9: printf("%d", max); - Correct program -
6
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 6 Computation 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
7
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 7 Data 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); 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
8
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 8 Control 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); 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);
9
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 9 Static 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); 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
10
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 10 Dynamic Slice Scope : single execution path Target : execution trace Execution : required Dependence analysis DD : dynamic CD : dynamic Advantage Precise analysis results Disadvantage Large analysis cost 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); 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); - input ‘0’ for c - d d
11
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 11 Contents (2/6) Program Slice Dependence-Cache (DC) Slice Object-Oriented Dependence-Cache (OODC) Slice Implementation Evaluation Summary and Future Work
12
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 12 Problems 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.
13
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 13 Dependence-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 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); 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); - input ‘0’ for c -
14
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 14 Dynamic 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.
15
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 15 Cache 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)”.
16
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 16 Comparison with Static Slice & Dynamic Slice ¶ Analysis precision (slice size) : Static slice DC slice Dynamic slice Analysis cost (memory space & computation time) : Static slice < DC slice « Dynamic slice Static sliceDC sliceDynamic slice DD analysisStaticDynamic CD analysisStatic Dynamic TargetSource 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.
17
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 17 Contents (3/6) Program Slice Dependence-Cache (DC) Slice Object-Oriented Dependence-Cache (OODC) Slice Implementation Evaluation Summary and Future Work
18
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 18 Object-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.
19
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 19 Analysis 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.
20
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 20 Dynamic 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.
21
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 21 Contents (4/6) Program Slice Dependence-Cache (DC) Slice Object-Oriented Dependence-Cache (OODC) Slice Implementation Evaluation Summary and Future Work
22
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 22 Implementation DC Slicing System for Java Analysis libraries GUI Developing environment JDK1.3.0_01 JavaCC2.0 Program Java Compiler Java Virtual Machine Slice PDG GUI (Graphical User Interface) Program + Analysis Code [Source] Program + Analysis Code [Bytecode] Preprocessor Slicing Criterion Slicer Analysis Libraries
23
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 23 Analysis 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
24
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 24 Example [Preprocessed Code] 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); 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); 1 : int a = 10; 2 : int b = 20; 3 : int c; 4 : c = a + b; 5 : printf(“%d\n”, c); - Preprocessed code -- Original code - Developed Preprocessor 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.
25
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 25 GUI 3,000 lines Features Program editing Slice computation
26
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 26 Contents (5/6) Program Slice Dependence-Cache (DC) Slice Object-Oriented Dependence-Cache (OODC) Slice Implementation Evaluation Summary and Future Work
27
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 27 Metrics Values (1/2) Sample programs Analysis precision (slice size) [lines] ProgramClassesOverride methodsLinesDescription P1P1 20223CGI program P2P2 37226Paint program Slicing criterion StaticDCDynamic P 1 (1)2615 P 1 (2)8327 P 2 (1)4814 P 2 (2)4512
28
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 28 Metrics Values (2/2) Analysis cost Computation cost (execution time) [ms] T 1 : original code, T 2 : preprocessed code (original code + analysis code) Space cost (memory use on execution) [KByte] ProgramT1T1 T2T2 T 2 /T 1 P1P1 1385824.22 P2P2 N/A ProgramT1T1 T2T2 T 2 /T 1 P1P1 4786451.35 P2P2 8369201.10
29
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 29 Evaluation 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.
30
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 30 Contents (6/6) Program Slice Dependence-Cache (DC) Slice Object-Oriented Dependence-Cache (OODC) Slice Implementation Evaluation Summary and Future Work
31
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 31 Summary 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)
32
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 32 Future 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)
33
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 33 End.
34
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 34 Example [Phase 2] (DD Analysis) 1: #include 2: 3: float absolute(float x) 4: { 5: if(x < 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: } 1: #include 2: 3: float absolute(float x) 4: { 5: if(x < 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: } 16: sum = a + b + c; 17: x = (float) sum / 3.0; Data dependence (DD) relation sum
35
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 35 Example [Phase 2] (CD Analysis) 1: #include 2: 3: float absolute(float x) 4: { 5: if(x < 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: } 1: #include 2: 3: float absolute(float x) 4: { 5: if(x < 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: } 5: if (x < 0) { 6: x = -1 * x; 7: } Control dependence (CD) relation [intra-method] 11: float ave(int a, int b, int c) 12: { 18: x = absolute(x); 20: } 3: float absolute(float x) 4: { 5: if(x < 0) { 6: x = -1 * x; 7: } 8: return x; 9: } Control dependence (CD) relation [inter-method] return call
36
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 36 Example [Phase 3] 28 30 31 11 16 17 18 19 3 5 6 8 27 a b x c sum x x x x x c b a DD CD 1: #include 2: 3: float absolute(float x) 4: { 5: if(x < 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: } 1: #include 2: 3: float absolute(float x) 4: { 5: if(x < 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 Node : statement or conditional expression Edge : dependence relation between two nodes
37
Software Engineering Research Group, Graduate School of Engineering Science, Osaka University 37 Example [Phase 4] (Slice for ) 1: #include 2: 3: float absolute(float x) 4: { 5: if(x < 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: } 1: #include 2: 3: float absolute(float x) 4: { 5: if(x < 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: } 28 30 31 11 16 17 18 19 3 5 6 8 27 a b x c sum x x x x x x c b a We start PDG traversal from the slicing criterion node in reverse order. The corresponding statements to the reachable nodes form the slice. We start PDG traversal from the slicing criterion node in reverse order. The corresponding statements to the reachable nodes form the slice.
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.