21
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

Object Flow Analysis

  • Upload
    esug

  • View
    294

  • Download
    1

Embed Size (px)

DESCRIPTION

Object Flow Analysis -- Taking an Object-centricView on Dynamic Analysis. Adrian Lienhard. ESUG 2007, Lugano

Citation preview

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?

Object Flow Analysistrack the transfer of object references

Page 8: 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 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 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 10: 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 11: 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 12: 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 13: Object Flow Analysis

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

Chronological propagation

Page 14: Object Flow Analysis

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

Spanning flows

Parser (4)

Page 15: Object Flow Analysis

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

Spanning flows

IRBuilder

Page 16: Object Flow Analysis

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

objects stored in an instance

variable

objects passed out multiple times

objects passedthrough directly

objects created in IRBuilder

timeline

Page 17: Object Flow Analysis

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

Representing object flows

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.

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 18: Object Flow Analysis

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

Representing object flows

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.

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 19: Object Flow Analysis

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

Representing object flows

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.

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 20: Object Flow Analysis

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

Representing object flows

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.

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 21: 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?