Top Banner
Replaying and Isolating Failing Multi-Object Interactions Martin Burger • Andreas Zeller Saarland University
85

Replaying and Isolating Failing Multi-Object Interactions

Jul 30, 2015

Download

Technology

Martin Burger
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Replaying and Isolating Failing Multi-Object Interactions

Replaying and Isolating

Failing Multi-Object

Interactions

Martin Burger • Andreas Zeller

Saarland University

Page 2: Replaying and Isolating Failing Multi-Object Interactions
Page 3: Replaying and Isolating Failing Multi-Object Interactions

• e-mail client written in Java

• 100,200 LOC

• ~ 1,600 Java classes

• 17 developers

• Actively developed from February 2001 to August 2007

Page 4: Replaying and Isolating Failing Multi-Object Interactions
Page 5: Replaying and Isolating Failing Multi-Object Interactions
Page 6: Replaying and Isolating Failing Multi-Object Interactions

Debugging 101

1. reproduce the original failure

- manually by using GUI

- test driver that reproduce faulty behavior

Page 7: Replaying and Isolating Failing Multi-Object Interactions

Debugging 101

1. reproduce the original failure

- manually by using GUI

- test driver that reproduce faulty behavior

2. fix the actual defect

- focus on relevant behavior

- simplify faulty behavior

Page 8: Replaying and Isolating Failing Multi-Object Interactions

component

Faulty Component Behavior

set of classesapplication

Page 9: Replaying and Isolating Failing Multi-Object Interactions

component

Faulty Component Behavior

set of classes

interaction- method calls

- field accesses

- exception flow

- ...

application

crosses border

Page 10: Replaying and Isolating Failing Multi-Object Interactions

component

Faulty Component Behavior

set of classes

interaction- method calls

- field accesses

- exception flow

- ...failure

application

crosses border

Page 11: Replaying and Isolating Failing Multi-Object Interactions

component

Reproducing

Page 12: Replaying and Isolating Failing Multi-Object Interactions

component

Reproducing

1. interaction

Page 13: Replaying and Isolating Failing Multi-Object Interactions

component

Reproducing

1. interaction

2. … component

computes in

the same way

Page 14: Replaying and Isolating Failing Multi-Object Interactions

component

Reproducing

1. interaction

2. … component

computes in

the same way

3. … failure

reproduced

Page 15: Replaying and Isolating Failing Multi-Object Interactions

Simplifying

Page 16: Replaying and Isolating Failing Multi-Object Interactions

Simplifying

many

interactions

Page 17: Replaying and Isolating Failing Multi-Object Interactions

Simplifying

replaying causes

original failure

many

interactions

Page 18: Replaying and Isolating Failing Multi-Object Interactions

Simplifying

minimal set of

interactions

replaying causes

original failure

Page 19: Replaying and Isolating Failing Multi-Object Interactions

Simplifying

minimal set of

interactions

replaying causes

original failure

delta debugging

binary search

Page 20: Replaying and Isolating Failing Multi-Object Interactions

Implementation: JINSI

• debugging tool to reproduce and simplify

failing components in Java programs

• reproduce

capture and replay of interactions at

component level

• simplify

delta debugging minimizes interactions

Isolating Relevant Component Interactions with JINSI.

Orso + Joshi + Burger + Zeller

WODA 2006

Page 21: Replaying and Isolating Failing Multi-Object Interactions

Original Import Run

address book

importer (GUI)

Columba

Page 22: Replaying and Isolating Failing Multi-Object Interactions

Capture

address book

importer (GUI)

Columba

JINSI

instrumentation

Page 23: Replaying and Isolating Failing Multi-Object Interactions

Capture

address book

importer (GUI)

Columba

JINSI

instrumentationevent log

“incoming call”

- method name

- arguments

written to

Page 24: Replaying and Isolating Failing Multi-Object Interactions

Replay

address book

importer (GUI)

Columba

Page 25: Replaying and Isolating Failing Multi-Object Interactions

Replay

address book

importer (GUI)

JINSI

replaces Columba

Page 26: Replaying and Isolating Failing Multi-Object Interactions

Replay

address book

importer (GUI)

JINSI

replaces Columba

event logread from

Page 27: Replaying and Isolating Failing Multi-Object Interactions

Replay

address book

importer (GUI)

JINSI

replaces Columba

event log

original failure

reproduced

read from

Page 28: Replaying and Isolating Failing Multi-Object Interactions

Delta Debugging

address book

importer (GUI)

JINSI

uses delta debuggingevent log

Page 29: Replaying and Isolating Failing Multi-Object Interactions

Delta Debugging

address book

importer (GUI)

JINSI

uses delta debuggingevent log

AddressbookImporter()

Page 30: Replaying and Isolating Failing Multi-Object Interactions

Delta Debugging

address book

importer (GUI)

JINSI

uses delta debuggingevent log

AddressbookImporter()

init(file)

Page 31: Replaying and Isolating Failing Multi-Object Interactions

Delta Debugging

address book

importer (GUI)

JINSI

uses delta debuggingevent log

AddressbookImporter()

init(file)

wizardFinished()

Page 32: Replaying and Isolating Failing Multi-Object Interactions

Delta Debugging

address book

importer (GUI)

JINSI

uses delta debuggingevent log

AddressbookImporter()

init(file)

wizardFinished()

Problem

- already minimal

- too high level

Solution

- much finer grained

Page 33: Replaying and Isolating Failing Multi-Object Interactions

black box

(JINSI 2006)

Inside the Component

coarse grained

view

Page 34: Replaying and Isolating Failing Multi-Object Interactions

Object Interactions

object

finer grained

view

Page 35: Replaying and Isolating Failing Multi-Object Interactions

Object Interactions

object

finer grained

view

Page 36: Replaying and Isolating Failing Multi-Object Interactions

Object Interactions

object

finer grained

view

Page 37: Replaying and Isolating Failing Multi-Object Interactions

Object Interactions

object

finer grained

view

Page 38: Replaying and Isolating Failing Multi-Object Interactions

Object Interactions

event log

captured

by JINSI

captured

by JINSI

border crossing

interactions are

captured by

JINSI 2006

Page 39: Replaying and Isolating Failing Multi-Object Interactions

Object Interactions

all object

interactions are

captured by

JINSI 2008

Page 40: Replaying and Isolating Failing Multi-Object Interactions

Object Trace

event log

object

tracefor all objects

all object

interactions are

captured by

JINSI 2008

Page 41: Replaying and Isolating Failing Multi-Object Interactions

Importing the AddressesObject Trace

addressbook.

model

(19 classes)

ContactModel()

setSortString()

setFormattedName()

setNickName()

setFamilyName()

49,849 more

JINSI

•••

Page 42: Replaying and Isolating Failing Multi-Object Interactions

Importing the AddressesObject Trace

addressbook.

model

(19 classes)

ContactModel()

setSortString()

setFormattedName()

setNickName()

setFamilyName()

49,849 more

JINSI

•••

calling

delta debugging:

> 2 hours

Page 43: Replaying and Isolating Failing Multi-Object Interactions

Object Slice

• dynamic backward slice: subset that may

have influenced a specific object

• focuses on objects, not on statements

• objects are a natural abstraction

Page 44: Replaying and Isolating Failing Multi-Object Interactions

Object Interactions

Page 45: Replaying and Isolating Failing Multi-Object Interactions

Object Interactions

suspicious

object

Page 46: Replaying and Isolating Failing Multi-Object Interactions

Object Slice

suspicious

object

at first, include

suspicious object

Page 47: Replaying and Isolating Failing Multi-Object Interactions

Object Slice

include

interacting

objects

Page 48: Replaying and Isolating Failing Multi-Object Interactions

Object Slice

include objects

that interact with

those already in

slice

Page 49: Replaying and Isolating Failing Multi-Object Interactions

Object Slice

stop when

reached largest

connected graph

Page 50: Replaying and Isolating Failing Multi-Object Interactions

Object Slice

simplified set of

failure-inducing

interactions within

the component

Page 51: Replaying and Isolating Failing Multi-Object Interactions

Object Slice

simplified set of

failure-inducing

interactions within

the component

Page 52: Replaying and Isolating Failing Multi-Object Interactions

Importing AddressesObject Slice

addressbook.

model

(19 classes)

ContactModel()

setGivenName()

setFamilyName()

setSortString()

getGivenName()

JINSI

getSortString()

getPreferredEmail()

Page 53: Replaying and Isolating Failing Multi-Object Interactions

Delta Debugging

apply delta

debugging to

object slice

Page 54: Replaying and Isolating Failing Multi-Object Interactions

Delta Debugging

original

failure

minimized set

of failure-inducing

interactions within

the component

Page 55: Replaying and Isolating Failing Multi-Object Interactions

Importing AddressesDelta Debugging

addressbook.

model

(19 classes)

JINSI

ContactModel()

getPreferredEmail()

Page 56: Replaying and Isolating Failing Multi-Object Interactions

Slicing + Delta DebuggingIncoming Interactions

49,855

original run

delta debugging 2

> 2 hours

minimized

Page 57: Replaying and Isolating Failing Multi-Object Interactions

Slicing + Delta DebuggingIncoming Interactions

7object slice49,855

original run simplified

delta debugging 2

> 2 hours

minimized

Page 58: Replaying and Isolating Failing Multi-Object Interactions

Slicing + Delta DebuggingIncoming Interactions

7 2object slice delta debugging49,855

original run simplifiedminimized

delta debugging 2

> 2 hours

minimized

Page 59: Replaying and Isolating Failing Multi-Object Interactions

Slicing + Delta DebuggingIncoming Interactions

7 2object slice delta debugging49,855

original run simplifiedminimized

delta debugging 2

> 2 hours

< 1 min

minimized

Page 60: Replaying and Isolating Failing Multi-Object Interactions

Slicing + Delta DebuggingIncoming Interactions

7 2object slice delta debugging49,855

original run simplifiedminimized

delta debugging 2

> 2 hours

< 1 min< 1 min

minimized

Page 61: Replaying and Isolating Failing Multi-Object Interactions

Method from Minimal Trace public String getPreferredEmail() {

Iterator it = getEmailIterator();

// get first item

IEmailModel model = (IEmailModel) it.next();

// backwards compatiblity -> its not possible

// anymore to create a model without email

if (model == null)

return null;

return model.getAddress();

}

Page 62: Replaying and Isolating Failing Multi-Object Interactions

Method from Minimal Trace public String getPreferredEmail() {

Iterator it = getEmailIterator();

// get first item

IEmailModel model = (IEmailModel) it.next();

// backwards compatiblity -> its not possible

// anymore to create a model without email

if (model == null)

return null;

return model.getAddress();

}

Page 63: Replaying and Isolating Failing Multi-Object Interactions

Method from Minimal Trace public String getPreferredEmail() {

Iterator it = getEmailIterator();

// get first item

IEmailModel model = (IEmailModel) it.next();

// backwards compatiblity -> its not possible

// anymore to create a model without email

if (model == null)

return null;

return model.getAddress();

}

IEmailModel model = null;

if (it.hasNext())

model = (IEmailModel) it.next();

Page 64: Replaying and Isolating Failing Multi-Object Interactions

Related Work

• Test Factoring David Saff et al.

Selective Capture-Replay Shrinivas Joshi et al.

JINSI is based on these methods

• Efficient Test Case Minimization Andreas Leitner et al.

method calls in random tests; static slicing

• ReCrash Shay Artzi et al.

• ReCrash focuses on stack trace

• JINSI focuses on object interactions

Page 65: Replaying and Isolating Failing Multi-Object Interactions

Future Work

application

failing

but not defective

component

Page 66: Replaying and Isolating Failing Multi-Object Interactions

Future Work

application

failing

but not defective

component

Page 67: Replaying and Isolating Failing Multi-Object Interactions

Future Work

application

when observing

application:

too many

interactions

failing

but not defective

component

Page 68: Replaying and Isolating Failing Multi-Object Interactions

Future Work

application

failing

but not defective

component

Page 69: Replaying and Isolating Failing Multi-Object Interactions

Future Work

application

failing

but not defective

component

Page 70: Replaying and Isolating Failing Multi-Object Interactions

Future Work

Cause-Effect-Chain

final state

e.g. contact model

Page 71: Replaying and Isolating Failing Multi-Object Interactions

Future Work

Cause-Effect-Chain

final state

e.g. contact model

intermediate states

Page 72: Replaying and Isolating Failing Multi-Object Interactions

Future Work

Cause-Effect-Chain

final state

e.g. contact model

input

e.g. keystrokes

in GUI

intermediate states

Page 73: Replaying and Isolating Failing Multi-Object Interactions

Future Work

Capture Component Level

application

event log

JINSI captures

component

interaction

component

Page 74: Replaying and Isolating Failing Multi-Object Interactions

event log

JINSI replays

component

interaction...

componentcomponent

Future Work

Replay Component Level

Page 75: Replaying and Isolating Failing Multi-Object Interactions

event log

JINSI replays

component

interaction...

component

Future Work

Replay Component Level

Page 76: Replaying and Isolating Failing Multi-Object Interactions

event log

object

tracefor all objects

JINSI replays

component

interaction...

... and captures

object interactions

component

Future Work

Replay Component + Capture Objects

Page 77: Replaying and Isolating Failing Multi-Object Interactions

Challenges

• capture constructors

- super call

- constructor call as argument

• who is calling

- caller registry to get caller of method

Page 78: Replaying and Isolating Failing Multi-Object Interactions

Debugging 101

1. reproduce the original failure

- manually by using GUI

- test driver that reproduce faulty behavior

2. fix the actual defect

- focus on relevant behavior

- simplify faulty behavior

Page 79: Replaying and Isolating Failing Multi-Object Interactions

Debugging 101

1. reproduce the original failure

- manually by using GUI

- test driver that reproduce faulty behavior

2. fix the actual defect

- focus on relevant behavior

- simplify faulty behavior

!

Page 80: Replaying and Isolating Failing Multi-Object Interactions

Debugging 101

1. reproduce the original failure

- manually by using GUI

- test driver that reproduce faulty behavior

2. fix the actual defect

- focus on relevant behavior

- simplify faulty behavior

!

!

Page 81: Replaying and Isolating Failing Multi-Object Interactions

Contributions

Page 82: Replaying and Isolating Failing Multi-Object Interactions

Contributions

Page 83: Replaying and Isolating Failing Multi-Object Interactions

Contributions

Page 84: Replaying and Isolating Failing Multi-Object Interactions

Contributions

Page 85: Replaying and Isolating Failing Multi-Object Interactions

Contributions