Object Flow Analysis

35
Object Flow Analysis – Taking an Object-centric View on Dynamic Analysis Adrian Lienhard 1 , Stéphane Ducasse 2 and Tudor Gîrba 1 1 Software Composition Group, University of Bern, Switzerland 2 LISTIC, University of Savoie, France

Transcript of Object Flow Analysis

Page 1: Object Flow Analysis

Object Flow Analysis –Taking an Object-centric View

on Dynamic Analysis

Adrian Lienhard1, Stéphane Ducasse2 and Tudor Gîrba1

1Software Composition Group, University of Bern, Switzerland2 LISTIC, University of Savoie, France

Page 2: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

A missing aspect of OO dynamic analysis

Typical characterization of OO program execution:

1) message passing

2) object interrelationships

How are objects passed throught the system?

Page 3: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

1) the method execution perspective

MethodNode>>generate

ASTTranslator class>>new

...

...

IRBuilder>>initialize

IRMethod class>>new

...

ASTTranslator>>visitNode:

ASTTranslator>>ir

IRMethod>>compiledMethod

IRTranlator class>new

Page 4: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

1) the method execution perspective

“How is the IRMethod instance passed to MethodNode?”

MethodNode>>generate

ASTTranslator class>>new

...

...

IRBuilder>>initialize

IRMethod class>>new

...

ASTTranslator>>visitNode:

ASTTranslator>>ir

IRMethod>>compiledMethod

IRTranlator class>new

?

Page 5: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

:IRBuilder

:IRMethod

:IRSequence

:MethodNode

:ASTTranslator

2) the object interrelationship perspective

Page 6: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

“How is the IRMethod instance passed to MethodNode?”

:IRBuilder

:IRMethod

:IRSequence

:MethodNode

:ASTTranslator

?

2) the object interrelationship perspective

Page 7: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

:IRBuilder

:IRMethod

:IRSequence

:MethodNode

:ASTTranslator

?

MethodNode>>generate

ASTTranslator class>>new

...

...

IRBuilder>>initialize

IRMethod class>>new

...

ASTTranslator>>visitNode:

ASTTranslator>>ir

IRMethod>>compiledMethod

IRTranlator class>new

? interdependency?

Page 8: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

:IRBuilder

:IRMethod

:IRSequence

:MethodNode

:ASTTranslator

?

MethodNode>>generate

ASTTranslator class>>new

...

...

IRBuilder>>initialize

IRMethod class>>new

...

ASTTranslator>>visitNode:

ASTTranslator>>ir

IRMethod>>compiledMethod

IRTranlator class>new

? interdependency?

Object Flow Analysistrack the transfer of object references

Page 9: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

a) capture all references of an object

b) track the transfer of references

Object Flow Analysis

instantiation

field store

field read

argument

field store

return

return

field store

argument

field read

IRBuilder>>initialize

ir := IRMethod new.

...

IRBuilder>>startNewSequence

newSequence := IRSequence new.

newSequence method: ir.

IRSequence>>method: aMethod

method := aMethod.

ASTTranslator>>ir

^ builder ir.

MethodNode>>generate

ast := ASTTranslator new visitNode: self.

ir := ast ir.

^ ir compiledMethod.

IRMethod>>compiledMethod

^ compiledMethod := IRTranslator new

interpret: self;

compiledMethod.

IRTranslator>>interpret: ir

...

Page 10: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

a) capture all references of an object

b) track the transfer of references

Object Flow Analysis

instantiation

field write

field read

argument

field write

return

return

field write

argument

field read

IRBuilder>>initialize

ir := IRMethod new.

...

IRBuilder>>startNewSequence

newSequence := IRSequence new.

newSequence method: ir.

IRSequence>>method: aMethod

method := aMethod.

ASTTranslator>>ir

^ builder ir.

MethodNode>>generate

ast := ASTTranslator new visitNode: self.

ir := ast ir.

^ ir compiledMethod.

IRMethod>>compiledMethod

^ compiledMethod := IRTranslator new

interpret: self;

compiledMethod.

IRTranslator>>interpret: ir

...

instantiation

field write

field read

argument

field write

return

return

field write

argument

field read

Page 11: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Object Flow Analysis

instantiation

field write

field read

argument

field write

return

return

field write

argument

field read

IRBuilder>>initialize

ir := IRMethod new.

...

IRBuilder>>startNewSequence

newSequence := IRSequence new.

newSequence method: ir.

IRSequence>>method: aMethod

method := aMethod.

ASTTranslator>>ir

^ builder ir.

MethodNode>>generate

ast := ASTTranslator new visitNode: self.

ir := ast ir.

^ ir compiledMethod.

IRMethod>>compiledMethod

^ compiledMethod := IRTranslator new

interpret: self;

compiledMethod.

IRTranslator>>interpret: ir

...

instantiation

field write

field read

argument

field write

return

return

field write

argument

field read

instantiation

field store

field read

argument

field store

return

return

field store

argument

field read

IRBuilder>>initialize

ir := IRMethod new.

...

IRBuilder>>startNewSequence

newSequence := IRSequence new.

newSequence method: ir.

IRSequence>>method: aMethod

method := aMethod.

ASTTranslator>>ir

^ builder ir.

MethodNode>>generate

ast := ASTTranslator new visitNode: self.

ir := ast ir.

^ ir compiledMethod.

IRMethod>>compiledMethod

^ compiledMethod := IRTranslator new

interpret: self;

compiledMethod.

IRTranslator>>interpret: ir

...

instantiation

field write

field read

argument

field write

return

return

field write

argument

field read

2

3

2

3

1

1

“How is the IRMethod instance passed to MethodNode?”

Page 12: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Application

How do classes exchange objects?

Page 13: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Inter-unitflow view

Page 14: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Inter-unitflow view

classescontainedInPackage: ʼAST-Nodesʼ mapTo: ʼASTʼ.

classeshierarchyRootedIn: ʼIRInstructionʼmapTo: ʼIntermediate-Representationʼ

Page 15: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Inter-unitflow view

Page 16: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Chronological propagation

Page 17: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Chronological propagation

Page 18: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Chronological propagation

Page 19: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Spanning flows

Parser (4)

Page 20: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Spanning flows

IRBuilder

Page 21: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

timeline

Page 22: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

objects created in IRBuilder

timeline

Page 23: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

timeline

Page 24: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

objects passedthrough directly

timeline

Page 25: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

timeline

Page 26: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

objects stored in an instance

variable

timeline

Page 27: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

timeline

Page 28: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

objects passed out multiple times

timeline

Page 29: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

timeline

Page 30: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Representing object flowsIRBuilder>>initialize

ir := IRMethod new.

...

IRBuilder>>startNewSequence

newSequence := IRSequence new.

newSequence method: ir.

IRSequence>>method: aMethod

method := aMethod.

ASTTranslator>>ir

^ builder ir.

MethodNode>>generate

ast := ASTTranslator new visitNode: self.

ir := ast ir.

^ ir compiledMethod.

instantiation

field store

field read

argument

field store

return

return

field store

field read

instantiation

field write

field read

argument

field write

return

return

...

Page 31: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Representing object flowsIRBuilder>>initialize

ir := IRMethod new.

...

IRBuilder>>startNewSequence

newSequence := IRSequence new.

newSequence method: ir.

IRSequence>>method: aMethod

method := aMethod.

ASTTranslator>>ir

^ builder ir.

MethodNode>>generate

ast := ASTTranslator new visitNode: self.

ir := ast ir.

^ ir compiledMethod.

instantiation

field store

field read

argument

field store

return

return

field store

field read

instantiation

field write

field read

argument

field write

return

return

...

Alias

*

0..1parent

child

Instance

Page 32: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Representing object flowsIRBuilder>>initialize

ir := IRMethod new.

...

IRBuilder>>startNewSequence

newSequence := IRSequence new.

newSequence method: ir.

IRSequence>>method: aMethod

method := aMethod.

ASTTranslator>>ir

^ builder ir.

MethodNode>>generate

ast := ASTTranslator new visitNode: self.

ir := ast ir.

^ ir compiledMethod.

instantiation

field store

field read

argument

field store

return

return

field store

field read

instantiation

field write

field read

argument

field write

return

return

...

Alias

*

0..1parent

child

Instance

ArgumentAlias FieldWriteAliasReturnAlias...

Page 33: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

Representing object flowsIRBuilder>>initialize

ir := IRMethod new.

...

IRBuilder>>startNewSequence

newSequence := IRSequence new.

newSequence method: ir.

IRSequence>>method: aMethod

method := aMethod.

ASTTranslator>>ir

^ builder ir.

MethodNode>>generate

ast := ASTTranslator new visitNode: self.

ir := ast ir.

^ ir compiledMethod.

instantiation

field store

field read

argument

field store

return

return

field store

field read

instantiation

field write

field read

argument

field write

return

return

...

Alias

*

0..1parent

child

Instance

ArgumentAlias FieldWriteAliasReturnAlias...

0..1 *

sender

Method

Class

Attribute

Activationreceiver

creator

Page 34: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

SummaryIRBuilder>>initialize

ir := IRMethod new.

...

IRBuilder>>startNewSequence

newSequence := IRSequence new.

newSequence method: ir.

IRSequence>>method: aMethod

method := aMethod.

ASTTranslator>>ir

^ builder ir.

MethodNode>>generate

ast := ASTTranslator new visitNode: self.

ir := ast ir.

^ ir compiledMethod.

instantiation

field store

field read

argument

field store

return

return

field store

field read

instantiation

field write

field read

argument

field write

return

return

...

Alias

*

0..1parent

child

Instance

ArgumentAlias FieldWriteAliasReturnAlias...

0..1 *

sender

Method

Class

Attribute

Activationreceiver

creator

Page 35: Object Flow Analysis

Object Flow Analysis — Taking an Object-centric View on Dynamic Analysis : : Adrian Lienhard : : [email protected]

SummaryIRBuilder>>initialize

ir := IRMethod new.

...

IRBuilder>>startNewSequence

newSequence := IRSequence new.

newSequence method: ir.

IRSequence>>method: aMethod

method := aMethod.

ASTTranslator>>ir

^ builder ir.

MethodNode>>generate

ast := ASTTranslator new visitNode: self.

ir := ast ir.

^ ir compiledMethod.

instantiation

field store

field read

argument

field store

return

return

field store

field read

instantiation

field write

field read

argument

field write

return

return

...

Alias

*

0..1parent

child

Instance

ArgumentAlias FieldWriteAliasReturnAlias...

0..1 *

sender

Method

Class

Attribute

Activationreceiver

creator

Questions?