Continuous delivery
- f insights
August 2017
Javier Moscardó mosca@spotifz.com
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
August 2017
Javier Moscardó mosca@spotifz.com
VUCA world
Team of teams
The author
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
The path
towards CD
The path
towards CD
Team of teams
Explore
Search Browse
Delorean
Car integration
iOS Infra
iOS release
Catalogue
Artist Album
Alignment example
Explore
Search Browse
Delorean
Car integration
iOS Infra
iOS release
Catalogue
Artist Album
Tech
Tribe lead
Communication
TPD
Tribe leads Tribe leads
Hands off
R&D
Tribe leads Tribe leads
Leading like a gardener
The path
towards CD
Ways of working
Waterfall
Discover Design Development Testing Delivery
Agile
Design Development Testing Discover Delivery
What are we doing?
Design Development Testing Delivery Discover
Design
Development
Testing Delivery Discover
Mobile clients
Backend services
The path
towards CD
Test fjrst approach
Design Development
Testing
Delivery Discover
Volvo Ocean Race
Who tests?
Why test automation?
Static Analysis Unit Tests
Integration Tests E2E
Manual Exploratory Testing Time cost
When?
Pre-merge Local Post-merge
Less than 10 mins Every 2h
Where?
Design Development Testing
Delivery
Discover
Join the band!
spotify.com/jobs
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…
Scripted Testing vs Model Based Testing
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
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(); }
Model based testing - MBT
First MBT model
Current MBT model
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(); }
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();
First test scenario
Play a track from Search
Scripted & MBT
Find what is important and automate, what can be automated
Second test scenario
Go to “See All tracks” from Search
Scripted & MBT
Find what is important and automate, what can be automated
Sources
Graphwalker
http:/ /graphwalker.github.io/
IDE
https:/ /www.jetbrains.com/idea/
Model diagramming
https:/ /www.yworks.com/products/yed