SlideShare a Scribd company logo
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!

More Related Content

What's hot

Tests antipatterns
Tests antipatternsTests antipatterns
Tests antipatterns
Maciej Przewoznik
 
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
Clément Escoffier
 
Releasing To Production Every Week India
Releasing To Production Every Week   IndiaReleasing To Production Every Week   India
Releasing To Production Every Week India
exortech
 
Scaling Up Continuous Deployment
Scaling Up Continuous DeploymentScaling Up Continuous Deployment
Scaling Up Continuous Deployment
Timothy 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 ShrinkWrap
Dan Allen
 
Continuous delivery chernivcy
Continuous delivery chernivcyContinuous delivery chernivcy
Continuous delivery chernivcy
Volodymyr Yelchev
 
Arquillian : An introduction
Arquillian : An introductionArquillian : An introduction
Arquillian : An introduction
Vineet Reynolds
 
Live Testing A Legacy App
Live Testing A Legacy AppLive Testing A Legacy App
Live Testing A Legacy App
ColdFusionConference
 
Sista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performanceSista: Improving Cog’s JIT performance
Sista: Improving Cog’s JIT performance
ESUG
 
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
 
Arquillian
ArquillianArquillian
Arquillian
nukeevry1
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
Basma Alkerm
 
[123] quality without qa
[123] quality without qa[123] quality without qa
[123] quality without qa
NAVER D2
 
Delivering Microservices Using Docker
Delivering Microservices Using DockerDelivering Microservices Using Docker
Delivering Microservices Using Docker
Kiruthika 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 Production
TechWell
 
The Hard Problems of Continuous Deployment
The Hard Problems of Continuous DeploymentThe Hard Problems of Continuous Deployment
The Hard Problems of Continuous Deployment
Timothy Fitz
 
September 2010 - Arquillian
September 2010 - ArquillianSeptember 2010 - Arquillian
September 2010 - Arquillian
JBug Italy
 
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...
Microsoft Developer Network (MSDN) - Belgium and Luxembourg
 
Continuous delivery @wcap 5-09-2013
Continuous delivery   @wcap 5-09-2013Continuous delivery   @wcap 5-09-2013
Continuous delivery @wcap 5-09-2013
David Funaro
 
Test Bench Development
Test Bench DevelopmentTest Bench Development
Test Bench Development
Abhishek Tiwari
 

What's hot (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
 

Viewers also liked

Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015Spartez Open Day March 13th 2015
Spartez Open Day March 13th 2015
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)
Developer plantations - colonialism of XXI century (GeeCON 2017)
Wojciech Seliga
 
Social Hacking
Social HackingSocial Hacking
Social Hacking
Choong Ping Teo
 
Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014Escaping Test Hell - ACCU 2014
Escaping Test Hell - ACCU 2014
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...
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 TestKit
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)
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 2013
Wojciech Seliga
 
Innowacja w praktyce - Infoshare 2014
Innowacja w praktyce - Infoshare 2014Innowacja w praktyce - Infoshare 2014
Innowacja w praktyce - Infoshare 2014
Wojciech 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 firmy
Wojciech 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 2015
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...
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 2014
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...
Ten lessons I painfully learnt while moving from software developer to entrep...
Wojciech Seliga
 

Viewers also liked (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...
 

Similar to 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 seliga
Atlassian
 
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
Wojciech Seliga
 
Continuous Integration on AWS
Continuous Integration on AWSContinuous Integration on AWS
Continuous Integration on AWS
Petar 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-31
Masayuki 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 jasmine
Gil 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 developers
Graham Lee
 
33rd degree
33rd degree33rd degree
33rd degree
Dariusz Kordonski
 
Microsoft SQL Server Testing Frameworks
Microsoft SQL Server Testing FrameworksMicrosoft SQL Server Testing Frameworks
Microsoft SQL Server Testing Frameworks
Mark 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 Toolkit
Zachary 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 Toolkit
Zachary Attas
 
Implementing Test Automation in Agile Projects
Implementing Test Automation in Agile ProjectsImplementing Test Automation in Agile Projects
Implementing Test Automation in Agile Projects
Dominik 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 way
Leonard Fingerman
 
Developers Testing - Girl Code at bloomon
Developers Testing - Girl Code at bloomonDevelopers Testing - Girl Code at bloomon
Developers Testing - Girl Code at bloomon
Ineke 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 Frameworks
SmartBear
 
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
sstolberg
 
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 Coherence
aragozin
 
AWS Lambda from the Trenches
AWS Lambda from the TrenchesAWS Lambda from the Trenches
AWS Lambda from the Trenches
Yan Cui
 

Similar to 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
 

More from 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.pdf
Wojciech 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 ... klienta
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...
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 Unplugged
Wojciech 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 Plugins
Wojciech 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 Teams
Wojciech 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 Teams
Wojciech Seliga
 

More from 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
 

Recently uploaded

Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
Postman
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
Ivanti
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
David Brossard
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
saastr
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
jpupo2018
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Wask
 

Recently uploaded (20)

Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
June Patch Tuesday
June Patch TuesdayJune Patch Tuesday
June Patch Tuesday
 
OpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - AuthorizationOpenID AuthZEN Interop Read Out - Authorization
OpenID AuthZEN Interop Read Out - Authorization
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
 

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