87
Yogi Berra You’ve got to be careful if you do not know where you are going, because you might not get there.

Demo-driven research in Lugano

Embed Size (px)

DESCRIPTION

I used this set of slides for a lecture I gave for the PhD students from the University of Lugano on how to do research.

Citation preview

Page 1: Demo-driven research in Lugano

Yogi Berra

You’ve got to be carefulif you do not knowwhere you are going,because you might not get there.

Page 2: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

Page 3: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesigndemolisten

enable

Page 4: Demo-driven research in Lugano

research?

Page 5: Demo-driven research in Lugano

research improvesthe status quo

Page 6: Demo-driven research in Lugano

the status quo?

Page 7: Demo-driven research in Lugano

the status quothe existing state of affairs

Page 12: Demo-driven research in Lugano

post-it

Page 13: Demo-driven research in Lugano
Page 14: Demo-driven research in Lugano

the status quothe existing state of affairs

Page 15: Demo-driven research in Lugano

the status quothe sum of our assumptions

Page 16: Demo-driven research in Lugano

Tom de Marco

It’s not what you don’t know that kills you,it’s what you know that isn’t so

Page 17: Demo-driven research in Lugano
Page 18: Demo-driven research in Lugano

the status quothe sum of our assumptions

Page 19: Demo-driven research in Lugano

researchrevealing what no one revealed before

Page 20: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challenge

Page 21: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesign

Page 22: Demo-driven research in Lugano
Page 23: Demo-driven research in Lugano
Page 24: Demo-driven research in Lugano
Page 25: Demo-driven research in Lugano
Page 26: Demo-driven research in Lugano
Page 27: Demo-driven research in Lugano
Page 28: Demo-driven research in Lugano
Page 29: Demo-driven research in Lugano
Page 30: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesign

Page 31: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesign

present

Page 32: Demo-driven research in Lugano
Page 33: Demo-driven research in Lugano
Page 34: Demo-driven research in Lugano

to Understand Software Evolution

Modeling History

vorgelegt von

Tudor Gîrba

von Rumänien

Inauguraldissertation der Philosophisch-naturwissenschaftlichen

Fakultät der Universität Bern

Leiter der Arbeit:

Prof. Dr. Stéphane DucasseProf. Dr. Oscar Nierstrasz

Institut für Informatik und angewandte Mathematik

Page 35: Demo-driven research in Lugano

To provide a genericmeta-model for expressing software evolution analyses, we need to recognize evolution as an explicit phenomenon and model it as a first class entity.

to Understand Software Evolution

Modeling History

vorgelegt von

Tudor Gîrba

von Rumänien

Inauguraldissertation der Philosophisch-naturwissenschaftlichen

Fakultät der Universität Bern

Leiter der Arbeit:

Prof. Dr. Stéphane DucasseProf. Dr. Oscar Nierstrasz

Institut für Informatik und angewandte Mathematik

Page 36: Demo-driven research in Lugano
Page 37: Demo-driven research in Lugano
Page 38: Demo-driven research in Lugano
Page 39: Demo-driven research in Lugano
Page 42: Demo-driven research in Lugano
Page 43: Demo-driven research in Lugano

content

Page 44: Demo-driven research in Lugano

content form

Page 45: Demo-driven research in Lugano

content form

Page 46: Demo-driven research in Lugano

content form

Page 47: Demo-driven research in Lugano

yesterday’s weather

Page 48: Demo-driven research in Lugano
Page 49: Demo-driven research in Lugano

30%

Page 50: Demo-driven research in Lugano

30% 90%

Page 51: Demo-driven research in Lugano

yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENMandTopCurrentENM: topCurrentENM | currentVersions previousClassHistoriesSortedByWENM yesterdayWeatherHits last2VersionsTopHistories last2Versions last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories previousVersionsTopHistoriesNames over | currentVersions := OrderedCollection new. currentVersions addLast: (self allVersionNames at: 1).

yesterdayWeatherHits := 0.

(2 to: self allVersionNames size) do: [: i | self smelly: 'this algorithm is too big and complex'.

previousClassHistoriesSortedByWENM := (self classHistories selectFromReferenceVersionCollection: currentVersions) sortBy: [:a :b | a value getWENM >= b value getWENM]. currentVersions addLast: (self allVersionNames at: i).

previousVersionsTopHistories := OrderedCollection new.

x := previousClassHistoriesSortedByWENM first value getWENM. valuesCount := 0.

previousClassHistoriesSortedByWENM do: [ :each | (each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ].

last2VersionsTopHistories := OrderedCollection new.

last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i). last2HistoriesSortedByENM := (self classHistories

Page 52: Demo-driven research in Lugano

(each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ].

last2VersionsTopHistories := OrderedCollection new.

last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i). last2HistoriesSortedByENM := (self classHistories selectFromReferenceVersionCollection: last2Versions) sortBy: [:a :b | a value getWENM >= b value getWENM].

x := last2HistoriesSortedByENM first value getENM. valuesCount := 0. last2HistoriesSortedByENM do: [ :each | (each value getENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getENM]. (valuesCount < topCurrentENM) ifTrue: [ last2VersionsTopHistories addLast: each] ]. previousVersionsTopHistoriesNames := previousVersionsTopHistories collect: [ :each | each value name]. over := false.

last2VersionsTopHistories do: [:each | ((previousVersionsTopHistoriesNames includes: (each value name)) and: [over not]) ifTrue: [ yesterdayWeatherHits := yesterdayWeatherHits + 1. over := true]. ]. ].

^yesterdayWeatherHits/(self size - 1) asFloat.

Page 53: Demo-driven research in Lugano

yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENMandTopCurrentENM: topCurrentENM | currentVersions previousClassHistoriesSortedByWENM yesterdayWeatherHits last2VersionsTopHistories last2Versions last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories previousVersionsTopHistoriesNames over | currentVersions := OrderedCollection new. currentVersions addLast: (self allVersionNames at: 1).

yesterdayWeatherHits := 0.

(2 to: self allVersionNames size) do: [: i | self smelly: 'this algorithm is too big and complex'.

previousClassHistoriesSortedByWENM := (self classHistories selectFromReferenceVersionCollection: currentVersions) sortBy: [:a :b | a value getWENM >= b value getWENM]. currentVersions addLast: (self allVersionNames at: i).

previousVersionsTopHistories := OrderedCollection new.

x := previousClassHistoriesSortedByWENM first value getWENM. valuesCount := 0.

previousClassHistoriesSortedByWENM do: [ :each | (each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ].

last2VersionsTopHistories := OrderedCollection new.

last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i). last2HistoriesSortedByENM := (self classHistories

Page 54: Demo-driven research in Lugano

yesterdayWeatherProbabilityWithTopPreviousWENM: topPreviousWENMandTopCurrentENM: topCurrentENM | currentVersions previousClassHistoriesSortedByWENM yesterdayWeatherHits last2VersionsTopHistories last2Versions last2HistoriesSortedByENM x valuesCount previousVersionsTopHistories previousVersionsTopHistoriesNames over | currentVersions := OrderedCollection new. currentVersions addLast: (self allVersionNames at: 1).

yesterdayWeatherHits := 0.

(2 to: self allVersionNames size) do: [: i | self smelly: 'this algorithm is too big and complex'.

previousClassHistoriesSortedByWENM := (self classHistories selectFromReferenceVersionCollection: currentVersions) sortBy: [:a :b | a value getWENM >= b value getWENM]. currentVersions addLast: (self allVersionNames at: i).

previousVersionsTopHistories := OrderedCollection new.

x := previousClassHistoriesSortedByWENM first value getWENM. valuesCount := 0.

previousClassHistoriesSortedByWENM do: [ :each | (each value getWENM ~= x) ifTrue: [ valuesCount := valuesCount + 1. x:= each value getWENM]. (valuesCount < topPreviousWENM) ifTrue: [ previousVersionsTopHistories addLast: each] ].

last2VersionsTopHistories := OrderedCollection new.

last2Versions := OrderedCollection new. last2Versions addLast: (self allVersionNames at: (i-1)). last2Versions addLast: (self allVersionNames at: i). last2HistoriesSortedByENM := (self classHistories

Page 55: Demo-driven research in Lugano
Page 56: Demo-driven research in Lugano
Page 57: Demo-driven research in Lugano

present

Page 58: Demo-driven research in Lugano

present

past

Page 59: Demo-driven research in Lugano

present

past future

Page 60: Demo-driven research in Lugano

present

past future

Page 61: Demo-driven research in Lugano

present

past future

Page 62: Demo-driven research in Lugano

present

past future

prediction hit

Page 63: Demo-driven research in Lugano

present

past future

YesterdayWeatherHit(present):

past:=all.topChanged(beginning, present) future:=all.topChanged(present, end)

past.intersect(future).notEmpty()

prediction hit

Page 64: Demo-driven research in Lugano

hit hit hit

YW = 3 / 8 = 37%

hit hit hit hit hit hit hit

YW = 7 / 8 = 87%

Page 65: Demo-driven research in Lugano

yWFor: yesterdayCheck for: tomorrowCheck | hits | hits := (self detailedYWFor: yesterdayCheck for: tomorrowCheck) sum: [ :each | each isEmpty ifTrue: [0] ifFalse: [1]]. ^ hits / (self versions size - 2)

yWFor: yesterdayCheck for: tomorrowCheck ^ ( 3 to: self versions size ) collect: [ :i | | yesterday tomorrow | yesterday := self selectByExpression: yesterdayCheck appliedFromVersionIndex: 1 toVersionIndexAndPresentInIt: i - 1. tomorrow := self selectByExpression: tomorrowCheck appliedFromVersionIndexAndPresentInIt: i - 1 toVersionIndex: self versions size. yesterday intersectWith: tomorrow ]

Page 66: Demo-driven research in Lugano

content form

Page 67: Demo-driven research in Lugano
Page 68: Demo-driven research in Lugano
Page 69: Demo-driven research in Lugano

content form

Page 70: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesign

present

Page 71: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesigndemo

Page 72: Demo-driven research in Lugano
Page 73: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesigndemo

Page 74: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesigndemolisten

Page 75: Demo-driven research in Lugano

Reviewers are never stupid

Page 76: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesigndemolisten

Page 77: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesigndemolisten

enable

Page 78: Demo-driven research in Lugano
Page 79: Demo-driven research in Lugano

it’s not Lupus

Page 80: Demo-driven research in Lugano
Page 81: Demo-driven research in Lugano

established

Page 82: Demo-driven research in Lugano

established

Page 83: Demo-driven research in Lugano

disr

uptiv

e

established

Page 84: Demo-driven research in Lugano

WhatWhereWhenWhoHow

Page 85: Demo-driven research in Lugano

WhatWhereWhenWhoHow Why

Page 86: Demo-driven research in Lugano

demo-drivenresearch

www.tudorgirba.com

challengedesigndemolisten

enable