SlideShare a Scribd company logo
1 of 48
Download to read offline
@iordanis_g @geeky_android	

#shazam_testing	

KEEPING 100+ MILLION USERS HAPPY
HOW WE TEST SHAZAM ON ANDROID
Iordanis Giannakakis
@iordanis_g
Savvas Dalkitsis
@geeky_android
@iordanis_g @geeky_android	

#shazam_testing	

How Shazam works
@iordanis_g @geeky_android	

#shazam_testing	

100+ million users
@iordanis_g @geeky_android	

#shazam_testing	

Happy users
Even developers?
@iordanis_g @geeky_android	

#shazam_testing	

Android testing
@iordanis_g @geeky_android	

#shazam_testing	

Faster release cycles
@iordanis_g @geeky_android	

#shazam_testing	

Better code
@iordanis_g @geeky_android	

#shazam_testing	

Cheaper
http://testdroid.com/testdroid/5851
@iordanis_g @geeky_android	

#shazam_testing	

Easy
@iordanis_g @geeky_android	

#shazam_testing	

A user walks into a bar
@iordanis_g @geeky_android	

#shazam_testing	

Doing it the test driven way
Write UI
test
Implement
Refactor
Write unit
test
BDD	

TDD
@iordanis_g @geeky_android	

#shazam_testing	

“To TDD or not to TDD?
...That is not the question”
Seb Rose
http://claysnow.co.uk/to-tdd-or-not-to-tdd/
@iordanis_g @geeky_android	

#shazam_testing	

Test first
•  Generally easier
•  Eliminates external dependencies
•  Easily repeatable
@iordanis_g @geeky_android	

#shazam_testing	

The Acceptance tests cycle
Write UI
test
Implement
Refactor
Write unit
test
BDD	

TDD
@iordanis_g @geeky_android	

#shazam_testing	

Acceptance criteria
Given : arrange
When : act
Then : assert
@iordanis_g @geeky_android	

#shazam_testing	

Example
Given a user is near a music venue
And the server always returns a known result
When the user Shazams
Then the user can check-in their discovery
@iordanis_g @geeky_android	

#shazam_testing
given(user).isNear(lexington());
given(server).returns(lustForLife());
when(user).shazams();
then(user).canCheckIn(lustForLife(), lexington());
gwen
https://github.com/shazam/gwen
@iordanis_g @geeky_android	

#shazam_testing	

Acceptance test technologies
•  Instrumentation
•  JUnit 3
•  Robotium & Espresso
•  gwen
•  HamMock Server
@iordanis_g @geeky_android	

#shazam_testing	

The Unit tests cycle
Write UI
test
Implement
Refactor
Write unit
test
BDD	

TDD
@iordanis_g @geeky_android	

#shazam_testing	

What we don’t test
Activities & Fragments
https://github.com/xxv/android-lifecycle
@iordanis_g @geeky_android	

#shazam_testing	

What we don’t test
@iordanis_g @geeky_android	

#shazam_testing	

What we do unit test
•  Presentation logic
•  Business logic
•  That’s all!
@iordanis_g @geeky_android	

#shazam_testing	

The MVP pattern
Presenter
Model View
@iordanis_g @geeky_android	

#shazam_testing	

The MVP pattern for Android
Presenter
Model
View
start	

stop	

Android
@iordanis_g @geeky_android	

#shazam_testing	

The MVP pattern
•  Makes presentation logic testable
•  No need to test the “dummy” view
•  Avoid Android dependencies
@iordanis_g @geeky_android	

#shazam_testing	

Dependency Injection, Yourself (DIY)
•  Break hardcoded dependencies
•  Behaviour vs Implementation
•  Swappable dependencies for test and production
runtimes
@iordanis_g @geeky_android	

#shazam_testing	

Hardcoded dependencies
Client
Feature XFeature X
@iordanis_g @geeky_android	

#shazam_testing	

Dependency Injection
Client
Injector
Feature X
Interface
@iordanis_g @geeky_android	

#shazam_testing
	
  public	
  interface	
  VenueRetriever	
  {	
  
	
  	
  	
  	
  void	
  findClosestVenue(VenueFoundCallback	
  callback);	
  
	
  }	
  
	
  
	
  public	
  class	
  NetworkVenueRetriever	
  implements	
  VenueRetriever	
  {	
  
	
  	
  	
  	
  public	
  void	
  findClosestVenue(VenueFoundCallback	
  callback)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  //	
  Some	
  slow	
  networking	
  
	
  	
  	
  	
  }	
  
	
  }	
  
	
  
	
  public	
  class	
  LocalVenueRetriever	
  implements	
  VenueRetriever	
  {	
  
	
  	
  	
  	
  public	
  void	
  findClosestVenue(VenueFoundCallback	
  callback)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  //	
  DB	
  look-­‐up	
  /	
  caching	
  layer,	
  perhaps?	
  
	
  	
  	
  	
  }	
  
	
  }	

Model
@iordanis_g @geeky_android	

#shazam_testing
	
  public	
  class	
  ResultActivity	
  extends	
  Activity	
  implements	
  ResultView	
  {	
  
	
  	
  	
  	
  private	
  final	
  VenueRetriever	
  venueRetriever;	
  
	
  	
  	
  	
  private	
  ResultPresenter	
  resultPresenter;	
  
	
  
	
  	
  	
  	
  public	
  ResultActivity()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  venueRetriever	
  =	
  venueRetriever();	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  public	
  void	
  onCreate(Bundle	
  savedInstanceState)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  //	
  TODO:	
  Setup	
  layouts	
  &	
  views	
  	
  
	
  	
  	
  	
  	
  	
  	
  Result	
  result	
  =	
  resultToDisplay();	
  
	
  	
  	
  	
  	
  	
  	
  resultPresenter	
  =	
  new	
  ResultPresenter(this,	
  venueRetriever,	
  result);	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  public	
  void	
  onStart()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  resultPresenter.startPresenting();	
  
	
  	
  	
  	
  }	
  
	
  }	

Activity
@iordanis_g @geeky_android	

#shazam_testing
	
  public	
  class	
  ResultPresenter	
  {	
  
	
  
	
  	
  	
  	
  public	
  ResultPresenter(ResultView	
  resultView,	
  VenueRetriever	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  venueRetriever,	
  Result	
  result)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  this.resultView	
  =	
  resultView;	
  
	
  	
  	
  	
  	
  	
  	
  this.venueRetriever	
  =	
  venueRetriever;	
  
	
  	
  	
  	
  	
  	
  	
  this.result	
  =	
  result;	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  public	
  void	
  startPresenting()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  resultView.showResult(result);	
  
	
  	
  	
  	
  	
  	
  	
  venueRetriever.findClosestVenue(new	
  VenueFoundCallback()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  public	
  void	
  venueFound(Venue	
  venue)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  resultView.showCheckInPrompt(venue);	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  });	
  
	
  	
  	
  	
  }	
  
	
  }	

Presenter
@iordanis_g @geeky_android	

#shazam_testing
	
  public	
  interface	
  ResultView	
  {	
  
	
  
	
  	
  	
  	
  void	
  showResult(Result	
  track);	
  
	
  
	
  	
  	
  	
  void	
  showCheckInPrompt(Venue	
  venue);	
  
	
  }	
  
View
@iordanis_g @geeky_android	

#shazam_testing
	
  public	
  class	
  ResultActivity	
  extends	
  Activity	
  implements	
  ResultView	
  {	
  
	
  
	
  	
  	
  	
  public	
  void	
  showResult(Result	
  result)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  //TODO	
  show	
  the	
  result	
  screen	
  &	
  bind	
  result	
  data	
  
	
  	
  	
  	
  }	
  
	
  
	
  	
  	
  	
  public	
  void	
  showCheckInPrompt(Venue	
  venue)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  //TODO	
  bind	
  the	
  venue	
  with	
  check-­‐in	
  prompt	
  view	
  
	
  	
  	
  	
  }	
  
	
  }	

Activity
@iordanis_g @geeky_android	

#shazam_testing	

Unit tests technologies
•  JUnit 4
•  Robolectric
java.lang.RuntimeException: Stub!
•  Hamcrest
•  JMock
@iordanis_g @geeky_android	

#shazam_testing	

Test execution
@iordanis_g @geeky_android	

#shazam_testing	

Continuous Integration
@iordanis_g @geeky_android	

#shazam_testing	

Speed (Hint: slow)
@iordanis_g @geeky_android	

#shazam_testing	

Usual execution
Test Suite
@iordanis_g @geeky_android	

#shazam_testing	

Spoon
http://square.github.io/spoon
@iordanis_g @geeky_android	

#shazam_testing	

Fork
Test Suite
@iordanis_g @geeky_android	

#shazam_testing	

Fork
•  Inspired by Spoon, but faster
•  Infinitely scalable
•  Current setup 1 test / 2 seconds
•  Pooled execution
@iordanis_g @geeky_android	

#shazam_testing	

Flakiness monitor
@iordanis_g @geeky_android	

#shazam_testing	

ADB Remote
https://github.com/sleekweasel/CgiAdbRemote
@iordanis_g @geeky_android	

#shazam_testing	

If all else fails…
@iordanis_g @geeky_android	

#shazam_testing	

If all else fails…
@iordanis_g @geeky_android	

#shazam_testing	

If all else fails…
@YourTwitterHandle	

#DVXFR14{session hashtag}	

 @iordanis_g @geeky_android	

#shazam_testing	

•  Testing is easier than you may think
•  Practice, practice, practice
•  Toolset is limited
•  Ship it!
@YourTwitterHandle	

#DVXFR14{session hashtag}	

 @iordanis_g @geeky_android	

#shazam_testing	

Hiring...

More Related Content

What's hot

How to setup unit testing in Android Studio
How to setup unit testing in Android StudioHow to setup unit testing in Android Studio
How to setup unit testing in Android Studiotobiaspreuss
 
Web ui tests examples with selenide, nselene, selene & capybara
Web ui tests examples with  selenide, nselene, selene & capybaraWeb ui tests examples with  selenide, nselene, selene & capybara
Web ui tests examples with selenide, nselene, selene & capybaraIakiv Kramarenko
 
081107 Sammy Eclipse Summit2
081107   Sammy   Eclipse Summit2081107   Sammy   Eclipse Summit2
081107 Sammy Eclipse Summit2mkempka
 
Quickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop ApplicationsQuickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop ApplicationsClare Macrae
 
Hitchhiker's guide to Functional Testing
Hitchhiker's guide to Functional TestingHitchhiker's guide to Functional Testing
Hitchhiker's guide to Functional TestingWiebe Elsinga
 
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)Tobias Schneck
 
JavaFX8 TestFX - CDI
JavaFX8   TestFX - CDIJavaFX8   TestFX - CDI
JavaFX8 TestFX - CDISven Ruppert
 
Unit testing and Android
Unit testing and AndroidUnit testing and Android
Unit testing and AndroidTomáš Kypta
 
Learn How to Unit Test Your Android Application (with Robolectric)
Learn How to Unit Test Your Android Application (with Robolectric)Learn How to Unit Test Your Android Application (with Robolectric)
Learn How to Unit Test Your Android Application (with Robolectric)Marakana Inc.
 
iOS Unit Testing
iOS Unit TestingiOS Unit Testing
iOS Unit Testingsgleadow
 
Testing for Pragmatic People
Testing for Pragmatic PeopleTesting for Pragmatic People
Testing for Pragmatic Peopledavismr
 
How Testability Inspires AngularJS Design / Ran Mizrahi
How Testability Inspires AngularJS Design / Ran MizrahiHow Testability Inspires AngularJS Design / Ran Mizrahi
How Testability Inspires AngularJS Design / Ran MizrahiRan Mizrahi
 
Unit Testing Android Applications
Unit Testing Android ApplicationsUnit Testing Android Applications
Unit Testing Android ApplicationsRody Middelkoop
 
Testing React Applications
Testing React ApplicationsTesting React Applications
Testing React Applicationsstbaechler
 
Unit Testing: Special Cases
Unit Testing: Special CasesUnit Testing: Special Cases
Unit Testing: Special CasesCiklum Ukraine
 
Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"Fwdays
 

What's hot (20)

How to setup unit testing in Android Studio
How to setup unit testing in Android StudioHow to setup unit testing in Android Studio
How to setup unit testing in Android Studio
 
Web ui tests examples with selenide, nselene, selene & capybara
Web ui tests examples with  selenide, nselene, selene & capybaraWeb ui tests examples with  selenide, nselene, selene & capybara
Web ui tests examples with selenide, nselene, selene & capybara
 
Unit testing on mobile apps
Unit testing on mobile appsUnit testing on mobile apps
Unit testing on mobile apps
 
081107 Sammy Eclipse Summit2
081107   Sammy   Eclipse Summit2081107   Sammy   Eclipse Summit2
081107 Sammy Eclipse Summit2
 
Quickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop ApplicationsQuickly Testing Qt Desktop Applications
Quickly Testing Qt Desktop Applications
 
Android TDD
Android TDDAndroid TDD
Android TDD
 
Hitchhiker's guide to Functional Testing
Hitchhiker's guide to Functional TestingHitchhiker's guide to Functional Testing
Hitchhiker's guide to Functional Testing
 
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
UI Testing - Selenium? Rich-Clients? Containers? (SwanseaCon 2018)
 
JavaFX8 TestFX - CDI
JavaFX8   TestFX - CDIJavaFX8   TestFX - CDI
JavaFX8 TestFX - CDI
 
Unit testing and Android
Unit testing and AndroidUnit testing and Android
Unit testing and Android
 
Learn How to Unit Test Your Android Application (with Robolectric)
Learn How to Unit Test Your Android Application (with Robolectric)Learn How to Unit Test Your Android Application (with Robolectric)
Learn How to Unit Test Your Android Application (with Robolectric)
 
iOS Unit Testing
iOS Unit TestingiOS Unit Testing
iOS Unit Testing
 
Testing for Pragmatic People
Testing for Pragmatic PeopleTesting for Pragmatic People
Testing for Pragmatic People
 
How Testability Inspires AngularJS Design / Ran Mizrahi
How Testability Inspires AngularJS Design / Ran MizrahiHow Testability Inspires AngularJS Design / Ran Mizrahi
How Testability Inspires AngularJS Design / Ran Mizrahi
 
Unit Testing Android Applications
Unit Testing Android ApplicationsUnit Testing Android Applications
Unit Testing Android Applications
 
Testing React Applications
Testing React ApplicationsTesting React Applications
Testing React Applications
 
Unit Testing in iOS
Unit Testing in iOSUnit Testing in iOS
Unit Testing in iOS
 
Unit Testing: Special Cases
Unit Testing: Special CasesUnit Testing: Special Cases
Unit Testing: Special Cases
 
SWTBot Tutorial
SWTBot TutorialSWTBot Tutorial
SWTBot Tutorial
 
Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"Никита Галкин "Testing in Frontend World"
Никита Галкин "Testing in Frontend World"
 

Viewers also liked

Desconf 2011 - Usar e esquecer suas ideias
Desconf 2011 - Usar e esquecer suas ideias    Desconf 2011 - Usar e esquecer suas ideias
Desconf 2011 - Usar e esquecer suas ideias Hélio Medeiros
 
360Alumni; The Case For Online Communities
360Alumni; The Case For Online Communities360Alumni; The Case For Online Communities
360Alumni; The Case For Online Communitiesmegrebale
 
Securing the Web without site-specific passwords
Securing the Web without site-specific passwordsSecuring the Web without site-specific passwords
Securing the Web without site-specific passwordsFrancois Marier
 
Presenting the work of OSMF Working Groups - State of the Map 2013
Presenting the work of OSMF Working Groups - State of the Map 2013Presenting the work of OSMF Working Groups - State of the Map 2013
Presenting the work of OSMF Working Groups - State of the Map 2013OSMFstateofthemap
 
Marketing Your Tech Talent - OSCON 2014 - without speaker notes
Marketing Your Tech Talent - OSCON 2014 - without speaker notesMarketing Your Tech Talent - OSCON 2014 - without speaker notes
Marketing Your Tech Talent - OSCON 2014 - without speaker notesdeirdrestraughan
 
Varnish in action phpuk11
Varnish in action phpuk11Varnish in action phpuk11
Varnish in action phpuk11Combell NV
 
Présentation de LemonLDAP::NG aux Journées Perl 2016
Présentation de LemonLDAP::NG aux Journées Perl 2016Présentation de LemonLDAP::NG aux Journées Perl 2016
Présentation de LemonLDAP::NG aux Journées Perl 2016Clément OUDOT
 
Pistoia Alliance App Strategy
Pistoia Alliance App StrategyPistoia Alliance App Strategy
Pistoia Alliance App StrategyAlex Clark
 
Yippee-IA: All you need to know about Information Architecture in 5 minutes
Yippee-IA: All you need to know about Information Architecture in 5 minutesYippee-IA: All you need to know about Information Architecture in 5 minutes
Yippee-IA: All you need to know about Information Architecture in 5 minutesChris How
 
Responsive Web Design - What You Need to Know to Get Started
Responsive Web Design - What You Need to Know to Get StartedResponsive Web Design - What You Need to Know to Get Started
Responsive Web Design - What You Need to Know to Get Startedjennybchicken
 
Twitter in the Internet of Things
Twitter in the Internet of ThingsTwitter in the Internet of Things
Twitter in the Internet of ThingsAndy Piper
 
The Terminal Plan: How to Sell A Startup [Geoff Lewis Presentation @ SXSW …
The Terminal Plan: How to Sell A Startup [Geoff Lewis Presentation @ SXSW …The Terminal Plan: How to Sell A Startup [Geoff Lewis Presentation @ SXSW …
The Terminal Plan: How to Sell A Startup [Geoff Lewis Presentation @ SXSW …Geoff Lewis
 
Combining Context with Signals in the IoT (longer version)
Combining Context with Signals in the IoT (longer version)Combining Context with Signals in the IoT (longer version)
Combining Context with Signals in the IoT (longer version)Andy Piper
 
The problem with passwords on the web and what to do about it
The problem with passwords on the web and what to do about itThe problem with passwords on the web and what to do about it
The problem with passwords on the web and what to do about itFrancois Marier
 
Student Mentoring Programs: The Why's, How's, and More
Student Mentoring Programs: The Why's, How's, and MoreStudent Mentoring Programs: The Why's, How's, and More
Student Mentoring Programs: The Why's, How's, and MoreCindy Pao
 
After the install
After the installAfter the install
After the installAl Davis
 
Arquillian: Helping web developers and QA get along
Arquillian: Helping web developers and QA get alongArquillian: Helping web developers and QA get along
Arquillian: Helping web developers and QA get alongLukáš Fryč
 
Título de experto en programación con tecnologías web
Título de experto en programación con tecnologías webTítulo de experto en programación con tecnologías web
Título de experto en programación con tecnologías webAlicantePHP
 

Viewers also liked (20)

Desconf 2011 - Usar e esquecer suas ideias
Desconf 2011 - Usar e esquecer suas ideias    Desconf 2011 - Usar e esquecer suas ideias
Desconf 2011 - Usar e esquecer suas ideias
 
360Alumni; The Case For Online Communities
360Alumni; The Case For Online Communities360Alumni; The Case For Online Communities
360Alumni; The Case For Online Communities
 
Securing the Web without site-specific passwords
Securing the Web without site-specific passwordsSecuring the Web without site-specific passwords
Securing the Web without site-specific passwords
 
Presenting the work of OSMF Working Groups - State of the Map 2013
Presenting the work of OSMF Working Groups - State of the Map 2013Presenting the work of OSMF Working Groups - State of the Map 2013
Presenting the work of OSMF Working Groups - State of the Map 2013
 
Marketing Your Tech Talent - OSCON 2014 - without speaker notes
Marketing Your Tech Talent - OSCON 2014 - without speaker notesMarketing Your Tech Talent - OSCON 2014 - without speaker notes
Marketing Your Tech Talent - OSCON 2014 - without speaker notes
 
Varnish in action phpuk11
Varnish in action phpuk11Varnish in action phpuk11
Varnish in action phpuk11
 
Présentation de LemonLDAP::NG aux Journées Perl 2016
Présentation de LemonLDAP::NG aux Journées Perl 2016Présentation de LemonLDAP::NG aux Journées Perl 2016
Présentation de LemonLDAP::NG aux Journées Perl 2016
 
Pistoia Alliance App Strategy
Pistoia Alliance App StrategyPistoia Alliance App Strategy
Pistoia Alliance App Strategy
 
Yippee-IA: All you need to know about Information Architecture in 5 minutes
Yippee-IA: All you need to know about Information Architecture in 5 minutesYippee-IA: All you need to know about Information Architecture in 5 minutes
Yippee-IA: All you need to know about Information Architecture in 5 minutes
 
Responsive Web Design - What You Need to Know to Get Started
Responsive Web Design - What You Need to Know to Get StartedResponsive Web Design - What You Need to Know to Get Started
Responsive Web Design - What You Need to Know to Get Started
 
Real World F# - SDD 2015
Real World F# -  SDD 2015Real World F# -  SDD 2015
Real World F# - SDD 2015
 
Twitter in the Internet of Things
Twitter in the Internet of ThingsTwitter in the Internet of Things
Twitter in the Internet of Things
 
The Terminal Plan: How to Sell A Startup [Geoff Lewis Presentation @ SXSW …
The Terminal Plan: How to Sell A Startup [Geoff Lewis Presentation @ SXSW …The Terminal Plan: How to Sell A Startup [Geoff Lewis Presentation @ SXSW …
The Terminal Plan: How to Sell A Startup [Geoff Lewis Presentation @ SXSW …
 
Combining Context with Signals in the IoT (longer version)
Combining Context with Signals in the IoT (longer version)Combining Context with Signals in the IoT (longer version)
Combining Context with Signals in the IoT (longer version)
 
GitHub for the Rest of Us
GitHub for the Rest of UsGitHub for the Rest of Us
GitHub for the Rest of Us
 
The problem with passwords on the web and what to do about it
The problem with passwords on the web and what to do about itThe problem with passwords on the web and what to do about it
The problem with passwords on the web and what to do about it
 
Student Mentoring Programs: The Why's, How's, and More
Student Mentoring Programs: The Why's, How's, and MoreStudent Mentoring Programs: The Why's, How's, and More
Student Mentoring Programs: The Why's, How's, and More
 
After the install
After the installAfter the install
After the install
 
Arquillian: Helping web developers and QA get along
Arquillian: Helping web developers and QA get alongArquillian: Helping web developers and QA get along
Arquillian: Helping web developers and QA get along
 
Título de experto en programación con tecnologías web
Título de experto en programación con tecnologías webTítulo de experto en programación con tecnologías web
Título de experto en programación con tecnologías web
 

Similar to Keeping 100m+ users happy: How we test Shazam on Android

How to build rock solid apps and keep 100m+ users happy
How to build rock solid apps and keep 100m+ users happyHow to build rock solid apps and keep 100m+ users happy
How to build rock solid apps and keep 100m+ users happyIordanis (Jordan) Giannakakis
 
How to build rock solid apps & keep 100m+ users happy
How to build rock solid apps & keep 100m+ users happyHow to build rock solid apps & keep 100m+ users happy
How to build rock solid apps & keep 100m+ users happyIordanis (Jordan) Giannakakis
 
Android the Agile way
Android the Agile wayAndroid the Agile way
Android the Agile wayAshwin Raghav
 
Webdriver with Thucydides - TdT@Cluj #18
Webdriver with Thucydides - TdT@Cluj #18Webdriver with Thucydides - TdT@Cluj #18
Webdriver with Thucydides - TdT@Cluj #18Tabăra de Testare
 
The 2016 Android Developer Toolbox [MOBILIZATION]
The 2016 Android Developer Toolbox [MOBILIZATION]The 2016 Android Developer Toolbox [MOBILIZATION]
The 2016 Android Developer Toolbox [MOBILIZATION]Nilhcem
 
The 2016 Android Developer Toolbox [NANTES]
The 2016 Android Developer Toolbox [NANTES]The 2016 Android Developer Toolbox [NANTES]
The 2016 Android Developer Toolbox [NANTES]Nilhcem
 
My way to clean android - Android day salamanca edition
My way to clean android - Android day salamanca editionMy way to clean android - Android day salamanca edition
My way to clean android - Android day salamanca editionChristian Panadero
 
Droidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offlineDroidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offlineJavier de Pedro López
 
Testing ASP.net Web Applications using Ruby
Testing ASP.net Web Applications using RubyTesting ASP.net Web Applications using Ruby
Testing ASP.net Web Applications using RubyBen Hall
 
Automated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.xAutomated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.xTatsuya Maki
 
Code to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern ApplicationsCode to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern ApplicationsCaleb Jenkins
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best PracticesYekmer Simsek
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code lessAnton Novikau
 
Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15Murat Yener
 
Predictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and ReduxPredictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and ReduxFITC
 
Secret unit testing tools
Secret unit testing toolsSecret unit testing tools
Secret unit testing toolsDror Helper
 
Unit testing without Robolectric, Droidcon Berlin 2016
Unit testing without Robolectric, Droidcon Berlin 2016Unit testing without Robolectric, Droidcon Berlin 2016
Unit testing without Robolectric, Droidcon Berlin 2016Danny Preussler
 
Testing javascript in the frontend
Testing javascript in the frontendTesting javascript in the frontend
Testing javascript in the frontendFrederic CABASSUT
 
Developing Google Glass
Developing Google GlassDeveloping Google Glass
Developing Google GlassJohnny Sung
 

Similar to Keeping 100m+ users happy: How we test Shazam on Android (20)

How to build rock solid apps and keep 100m+ users happy
How to build rock solid apps and keep 100m+ users happyHow to build rock solid apps and keep 100m+ users happy
How to build rock solid apps and keep 100m+ users happy
 
How to build rock solid apps & keep 100m+ users happy
How to build rock solid apps & keep 100m+ users happyHow to build rock solid apps & keep 100m+ users happy
How to build rock solid apps & keep 100m+ users happy
 
Device fragmentation vs clean code
Device fragmentation vs clean codeDevice fragmentation vs clean code
Device fragmentation vs clean code
 
Android the Agile way
Android the Agile wayAndroid the Agile way
Android the Agile way
 
Webdriver with Thucydides - TdT@Cluj #18
Webdriver with Thucydides - TdT@Cluj #18Webdriver with Thucydides - TdT@Cluj #18
Webdriver with Thucydides - TdT@Cluj #18
 
The 2016 Android Developer Toolbox [MOBILIZATION]
The 2016 Android Developer Toolbox [MOBILIZATION]The 2016 Android Developer Toolbox [MOBILIZATION]
The 2016 Android Developer Toolbox [MOBILIZATION]
 
The 2016 Android Developer Toolbox [NANTES]
The 2016 Android Developer Toolbox [NANTES]The 2016 Android Developer Toolbox [NANTES]
The 2016 Android Developer Toolbox [NANTES]
 
My way to clean android - Android day salamanca edition
My way to clean android - Android day salamanca editionMy way to clean android - Android day salamanca edition
My way to clean android - Android day salamanca edition
 
Droidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offlineDroidcon ES '16 - How to fail going offline
Droidcon ES '16 - How to fail going offline
 
Testing ASP.net Web Applications using Ruby
Testing ASP.net Web Applications using RubyTesting ASP.net Web Applications using Ruby
Testing ASP.net Web Applications using Ruby
 
Automated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.xAutomated%20testing%20with%20Espresso2.x
Automated%20testing%20with%20Espresso2.x
 
Code to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern ApplicationsCode to DI For - Dependency Injection for Modern Applications
Code to DI For - Dependency Injection for Modern Applications
 
Android Best Practices
Android Best PracticesAndroid Best Practices
Android Best Practices
 
How to code to code less
How to code to code lessHow to code to code less
How to code to code less
 
Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15Android and the Seven Dwarfs from Devox'15
Android and the Seven Dwarfs from Devox'15
 
Predictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and ReduxPredictable Web Apps with Angular and Redux
Predictable Web Apps with Angular and Redux
 
Secret unit testing tools
Secret unit testing toolsSecret unit testing tools
Secret unit testing tools
 
Unit testing without Robolectric, Droidcon Berlin 2016
Unit testing without Robolectric, Droidcon Berlin 2016Unit testing without Robolectric, Droidcon Berlin 2016
Unit testing without Robolectric, Droidcon Berlin 2016
 
Testing javascript in the frontend
Testing javascript in the frontendTesting javascript in the frontend
Testing javascript in the frontend
 
Developing Google Glass
Developing Google GlassDeveloping Google Glass
Developing Google Glass
 

Recently uploaded

Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxKartikeyaDwivedi3
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024hassan khalil
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptSAURABHKUMAR892774
 
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)Dr SOUNDIRARAJ N
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvLewisJB
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptJasonTagapanGulla
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)dollysharma2066
 
Transport layer issues and challenges - Guide
Transport layer issues and challenges - GuideTransport layer issues and challenges - Guide
Transport layer issues and challenges - GuideGOPINATHS437943
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfAsst.prof M.Gokilavani
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfAsst.prof M.Gokilavani
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEroselinkalist12
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncssuser2ae721
 
US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionMebane Rash
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHC Sai Kiran
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionDr.Costas Sachpazis
 
8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitterShivangiSharma879191
 
An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...Chandu841456
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catcherssdickerson1
 

Recently uploaded (20)

Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptx
 
Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024Architect Hassan Khalil Portfolio for 2024
Architect Hassan Khalil Portfolio for 2024
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.ppt
 
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
UNIT III ANALOG ELECTRONICS (BASIC ELECTRONICS)
 
Work Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvvWork Experience-Dalton Park.pptxfvvvvvvv
Work Experience-Dalton Park.pptxfvvvvvvv
 
Design and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdfDesign and analysis of solar grass cutter.pdf
Design and analysis of solar grass cutter.pdf
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.ppt
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
 
Transport layer issues and challenges - Guide
Transport layer issues and challenges - GuideTransport layer issues and challenges - Guide
Transport layer issues and challenges - Guide
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
 
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdfCCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
CCS355 Neural Networks & Deep Learning Unit 1 PDF notes with Question bank .pdf
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
 
US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of Action
 
Introduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECHIntroduction to Machine Learning Unit-3 for II MECH
Introduction to Machine Learning Unit-3 for II MECH
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
 
8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter
 
An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
 
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
 

Keeping 100m+ users happy: How we test Shazam on Android