Continuous delivery of insights August 2017 Javier Moscard - - PowerPoint PPT Presentation

continuous delivery of insights
SMART_READER_LITE
LIVE PREVIEW

Continuous delivery of insights August 2017 Javier Moscard - - PowerPoint PPT Presentation

Continuous delivery of insights August 2017 Javier Moscard mosca@spoti fz .com The secret is VUCA world Team of teams The author @Javi_Mosca The right music for every moment Started in 2006 in Sweden 140M users Available in


slide-1
SLIDE 1

Continuous delivery

  • f insights

August 2017

Javier Moscardó mosca@spotifz.com

slide-2
SLIDE 2

The secret is…

slide-3
SLIDE 3

VUCA world

slide-4
SLIDE 4
slide-5
SLIDE 5

Team of teams

slide-6
SLIDE 6

The author

slide-7
SLIDE 7

@Javi_Mosca

slide-8
SLIDE 8

“The right music for every moment”

Started in 2006 in Sweden

Available in 61 countries Over 30M songs Over 2 billion of playlists

140M users

60M paying subscribers $5 billion revenue paid to stakeholders

slide-9
SLIDE 9
slide-10
SLIDE 10

The path

towards CD

  • f insights
slide-11
SLIDE 11

The path

towards CD

  • f insights

Team of teams

slide-12
SLIDE 12

Squad

slide-13
SLIDE 13

Explore

Search Browse

Delorean

Car integration

iOS Infra

iOS release

Catalogue

Artist Album

Alignment example

slide-14
SLIDE 14

Explore

Search Browse

Delorean

Car integration

iOS Infra

iOS release

Catalogue

Artist Album

  • k
  • k
  • k
slide-15
SLIDE 15

Tech

Tribe lead

slide-16
SLIDE 16

Communication

slide-17
SLIDE 17

TPD

Tribe leads Tribe leads

slide-18
SLIDE 18

Hands off

slide-19
SLIDE 19

R&D

Tribe leads Tribe leads

slide-20
SLIDE 20

Leading like a gardener

slide-21
SLIDE 21

The path

towards CD

  • f insights

Ways of working

slide-22
SLIDE 22

Waterfall

Discover Design Development Testing Delivery

slide-23
SLIDE 23

Agile

Design Development Testing Discover Delivery

slide-24
SLIDE 24

What are we doing?

Design Development Testing Delivery Discover

slide-25
SLIDE 25

Design

Development

Testing Delivery Discover

slide-26
SLIDE 26

Pull Request

slide-27
SLIDE 27

Con$nuous Delivery

Mobile clients

Continuous delivery

slide-28
SLIDE 28

Con$nuous Delivery

Backend services

Continuous deployment

slide-29
SLIDE 29

The path

towards CD

  • f insights

Test fjrst approach

slide-30
SLIDE 30

Design Development

Testing

Delivery Discover

slide-31
SLIDE 31

Prepare for the worst, hope for the best

Volvo Ocean Race

slide-32
SLIDE 32

Who owns quality?

slide-33
SLIDE 33

QA QA QA

slide-34
SLIDE 34

Who tests?

slide-35
SLIDE 35

Collaboration

slide-36
SLIDE 36
slide-37
SLIDE 37

You understand what is important, then you test it, then, if possible, you automate it.

slide-38
SLIDE 38

Why test automation?

slide-39
SLIDE 39

Static Analysis Unit Tests

Integration Tests E2E

Manual Exploratory Testing Time cost

slide-40
SLIDE 40
slide-41
SLIDE 41

When?

Pre-merge Local Post-merge

Less than 10 mins Every 2h

slide-42
SLIDE 42

Where?

slide-43
SLIDE 43

Moving slow?

slide-44
SLIDE 44

Design Development Testing

Delivery

Discover

slide-45
SLIDE 45
slide-46
SLIDE 46 46 Project Title 00.00.2015 Proprietary & Confidential Spotify

Practice continuous delivery

slide-47
SLIDE 47

Thank you

Join the band!

spotify.com/jobs

slide-48
SLIDE 48

About Spotify

https:/ /press.spotify.com/se/about/

Spotify Culture

https:/ /labs.spotify.com/2014/03/27/spotify- engineering-culture-part-1/ https:/ /labs.spotify.com/2014/09/20/spotify- engineering-culture-part-2/

Git branching

http:/ /nvie.com/posts/a-successful-git-branching- model/

More Agile Testing

Learning Journeys for the Whole Team Janet Gregory and Lisa Crispin

Team of Teams

New Rules of Engagement for a Complex World General Stanley McChrystal

Build quality, key of continuous delivery

https:/ /leankit.com/blog/2016/10/build-quality-key- continuous-delivery/

Check these out…

slide-49
SLIDE 49

GUI testing

Scripted Testing vs Model Based Testing

slide-50
SLIDE 50

What have we done?

Java test API

Mobile app

Test model

Client-side test API JSON data

Model interface Model Implementation

View Implementation

Non-model based tests Test Data Service Test reporting tools

UI Layer

slide-51
SLIDE 51

Scripted testing

@User(flags = TestUserFlag.PREMIUM, tags = UserTag.PLAYLISTS) @Target(target={TestTarget.SIMULATOR, TestTarget.PHONE}) @Test(groups = {TestGroup.RADIO}, timeOut = Waiter.TIMEOUT_5MIN) public void startRadioTest() { navigation.openURI(ARTIST_URI); artist.assertLoaded(); artist.startRadio(); player.assertPlaying(); navigation.openURI(PLAYLIST_URI); playlist.assertLoaded(); playlist.startRadio(); player.assertPlaying(); navigation.openURI(ALBUM_URI); album.assertLoaded(); album.startRadio(); player.assertPlaying(); }

slide-52
SLIDE 52

Model based testing - MBT

slide-53
SLIDE 53

First MBT model

slide-54
SLIDE 54

Current MBT model

slide-55
SLIDE 55

MBT Interfaces

public interface StartRadio { public void e_Init(); public void v_InitialView(); public void e_GoToArtist(); public void v_Artist(); public void e_StartArtistRadio(); public void v_ArtistRadio(); public void e_GoToPlaylist(); public void v_Playlist(); public void e_StartPlaylistRadio(); public void v_PlaylistRadio(); public void e_GoToAlbum(); public void v_Album(); public void e_StartAlbumRadio(); public void v_AlbumRadio(); public void e_Pause(); public void v_TrackNotPlaying(); }

slide-56
SLIDE 56

Scripted vs MBT

e_Init(); v_InitialView(); e_GoToArtist(); v_Artist(); e_StartArtistRadio(); v_ArtistRadio(); e_Pause(); v_TrackNotPlaying(); v_InitialView(); e_GoToAlbum(); v_Album(); e_StartAlbumRadio(); v_AlbumRadio(); e_Pause(); v_TrackNotPlaying(); v_InitialView(); e_GoToArtist(); v_Artist(); e_StartArtistRadio(); v_ArtistRadio(); e_Pause(); v_TrackNotPlaying(); v_InitialView(); e_GoToPlaylist(); v_Playlist(); e_StartPlaylistRadio(); v_PlaylistRadio(); … baseActions.openURL(ARTIST_URI); artist.assertLoaded();
 artist.startRadio(); player.assertPlaying(); baseActions.openURL(PLAYLIST_URI); playlist.assertLoaded();
 playlist.startRadio(); player.assertPlaying(); baseActions.openURL(ALBUM_URI); album.assertLoaded();
 album.startRadio(); player.assertPlaying();

slide-57
SLIDE 57

Let’s test!

slide-58
SLIDE 58

First test scenario

Play a track from Search

slide-59
SLIDE 59

Repeat it

slide-60
SLIDE 60

Repeat it, again

slide-61
SLIDE 61

and again

slide-62
SLIDE 62

Scripted & MBT

Find what is important and automate, what can be automated

slide-63
SLIDE 63

Second test scenario

Go to “See All tracks” from Search

slide-64
SLIDE 64

Scripted & MBT

Find what is important and automate, what can be automated

slide-65
SLIDE 65

Finding the bug

slide-66
SLIDE 66

Preventing the bug

slide-67
SLIDE 67

Sources

Graphwalker

http:/ /graphwalker.github.io/

IDE

https:/ /www.jetbrains.com/idea/

Model diagramming

https:/ /www.yworks.com/products/yed