static control-flow analysis for reverse engineering of uml sequence diagrams atanas (nasko) rountev...
TRANSCRIPT
Static Control-Flow Analysis for Reverse Static Control-Flow Analysis for Reverse Engineering of UML Sequence DiagramsEngineering of UML Sequence Diagrams
Atanas (Nasko) RountevOhio State University
with Olga Volgin and Miriam Reddoch
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
22
Example of a UML Sequence DiagramExample of a UML Sequence Diagram
start:X
m1()
p:A
m2()
n:A
m3()
create()
m4()opt
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
33
UML Sequence DiagramsUML Sequence Diagrams
Popular UML artifacts for modeling of object interactions
Design-time sequence diagrams Reverse-engineered sequence diagrams
Based on existing code Iterative development; design recovery for
software maintenance; software testing Implemented in some commercial UML
tools Together ControlCenter (Borland) EclipseUML (Omondo)
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
44
Reverse-Engineering AnalysesReverse-Engineering Analyses
Dynamic analysis: tracks a set of representative run-time executions Several research tools
Static analysis: examines only the code Commercial tools (deficiencies) Some research work (not comprehensive)
REDRED tool for Java: PRESTOPRESTO group at OSU URL: presto.cse.ohio-state.edu/red Call chain analysis; control-flow analysis;
object naming analysis; visualization and navigation; test coverage measurements
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
55
Representation of Intraprocedural Flow of ControlRepresentation of Intraprocedural Flow of Control
Given: the methods whose bodies will be used to construct the diagram
How should we represent the intraintraprocedural flow of control inside these bodies?
Solution: algorithm for mapping a method’s CFG to UML 2.0 interaction fragments Any reducible exception-free CFG Precise mapping: preserves all call
sequences Subsequent diagram transformations
Lossless vs. lossy Visualization and exploration
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
66
UML 2.0 Interaction FragmentsUML 2.0 Interaction Fragments Opt, alt, loop, break; added generalized break
sd example
s:String:MergeCollation patterns:Vector
example(e)
LOOP L
BREAK L
e:PatternEntry
ALT
s = getChars()
i=charAt(0)
i=indexOf(e)
OPT e1= elementAt(i)
fixEntry(e1)
removeElementAt(i)
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
77
Analysis StagesAnalysis Stages
CFG
Phase I: Preprocessing
Phase II: Fragment Construction
Phase III: Transformations
Data Structure for Fragments
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
88
Phase I: PreprocessingPhase I: Preprocessing
Post-dominance tree Node n2 post-dominates n1 if all paths from
n1 to exit go through n2
Immediate post-dominator; parent in the tree
Analyze branch nodes What is the merge point for all branches?
Analyze loops Nesting relationships What is the merge point for all loop exits?
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
99
12
3
11976
2
81054
1
3: s != null
2: s = e.getChars()
1: i = -1
4: e = s.charAt(0) 5: i = patterns.indexOf(e)
7: statusArray[i] !=0
6: i>=0
8: e1 = patterns.elementAt(i)
11: fixEntry(e1)
9: e1 != null
12: exit
10: patterns.removeElementAt(i)
FT
T
F
T
F
T
F
Post-dominance TreePost-dominance Tree
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
1010
3: s != null
2: s = e.getChars()
1: i = -1
4: e = s.charAt(0) 5: i = patterns.indexOf(e)
7: statusArray[i] !=0
6: i>=0
8: e1 = patterns.elementAt(i)
11: fixEntry(e1)
9: e1 != null
12: exit
10: patterns.removeElementAt(i)
FT
T
F
T
F
T
F
12
3
11976
2
81054
1
Branch Nodes and Branch SuccessorsBranch Nodes and Branch Successors Branch successor: node where the outgoing
paths for a branch node merge
the branch successorof 3 is 6
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
1111
Loops and Loop SuccessorsLoops and Loop Successors
the loop successorof L is 12
3: s != null
2: s = e.getChars()
1: i = -1
4: e = s.charAt(0) 5: i = patterns.indexOf(e)
7: statusArray[i] !=0
6: i>=0
8: e1 = patterns.elementAt(i)
11: fixEntry(e1)
9: e1 != null
12: exit
10: patterns.removeElementAt(i)
FT
T
F
T
F
T
F
12
3
11976
2
81054
1
Reducible CFG: contains only natural loops Loop successor: merge point of all paths exiting the loop
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
1212
Branch/Loop Successors Inside Loop LBranch/Loop Successors Inside Loop L Consider only edges inside L Create a post-dominance tree
for L and use it for: branch successors for nodes in L loop successors for
loops nested in L
3: s != null
2: s = e.getChars()
1: i = -1
4: e = s.charAt(0) 5: i = patterns.indexOf(e)
7: statusArray[i] !=0
6: i>=0
8: e1 = patterns.elementAt(i)
11: fixEntry(e1)
9: e1 != null
12: exit
10: patterns.removeElementAt(i)
FT
T
F
T
F
T
F
9
6
8
10
7
the branch successorof 7 is 10
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
1313
3 : s != null
2: s = e.getChars()
1: i = -1
4 : e = s.charAt(0) 5: i = patterns.indexOf(e)
7: statusArray[i] !=0
6: i>=0
8 : e1 = patterns.elementAt(i)
11 : fixEntry(e1)
9: e1 != null
12: exit
10: patterns.removeElementAt(i)
FT
T
F
T
F
T
F
PatternEntry:getChars()
TOP
OPT
ALT
cond: statusArray[i] !=0
cond: s != null
Vector:elementAt(i)
String:charAt(0)
Vector:indexOf(e)
LOOP
cond: e1 != nullBREAK
MergeCollation:fixEntry(e1)
breaks_from: LOOP1
1
1
1
2
1
BREAK 1breaks_from: LOOPcond: i<0
cond: i>= 0
Vector:removeElementAt(i)
Phase II: Fragment ConstructionPhase II: Fragment Construction
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
1414
Various IssuesVarious Issues
UML additions Multi-level break fragments Multiple method exits
Opt-like fragments: return fragments Algorithm uses control dependencies
Exceptions (Java) “throw e”: similar to method exit - throw
fragment Ignore catches and implicit exceptions
Node replication: the same CFG node may have to produce multiple identical elements e.g. due to short-circuit evaluation
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
1515
Average Running Time per Method [milliseconds]Average Running Time per Method [milliseconds]
0
5
10
15
20
25
30
35
40
45
50
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
1616
Methods Requiring Return/Throw FragmentsMethods Requiring Return/Throw Fragments
0%
10%
20%
30%
40%
50%
60%
70%
80%
90%
100%
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
1717
Methods Requiring Multi-level Break FragmentsMethods Requiring Multi-level Break Fragments
0%
2%
4%
6%
8%
10%
12%
14%
16%
18%
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
1818
Methods Requiring Node ReplicationMethods Requiring Node Replication
0%
5%
10%
15%
20%
25%
30%
35%
40%
45%
Nasko Rountev - PASTE'05Nasko Rountev - PASTE'05
1919
Summary and Future WorkSummary and Future Work
General and fast algorithm Creates detailed and precise representation
Subsequent simplifications Lossless: e.g. merge a fragment with the
surrounding fragment [OSU-CISRC-3/04-TR12][OSU-CISRC-3/04-TR12] Lossy: e.g. give up on multi-level breaks
Interactive visualization [VISSOFT’05][VISSOFT’05] Collapse and un-collapse fragments; slice
the diagram w.r.t. a fragment of interest Re-implement in Eclipse and make public,
together with the other analyses in REDRED