Escaping Automated Test Hell - One Year Later

Wojciech Seliga
Wojciech SeligaCo-Founder & CEO at Spartez, Senior Dev Manager at Atlassian
Main sponsor




Escaping Automated Test Hell
        One year later...

        Wojciech Seliga
About me
• Coding for 30 years
• Agile Practices (inc. TDD) since 2003
• Dev Nerd, Tech Leader, Agile Coach,
  Speaker
• 5+ years with Atlassian (JIRA Development
  Team Lead)
• Spartez Co-founder
Year ago - recap
18 000 tests on all levels

 Very slow and fragile
    feedback loop
Serious performance and
    reliability issues
Feedback        Test
 Speed         Quality
           `
Respect   Restructure
Design           Share
         Prune

   Test Code is Not
        Trash
Refactor
                 Maintain
       Review
                Discuss
Optimum Balance
Optimum Balance




Isolation
Optimum Balance




Isolation Speed
Optimum Balance




Isolation Speed Coverage
Optimum Balance




Isolation Speed Coverage Level
Optimum Balance




Isolation Speed Coverage Level   Access
Optimum Balance




Isolation Speed Coverage Level   Access   Effort
Dangerous to temper with
Dangerous to temper with




Quality / Determinism
Dangerous to temper with




Quality / Determinism   Maintainability
Splitting codebase is
 key aspect of short
 test feedback loop
Now
People - Motivation
Shades of Red
Pragmatic CI Health
Build Tiers and Policy

Tier A1 - green soon after all commits
         unit tests and functional* tests

Tier A2 - green at the end of the day
      WebDriver and bundled plugins tests

Tier A3 - green at the end of the iteration
  supported platforms tests, compatibility tests
Wallboards:
 Constant
Awareness
Training
• assertThat over assertTrue/False and
  assertEquals
• avoiding races - Atlassian Selenium with its
  TimedElement
• Unit tests over functional tests
• Brownbags, blogs, code reviews
Quality
Re-run failed tests and see if they pass




Automatic Flakiness Detection
        Quarantine
Quarantine - Healing
SlowMo - expose races
Selenium 1
Selenium 1
Selenium ditching
  Sky did not fall in
Ditching - benefits

• Freed build agents - better system
  throughput
• Boosted morale
• Gazillion of developer hours saved
• Money saved on infrastructure
Ditching - due diligence

• conducting the audit - analysis of the
  coverage we lost
• determining which tests needs to rewritten
  (e.g. security related)
• rewriting the tests
Flaky Browser-based Tests
 Races between test code and asynchronous page logic




  Playing with "loading" CSS class does not really help
Races Removal with Tracing
// in the browser:
function mySearchClickHandler() {
    doSomeXhr().always(function() {
        // This executes when the XHR has completed (either success or failure)
        JIRA.trace("search.completed");
    });
}
// In production code JIRA.trace is a no-op

// in my page object:
@Inject
TraceContext traceContext;
 
public SearchResults doASearch() {
    Tracer snapshot = traceContext.checkpoint();
    getSearchButton().click(); // causes mySearchClickHandler to be invoked
    // This waits until the "search.completed"
    // event has been emitted, *after* previous snapshot    
    traceContext.waitFor(snapshot, "search.completed");
    return pageBinder.bind(SearchResults.class);
}
Speed
Speed




Can we halve our build times?
Parallel Execution - Theory
    Batches




Start of Build   End of Build
Parallel Execution
    Batches




Start of Build          End of Build
Parallel Execution -
  Agent
availability
               Reality Bites
      Batches




  Start of Build              End of Build
Dynamic Test Execution
 Dispatch - Hallelujah
Dynamic Test Execution
 Dispatch - Hallelujah
"You can't manage what
  you can't measure."
             W. Edwards Deming
If y
    ou
  you   bel
            ieve
   "Youare manage what
        can't    just
            doo        i i
     you can't measure."n
                 me        t
                    d.
                 W. Edwards Deming
You can't improve something
   if you can't measure it
You can't improve something
   if you can't measure it
  Profiler, Build statistics, Logs, statsd → Graphite
Compilation
        Packaging




           Executing Tests


Anatomy of Build*
Fetching Dependencies
       Compilation
             Packaging




               Executing Tests


 Anatomy of Build*
Fetching Dependencies
       Compilation
             Packaging




                           Executing Tests


 Anatomy of Build*
    *Any resemblance to maven build is entirely accidental
Fetching Dependencies
          Compilation
                Packaging




SCM Update                    Executing Tests


    Anatomy of Build*
       *Any resemblance to maven build is entirely accidental
Agent Availability/Setup
        Fetching Dependencies
                  Compilation
                         Packaging




    SCM Update                       Executing Tests


          Anatomy of Build*
              *Any resemblance to maven build is entirely accidental
Agent Availability/Setup
        Fetching Dependencies
                  Compilation
                         Packaging                            Publishing Results




    SCM Update                       Executing Tests


          Anatomy of Build*
              *Any resemblance to maven build is entirely accidental
Compilation (7min)




JIRA Unit Tests Build
Compilation (7min)

                 Packaging (0min)




JIRA Unit Tests Build
Compilation (7min)

                 Packaging (0min)




                   Executing Tests (7min)



JIRA Unit Tests Build
Compilation (7min)
                   Publishing Results (1min)
                  Packaging (0min)




                    Executing Tests (7min)



JIRA Unit Tests Build
Compilation (7min)
                   Publishing Results (1min)
                  Packaging (0min)




                   Executing Tests (7min)
   Fetching Dependencies (1.5min)

JIRA Unit Tests Build
Compilation (7min)
                       Publishing Results (1min)
SCM Update (2min)     Packaging (0min)




                         Executing Tests (7min)
         Fetching Dependencies (1.5min)

   JIRA Unit Tests Build
Agent Availability/Setup (mean 10min)
               Compilation (7min)
                                Publishing Results (1min)
   SCM Update (2min)           Packaging (0min)




                              Executing Tests (7min)
              Fetching Dependencies (1.5min)

       JIRA Unit Tests Build
Decreasing Test
  Execution Time to
        ZERRO
alone would not let us
   achieve our goal!
Agent Availability/Setup

• starved builds due to
  busy agents building
  very long builds
• time synchronization
  issue - NTPD problem
SCM Update - Checkout time

•   Proximity of SCM repo

•   shallow git clones are not so fast and lightweight +
    generating extra git server CPU load

•   git clone per agent/plan + git pull + git clone per build
    (hard links!)

•   Stash was thankful (queue)
SCM Update - Checkout time

•   Proximity of SCM repo

•   shallow git clones are not so fast and lightweight +
    generating extra git server CPU load

•   git clone per agent/plan + git pull + git clone per build
    (hard links!)

•   Stash was thankful (queue)

        2 min → 5 seconds
Escaping Automated Test Hell - One Year Later
Fetching Dependencies
• Fix Predator
• Sandboxing/isolation agent trade-off:
  rm -rf $HOME/.m2/repository/com/atlassian/*

  into
  find $HOME/.m2/repository/com/atlassian/
  -name “*SNAPSHOT*” | xargs rm


• Network hardware failure found
  (dropping packets)
Fetching Dependencies
• Fix Predator
• Sandboxing/isolation agent trade-off:
  rm -rf $HOME/.m2/repository/com/atlassian/*

  into
  find $HOME/.m2/repository/com/atlassian/
  -name “*SNAPSHOT*” | xargs rm


• Network hardware failure found
  (dropping packets)

     1.5 min → 10 seconds
Compilation

• Restructuring multi-pom maven project
  and dependencies
• Maven 3 parallel compilation FTW
                        -T 1.5C
  *optimal factor thanks to scientific trial and error research
Compilation

• Restructuring multi-pom maven project
  and dependencies
• Maven 3 parallel compilation FTW
                        -T 1.5C
  *optimal factor thanks to scientific trial and error research



          7 min → 1 min
Unit Test Execution
   • Splitting unit tests into 2 buckets: good and
     legacy (much longer)
   • Maven 3 parallel test execution (-T 1.5C)
3000 poor tests                  11000 good tests
    (5min)                           (1.5min)
Unit Test Execution
   • Splitting unit tests into 2 buckets: good and
     legacy (much longer)
   • Maven 3 parallel test execution (-T 1.5C)
3000 poor tests                  11000 good tests
    (5min)                           (1.5min)


          7 min → 5 min
Functional Tests
• Selenium 1 removal did help
• Faster reset/restore (avoid unnecessary
  stuff, intercepting SQL operations for debug
  purposes - building stacktraces is costly)
• Restoring via Backdoor REST API
• Using REST API for common setup/
  teardown operations
Functional Tests
Publishing Results

• Server log allocation per test → using now
  Backdoor REST API (was Selenium)
• Bamboo DB performance degradation for
  rich build history - to be addressed
Publishing Results

• Server log allocation per test → using now
  Backdoor REST API (was Selenium)
• Bamboo DB performance degradation for
  rich build history - to be addressed


        1 min → 40 s
Unexpected Problem

• Stability Issues with our CI server
• The bottleneck changed from I/O to CPU
• Too many agents per physical machine
Compilation (1min)




JIRA Unit Tests Build Improved
Compilation (1min)
               Packaging (0min)




JIRA Unit Tests Build Improved
Compilation (1min)
               Packaging (0min)




                Executing Tests (5min)



JIRA Unit Tests Build Improved
Compilation (1min)
               Packaging (0min)
                  Publishing Results (40sec)




                Executing Tests (5min)



JIRA Unit Tests Build Improved
Compilation (1min)
                      Packaging (0min)
                         Publishing Results (40sec)




                        Executing Tests (5min)
Fetching Dependencies (10sec)

JIRA Unit Tests Build Improved
Compilation (1min)
                      Packaging (0min)
                         Publishing Results (40sec)




SCM Update (5sec)       Executing Tests (5min)
Fetching Dependencies (10sec)

JIRA Unit Tests Build Improved
Agent Availability/Setup (3min)*
                   Compilation (1min)
                      Packaging (0min)
                         Publishing Results (40sec)




SCM Update (5sec)       Executing Tests (5min)
Fetching Dependencies (10sec)

JIRA Unit Tests Build Improved
Improvements Summary
         Tests         Before     After   Improvement %

  Unit tests          29 min     17 min        41%

  Functional tests    56 min     34 min        39%

  WebDriver tests     39 min     21 min        46%

  Overall            124 min 72 min            42%

* Additional ca. 5% improvement expected once new git clone
        strategy is consistently rolled-out everywhere
The Quality Follows
The Quality Follows
The Quality Follows
But that's still bad




We want CI feedback loop in a few minutes maximum
Splitting The Codebase
Resistance against splitting
   The last attempt: Magic Machine




Decide with high confidence (e.g. > 95%) which subset of tests
          to run basing on the committed changes
Magic Machine
• Looking at Bamboo history (analysing
  correlation between changes and failures)
• Matching: package test/prod code and
  transitive imports
• Code instrumentation (Clover, Emma, AspectJ)
• Run most often failing first
Inevitable Split - Fears

• Organizational concerns - understanding,
  managing, integrating, releasing
• Mindset change - if something worked for
  10 years why to change it?
• We damned ourselves with big buckets for
  all tests - where do they belong to?
Magic Machine strikes back




   With heavy use of brain, common sense
           and expert judgement
Splitting code base
• Step 0 - JIRA Importers Plugin (3 years ago)
• Step 1- New Issue View and Navigator
                                         JIRA
                                              6  .0
We are still escaping hell.
Hell sucks in your soul.
Conclusions
• Visibility and problem awareness help
• Maintaing huge testbed is difficult and costly
• Measure the problem
• No prejudice - no sacred cows
• Automated tests are not one-off investment,
  it's a continuous journey
• Performance is a damn important feature
Do you want to help?
We are hiring in Gdańsk
•   Principal Java Developer

•   Development Team Lead

•   Java and Scala Developers

•   UX Designer

•   Front-End Developer

•   QA Engineer
          Visit us at the booth or apply at
    http://www.atlassian.com/company/careers
Images - Credits

• Turtle - by Jonathan Zander, CC-BY-SA-3.0
• Loading - by MatthewJ13, CC-SA-3.0
• Magic Potion - by Koolmann1, CC-BY-SA-2.0
• Merlin Tool - by By L. Mahin, CC-BY-SA-3.0
• Choose Pills - by *rockysprings, CC-BY-SA-3.0
Thank You!
1 of 99

Recommended

Monster Builds and How to Tame Them - Atlassian Summit 2010 by
Monster Builds and How to Tame Them - Atlassian Summit 2010Monster Builds and How to Tame Them - Atlassian Summit 2010
Monster Builds and How to Tame Them - Atlassian Summit 2010Atlassian
913 views52 slides
Massively Continuous Integration: From 3 days to 30 minutes by
Massively Continuous Integration: From 3 days to 30 minutesMassively Continuous Integration: From 3 days to 30 minutes
Massively Continuous Integration: From 3 days to 30 minutesseleniumconf
2.4K views69 slides
Beyond Scrum: Scaling Agile with Continuous Delivery and Subversion by
Beyond Scrum: Scaling Agile with Continuous Delivery and SubversionBeyond Scrum: Scaling Agile with Continuous Delivery and Subversion
Beyond Scrum: Scaling Agile with Continuous Delivery and SubversionProduct Marketing Services
1.5K views43 slides
Beyond TDD: Enabling Your Team to Continuously Deliver Software by
Beyond TDD: Enabling Your Team to Continuously Deliver SoftwareBeyond TDD: Enabling Your Team to Continuously Deliver Software
Beyond TDD: Enabling Your Team to Continuously Deliver SoftwareChris Weldon
1.5K views127 slides
Continuous Delivery in the real world - techniques to reduce the developers b... by
Continuous Delivery in the real world - techniques to reduce the developers b...Continuous Delivery in the real world - techniques to reduce the developers b...
Continuous Delivery in the real world - techniques to reduce the developers b...Nikolai Blackie
1.6K views17 slides
Test Driven Development & CI/CD by
Test Driven Development & CI/CDTest Driven Development & CI/CD
Test Driven Development & CI/CDShanmuga S Muthu
566 views36 slides

More Related Content

What's hot

Tests antipatterns by
Tests antipatternsTests antipatterns
Tests antipatternsMaciej Przewoznik
398 views73 slides
Linuxtag 2012 - continuous delivery - dream to reality by
Linuxtag 2012  - continuous delivery - dream to realityLinuxtag 2012  - continuous delivery - dream to reality
Linuxtag 2012 - continuous delivery - dream to realityClément Escoffier
1.2K views74 slides
Releasing To Production Every Week India by
Releasing To Production Every Week   IndiaReleasing To Production Every Week   India
Releasing To Production Every Week Indiaexortech
1.5K views210 slides
Scaling Up Continuous Deployment by
Scaling Up Continuous DeploymentScaling Up Continuous Deployment
Scaling Up Continuous DeploymentTimothy Fitz
1.5K views20 slides
Real Java EE Testing with Arquillian and ShrinkWrap by
Real Java EE Testing with Arquillian and ShrinkWrapReal Java EE Testing with Arquillian and ShrinkWrap
Real Java EE Testing with Arquillian and ShrinkWrapDan Allen
5.2K views41 slides
Continuous delivery chernivcy by
Continuous delivery chernivcyContinuous delivery chernivcy
Continuous delivery chernivcyVolodymyr Yelchev
830 views17 slides

What's hot(20)

Linuxtag 2012 - continuous delivery - dream to reality by Clément Escoffier
Linuxtag 2012  - continuous delivery - dream to realityLinuxtag 2012  - continuous delivery - dream to reality
Linuxtag 2012 - continuous delivery - dream to reality
Clément Escoffier1.2K views
Releasing To Production Every Week India by exortech
Releasing To Production Every Week   IndiaReleasing To Production Every Week   India
Releasing To Production Every Week India
exortech1.5K views
Scaling Up Continuous Deployment by Timothy Fitz
Scaling Up Continuous DeploymentScaling Up Continuous Deployment
Scaling Up Continuous Deployment
Timothy Fitz1.5K views
Real Java EE Testing with Arquillian and ShrinkWrap by Dan Allen
Real Java EE Testing with Arquillian and ShrinkWrapReal Java EE Testing with Arquillian and ShrinkWrap
Real Java EE Testing with Arquillian and ShrinkWrap
Dan Allen5.2K views
Sista: Improving Cog’s JIT performance by ESUG
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performance
ESUG2.1K views
Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps) by Neotys_Partner
Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)
Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)
Neotys_Partner441 views
Arquillian by nukeevry1
ArquillianArquillian
Arquillian
nukeevry13.2K views
Continuous integration by Basma Alkerm
Continuous integrationContinuous integration
Continuous integration
Basma Alkerm402 views
[123] quality without qa by NAVER D2
[123] quality without qa[123] quality without qa
[123] quality without qa
NAVER D273.5K views
Comprehensive Performance Testing: From Early Dev to Live Production by TechWell
Comprehensive Performance Testing: From Early Dev to Live ProductionComprehensive Performance Testing: From Early Dev to Live Production
Comprehensive Performance Testing: From Early Dev to Live Production
TechWell140 views
The Hard Problems of Continuous Deployment by Timothy Fitz
The Hard Problems of Continuous DeploymentThe Hard Problems of Continuous Deployment
The Hard Problems of Continuous Deployment
Timothy Fitz3.6K views
September 2010 - Arquillian by JBug Italy
September 2010 - ArquillianSeptember 2010 - Arquillian
September 2010 - Arquillian
JBug Italy810 views
Continuous delivery @wcap 5-09-2013 by David Funaro
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013
David Funaro1.5K views

Viewers also liked

Spartez Open Day March 13th 2015 by
Spartez Open Day March 13th 2015Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015Wojciech Seliga
1.5K views65 slides
Developer plantations - colonialism of XXI century (GeeCON 2017) by
Developer plantations - colonialism of XXI century (GeeCON 2017)Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)Wojciech Seliga
1.9K views61 slides
Social Hacking by
Social HackingSocial Hacking
Social HackingChoong Ping Teo
781 views14 slides
Escaping Test Hell - ACCU 2014 by
Escaping Test Hell - ACCU 2014Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014Wojciech Seliga
4K views97 slides
Ten lessons I painfully learnt while moving from software developer
to entrep... by
Ten lessons I painfully learnt while moving from software developer
to entrep...Ten lessons I painfully learnt while moving from software developer
to entrep...
Ten lessons I painfully learnt while moving from software developer
to entrep...Wojciech Seliga
2.4K views53 slides
InfoShare 2012 efektywne przeglądy kodu w zespołach agile [Polish] by
InfoShare 2012 efektywne przeglądy kodu w zespołach agile [Polish]InfoShare 2012 efektywne przeglądy kodu w zespołach agile [Polish]
InfoShare 2012 efektywne przeglądy kodu w zespołach agile [Polish]Wojciech Seliga
754 views31 slides

Viewers also liked(15)

Spartez Open Day March 13th 2015 by Wojciech Seliga
Spartez Open Day March 13th 2015Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015
Wojciech Seliga1.5K views
Developer plantations - colonialism of XXI century (GeeCON 2017) by Wojciech Seliga
Developer plantations - colonialism of XXI century (GeeCON 2017)Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)
Wojciech Seliga1.9K views
Ten lessons I painfully learnt while moving from software developer
to entrep... by Wojciech Seliga
Ten lessons I painfully learnt while moving from software developer
to entrep...Ten lessons I painfully learnt while moving from software developer
to entrep...
Ten lessons I painfully learnt while moving from software developer
to entrep...
Wojciech Seliga2.4K views
InfoShare 2012 efektywne przeglądy kodu w zespołach agile [Polish] by Wojciech Seliga
InfoShare 2012 efektywne przeglądy kodu w zespołach agile [Polish]InfoShare 2012 efektywne przeglądy kodu w zespołach agile [Polish]
InfoShare 2012 efektywne przeglądy kodu w zespołach agile [Polish]
Wojciech Seliga754 views
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit by Wojciech Seliga
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKitAtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
Wojciech Seliga1.5K views
How to be Awesome at a Java Developer Job Interview (Confitura 2012, Polish) by Wojciech Seliga
How to be Awesome at a Java Developer Job Interview (Confitura 2012, Polish)How to be Awesome at a Java Developer Job Interview (Confitura 2012, Polish)
How to be Awesome at a Java Developer Job Interview (Confitura 2012, Polish)
Wojciech Seliga9.2K views
Software Developer Career Unplugged - GeeCon 2013 by Wojciech Seliga
Software Developer Career Unplugged - GeeCon 2013Software Developer Career Unplugged - GeeCon 2013
Software Developer Career Unplugged - GeeCon 2013
Wojciech Seliga25.6K views
Innowacja w praktyce - Infoshare 2014 by Wojciech Seliga
Innowacja w praktyce - Infoshare 2014Innowacja w praktyce - Infoshare 2014
Innowacja w praktyce - Infoshare 2014
Wojciech Seliga1.3K views
10 bezcennych lekcji dla software developera stającego się szefem firmy by Wojciech Seliga
10 bezcennych lekcji dla software developera stającego się szefem firmy10 bezcennych lekcji dla software developera stającego się szefem firmy
10 bezcennych lekcji dla software developera stającego się szefem firmy
Wojciech Seliga846 views
5-10-15 years of Java developer career - Warszawa JUG 2015 by Wojciech Seliga
5-10-15 years of Java developer career - Warszawa JUG 20155-10-15 years of Java developer career - Warszawa JUG 2015
5-10-15 years of Java developer career - Warszawa JUG 2015
Wojciech Seliga1.6K views
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI... by Wojciech Seliga
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...
Wojciech Seliga972 views
Software Development Innovation in Practice - 33rd Degree 2014 by Wojciech Seliga
Software Development Innovation in Practice - 33rd Degree 2014Software Development Innovation in Practice - 33rd Degree 2014
Software Development Innovation in Practice - 33rd Degree 2014
Wojciech Seliga1.5K views
Ten lessons I painfully learnt while moving from software developer to entrep... by Wojciech Seliga
Ten lessons I painfully learnt while moving from software developer to entrep...Ten lessons I painfully learnt while moving from software developer to entrep...
Ten lessons I painfully learnt while moving from software developer to entrep...
Wojciech Seliga1K views

Similar to Escaping Automated Test Hell - One Year Later

Heavenly hell – automated tests at scale wojciech seliga by
Heavenly hell – automated tests at scale   wojciech seligaHeavenly hell – automated tests at scale   wojciech seliga
Heavenly hell – automated tests at scale wojciech seligaAtlassian
1.1K views106 slides
Escaping Test Hell - Our Journey - XPDays Ukraine 2013 by
Escaping Test Hell - Our Journey - XPDays Ukraine 2013Escaping Test Hell - Our Journey - XPDays Ukraine 2013
Escaping Test Hell - Our Journey - XPDays Ukraine 2013Wojciech Seliga
1.9K views64 slides
Continuous Integration on AWS by
Continuous Integration on AWSContinuous Integration on AWS
Continuous Integration on AWSPetar Petrov
102 views48 slides
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31 by
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31Masayuki Igawa
1.1K views29 slides
Getting your mobile test automation process in place - using Cucumber and Cal... by
Getting your mobile test automation process in place - using Cucumber and Cal...Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...Niels Frydenholm
1.7K views55 slides
Quick tour to front end unit testing using jasmine by
Quick tour to front end unit testing using jasmineQuick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmineGil Fink
3K views31 slides

Similar to Escaping Automated Test Hell - One Year Later(20)

Heavenly hell – automated tests at scale wojciech seliga by Atlassian
Heavenly hell – automated tests at scale   wojciech seligaHeavenly hell – automated tests at scale   wojciech seliga
Heavenly hell – automated tests at scale wojciech seliga
Atlassian1.1K views
Escaping Test Hell - Our Journey - XPDays Ukraine 2013 by Wojciech Seliga
Escaping Test Hell - Our Journey - XPDays Ukraine 2013Escaping Test Hell - Our Journey - XPDays Ukraine 2013
Escaping Test Hell - Our Journey - XPDays Ukraine 2013
Wojciech Seliga1.9K views
Continuous Integration on AWS by Petar Petrov
Continuous Integration on AWSContinuous Integration on AWS
Continuous Integration on AWS
Petar Petrov102 views
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31 by Masayuki Igawa
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31
Masayuki Igawa1.1K views
Getting your mobile test automation process in place - using Cucumber and Cal... by Niels Frydenholm
Getting your mobile test automation process in place - using Cucumber and Cal...Getting your mobile test automation process in place - using Cucumber and Cal...
Getting your mobile test automation process in place - using Cucumber and Cal...
Niels Frydenholm1.7K views
Quick tour to front end unit testing using jasmine by Gil Fink
Quick tour to front end unit testing using jasmineQuick tour to front end unit testing using jasmine
Quick tour to front end unit testing using jasmine
Gil Fink3K views
Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob... by Cωνσtantίnoς Giannoulis
Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...
Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...
Unit testing for Cocoa developers by Graham Lee
Unit testing for Cocoa developersUnit testing for Cocoa developers
Unit testing for Cocoa developers
Graham Lee1.2K views
Microsoft SQL Server Testing Frameworks by Mark Ginnebaugh
Microsoft SQL Server Testing FrameworksMicrosoft SQL Server Testing Frameworks
Microsoft SQL Server Testing Frameworks
Mark Ginnebaugh807 views
How to Un-Flake Flaky Tests - A New Hire's Toolkit by Zachary Attas
How to Un-Flake Flaky Tests - A New Hire's ToolkitHow to Un-Flake Flaky Tests - A New Hire's Toolkit
How to Un-Flake Flaky Tests - A New Hire's Toolkit
Zachary Attas778 views
How to Un-Flake Flaky Tests - A New Hire's Toolkit by Zachary Attas
How to Un-Flake Flaky Tests - A New Hire's ToolkitHow to Un-Flake Flaky Tests - A New Hire's Toolkit
How to Un-Flake Flaky Tests - A New Hire's Toolkit
Zachary Attas93 views
Implementing Test Automation in Agile Projects by Dominik Dary
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
Dominik Dary4.6K views
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile way by Leonard Fingerman
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile wayContinuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
Leonard Fingerman1.4K views
Developers Testing - Girl Code at bloomon by Ineke Scheffers
Developers Testing - Girl Code at bloomonDevelopers Testing - Girl Code at bloomon
Developers Testing - Girl Code at bloomon
Ineke Scheffers2.8K views
Growing Trends of Open Source UI Frameworks by SmartBear
Growing Trends of Open Source UI FrameworksGrowing Trends of Open Source UI Frameworks
Growing Trends of Open Source UI Frameworks
SmartBear290 views
Enabling Agile Testing Through Continuous Integration Agile2009 by sstolberg
Enabling Agile Testing Through Continuous Integration Agile2009Enabling Agile Testing Through Continuous Integration Agile2009
Enabling Agile Testing Through Continuous Integration Agile2009
sstolberg1.8K views
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture) by STePINForum
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
STePINForum5.5K views
Performance Test Driven Development with Oracle Coherence by aragozin
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherence
aragozin7.5K views
AWS Lambda from the Trenches by Yan Cui
AWS Lambda from the TrenchesAWS Lambda from the Trenches
AWS Lambda from the Trenches
Yan Cui5.8K views

More from Wojciech Seliga

Sprzedawanie własnego biznesu IT - Confitura 2023.pdf by
Sprzedawanie własnego biznesu IT - Confitura 2023.pdfSprzedawanie własnego biznesu IT - Confitura 2023.pdf
Sprzedawanie własnego biznesu IT - Confitura 2023.pdfWojciech Seliga
24 views51 slides
Jak być zarąbistym developerem w oczach szefa i ... klienta by
Jak być zarąbistym developerem w oczach szefa i ... klientaJak być zarąbistym developerem w oczach szefa i ... klienta
Jak być zarąbistym developerem w oczach szefa i ... klientaWojciech Seliga
1.6K views69 slides
How to impress your boss and your customer in a modern software development c... by
How to impress your boss and your customer in a modern software development c...How to impress your boss and your customer in a modern software development c...
How to impress your boss and your customer in a modern software development c...Wojciech Seliga
1.2K views69 slides
Devoxx Poland 2015: 5-10-15 years with Java by
Devoxx Poland 2015: 5-10-15 years with Java Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java Wojciech Seliga
5.1K views79 slides
Confitura 2013 Software Developer Career Unplugged by
Confitura 2013 Software Developer Career UnpluggedConfitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career UnpluggedWojciech Seliga
1.6K views137 slides
Better Front-end Development in Atlassian Plugins by
Better Front-end Development in Atlassian PluginsBetter Front-end Development in Atlassian Plugins
Better Front-end Development in Atlassian PluginsWojciech Seliga
4.1K views143 slides

More from Wojciech Seliga(8)

Sprzedawanie własnego biznesu IT - Confitura 2023.pdf by Wojciech Seliga
Sprzedawanie własnego biznesu IT - Confitura 2023.pdfSprzedawanie własnego biznesu IT - Confitura 2023.pdf
Sprzedawanie własnego biznesu IT - Confitura 2023.pdf
Wojciech Seliga24 views
Jak być zarąbistym developerem w oczach szefa i ... klienta by Wojciech Seliga
Jak być zarąbistym developerem w oczach szefa i ... klientaJak być zarąbistym developerem w oczach szefa i ... klienta
Jak być zarąbistym developerem w oczach szefa i ... klienta
Wojciech Seliga1.6K views
How to impress your boss and your customer in a modern software development c... by Wojciech Seliga
How to impress your boss and your customer in a modern software development c...How to impress your boss and your customer in a modern software development c...
How to impress your boss and your customer in a modern software development c...
Wojciech Seliga1.2K views
Devoxx Poland 2015: 5-10-15 years with Java by Wojciech Seliga
Devoxx Poland 2015: 5-10-15 years with Java Devoxx Poland 2015: 5-10-15 years with Java
Devoxx Poland 2015: 5-10-15 years with Java
Wojciech Seliga5.1K views
Confitura 2013 Software Developer Career Unplugged by Wojciech Seliga
Confitura 2013 Software Developer Career UnpluggedConfitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career Unplugged
Wojciech Seliga1.6K views
Better Front-end Development in Atlassian Plugins by Wojciech Seliga
Better Front-end Development in Atlassian PluginsBetter Front-end Development in Atlassian Plugins
Better Front-end Development in Atlassian Plugins
Wojciech Seliga4.1K views
Bringing Effectiveness and Sanity to Highly Distributed Agile Teams by Wojciech Seliga
Bringing Effectiveness and Sanity  to Highly Distributed Agile TeamsBringing Effectiveness and Sanity  to Highly Distributed Agile Teams
Bringing Effectiveness and Sanity to Highly Distributed Agile Teams
Wojciech Seliga1.4K views
JDD Effective Code Review In Agile Teams by Wojciech Seliga
JDD Effective Code Review In Agile TeamsJDD Effective Code Review In Agile Teams
JDD Effective Code Review In Agile Teams
Wojciech Seliga1.2K views

Recently uploaded

Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveNetwork Automation Forum
31 views35 slides
Special_edition_innovator_2023.pdf by
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdfWillDavies22
17 views6 slides
Igniting Next Level Productivity with AI-Infused Data Integration Workflows by
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Safe Software
263 views86 slides
20231123_Camunda Meetup Vienna.pdf by
20231123_Camunda Meetup Vienna.pdf20231123_Camunda Meetup Vienna.pdf
20231123_Camunda Meetup Vienna.pdfPhactum Softwareentwicklung GmbH
41 views73 slides
Five Things You SHOULD Know About Postman by
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About PostmanPostman
33 views43 slides
Network Source of Truth and Infrastructure as Code revisited by
Network Source of Truth and Infrastructure as Code revisitedNetwork Source of Truth and Infrastructure as Code revisited
Network Source of Truth and Infrastructure as Code revisitedNetwork Automation Forum
26 views45 slides

Recently uploaded(20)

Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive by Network Automation Forum
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLiveAutomating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Automating a World-Class Technology Conference; Behind the Scenes of CiscoLive
Special_edition_innovator_2023.pdf by WillDavies22
Special_edition_innovator_2023.pdfSpecial_edition_innovator_2023.pdf
Special_edition_innovator_2023.pdf
WillDavies2217 views
Igniting Next Level Productivity with AI-Infused Data Integration Workflows by Safe Software
Igniting Next Level Productivity with AI-Infused Data Integration Workflows Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Safe Software263 views
Five Things You SHOULD Know About Postman by Postman
Five Things You SHOULD Know About PostmanFive Things You SHOULD Know About Postman
Five Things You SHOULD Know About Postman
Postman33 views
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn22 views
STPI OctaNE CoE Brochure.pdf by madhurjyapb
STPI OctaNE CoE Brochure.pdfSTPI OctaNE CoE Brochure.pdf
STPI OctaNE CoE Brochure.pdf
madhurjyapb14 views
Piloting & Scaling Successfully With Microsoft Viva by Richard Harbridge
Piloting & Scaling Successfully With Microsoft VivaPiloting & Scaling Successfully With Microsoft Viva
Piloting & Scaling Successfully With Microsoft Viva
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf by Dr. Jimmy Schwarzkopf
STKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdfSTKI Israeli Market Study 2023   corrected forecast 2023_24 v3.pdf
STKI Israeli Market Study 2023 corrected forecast 2023_24 v3.pdf
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker37 views
PharoJS - Zürich Smalltalk Group Meetup November 2023 by Noury Bouraqadi
PharoJS - Zürich Smalltalk Group Meetup November 2023PharoJS - Zürich Smalltalk Group Meetup November 2023
PharoJS - Zürich Smalltalk Group Meetup November 2023
Noury Bouraqadi127 views
AMAZON PRODUCT RESEARCH.pdf by JerikkLaureta
AMAZON PRODUCT RESEARCH.pdfAMAZON PRODUCT RESEARCH.pdf
AMAZON PRODUCT RESEARCH.pdf
JerikkLaureta26 views

Escaping Automated Test Hell - One Year Later

  • 1. Main sponsor Escaping Automated Test Hell One year later... Wojciech Seliga
  • 2. About me • Coding for 30 years • Agile Practices (inc. TDD) since 2003 • Dev Nerd, Tech Leader, Agile Coach, Speaker • 5+ years with Atlassian (JIRA Development Team Lead) • Spartez Co-founder
  • 3. Year ago - recap
  • 4. 18 000 tests on all levels Very slow and fragile feedback loop
  • 5. Serious performance and reliability issues
  • 6. Feedback Test Speed Quality `
  • 7. Respect Restructure Design Share Prune Test Code is Not Trash Refactor Maintain Review Discuss
  • 13. Optimum Balance Isolation Speed Coverage Level Access
  • 14. Optimum Balance Isolation Speed Coverage Level Access Effort
  • 16. Dangerous to temper with Quality / Determinism
  • 17. Dangerous to temper with Quality / Determinism Maintainability
  • 18. Splitting codebase is key aspect of short test feedback loop
  • 19. Now
  • 23. Build Tiers and Policy Tier A1 - green soon after all commits unit tests and functional* tests Tier A2 - green at the end of the day WebDriver and bundled plugins tests Tier A3 - green at the end of the iteration supported platforms tests, compatibility tests
  • 25. Training • assertThat over assertTrue/False and assertEquals • avoiding races - Atlassian Selenium with its TimedElement • Unit tests over functional tests • Brownbags, blogs, code reviews
  • 27. Re-run failed tests and see if they pass Automatic Flakiness Detection Quarantine
  • 32. Selenium ditching Sky did not fall in
  • 33. Ditching - benefits • Freed build agents - better system throughput • Boosted morale • Gazillion of developer hours saved • Money saved on infrastructure
  • 34. Ditching - due diligence • conducting the audit - analysis of the coverage we lost • determining which tests needs to rewritten (e.g. security related) • rewriting the tests
  • 35. Flaky Browser-based Tests Races between test code and asynchronous page logic Playing with "loading" CSS class does not really help
  • 36. Races Removal with Tracing // in the browser: function mySearchClickHandler() {     doSomeXhr().always(function() {         // This executes when the XHR has completed (either success or failure)         JIRA.trace("search.completed");     }); } // In production code JIRA.trace is a no-op // in my page object: @Inject TraceContext traceContext;   public SearchResults doASearch() {     Tracer snapshot = traceContext.checkpoint();     getSearchButton().click(); // causes mySearchClickHandler to be invoked     // This waits until the "search.completed" // event has been emitted, *after* previous snapshot         traceContext.waitFor(snapshot, "search.completed");     return pageBinder.bind(SearchResults.class); }
  • 37. Speed
  • 38. Speed Can we halve our build times?
  • 39. Parallel Execution - Theory Batches Start of Build End of Build
  • 40. Parallel Execution Batches Start of Build End of Build
  • 41. Parallel Execution - Agent availability Reality Bites Batches Start of Build End of Build
  • 42. Dynamic Test Execution Dispatch - Hallelujah
  • 43. Dynamic Test Execution Dispatch - Hallelujah
  • 44. "You can't manage what you can't measure." W. Edwards Deming
  • 45. If y ou you bel ieve "Youare manage what can't just doo i i you can't measure."n me t d. W. Edwards Deming
  • 46. You can't improve something if you can't measure it
  • 47. You can't improve something if you can't measure it Profiler, Build statistics, Logs, statsd → Graphite
  • 48. Compilation Packaging Executing Tests Anatomy of Build*
  • 49. Fetching Dependencies Compilation Packaging Executing Tests Anatomy of Build*
  • 50. Fetching Dependencies Compilation Packaging Executing Tests Anatomy of Build* *Any resemblance to maven build is entirely accidental
  • 51. Fetching Dependencies Compilation Packaging SCM Update Executing Tests Anatomy of Build* *Any resemblance to maven build is entirely accidental
  • 52. Agent Availability/Setup Fetching Dependencies Compilation Packaging SCM Update Executing Tests Anatomy of Build* *Any resemblance to maven build is entirely accidental
  • 53. Agent Availability/Setup Fetching Dependencies Compilation Packaging Publishing Results SCM Update Executing Tests Anatomy of Build* *Any resemblance to maven build is entirely accidental
  • 55. Compilation (7min) Packaging (0min) JIRA Unit Tests Build
  • 56. Compilation (7min) Packaging (0min) Executing Tests (7min) JIRA Unit Tests Build
  • 57. Compilation (7min) Publishing Results (1min) Packaging (0min) Executing Tests (7min) JIRA Unit Tests Build
  • 58. Compilation (7min) Publishing Results (1min) Packaging (0min) Executing Tests (7min) Fetching Dependencies (1.5min) JIRA Unit Tests Build
  • 59. Compilation (7min) Publishing Results (1min) SCM Update (2min) Packaging (0min) Executing Tests (7min) Fetching Dependencies (1.5min) JIRA Unit Tests Build
  • 60. Agent Availability/Setup (mean 10min) Compilation (7min) Publishing Results (1min) SCM Update (2min) Packaging (0min) Executing Tests (7min) Fetching Dependencies (1.5min) JIRA Unit Tests Build
  • 61. Decreasing Test Execution Time to ZERRO alone would not let us achieve our goal!
  • 62. Agent Availability/Setup • starved builds due to busy agents building very long builds • time synchronization issue - NTPD problem
  • 63. SCM Update - Checkout time • Proximity of SCM repo • shallow git clones are not so fast and lightweight + generating extra git server CPU load • git clone per agent/plan + git pull + git clone per build (hard links!) • Stash was thankful (queue)
  • 64. SCM Update - Checkout time • Proximity of SCM repo • shallow git clones are not so fast and lightweight + generating extra git server CPU load • git clone per agent/plan + git pull + git clone per build (hard links!) • Stash was thankful (queue) 2 min → 5 seconds
  • 66. Fetching Dependencies • Fix Predator • Sandboxing/isolation agent trade-off: rm -rf $HOME/.m2/repository/com/atlassian/* into find $HOME/.m2/repository/com/atlassian/ -name “*SNAPSHOT*” | xargs rm • Network hardware failure found (dropping packets)
  • 67. Fetching Dependencies • Fix Predator • Sandboxing/isolation agent trade-off: rm -rf $HOME/.m2/repository/com/atlassian/* into find $HOME/.m2/repository/com/atlassian/ -name “*SNAPSHOT*” | xargs rm • Network hardware failure found (dropping packets) 1.5 min → 10 seconds
  • 68. Compilation • Restructuring multi-pom maven project and dependencies • Maven 3 parallel compilation FTW -T 1.5C *optimal factor thanks to scientific trial and error research
  • 69. Compilation • Restructuring multi-pom maven project and dependencies • Maven 3 parallel compilation FTW -T 1.5C *optimal factor thanks to scientific trial and error research 7 min → 1 min
  • 70. Unit Test Execution • Splitting unit tests into 2 buckets: good and legacy (much longer) • Maven 3 parallel test execution (-T 1.5C) 3000 poor tests 11000 good tests (5min) (1.5min)
  • 71. Unit Test Execution • Splitting unit tests into 2 buckets: good and legacy (much longer) • Maven 3 parallel test execution (-T 1.5C) 3000 poor tests 11000 good tests (5min) (1.5min) 7 min → 5 min
  • 72. Functional Tests • Selenium 1 removal did help • Faster reset/restore (avoid unnecessary stuff, intercepting SQL operations for debug purposes - building stacktraces is costly) • Restoring via Backdoor REST API • Using REST API for common setup/ teardown operations
  • 74. Publishing Results • Server log allocation per test → using now Backdoor REST API (was Selenium) • Bamboo DB performance degradation for rich build history - to be addressed
  • 75. Publishing Results • Server log allocation per test → using now Backdoor REST API (was Selenium) • Bamboo DB performance degradation for rich build history - to be addressed 1 min → 40 s
  • 76. Unexpected Problem • Stability Issues with our CI server • The bottleneck changed from I/O to CPU • Too many agents per physical machine
  • 77. Compilation (1min) JIRA Unit Tests Build Improved
  • 78. Compilation (1min) Packaging (0min) JIRA Unit Tests Build Improved
  • 79. Compilation (1min) Packaging (0min) Executing Tests (5min) JIRA Unit Tests Build Improved
  • 80. Compilation (1min) Packaging (0min) Publishing Results (40sec) Executing Tests (5min) JIRA Unit Tests Build Improved
  • 81. Compilation (1min) Packaging (0min) Publishing Results (40sec) Executing Tests (5min) Fetching Dependencies (10sec) JIRA Unit Tests Build Improved
  • 82. Compilation (1min) Packaging (0min) Publishing Results (40sec) SCM Update (5sec) Executing Tests (5min) Fetching Dependencies (10sec) JIRA Unit Tests Build Improved
  • 83. Agent Availability/Setup (3min)* Compilation (1min) Packaging (0min) Publishing Results (40sec) SCM Update (5sec) Executing Tests (5min) Fetching Dependencies (10sec) JIRA Unit Tests Build Improved
  • 84. Improvements Summary Tests Before After Improvement % Unit tests 29 min 17 min 41% Functional tests 56 min 34 min 39% WebDriver tests 39 min 21 min 46% Overall 124 min 72 min 42% * Additional ca. 5% improvement expected once new git clone strategy is consistently rolled-out everywhere
  • 88. But that's still bad We want CI feedback loop in a few minutes maximum
  • 90. Resistance against splitting The last attempt: Magic Machine Decide with high confidence (e.g. > 95%) which subset of tests to run basing on the committed changes
  • 91. Magic Machine • Looking at Bamboo history (analysing correlation between changes and failures) • Matching: package test/prod code and transitive imports • Code instrumentation (Clover, Emma, AspectJ) • Run most often failing first
  • 92. Inevitable Split - Fears • Organizational concerns - understanding, managing, integrating, releasing • Mindset change - if something worked for 10 years why to change it? • We damned ourselves with big buckets for all tests - where do they belong to?
  • 93. Magic Machine strikes back With heavy use of brain, common sense and expert judgement
  • 94. Splitting code base • Step 0 - JIRA Importers Plugin (3 years ago) • Step 1- New Issue View and Navigator JIRA 6 .0
  • 95. We are still escaping hell. Hell sucks in your soul.
  • 96. Conclusions • Visibility and problem awareness help • Maintaing huge testbed is difficult and costly • Measure the problem • No prejudice - no sacred cows • Automated tests are not one-off investment, it's a continuous journey • Performance is a damn important feature
  • 97. Do you want to help? We are hiring in Gdańsk • Principal Java Developer • Development Team Lead • Java and Scala Developers • UX Designer • Front-End Developer • QA Engineer Visit us at the booth or apply at http://www.atlassian.com/company/careers
  • 98. Images - Credits • Turtle - by Jonathan Zander, CC-BY-SA-3.0 • Loading - by MatthewJ13, CC-SA-3.0 • Magic Potion - by Koolmann1, CC-BY-SA-2.0 • Merlin Tool - by By L. Mahin, CC-BY-SA-3.0 • Choose Pills - by *rockysprings, CC-BY-SA-3.0