SlideShare une entreprise Scribd logo
1  sur  82
Télécharger pour lire hors ligne
Testing of distributed
                      applications
                                 Rails Way Con 2011
                                Jens-Christian Fischer
                        with Michael Mahlberg & Keith Bingman

                                  jcf@mobino.com

                                     @jcfischer

Freitag, 3. Juni 2011
le x
                                m  p
                              co
                 Testing of distributed
                            applications
                                 Rails Way Con 2011
                                Jens-Christian Fischer
                        with Michael Mahlberg & Keith Bingman

                                  jcf@mobino.com

                                     @jcfischer

Freitag, 3. Juni 2011
Agenda

                        • Background
                        • What & Why & How of Testing
                        • Discover the state of your apps
                        • Make testable apps
Freitag, 3. Juni 2011
why?
Freitag, 3. Juni 2011
Freitag, 3. Juni 2011
we move money


Freitag, 3. Juni 2011
What is behind?
                                    1 Rails app
                                   5 Sinatra apps
                                  1 Ruby daemon
                                   1 VOIP Server
                               1 Speech Synthesizer
                             1 SQL Database (Postgres)
                        1 NoSQL Server (Redis) (with Resque)
Freitag, 3. Juni 2011
Architecture

Freitag, 3. Juni 2011
Merchant Web
                        Customer Web                     Customer Voice
                                          Widget



                          Volcker        Trichet                     Freeswitch




                         Duisenberg      Keynes       Greenspan




                           Redis          Smith                           VAAS




                                        Postgres 9                        Acapela


Freitag, 3. Juni 2011
Merchant Web
                        Customer Web                     Customer Voice
                                          Widget



                          Volcker        Trichet                     Freeswitch




                         Duisenberg      Keynes       Greenspan




                           Redis          Smith                           VAAS




                                        Postgres 9                        Acapela


Freitag, 3. Juni 2011
Merchant Web
                        Customer Web                        Customer Voice
                                             Widget



                          Volcker   FrontTrichet                        Freeswitch




                         Duisenberg         Keynes       Greenspan


                                        Back                            Voice
                            Redis            Smith                           VAAS




                                      Database
                                           Postgres 9                        Acapela


Freitag, 3. Juni 2011
Trichet       Volcker   Duisenberg




Greenspan               Keynes      Smith
Freitag, 3. Juni 2011
Freitag, 3. Juni 2011
Testing

Freitag, 3. Juni 2011
The old days


                        • Simple web apps
                        • Click through testing

Freitag, 3. Juni 2011
Testi
                                          g   n
     Royce, W. (1970). Managing the development of large
       software systems. Proceedings of IEEE Wescon.
Freitag, 3. Juni 2011
Freitag, 3. Juni 2011
Freitag, 3. Juni 2011
Freitag, 3. Juni 2011
In Rails
                                 —
                        everything is better

Freitag, 3. Juni 2011
Automated Tests

                             Unit
                          Integration
                        Frontend tests
Freitag, 3. Juni 2011
Complexity
                  • Modern applications consist of
                    many pieces
                  • App Servers, DB, NoSQL, Speech
                    WebServices, Telephony,
                        Synthesizers
                  •     HTTP, Line Protocols, JSON,
                        XML, Corba, RMI

Freitag, 3. Juni 2011
What to test
                  Robert „UncleBob“ Martin:
                  •Unit Tests
                  •Component Tests
                  •Integration Tests
                  •System Test
                  •Manual Tests
                  http://stackoverflow.com/questions/2965483
Freitag, 3. Juni 2011
Unit Tests

                        • Close to 100% code coverage
                        • Test Driven Development
                        • Written by Programmers

Freitag, 3. Juni 2011
Component Tests

                        • Test ~50% of the System
                        • Cucumber / Selenium / Fitnesse
                        • Written by QA & Analysts
                        • Happy Path & some unhappy
                          paths


Freitag, 3. Juni 2011
Integration Tests

                        • Cover ~20% of system
                        • Test assembly of components
                        • Cucumber / Selenium / Fitnesse
                        • Written by Architects
Freitag, 3. Juni 2011
System Tests

                        • Cover 10% of the system
                        • Test the whole system
                        • Cucumber / Selenium / Fitnesse
                        • Written by Architects
Freitag, 3. Juni 2011
Manual Tests
                  • Exploratory Manual Tests
                  • Manual but not scripted
                  • Human ingenuity & creativity
                  Bach, J. (n.d.). Exploratory testing explained. Online:
                  http://www. satisfice. com/articles/et-article. pdf.



Freitag, 3. Juni 2011
Where do we
                          test?
Freitag, 3. Juni 2011
Testing the
                          edges
Freitag, 3. Juni 2011
Merchant Web
                        Customer Web                     Customer Voice
                                          Widget



                          Volcker        Trichet                     Freeswitch




                         Duisenberg      Keynes       Greenspan




                           Redis          Smith                           VAAS




                                        Postgres 9                        Acapela


Freitag, 3. Juni 2011
Merchant Web
                        Customer Web                     Customer Voice
                                          Widget



                          Volcker        Trichet                     Freeswitch




                         Duisenberg      Keynes       Greenspan




                           Redis          Smith                           VAAS




                                        Postgres 9                        Acapela


Freitag, 3. Juni 2011
How do we
                          test?
Freitag, 3. Juni 2011
http://blog.objectmentor.com/articles/2009/09/29/
               ruining-your-test-automation-strategy
Freitag, 3. Juni 2011
Tools of the trade
                             Selenium
                             Cucumber
                               Steak
                             capybara
                              webkit
                              zombie
Freitag, 3. Juni 2011
only cover a minimal
                                part

                           the web frontend,
                        but our apps are so much
                                  more


Freitag, 3. Juni 2011
Decoupling


                        Systems diverge
                         APIs diverge


Freitag, 3. Juni 2011
Web Services


                          Many services
                        outside our control

Freitag, 3. Juni 2011
Freitag, 3. Juni 2011
Synchronizing

                        • Tests require complex state
                          across several systems
                        • Tests involvebetween systems
                          interactions
                                        complex




Freitag, 3. Juni 2011
Questions

Freitag, 3. Juni 2011
Questions to ask

                        • Development
                        • Testing
                        • Production

Freitag, 3. Juni 2011
Development


                        Is the system I‘m
                         building correct?

Freitag, 3. Juni 2011
Test

                        Do all the pieces of
                         the system work
                            together?

Freitag, 3. Juni 2011
Production


                        Are all parts of my
                         system working?

Freitag, 3. Juni 2011
Development
                        • Test Driven Development only
                          takes you so far
                        • Test a single component
                        • Unit tests in work, but don‘t
                          components
                                        multiple

                         „cross the chasm“

Freitag, 3. Juni 2011
Development
        • Setting up a complete system for
          development can be taxing
        • pow to the rescue
          http://pow.cx/
        • Foreman
          https://github.com/ddollar/foreman

Freitag, 3. Juni 2011
Testing

                        • Integration tests need to
                          stress complete application
                            stack
                        •   Does your CI Server handle
                            this?


Freitag, 3. Juni 2011
Outside your
                            app
Freitag, 3. Juni 2011
Merchant Web
                        Customer Web                     Customer Voice
                                          Widget



                          Volcker        Trichet                     Freeswitch




                         Duisenberg      Keynes       Greenspan




                           Redis          Smith                           VAAS




                                        Postgres 9                        Acapela


Freitag, 3. Juni 2011
Merchant Web
                        Customer Web                     Customer Voice
                                          Widget



                          Volcker        Trichet                     Freeswitch




                         Duisenberg      Keynes       Greenspan




                           Redis          Smith                           VAAS




                                        Postgres 9                        Acapela


Freitag, 3. Juni 2011
Write Mock Services


                        • If youitdon‘t control it,
                          mock
                        • „Rails Enterprise ready ™ “

Freitag, 3. Juni 2011
Mock Services
                        • Allowsspecification against a
                          „real“
                                  you to code

                        • Allows of said code against
                          failure
                                  you to
                                         service
                        • Gives you a stick to beat up
                          the developers of said service
                         („Rails-Enterprise ready“ ™ )

Freitag, 3. Juni 2011
Making it
                         work
Freitag, 3. Juni 2011
Version Control
                          Repository setup
                         One Big repository?
                        One repository for each
                             component?
                          Tagging / Syncing


Freitag, 3. Juni 2011
Development Servers
                  Webrick doesn‘t scale

                  but:
                  it‘s „easy“ for Rack based apps
                  pow by 37 Signals
                  (Mac Only)

Freitag, 3. Juni 2011
Configuration

              Configuring half a dozen applications
                     Again: Synchronisation
              Inject configuration (Example Picky)
                 http://florianhanke.com/picky/

Freitag, 3. Juni 2011
Production

                        Is my system working correctly?
                        Probes
                        •  DTrace (OSX, Solaris)
                        •  Monitoring (Scout, NewRelic)
                        •  Your own probes

Freitag, 3. Juni 2011
Freitag, 3. Juni 2011
Freitag, 3. Juni 2011
Car industry

                  If car manufacturers would build
                  engines the way enterprise IT
                  systems are built, you‘d need to
                  remove the engine from the car
                  and disassemble it completely to
                  find a fault
                               — @MMahlberg, 2011
Freitag, 3. Juni 2011
OBD
         •        1996: The OBD-II specification is made mandatory for
                  all cars sold in the United States.
         •        2001: The European Union makes EOBD mandatory for
                  all gasoline (petrol) vehicles sold in the European Union,
                  starting in MY2001 (see European emission standards
                  Directive 98/69/EC [1]).
         •        2008: All cars sold in the United States are required to
                  use the ISO 15765-4 [2] signaling standard (a variant of
                  the Controller Area Network (CAN) bus).


         http://en.wikipedia.org/wiki/On-board_diagnostics

Freitag, 3. Juni 2011
Solved Problem

Freitag, 3. Juni 2011
Freitag, 3. Juni 2011
http://the-adam.com/adam/rantrave/ibm_360.jpg
Freitag, 3. Juni 2011
Diagnosis Channel

      • Known from Car / Planes / Mainframes
      • Red lights on your dashboard
      • Complete diagnosis of system possible
      • Complete remote control possible
Freitag, 3. Juni 2011
Rolls Royce


                        • InFlight Diagnosis of engines
                          remotely




Freitag, 3. Juni 2011
Dashboard


                        • Look into state of application
                        • Sanity Checker

Freitag, 3. Juni 2011
Dashboarding

                        • Extract relevant data from
                          your system
                         • How many req / s
                         • How many logins
                        • Delta / Trends
Freitag, 3. Juni 2011
SanityChecker

                        • API stateallows you to extract
                          the
                               that
                                    of your app
                         • DB there?
                         • All neighbouring components
                           reachable?


Freitag, 3. Juni 2011
Chaos Monkey


                        • Random failures
                        • Better reliability

Freitag, 3. Juni 2011
Build testable apps
        • Expose your internals (through APIs)
        • Use SOLID design
              • Single Responsibility Principle
              • Open Closed
              • Liskov Substitution Principle
              • Inversion of Control
              • Dependency Injection
Freitag, 3. Juni 2011
Testable apps


                        • Obey the abstraction layers
                         • keep of abstractionat it‘s own
                           level
                                 each method




Freitag, 3. Juni 2011
Build probe-able apps

                  • Measure APIs
                  $	
  rails	
  console	
  production



Freitag, 3. Juni 2011
Build controllable apps
                        • Call functionality of the app
                         • Create new user
                         • Create transactions
                         • Delete stuff
                         • Do stuff
                         • ...
Freitag, 3. Juni 2011
Test user / Magic
                • In „Enterprise“ systems:
                 • Test Company
                 • Test User
                 • Test Accounts
                • Are those in production system?
                • Do everything - or not quite?
Freitag, 3. Juni 2011
Use production data
                  in development / test


Freitag, 3. Juni 2011
Wrapping up

Freitag, 3. Juni 2011
What & Why & How of Testing
         Discover the state of your apps
               Make testable apps


Freitag, 3. Juni 2011
Thank you!

Freitag, 3. Juni 2011
Credits

                        • http://www.flickr.com/photos/
                          myoldpostcards/4020087797/
                        • http://www.flickr.com/photos/
                          benncapon/390585495/
                        • iStockphoto
Freitag, 3. Juni 2011
License




      http://creativecommons.org/licenses/by-nc-sa/2.5/ch/
Freitag, 3. Juni 2011

Contenu connexe

Similaire à Testing distributed, complex web applications

Visualizations of Spatial and Social Data
Visualizations of Spatial and Social DataVisualizations of Spatial and Social Data
Visualizations of Spatial and Social Data
interface2011
 
Jenkins User Conference - Twitter4J, Jenkins and regression
Jenkins User Conference - Twitter4J, Jenkins and regressionJenkins User Conference - Twitter4J, Jenkins and regression
Jenkins User Conference - Twitter4J, Jenkins and regression
Yusuke Yamamoto
 
Deployment presentation
Deployment presentationDeployment presentation
Deployment presentation
Corey Purcell
 
Belak_ICME_June02015
Belak_ICME_June02015Belak_ICME_June02015
Belak_ICME_June02015
Jim Belak
 
Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
Beyond Horizontal Scalability: Concurrency and Messaging Using SpringBeyond Horizontal Scalability: Concurrency and Messaging Using Spring
Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
Bruce Snyder
 

Similaire à Testing distributed, complex web applications (18)

Extreme Testing with Selenium - @hugs at Jenkins User Conference 2011
Extreme Testing with Selenium - @hugs at Jenkins User Conference 2011Extreme Testing with Selenium - @hugs at Jenkins User Conference 2011
Extreme Testing with Selenium - @hugs at Jenkins User Conference 2011
 
Tools For jQuery Application Architecture (Extended Slides)
Tools For jQuery Application Architecture (Extended Slides)Tools For jQuery Application Architecture (Extended Slides)
Tools For jQuery Application Architecture (Extended Slides)
 
Open Source Test Workshop for QA Testers, Developers, IT Managers
Open Source Test Workshop for QA Testers, Developers, IT ManagersOpen Source Test Workshop for QA Testers, Developers, IT Managers
Open Source Test Workshop for QA Testers, Developers, IT Managers
 
Visualizations of Spatial and Social Data
Visualizations of Spatial and Social DataVisualizations of Spatial and Social Data
Visualizations of Spatial and Social Data
 
PushToTest TestMaker 6.5 Open Source Test Design Document
PushToTest TestMaker 6.5 Open Source Test Design DocumentPushToTest TestMaker 6.5 Open Source Test Design Document
PushToTest TestMaker 6.5 Open Source Test Design Document
 
Open Source Test Workshop for CIOs, CTOs, Managers
Open Source Test Workshop for CIOs, CTOs, ManagersOpen Source Test Workshop for CIOs, CTOs, Managers
Open Source Test Workshop for CIOs, CTOs, Managers
 
Jenkins User Conference - Twitter4J, Jenkins and regression
Jenkins User Conference - Twitter4J, Jenkins and regressionJenkins User Conference - Twitter4J, Jenkins and regression
Jenkins User Conference - Twitter4J, Jenkins and regression
 
Anthony Molinaro, OpenX, Erlang LA Meetup Slides
Anthony Molinaro, OpenX, Erlang LA Meetup SlidesAnthony Molinaro, OpenX, Erlang LA Meetup Slides
Anthony Molinaro, OpenX, Erlang LA Meetup Slides
 
Deployment presentation
Deployment presentationDeployment presentation
Deployment presentation
 
Belak_ICME_June02015
Belak_ICME_June02015Belak_ICME_June02015
Belak_ICME_June02015
 
2011 June - Singapore GTUG presentation. App Engine program update + intro to Go
2011 June - Singapore GTUG presentation. App Engine program update + intro to Go2011 June - Singapore GTUG presentation. App Engine program update + intro to Go
2011 June - Singapore GTUG presentation. App Engine program update + intro to Go
 
How Lanyrd uses Twitter
How Lanyrd uses TwitterHow Lanyrd uses Twitter
How Lanyrd uses Twitter
 
Understanding the evolution of software project communities
Understanding the evolution of software project communitiesUnderstanding the evolution of software project communities
Understanding the evolution of software project communities
 
Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
Beyond Horizontal Scalability: Concurrency and Messaging Using SpringBeyond Horizontal Scalability: Concurrency and Messaging Using Spring
Beyond Horizontal Scalability: Concurrency and Messaging Using Spring
 
AppScale Talk at SBonRails
AppScale Talk at SBonRailsAppScale Talk at SBonRails
AppScale Talk at SBonRails
 
Introducing Ext GWT 3.0
Introducing Ext GWT 3.0Introducing Ext GWT 3.0
Introducing Ext GWT 3.0
 
Invited talk at the GeoClouds Workshop, Indianapolis, 2009
Invited talk at the GeoClouds Workshop, Indianapolis, 2009Invited talk at the GeoClouds Workshop, Indianapolis, 2009
Invited talk at the GeoClouds Workshop, Indianapolis, 2009
 
A importância dos dados em sua arquitetura... uma visão muito além do SQL Ser...
A importância dos dados em sua arquitetura... uma visão muito além do SQL Ser...A importância dos dados em sua arquitetura... uma visão muito além do SQL Ser...
A importância dos dados em sua arquitetura... uma visão muito além do SQL Ser...
 

Plus de Jens-Christian Fischer

Plus de Jens-Christian Fischer (9)

Beyond HTML Internet Briefing
Beyond HTML Internet BriefingBeyond HTML Internet Briefing
Beyond HTML Internet Briefing
 
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehrBeyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
Beyond HTML - Scriptsprachen, Frameworks, Templatesprachen und vieles mehr
 
Architektur der kleinen Bausteine
Architektur der kleinen BausteineArchitektur der kleinen Bausteine
Architektur der kleinen Bausteine
 
Taking your Web App for a walk
Taking your Web App for a walkTaking your Web App for a walk
Taking your Web App for a walk
 
Mobino at Webmondy Frankfurt, Mai 2011
Mobino at Webmondy Frankfurt, Mai 2011Mobino at Webmondy Frankfurt, Mai 2011
Mobino at Webmondy Frankfurt, Mai 2011
 
SOLID Ruby, SOLID Rails
SOLID Ruby, SOLID RailsSOLID Ruby, SOLID Rails
SOLID Ruby, SOLID Rails
 
Ruby Coding Dojo
Ruby Coding DojoRuby Coding Dojo
Ruby Coding Dojo
 
Synology Workshop07 06
Synology Workshop07 06Synology Workshop07 06
Synology Workshop07 06
 
Offline Arbeiten
Offline ArbeitenOffline Arbeiten
Offline Arbeiten
 

Dernier

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Dernier (20)

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 

Testing distributed, complex web applications

  • 1. Testing of distributed applications Rails Way Con 2011 Jens-Christian Fischer with Michael Mahlberg & Keith Bingman jcf@mobino.com @jcfischer Freitag, 3. Juni 2011
  • 2. le x m p co Testing of distributed applications Rails Way Con 2011 Jens-Christian Fischer with Michael Mahlberg & Keith Bingman jcf@mobino.com @jcfischer Freitag, 3. Juni 2011
  • 3. Agenda • Background • What & Why & How of Testing • Discover the state of your apps • Make testable apps Freitag, 3. Juni 2011
  • 6. we move money Freitag, 3. Juni 2011
  • 7. What is behind? 1 Rails app 5 Sinatra apps 1 Ruby daemon 1 VOIP Server 1 Speech Synthesizer 1 SQL Database (Postgres) 1 NoSQL Server (Redis) (with Resque) Freitag, 3. Juni 2011
  • 9. Merchant Web Customer Web Customer Voice Widget Volcker Trichet Freeswitch Duisenberg Keynes Greenspan Redis Smith VAAS Postgres 9 Acapela Freitag, 3. Juni 2011
  • 10. Merchant Web Customer Web Customer Voice Widget Volcker Trichet Freeswitch Duisenberg Keynes Greenspan Redis Smith VAAS Postgres 9 Acapela Freitag, 3. Juni 2011
  • 11. Merchant Web Customer Web Customer Voice Widget Volcker FrontTrichet Freeswitch Duisenberg Keynes Greenspan Back Voice Redis Smith VAAS Database Postgres 9 Acapela Freitag, 3. Juni 2011
  • 12. Trichet Volcker Duisenberg Greenspan Keynes Smith Freitag, 3. Juni 2011
  • 15. The old days • Simple web apps • Click through testing Freitag, 3. Juni 2011
  • 16. Testi g n Royce, W. (1970). Managing the development of large software systems. Proceedings of IEEE Wescon. Freitag, 3. Juni 2011
  • 20. In Rails — everything is better Freitag, 3. Juni 2011
  • 21. Automated Tests Unit Integration Frontend tests Freitag, 3. Juni 2011
  • 22. Complexity • Modern applications consist of many pieces • App Servers, DB, NoSQL, Speech WebServices, Telephony, Synthesizers • HTTP, Line Protocols, JSON, XML, Corba, RMI Freitag, 3. Juni 2011
  • 23. What to test Robert „UncleBob“ Martin: •Unit Tests •Component Tests •Integration Tests •System Test •Manual Tests http://stackoverflow.com/questions/2965483 Freitag, 3. Juni 2011
  • 24. Unit Tests • Close to 100% code coverage • Test Driven Development • Written by Programmers Freitag, 3. Juni 2011
  • 25. Component Tests • Test ~50% of the System • Cucumber / Selenium / Fitnesse • Written by QA & Analysts • Happy Path & some unhappy paths Freitag, 3. Juni 2011
  • 26. Integration Tests • Cover ~20% of system • Test assembly of components • Cucumber / Selenium / Fitnesse • Written by Architects Freitag, 3. Juni 2011
  • 27. System Tests • Cover 10% of the system • Test the whole system • Cucumber / Selenium / Fitnesse • Written by Architects Freitag, 3. Juni 2011
  • 28. Manual Tests • Exploratory Manual Tests • Manual but not scripted • Human ingenuity & creativity Bach, J. (n.d.). Exploratory testing explained. Online: http://www. satisfice. com/articles/et-article. pdf. Freitag, 3. Juni 2011
  • 29. Where do we test? Freitag, 3. Juni 2011
  • 30. Testing the edges Freitag, 3. Juni 2011
  • 31. Merchant Web Customer Web Customer Voice Widget Volcker Trichet Freeswitch Duisenberg Keynes Greenspan Redis Smith VAAS Postgres 9 Acapela Freitag, 3. Juni 2011
  • 32. Merchant Web Customer Web Customer Voice Widget Volcker Trichet Freeswitch Duisenberg Keynes Greenspan Redis Smith VAAS Postgres 9 Acapela Freitag, 3. Juni 2011
  • 33. How do we test? Freitag, 3. Juni 2011
  • 34. http://blog.objectmentor.com/articles/2009/09/29/ ruining-your-test-automation-strategy Freitag, 3. Juni 2011
  • 35. Tools of the trade Selenium Cucumber Steak capybara webkit zombie Freitag, 3. Juni 2011
  • 36. only cover a minimal part the web frontend, but our apps are so much more Freitag, 3. Juni 2011
  • 37. Decoupling Systems diverge APIs diverge Freitag, 3. Juni 2011
  • 38. Web Services Many services outside our control Freitag, 3. Juni 2011
  • 40. Synchronizing • Tests require complex state across several systems • Tests involvebetween systems interactions complex Freitag, 3. Juni 2011
  • 42. Questions to ask • Development • Testing • Production Freitag, 3. Juni 2011
  • 43. Development Is the system I‘m building correct? Freitag, 3. Juni 2011
  • 44. Test Do all the pieces of the system work together? Freitag, 3. Juni 2011
  • 45. Production Are all parts of my system working? Freitag, 3. Juni 2011
  • 46. Development • Test Driven Development only takes you so far • Test a single component • Unit tests in work, but don‘t components multiple „cross the chasm“ Freitag, 3. Juni 2011
  • 47. Development • Setting up a complete system for development can be taxing • pow to the rescue http://pow.cx/ • Foreman https://github.com/ddollar/foreman Freitag, 3. Juni 2011
  • 48. Testing • Integration tests need to stress complete application stack • Does your CI Server handle this? Freitag, 3. Juni 2011
  • 49. Outside your app Freitag, 3. Juni 2011
  • 50. Merchant Web Customer Web Customer Voice Widget Volcker Trichet Freeswitch Duisenberg Keynes Greenspan Redis Smith VAAS Postgres 9 Acapela Freitag, 3. Juni 2011
  • 51. Merchant Web Customer Web Customer Voice Widget Volcker Trichet Freeswitch Duisenberg Keynes Greenspan Redis Smith VAAS Postgres 9 Acapela Freitag, 3. Juni 2011
  • 52. Write Mock Services • If youitdon‘t control it, mock • „Rails Enterprise ready ™ “ Freitag, 3. Juni 2011
  • 53. Mock Services • Allowsspecification against a „real“ you to code • Allows of said code against failure you to service • Gives you a stick to beat up the developers of said service („Rails-Enterprise ready“ ™ ) Freitag, 3. Juni 2011
  • 54. Making it work Freitag, 3. Juni 2011
  • 55. Version Control Repository setup One Big repository? One repository for each component? Tagging / Syncing Freitag, 3. Juni 2011
  • 56. Development Servers Webrick doesn‘t scale but: it‘s „easy“ for Rack based apps pow by 37 Signals (Mac Only) Freitag, 3. Juni 2011
  • 57. Configuration Configuring half a dozen applications Again: Synchronisation Inject configuration (Example Picky) http://florianhanke.com/picky/ Freitag, 3. Juni 2011
  • 58. Production Is my system working correctly? Probes • DTrace (OSX, Solaris) • Monitoring (Scout, NewRelic) • Your own probes Freitag, 3. Juni 2011
  • 61. Car industry If car manufacturers would build engines the way enterprise IT systems are built, you‘d need to remove the engine from the car and disassemble it completely to find a fault — @MMahlberg, 2011 Freitag, 3. Juni 2011
  • 62. OBD • 1996: The OBD-II specification is made mandatory for all cars sold in the United States. • 2001: The European Union makes EOBD mandatory for all gasoline (petrol) vehicles sold in the European Union, starting in MY2001 (see European emission standards Directive 98/69/EC [1]). • 2008: All cars sold in the United States are required to use the ISO 15765-4 [2] signaling standard (a variant of the Controller Area Network (CAN) bus). http://en.wikipedia.org/wiki/On-board_diagnostics Freitag, 3. Juni 2011
  • 66. Diagnosis Channel • Known from Car / Planes / Mainframes • Red lights on your dashboard • Complete diagnosis of system possible • Complete remote control possible Freitag, 3. Juni 2011
  • 67. Rolls Royce • InFlight Diagnosis of engines remotely Freitag, 3. Juni 2011
  • 68. Dashboard • Look into state of application • Sanity Checker Freitag, 3. Juni 2011
  • 69. Dashboarding • Extract relevant data from your system • How many req / s • How many logins • Delta / Trends Freitag, 3. Juni 2011
  • 70. SanityChecker • API stateallows you to extract the that of your app • DB there? • All neighbouring components reachable? Freitag, 3. Juni 2011
  • 71. Chaos Monkey • Random failures • Better reliability Freitag, 3. Juni 2011
  • 72. Build testable apps • Expose your internals (through APIs) • Use SOLID design • Single Responsibility Principle • Open Closed • Liskov Substitution Principle • Inversion of Control • Dependency Injection Freitag, 3. Juni 2011
  • 73. Testable apps • Obey the abstraction layers • keep of abstractionat it‘s own level each method Freitag, 3. Juni 2011
  • 74. Build probe-able apps • Measure APIs $  rails  console  production Freitag, 3. Juni 2011
  • 75. Build controllable apps • Call functionality of the app • Create new user • Create transactions • Delete stuff • Do stuff • ... Freitag, 3. Juni 2011
  • 76. Test user / Magic • In „Enterprise“ systems: • Test Company • Test User • Test Accounts • Are those in production system? • Do everything - or not quite? Freitag, 3. Juni 2011
  • 77. Use production data in development / test Freitag, 3. Juni 2011
  • 79. What & Why & How of Testing Discover the state of your apps Make testable apps Freitag, 3. Juni 2011
  • 81. Credits • http://www.flickr.com/photos/ myoldpostcards/4020087797/ • http://www.flickr.com/photos/ benncapon/390585495/ • iStockphoto Freitag, 3. Juni 2011
  • 82. License http://creativecommons.org/licenses/by-nc-sa/2.5/ch/ Freitag, 3. Juni 2011