agile steps to improve the status quo

Post on 10-May-2015

587 Views

Category:

Education

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

I used this set of slides for a talk I gave at the SCRUM Breakfast in Bern on June 30, 2010.

TRANSCRIPT

agile stepsto improvethe status quo

www.tudorgirba.com

PhD2002 2005

www.tudorgirba.com

PhD2002 2005 2009

PostDoc

www.tudorgirba.com

PhD2002 2005 2009

PostDoc

Consultant

www.tudorgirba.com

agile stepsto improvethe status quo

www.tudorgirba.com

agile stepsto improvethe status quo

www.tudorgirba.com

challengedemolisten

enable

the status quo

the status quothe existing state of affairs

E = m c. 2

post-it

the status quothe existing state of affairs

the status quothe sum of our assumptions

Tom de Marco

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

challenge

challengepresent

presenting is storytelling

story = fairy tale

designyour story

messagemessage

messagemessage

message

messagemessage

message

message

messagemessage

message

messagemessagemessage

message

message

messagemessage

message

message

message

message

message

messagemessage

message

message

message

message

messagemessage

message

messagemessage

message

message

messagemessage

messagemessage

message

messagemessage

message

message

messagemessage

message

messagemessagemessage

message

message

messagemessage

message

message

message

message

message

messagemessage

message

message

message

message

messagemessage

message

messagemessage

message

message

messageone

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

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

messageone

messageonedeliver

slides

slides are visual aids

slides are visual aids

Important sign

1. At this sign, stop, look around and proceed if no other car is coming your way.

2. Important!!!! The cars coming from the other directions will not have to stop.

3. This sign was put here by the authorities in charge.

4. This sign concerns vehicles only. Pedestrians should look at the signs dedicated to them.

5. This sign should not be touched or hindered in any way. Any violation is punishable according to the law.

STOP

STOPImportant sign

•At this sign, stop, look around and proceed if no other car is coming your way.

• Important!!!! The cars coming from the other directions will not have to stop.

• This sign was put here by the authorities in charge.

•This sign concerns vehicles only. Pedestrians should look at the signs dedicated to them.

•This sign should not be touched or hindered in any way. Any violation is punishable according to the law.

STOPImportant sign

•At this sign, stop, look around and proceed if no other car is coming your way.

• Important!!!! The cars coming from the other directions will not have to stop.

• This sign was put here by the authorities in charge.

•This sign concerns vehicles only. Pedestrians should look at the signs dedicated to them.

•This sign should not be touched or hindered in any way. Any violation is punishable according to the law.

detailed effective

projector = screen

the story is in between

slides are visual aids

slides are visual aids

presentationzen.com

tudorgirba.com/blog

blog.duarte.com

thebackofthenapkin.com

presenting is storytelling

challengepresent

challengepresent

demo

content

content form

content form

content form

yesterday’s weather

30%

30% 90%

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

(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.

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

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

present

present

past

present

past future

present

past future

present

past future

present

past future

prediction hit

present

past future

YesterdayWeatherHit(present):

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

past.intersect(future).notEmpty()

prediction hit

hit hit hit

YW = 3 / 8 = 37%

hit hit hit hit hit hit hit

YW = 7 / 8 = 87%

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 ]

content form

content form

challengedemo

challengedemolisten

challengedemolisten

enable

It’s not Lupus

established technology

established technology

established technology

disr

uptiv

ete

chno

logy

established technology

1 2 3 4

5 6 7 8

9 10 11

1213 14

15

1 2 3 4

5 6 7 8

9 10 11

1213 14

15

1 2 3 4

5 6 7 8

9 10 11

1213 14 15

1 2 3 4

5 6 7 8

9 10 11

1213 14 15

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15

1 2 3 4

5 6 7 8

9 10 11 12

13 14 15 16

1 2 3 4

5 6 7 8

9 10 11 12

WhatWhereWhenWhoHow

WhatWhereWhenWhoHow Why

challengedemolisten

enable

agile stepsto improvethe status quo

www.tudorgirba.com

challengedemolisten

enable

top related