dependency finder 1 tutorial for dependency finder by jean tessier, march 30, 2004

34
1 Dependency Finder Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

Upload: audrey-scott

Post on 18-Dec-2015

238 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

1

Dependency Finder

Tutorialfor Dependency Finder

by Jean Tessier,March 30, 2004

Page 2: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

14

Dependency Finder

Transitive Closure

callersdependents

dependencies

Page 15: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

15

Dependency Finder

Transitive Closure0 1012 2+ +

Page 16: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

16

Dependency Finder

Package-to-Package Example

Complete package-level graph

Default configuration

Page 17: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

17

Dependency Finder

Package-to-Package Example

Don’t list dependencies on anything with java

Excluding /java/

Page 18: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

19

Dependency Finder

Package-to-Package Example

Don’t list dependencies on java.*

Excluding /^java/

Page 20: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

20

Dependency Finder

Package-to-Package Example

Only list dependencies with com.jean*

Including /^com.jean/

Page 21: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

21

Dependency Finder

Package-to-Package Example

Only list with com.jean* and test.*

Including /^com.jean/, /^test/

Page 22: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

22

Dependency Finder

Package-to-Package Example

Don’t list packages in java.*

Excluding /^java/

Page 23: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

23

Dependency Finder

Package-to-Package Example

Only list test.* and com.jean*

Including /com.jean/, /^test/

Page 24: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

24

Dependency Finder

Feature-to-Feature Example

Calls to *Node.Accept() methods

Including /Node.Accept/

Page 25: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

25

Dependency Finder

Feature-to-Feature Example

Calls to *Node.Accept() methods, less output

Including /Node.Accept\(/

Page 26: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

26

Dependency Finder

Feature-to-Feature Example

Calls to constructors of Node

Including /(Node)\.\1\(/

Page 27: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

27

Dependency Finder

Feature-to-Feature Example

Calls to constructors of classes ending in Node

Including /(\w*Node)\.\1\(/

Page 28: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

28

Dependency Finder

Feature-to-Feature Example

Calls to methods of NodeFactory

Including /NodeFactory/

Page 29: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

29

Dependency Finder

Transitive Closure Example

Shows Accept*() methods

Page 30: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

30

Dependency Finder

Transitive Closure Example

Direct callers of Accept*()

Page 31: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

31

Dependency Finder

Transitive Closure Example

Second degree callers of Accept*()

Page 32: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

32

Dependency Finder

Transitive Closure Example

Everything reachable from Accept*()

Page 33: Dependency Finder 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

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 1 Tutorial for Dependency Finder by Jean Tessier, March 30, 2004

34

Dependency Finder

The End

depfind.sourceforge.net