dependency finder tutorial
TRANSCRIPT
![Page 1: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/1.jpg)
1
Dependency Finder
Tutorialfor Dependency Finder
by Jean Tessier,March 30, 2004
![Page 2: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/2.jpg)
2
Dependency Finder
What are dependencies?
A B
C1 C2
P1 P2
UML:
outbound inboundsourcedependent
targetdependable
Functioning of A requires the presence of B.
![Page 3: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/3.jpg)
3
Dependency Finder
Why Should I Care?
• Improve compilation time– Smaller parts are easier on the compiler
• Verify encapsulation– Validate design assumptions
• Indicator of complexity
• Assist with maintenance– Impact of change
![Page 4: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/4.jpg)
4
Dependency Finder
Where Do They Come From?
• Class-to-Class– Class inheritance via extends keyword
– Interface realization via implements keyword
– From fields and methods of the class
P1
C1
F1
P2
C2
F2
![Page 5: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/5.jpg)
5
Dependency Finder
Where Do They Come From?
• Feature-to-Class– Field type
– Method parameter type
– Exception types in throws clause
– Local variable type
P1
C1
F1
P2
C2
F2
![Page 6: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/6.jpg)
6
Dependency Finder
Where Do They Come From?
• Feature-to-Feature– Field access
– Method call
– Method cannot depend on itself, as in recursive calls
P1
C1
F1
P2
C2
F2
![Page 7: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/7.jpg)
7
Dependency Finder
No Dependency on Self
• Does not add information• Compile time
– Class is unit of compilation
• Runtime– Class is unit of loading
• Maintenance– Already editing class or
feature
P
C
F
![Page 8: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/8.jpg)
8
Dependency Finder
Explicit Dependencies
• Source code– static final constants
– Needed for compilation
• Compiled code– Fully qualified names
– No 3rd party JARs
– Needed for runtime
P1
C1
F1
P2
C2
F2
![Page 9: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/9.jpg)
9
Dependency Finder
Implicit Dependencies
• Derived from explicit
• Minimize– Reduce space
– Augment time
• Maximize– Augment space
– Reduce time
P1
C1
F1
P2
C2
F2
![Page 10: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/10.jpg)
10
Dependency Finder
Implicit Dependencies
C1
F1
P
C2
F2 F1
P
F2
C
P
C
F
classes of a package
features of a class
self
![Page 11: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/11.jpg)
11
Dependency Finder
Package Instability (from Robert C. Martin)
• High Ce or low Ca means hard to change• If Ca and Ce are 0, then I = 0• Depend on packages with lower I than you
Ca Number of classes outside the package that depend upon classes inside the package.
Ce Number of classes outside the package that classes inside the package depend upon.
Ca + Ce
CeI =
![Page 12: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/12.jpg)
12
Dependency Finder
A vs I Graph (from Robert C. Martin)
• Depend on abstract packages
• Concrete packages should have no dependents
uselessness
pain
A + I – 1 = 0
0 1
1
A
I
![Page 13: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/13.jpg)
13
Dependency Finder
Are Dependencies Transitive?
• It depends!
• Case-by-case, not automatic
• Is part of B that A depends on impacted by changes in C?
A B C
?? ?
![Page 14: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/14.jpg)
14
Dependency Finder
Transitive Closure
callersdependents
dependencies
![Page 15: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/15.jpg)
15
Dependency Finder
Transitive Closure0 1012 2+ +
![Page 16: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/16.jpg)
16
Dependency Finder
Package-to-Package Example
Complete package-level graph
Default configuration
![Page 17: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/17.jpg)
17
Dependency Finder
Package-to-Package Example
Don’t list dependencies on anything with java
Excluding /java/
![Page 18: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/18.jpg)
18
Dependency Finder
Why Do I See java <-- jeantessier?
P1
F1
P2
F2
P1
F1
P1
C1
F1
P2
F2original
copy
ScopeFactory
FilterFactory
C2
C1 C2
C1
P2
F2
C2
![Page 19: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/19.jpg)
19
Dependency Finder
Package-to-Package Example
Don’t list dependencies on java.*
Excluding /^java/
![Page 20: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/20.jpg)
20
Dependency Finder
Package-to-Package Example
Only list dependencies with com.jean*
Including /^com.jean/
![Page 21: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/21.jpg)
21
Dependency Finder
Package-to-Package Example
Only list with com.jean* and test.*
Including /^com.jean/, /^test/
![Page 22: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/22.jpg)
22
Dependency Finder
Package-to-Package Example
Don’t list packages in java.*
Excluding /^java/
![Page 23: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/23.jpg)
23
Dependency Finder
Package-to-Package Example
Only list test.* and com.jean*
Including /com.jean/, /^test/
![Page 24: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/24.jpg)
24
Dependency Finder
Feature-to-Feature Example
Calls to *Node.Accept() methods
Including /Node.Accept/
![Page 25: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/25.jpg)
25
Dependency Finder
Feature-to-Feature Example
Calls to *Node.Accept() methods, less output
Including /Node.Accept\(/
![Page 26: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/26.jpg)
26
Dependency Finder
Feature-to-Feature Example
Calls to constructors of Node
Including /(Node)\.\1\(/
![Page 27: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/27.jpg)
27
Dependency Finder
Feature-to-Feature Example
Calls to constructors of classes ending in Node
Including /(\w*Node)\.\1\(/
![Page 28: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/28.jpg)
28
Dependency Finder
Feature-to-Feature Example
Calls to methods of NodeFactory
Including /NodeFactory/
![Page 29: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/29.jpg)
29
Dependency Finder
Transitive Closure Example
Shows Accept*() methods
![Page 30: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/30.jpg)
30
Dependency Finder
Transitive Closure Example
Direct callers of Accept*()
![Page 31: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/31.jpg)
31
Dependency Finder
Transitive Closure Example
Second degree callers of Accept*()
![Page 32: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/32.jpg)
32
Dependency Finder
Transitive Closure Example
Everything reachable from Accept*()
![Page 33: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/33.jpg)
33
Dependency Finder
Perl Regular Expressions
• [A-Z] Capitals• \w Alphanumeric [A-Za-z0-9_]• \W Non-alpha [^A-Za-z0-9_]• \w+ At least one alphanumeric• \s Space, including tab and eol• \s* Zero or more white space• \. ‘.’ as opposed to any character
![Page 34: Dependency Finder Tutorial](https://reader034.vdocument.in/reader034/viewer/2022042602/55a1fb9e1a28abd13d8b45c9/html5/thumbnails/34.jpg)
34
Dependency Finder
The End
depfind.sourceforge.net