SlideShare uma empresa Scribd logo
1 de 99
Baixar para ler offline
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
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!

Mais conteúdo relacionado

Mais procurados

Linuxtag 2012 - continuous delivery - dream to reality
Linuxtag 2012  - continuous delivery - dream to realityLinuxtag 2012  - continuous delivery - dream to reality
Linuxtag 2012 - continuous delivery - dream to realityClément Escoffier
 
Releasing To Production Every Week India
Releasing To Production Every Week   IndiaReleasing To Production Every Week   India
Releasing To Production Every Week Indiaexortech
 
Scaling Up Continuous Deployment
Scaling Up Continuous DeploymentScaling Up Continuous Deployment
Scaling Up Continuous DeploymentTimothy Fitz
 
Real Java EE Testing with Arquillian and ShrinkWrap
Real Java EE Testing with Arquillian and ShrinkWrapReal Java EE Testing with Arquillian and ShrinkWrap
Real Java EE Testing with Arquillian and ShrinkWrapDan Allen
 
Continuous delivery chernivcy
Continuous delivery chernivcyContinuous delivery chernivcy
Continuous delivery chernivcyVolodymyr Yelchev
 
Arquillian : An introduction
Arquillian : An introductionArquillian : An introduction
Arquillian : An introductionVineet Reynolds
 
Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceESUG
 
Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)
Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)
Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)Neotys_Partner
 
Continuous integration
Continuous integrationContinuous integration
Continuous integrationBasma Alkerm
 
[123] quality without qa
[123] quality without qa[123] quality without qa
[123] quality without qaNAVER D2
 
Delivering Microservices Using Docker
Delivering Microservices Using DockerDelivering Microservices Using Docker
Delivering Microservices Using DockerKiruthika Samapathy
 
Comprehensive Performance Testing: From Early Dev to Live Production
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 ProductionTechWell
 
The Hard Problems of Continuous Deployment
The Hard Problems of Continuous DeploymentThe Hard Problems of Continuous Deployment
The Hard Problems of Continuous DeploymentTimothy Fitz
 
September 2010 - Arquillian
September 2010 - ArquillianSeptember 2010 - Arquillian
September 2010 - ArquillianJBug Italy
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013David Funaro
 

Mais procurados (20)

Tests antipatterns
Tests antipatternsTests antipatterns
Tests antipatterns
 
Linuxtag 2012 - continuous delivery - dream to reality
Linuxtag 2012  - continuous delivery - dream to realityLinuxtag 2012  - continuous delivery - dream to reality
Linuxtag 2012 - continuous delivery - dream to reality
 
Releasing To Production Every Week India
Releasing To Production Every Week   IndiaReleasing To Production Every Week   India
Releasing To Production Every Week India
 
Scaling Up Continuous Deployment
Scaling Up Continuous DeploymentScaling Up Continuous Deployment
Scaling Up Continuous Deployment
 
Real Java EE Testing with Arquillian and ShrinkWrap
Real Java EE Testing with Arquillian and ShrinkWrapReal Java EE Testing with Arquillian and ShrinkWrap
Real Java EE Testing with Arquillian and ShrinkWrap
 
Continuous delivery chernivcy
Continuous delivery chernivcyContinuous delivery chernivcy
Continuous delivery chernivcy
 
Arquillian : An introduction
Arquillian : An introductionArquillian : An introduction
Arquillian : An introduction
 
Live Testing A Legacy App
Live Testing A Legacy AppLive Testing A Legacy App
Live Testing A Legacy App
 
Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performance
 
Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)
Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)
Jonathon Wright - Intelligent Performance Cognitive Learning (AIOps)
 
Arquillian
ArquillianArquillian
Arquillian
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
[123] quality without qa
[123] quality without qa[123] quality without qa
[123] quality without qa
 
Delivering Microservices Using Docker
Delivering Microservices Using DockerDelivering Microservices Using Docker
Delivering Microservices Using Docker
 
Comprehensive Performance Testing: From Early Dev to Live Production
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
 
The Hard Problems of Continuous Deployment
The Hard Problems of Continuous DeploymentThe Hard Problems of Continuous Deployment
The Hard Problems of Continuous Deployment
 
September 2010 - Arquillian
September 2010 - ArquillianSeptember 2010 - Arquillian
September 2010 - Arquillian
 
Deep Dive Modern Apps Lifecycle with Visual Studio 2012: Software Testing wit...
Deep Dive Modern Apps Lifecycle with Visual Studio 2012: Software Testing wit...Deep Dive Modern Apps Lifecycle with Visual Studio 2012: Software Testing wit...
Deep Dive Modern Apps Lifecycle with Visual Studio 2012: Software Testing wit...
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013
 
Test Bench Development
Test Bench DevelopmentTest Bench Development
Test Bench Development
 

Destaque

Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015Wojciech 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)
Developer plantations - colonialism of XXI century (GeeCON 2017)Wojciech Seliga
 
Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014Wojciech 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...
Ten lessons I painfully learnt while moving from software developer
to entrep...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]
InfoShare 2012 efektywne przeglądy kodu w zespołach agile [Polish]Wojciech Seliga
 
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKitAtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKitWojciech 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)
How to be Awesome at a Java Developer Job Interview (Confitura 2012, Polish)Wojciech Seliga
 
Software Developer Career Unplugged - GeeCon 2013
Software Developer Career Unplugged - GeeCon 2013Software Developer Career Unplugged - GeeCon 2013
Software Developer Career Unplugged - GeeCon 2013Wojciech Seliga
 
Innowacja w praktyce - Infoshare 2014
Innowacja w praktyce - Infoshare 2014Innowacja w praktyce - Infoshare 2014
Innowacja w praktyce - Infoshare 2014Wojciech Seliga
 
10 bezcennych lekcji dla software developera stającego się szefem firmy
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 firmyWojciech Seliga
 
5-10-15 years of Java developer career - Warszawa JUG 2015
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 2015Wojciech 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...
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...Wojciech Seliga
 
Software Development Innovation in Practice - 33rd Degree 2014
Software Development Innovation in Practice - 33rd Degree 2014Software Development Innovation in Practice - 33rd Degree 2014
Software Development Innovation in Practice - 33rd Degree 2014Wojciech 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...
Ten lessons I painfully learnt while moving from software developer to entrep...Wojciech Seliga
 

Destaque (15)

Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015
 
Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)Developer plantations - colonialism of XXI century (GeeCON 2017)
Developer plantations - colonialism of XXI century (GeeCON 2017)
 
Social Hacking
Social HackingSocial Hacking
Social Hacking
 
Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014
 
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...
Ten lessons I painfully learnt while moving from software developer
to entrep...
 
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]
InfoShare 2012 efektywne przeglądy kodu w zespołach agile [Polish]
 
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKitAtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
AtlasCamp 2012 - Testing JIRA plugins smarter with TestKit
 
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)
How to be Awesome at a Java Developer Job Interview (Confitura 2012, Polish)
 
Software Developer Career Unplugged - GeeCon 2013
Software Developer Career Unplugged - GeeCon 2013Software Developer Career Unplugged - GeeCon 2013
Software Developer Career Unplugged - GeeCon 2013
 
Innowacja w praktyce - Infoshare 2014
Innowacja w praktyce - Infoshare 2014Innowacja w praktyce - Infoshare 2014
Innowacja w praktyce - Infoshare 2014
 
10 bezcennych lekcji dla software developera stającego się szefem firmy
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
 
5-10-15 years of Java developer career - Warszawa JUG 2015
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
 
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...
SFI 2017 Plantacje Programistów (Developers Plantations) - Colonialism in XXI...
 
Software Development Innovation in Practice - 33rd Degree 2014
Software Development Innovation in Practice - 33rd Degree 2014Software Development Innovation in Practice - 33rd Degree 2014
Software Development Innovation in Practice - 33rd Degree 2014
 
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...
Ten lessons I painfully learnt while moving from software developer to entrep...
 

Semelhante a Escaping Automated Test Hell - One Year Later

Heavenly hell – automated tests at scale wojciech seliga
Heavenly hell – automated tests at scale   wojciech seligaHeavenly hell – automated tests at scale   wojciech seliga
Heavenly hell – automated tests at scale wojciech seligaAtlassian
 
Escaping Test Hell - Our Journey - XPDays Ukraine 2013
Escaping Test Hell - Our Journey - XPDays Ukraine 2013Escaping Test Hell - Our Journey - XPDays Ukraine 2013
Escaping Test Hell - Our Journey - XPDays Ukraine 2013Wojciech Seliga
 
Continuous Integration on AWS
Continuous Integration on AWSContinuous Integration on AWS
Continuous Integration on AWSPetar Petrov
 
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31
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
 
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...
Getting your mobile test automation process in place - using Cucumber and Cal...Niels Frydenholm
 
Quick tour to front end unit testing using jasmine
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
 
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...
Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...Cωνσtantίnoς Giannoulis
 
Unit testing for Cocoa developers
Unit testing for Cocoa developersUnit testing for Cocoa developers
Unit testing for Cocoa developersGraham Lee
 
Microsoft SQL Server Testing Frameworks
Microsoft SQL Server Testing FrameworksMicrosoft SQL Server Testing Frameworks
Microsoft SQL Server Testing FrameworksMark Ginnebaugh
 
How to Un-Flake Flaky Tests - A New Hire's Toolkit
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 ToolkitZachary Attas
 
How to Un-Flake Flaky Tests - A New Hire's Toolkit
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 ToolkitZachary Attas
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsDominik Dary
 
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
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 wayLeonard Fingerman
 
Developers Testing - Girl Code at bloomon
Developers Testing - Girl Code at bloomonDevelopers Testing - Girl Code at bloomon
Developers Testing - Girl Code at bloomonIneke Scheffers
 
Growing Trends of Open Source UI Frameworks
Growing Trends of Open Source UI FrameworksGrowing Trends of Open Source UI Frameworks
Growing Trends of Open Source UI FrameworksSmartBear
 
Enabling Agile Testing Through Continuous Integration Agile2009
Enabling Agile Testing Through Continuous Integration Agile2009Enabling Agile Testing Through Continuous Integration Agile2009
Enabling Agile Testing Through Continuous Integration Agile2009sstolberg
 
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)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)STePINForum
 
Performance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherencearagozin
 
AWS Lambda from the Trenches
AWS Lambda from the TrenchesAWS Lambda from the Trenches
AWS Lambda from the TrenchesYan Cui
 

Semelhante a Escaping Automated Test Hell - One Year Later (20)

Heavenly hell – automated tests at scale wojciech seliga
Heavenly hell – automated tests at scale   wojciech seligaHeavenly hell – automated tests at scale   wojciech seliga
Heavenly hell – automated tests at scale wojciech seliga
 
Escaping Test Hell - Our Journey - XPDays Ukraine 2013
Escaping Test Hell - Our Journey - XPDays Ukraine 2013Escaping Test Hell - Our Journey - XPDays Ukraine 2013
Escaping Test Hell - Our Journey - XPDays Ukraine 2013
 
Continuous Integration on AWS
Continuous Integration on AWSContinuous Integration on AWS
Continuous Integration on AWS
 
Ensuring OpenStack Version up Compatibility for CloudOpen Japan 2013-05-31
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
 
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...
Getting your mobile test automation process in place - using Cucumber and Cal...
 
Quick tour to front end unit testing using jasmine
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
 
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...
Lessons Learned in Software Development: QA Infrastructure – Maintaining Rob...
 
Unit testing for Cocoa developers
Unit testing for Cocoa developersUnit testing for Cocoa developers
Unit testing for Cocoa developers
 
33rd degree
33rd degree33rd degree
33rd degree
 
Microsoft SQL Server Testing Frameworks
Microsoft SQL Server Testing FrameworksMicrosoft SQL Server Testing Frameworks
Microsoft SQL Server Testing Frameworks
 
How to Un-Flake Flaky Tests - A New Hire's Toolkit
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
 
How to Un-Flake Flaky Tests - A New Hire's Toolkit
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
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
 
Continuous Test Automation via CI (CodeMash 2012) - Automating the Agile way
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
 
Developers Testing - Girl Code at bloomon
Developers Testing - Girl Code at bloomonDevelopers Testing - Girl Code at bloomon
Developers Testing - Girl Code at bloomon
 
Growing Trends of Open Source UI Frameworks
Growing Trends of Open Source UI FrameworksGrowing Trends of Open Source UI Frameworks
Growing Trends of Open Source UI Frameworks
 
Enabling Agile Testing Through Continuous Integration Agile2009
Enabling Agile Testing Through Continuous Integration Agile2009Enabling Agile Testing Through Continuous Integration Agile2009
Enabling Agile Testing Through Continuous Integration Agile2009
 
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)
Docker–Grid (A On demand and Scalable dockerized selenium grid architecture)
 
Performance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle CoherencePerformance Test Driven Development with Oracle Coherence
Performance Test Driven Development with Oracle Coherence
 
AWS Lambda from the Trenches
AWS Lambda from the TrenchesAWS Lambda from the Trenches
AWS Lambda from the Trenches
 

Mais de Wojciech Seliga

Sprzedawanie własnego biznesu IT - Confitura 2023.pdf
Sprzedawanie własnego biznesu IT - Confitura 2023.pdfSprzedawanie własnego biznesu IT - Confitura 2023.pdf
Sprzedawanie własnego biznesu IT - Confitura 2023.pdfWojciech Seliga
 
Jak być zarąbistym developerem w oczach szefa i ... klienta
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
 
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...
How to impress your boss and your customer in a modern software development c...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
Devoxx Poland 2015: 5-10-15 years with Java Wojciech Seliga
 
Confitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career UnpluggedConfitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career UnpluggedWojciech Seliga
 
Better Front-end Development in Atlassian Plugins
Better Front-end Development in Atlassian PluginsBetter Front-end Development in Atlassian Plugins
Better Front-end Development in Atlassian PluginsWojciech Seliga
 
Bringing Effectiveness and Sanity to Highly Distributed Agile Teams
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 TeamsWojciech Seliga
 
JDD Effective Code Review In Agile Teams
JDD Effective Code Review In Agile TeamsJDD Effective Code Review In Agile Teams
JDD Effective Code Review In Agile TeamsWojciech Seliga
 

Mais de Wojciech Seliga (8)

Sprzedawanie własnego biznesu IT - Confitura 2023.pdf
Sprzedawanie własnego biznesu IT - Confitura 2023.pdfSprzedawanie własnego biznesu IT - Confitura 2023.pdf
Sprzedawanie własnego biznesu IT - Confitura 2023.pdf
 
Jak być zarąbistym developerem w oczach szefa i ... klienta
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
 
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...
How to impress your boss and your customer in a modern software development c...
 
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
Devoxx Poland 2015: 5-10-15 years with Java
 
Confitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career UnpluggedConfitura 2013 Software Developer Career Unplugged
Confitura 2013 Software Developer Career Unplugged
 
Better Front-end Development in Atlassian Plugins
Better Front-end Development in Atlassian PluginsBetter Front-end Development in Atlassian Plugins
Better Front-end Development in Atlassian Plugins
 
Bringing Effectiveness and Sanity to Highly Distributed Agile Teams
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
 
JDD Effective Code Review In Agile Teams
JDD Effective Code Review In Agile TeamsJDD Effective Code Review In Agile Teams
JDD Effective Code Review In Agile Teams
 

Último

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 

Último (20)

Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 

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
  • 65.
  • 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