29
Tommaso Dal Sasso Andrea Mocci Michele Lanza University of Lugano Misery Loves Company CrowdStacking Traces to Aid Problem Detection SANER 2015

Misery Loves Company

Embed Size (px)

Citation preview

Tommaso Dal SassoAndrea MocciMichele Lanza University of Lugano

Misery Loves CompanyCrowdStacking Traces to Aid Problem DetectionSANER 2015

Development

Stack Traces

Stack TracesSmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluateSelectionAndDo: SmalltalkEditor>>evaluateSelection PluggableTextMorph>>doIt PluggableTextMorph>>handleEdit: TextMorphForEditView>>handleEdit: PluggableTextMorph>>handleEdit: PluggableTextMorph>>doIt SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: BlockClosure>>cull: BlockClosure>>cull:cull: BlockClosure>>cull:cull:cull: KMCategoryBinding>>completeMatch:buffer: KMKeymap>>notifyCompleteMatchTo:buffer: Array>>do: KMKeymap>>notifyCompleteMatchTo:buffer: KMKeymap>>onMatchWith:notify:andDo: KMCategory>>onMatchWith:notify:andDo: Set>>do:

Stack TracesSmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluateSelectionAndDo: SmalltalkEditor>>evaluateSelection PluggableTextMorph>>doIt PluggableTextMorph>>handleEdit: TextMorphForEditView>>handleEdit: PluggableTextMorph>>handleEdit: PluggableTextMorph>>doIt SmalltalkEditor class>>buildSmalltalkEditorKeymappingsOn: BlockClosure>>cull: BlockClosure>>cull:cull: BlockClosure>>cull:cull:cull: KMCategoryBinding>>completeMatch:buffer: KMKeymap>>notifyCompleteMatchTo:buffer: Array>>do: KMKeymap>>notifyCompleteMatchTo:buffer: KMKeymap>>onMatchWith:notify:andDo: KMCategory>>onMatchWith:notify:andDo: Set>>do:

Can we use this data?

Stack TracesSmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

SmallInteger>>/ UndefinedObject>>DoIt OpalCompiler>>evaluate BlockClosure>>ensure: EpCurrentEvent>>valueIn:put:during: EpCurrentEvent>>value:during: BlockClosure>>triggering: OpalCompiler>>evaluate SmalltalkEditor>>evaluat

Development Data

ShoreLine Reporter

A reporting tool for Pharo

Collected Data

Date

Author Name Stack TraceClassName>>method:

Version(date, update, name)

June — November 2014 # of stack traces 7,532

# of lines in all stack traces 252,668

# of developers 8

average lines of a stack trace 34

size of the longest stack trace 314

Using the Data

Bugs

Understand Execution

Community

Clustering Stack TracesVector Space Model

ClassName>>method ClassName>>method ClassName>>method …

<1,0,1,1,…>

Cosine similarity

distance between two stack traces

Archetype Popularity

UndefinedObject»doesNotUnderstand: 1,585

UndefinedObject»doesNotUnderstand: 647

UndefinedObject»DoIt 619

… …

SystemDictionary»errorKeyNotFound: 71

MouseWheelEvent»doesNotUnderstand: 69

UndefinedObject»doesNotUnderstand: 57

NBGLFrameBuffer»error: 41

Language features

Anomalies

Match with the Bug Tracker

Stack Traces Bug Tracker

23

‣ Specific project

‣ Misuse of API

‣ Untracked Bug

‣ Bug reports related

to the exception

Filtered Stack Traces

15

No match

8

Match

The case of Bug #12973PluggableButtonMorph(Morph)>>handleKeyDown: KeyboardEvent>>sentTo: PluggableButtonMorph(Morph)>>handleEvent: PluggableButtonMorph(Morph)>>handleFocusEvent: [ActiveHand := self.ActiveEvent := anEvent.result := focusHolder handleFocusEvent: (anEvent transformedBy: (focusHolder transformedFrom: self)) ] in HandMorph>>sendFocusEvent:to:clear: BlockClosure>>on:do: WorldMorph(PasteUpMorph)>>becomeActiveDuring: HandMorph>>sendFocusEvent:to:clear: HandMorph>>sendEvent:focus:clear: HandMorph>>sendKeyboardEvent: HandMorph>>handleEvent: HandMorph>>processEvents [ :h |ActiveHand := h.h processEvents. ActiveHand := nil ] in WorldState>>doOneCycleNowFor:

Description

Discussion

Patch

Resolution

Stack Trace

Use of Related Bug Reports

‣ Give context to the current error

‣ Support the debugging process

‣ Provide feedback on the status of a defect

‣ Support understanding of undocumented code

Crowdstacking TracesUsing the activity of the community to help the code development

Provide a smart environment to deal with software defects

Build a dataset of fresh execution data

Crowdstacking Traces

http://shoreline.inf.usi.ch/