quality built in @ spotify
DESCRIPTION
Most of the people think that quality in software development is limited to manual testing on the latest stage before releasing a product. That might be true 20 years ago in the industrial era. But current world is much more dynamic than before. Time to market became the most crucial metric nowadays. Releasing code to production need to be done faster and faster. How to maintain quality on a sufficient level in this fast paced environment? How to find a time to work on quality improvements? Those are two main questions I want to answer during this talk. Do not expect a silver bullet or even receipt to success. But definitely expect a lot of information about continuous delivery/deployment/improvements with a case studies and lessons we learned at Spotify. Spotify Engineering 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/TRANSCRIPT
2
Spotify brings you the right music for
every moment!
Started in 2006 (in Sweden) Now 1500+ employees, 500+ engineers 20+ million tracks available 4 data centres across the globe
4
Not just software defects, but stakeholders expectations as well
when expectations matches the reality.
Quality is a “state” ….
11
Step 1 - Prototyping phrase
Technical spike investigation Hacking different Back-End solutions
Ad-hoc design discussions Stub implementation of Front End
Getting early user’s feedback on Front End
13
Step 2 - Setting delivery pipeline
Add more unit tests Add more integration tests Add more functional tests Automate deployment configuration Add dashboards and system monitoring
Clarifying End User Needs
14
http://blog.crisp.se/2013/02/05/yassalsundman/continuous-delivery-vs-continuous-deployment
15
Step 3 - Connecting the dots
Connect back-end and from-end parts
into End-2-End system
Get user’s feedback and iterate
Testable micro-services architecture 22
Unit Tests
Component Tests
Functional Tests
System/End-2-End Tests
Integration Tests
Unit Tests
Component Tests
Functional Tests
JS Unit Tests
JS Component Tests
UI Functional
Tests
23
Unit Tests
Check logic of minimal code snippet Does not have any dependencies
or Mock all object dependencies
24
https://github.com/jsevellec/cassandra-unitEmbeddedCassandra
Very much like unit tests but emulating external components
e.g. cassandra database
Component Tests
26
Integration Tests
Check an integration between components
You do not need whole system to check the integration
27
@docker containers
Create Test Environment ‘on the fly’
https://github.com/spotify/helios/blob/master/docs/testing_framework.md
33
Was not covered during this talk …
Load Testing Gradual Rollouts A/B Testing Feature Toggles Monitoring/Alerting Information Radiators
… but stay tuned
34
Technical Test Engineer Test Engineer
! = Manual Tester ! = Test Automator
~ Software Engineer in Test
Test Engineering Roles and Responsibilities
~ Context Driven Tester
35
Technical Test Engineer
Work as a software developer Advocate testability of the product
Argue on software design with software engineers Help with building new/injecting existed development tools
36
https://github.com/jsevellec/cassandra-unit
Cassandra Unithttps://github.com/mikaellanger/job-dsl-plugin
Jenkins job-dsl-plugin
https://github.com/spotify/heliosDocker orchestration
Spoticloude.g. cli control over amazon cloud http://dashing.io
Dashboards
Development Productivity Tools
37
Knows business domain Focused on exploring the product
Free to use any programming language to test specific use case Free to use any programming language to automate his work
Test Engineer
38
Mind Map as a Tool
https://www.mindmup.com
Product tree Scenarios Playbooks Checklists
Session notes
Quality Engineers39
http://www.satisfice.com/blog/archives/1372
TEST JUMPERS: ONE VISION OF AGILE TESTING
http://www.satisfice.com/blog/archives/1364“RESPONSIBLE TESTER”
http://www.satisfice.com/articles/omega_tester.pdfOMEGA TESTER
@jamesmarcusbach calls us Test Jumpers !!!!
41
!
test ideas during healthy discussions
test requirements via end users collaboration
discuss system design and conner cases earlier in the planing/design meetings
define definition of done
Break Uncertainty
42
But have responsible person to figure out what consensus means in each case
Use Google Docs collaboration for finding group consensus
Social Programming
43
write “checks” during implementation shape your thoughts via pair discussions peer review before merging to master
44
User Stories Planning meeting Standup meeting Open workspace TDD Refactoring etc……
Not mentioned Engineering Practices
http://www.extremeprogramming.org/rules.html
47
QA engineer at Spotify
http://continuousdelivery.com/2014/02/visualizations-of-continuous-delivery/
50
Take awaysMake Quality explicit Find Quality promoters Define your way of Quality
improvements Set right Quality constraints Share results as early as possible
Keep looking further quality improvements Probably you will never end :)