Misery Loves Company
-
Upload
tommaso-dal-sasso -
Category
Data & Analytics
-
view
29 -
download
0
Transcript of Misery Loves Company
Tommaso Dal SassoAndrea MocciMichele Lanza University of Lugano
Misery Loves CompanyCrowdStacking Traces to Aid Problem DetectionSANER 2015
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:
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
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
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
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:
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