SlideShare ist ein Scribd-Unternehmen logo
1 von 73
Downloaden Sie, um offline zu lesen
Tests
Antipatterns
by Maciej Przewoźnik
Agenda
Slow Test
Overuse of mocks
Obscure Test
Agenda (2)
Manual Test
Fragile Test
Erratic Test
Eager Test
Agenda (3)
Verbose Test
Mystery Guest
Test Code Duplication
High Test Maintenance Cost
Slow Test
Slow Test
Stabilizing a very slow test
Individual slow tests
Executing all tests is too long
Slow Test
Stabilizing a very slow test
Individual slow tests
Executing all tests is too long
- -
Slow Test - stabilizing a very slow
test
Don't steer a rover on Mars from Earth
Execute a test ...
8 minutes later: failure
Fix & rerun
10 minutes later: failure
Fix & rerun
10 minutes later: failure
Slow Test - stabilizing a very slow
test
What to do in the meantime?
GTD: don't multitask
CPU cache vs "brain cache"
Context switch cost
Slow Test - stabilizing a very slow
test
What to do in the meantime?
Solution: use the fastest machine
Have the machine in the company
Other tests on slower machines
Slow Test - stabilizing a very slow
test
What to do in the meantime?
For performance or stress tests with big
amount of data
Solution: use smaller data sets for
stabilization first
Then run with bigger datasets
Slow Test - stabilizing a very slow
test
Solution: use REPL environment to
stabilize it faster
Real-eval-print loop
A failure shouldn't invalidate previous results!
Slow Test - stabilizing a very slow
test
Solution: stabilize parts separately
Given a test:
Generate a big file.
Consume it.
Don't remove the file if failure occurs in (2).
(to be continued)
Slow Test
Stabilizing a very slow test
Individual slow tests
Executing all tests is too long
Slow Test - individual tests are
slow
What is a slow test?
a developer gets irritated or bored waiting for
finish
is tempted to get a break, surf the Internet,
chat, or walk around
Slow Test - individual tests are
slow
What is a slow test?
Sometimes more than a second, sometimes a
millisecond
Not long individually, but all tests execution is
too long
Or a group of tests is too long
Slow Test - individual tests are
slow
Impact:
Developers stop running them after every code
change
Developers wait for a coffee break, lunch or a
meeting to run them
Delayed feedback, loss of "flow"
Decreases productivity and job satisfaction
Slow Test - individual tests are
slow
Cause: Slow dependent component (1)
Solution: Fast Fake Objects
Real DB → Fake DB (e. g. In Memory DB)
Real Cloud → In memory cloud
Filesystems: HDD, SSD → RAM disk:
mount ­t tmpfs ­o size=200m tmpfs /mnt/tmp
Slow Test - individual tests are
slow
Cause: Slow dependent component (2)
Example: Backup applications
Solution: Recorded test
Record operations done by backup
applications
Warning: Recorded test may be a Fragile Test
Slow Test - individual tests are
slow
Cause: Slow environment or layer
Solution: Separate tested logic from
environment:
Hardware/GUI/HTTP layer
Threads, processes
Clouds, etc.
Kernel code
Slow Test - individual tests are
slow
Cause: Over-engineered fixture
Long setup of many complicated objects
Even if most of them are not needed
Or using full product in tests
Solution: General Fixture → Minimal
Fixture
Slow Test - individual tests are
slow
Cause: Manual tests
Slow by definition
Even slower if repeated
"Please check that the system just works"
before a release
Automated tests may get written anyway later
Slow Test - individual tests are
slow
Cause: Manual tests
Often under pressure or under "give-it-to-me-
now driven-development"
No future returns
May be worthless after just a single commit
Lack of tests automation will slow test
development later
Slow Test - individual tests are
slow
"Just Say No to More End-to-End Tests"
Testing pyramid
Manual tests
End-to-end tests
Integration tests
Component tests
Fast Unit Tests
Slow Test
Stabilizing a very slow test
Individual slow tests
Executing all tests is too long
Slow Tests - executing all tests is
too long
In some big IT companies:
build time: one minute
release to production: 8 minutes
not just a release – a release to production!
What problems may it address?
Slow Tests - executing all tests is
too long
Impact: Developers context-switching,
worse productivity
tests start ...
15 min: a test fails
fix & rerun
20 min: a test fails
Slow Tests - executing all tests is
too long
Impact: Integrating code slower
Bigger release queue
Slower features delivery, missing deadlines
Slow Tests - executing all tests is
too long
Impact: Production big fixes are
delayed
A customer requires a fix, we need to test it
Release a quick fix or a well tested fix?
Slow Tests - executing all tests is
too long
Cause: Too much overlap between
tests
Test1: [ DATA LOADING ][doSth][check]
Test2: [ DATA LOADING ][doSth][check]
Test3: [ DATA LOADING ][doSth][check]
Slow Tests - executing all tests is
too long
Cause: Too much overlap between
tests
Use Shared Fixture?
Shared setup for many tests
Warning: may get closer to Erratic Tests,
High Test Maintenance Cost
Slow Tests - executing all tests is
too long
Cause: Too Many Tests
Too many tests run too frequently
Solution: subsets of tests can be run at
the time
All tests within larger period of time
Prerelease tests: all with fast fakes
Postrelease tests: with real objects
Slow Tests - executing all tests is
too long
Cause: Too Many Tests
The system is too large
Solution: break it into independent
subsystems
Slow Tests - executing all tests is
too long
Cause: Slow Machines
Only one integration server
Too slow integration servers
Insufficient parallelization: look at "top",
"vmstat"
Overuse of (strict)
mocks
Overuse of mocks
Impact:Tests can be harder to
understand
The extra code detracts from the tester authors
intent
Overuse of mocks
Impact: Tests are harder to maintain
Focus: implementation vs public interface
Focus: implementation vs behavior
Extra code for mock behavior needed
Over-specified software
Fragile
Overuse of mocks
Impact: Less assurance that the code
is working properly
It's hard to guarantee that the mocks behave as
real implementations
Especially over time
Overuse of mocks
When the real object cannot be used:
They are too slow
Their setup is too complex
They charge money, etc.
Overuse of mocks
Alternatives:
Fake objects
Hermetic local servers (for cash transactions,
etc.)
Consider the
following bad code ...
class TeaHouse(object):
    def __init__(self, cash_service, tax_service):
        self.cash_service = cash_service
        self.tax_service = tax_service
        self.money_total = 0
    def order_cup(self, credit_card):
        cup = Tea()
        self.cash_service.begin_transaction()
        result = self.cash_service.charge(
            credit_card, cup.price)
        if result:
            self.money_total += cup.price
            self.cash_service.commit_transaction()
            self.tax_service.register_transaction(
                cup.price
            )
        else:
            self.cash_service.cancel_transaction()
def should_compute_doubled_price_for_two_cups():
    cs = mock(CashService)
    cs.expect_call("begin_transaction").times(2)
    cs.expect_call("charge").times(2).repeatedly(
        Return(Cup())
    )
    cs.expect_call("end_transaction").times(2)
    ts.mock(TaxService)
    ts.expect_call("register_transaction").times(2)
    t = TeaHouse(cs, ts)
    c = CreditCard(money=usd(30))
    t.set_tea_price(usd(10))
    t.order_cup(c)
    t.order_cup(c)
    assert t.money_total == usd(20)
Overuse of mocks
We actually don't care for interaction with cash
service and tax service here
Overuse of mocks
Alternative: use a fake
def should_compute_doubled_price_for_two_cups():
    t = TeaHouse(
        FakeInMemoryCashService(), FakeTaxService()
    )
    c = CreditCard(money=usd(30))
    t.set_tea_price(usd(10))
    t.order_cup(c)
    t.order_cup(c)
    assert t.money_total == usd(20)
Overuse of mocks
Alternative: use a stub or a non-strict
mock:
def should_compute_doubled_price_for_two_cups():
    t = TeaHouse(
        StubCashService(always_ok=True), StubTaxService()
    )
    c = CreditCard(money=usd(30))
    t.set_tea_price(usd(10))
    t.order_cup(c)
    t.order_cup(c)
    assert t.money_total == usd(20)
But in this particular
situation, even better
is ...
One function, one
responsibility
Overuse of mocks
class TeaHouseOrders:
    def __init__(self):
        # no cash_service and no tax service!
        self.orders = []
    def order_cup(credit_card):
        self.orders.append(TeaOrder())
        return 
    def total_price():
        return sum([o.price() for o in self.orders])
Overuse of mocks
class TeaHouseCash:
    def charge(price):
        self.cash_service.begin_transaction()
        result = self.cash_service.charge(cc, price)
        if result:
            self.cash_service.commit_transaction()
        else:
            self.cancel_transaction()
        return self.cups
Overuse of mocks
def should_compute_doubled_price_for_two_cups():
    t = TeaHouseOrders()
    t.set_tea_price(usd(10))
    t.order_cup()
    t.order_cup()
    assert t.total_price() == usd(20)
Neither mocks nor fakes needed!
Important concept: separate description
from execution
Obscure Test
Obscure Test
Impact:
Harder to understand
Harder to maintain
Developers will not read them as
documentation
May lead to Can result in a Buggy Test, and
then Production Bugs
Obscure Test
Good Tests:
Tests should act as documentation
And also a self-verifying executable
specification
Obscure Test
Is it a good test?
def should_have_the_same_permissions_after_copy():
    fs = FileSystem("r­w")
    f = File("a.txt", "rwxrwxrwx")
    fso = FileSystemOps(fs)
    fso.copy(f, "b.txt")
    assert(fso.fileperm("a.txt") == fso.fileperm("b.txt"))
Obscure Test
Is it a good test?
def should_have_the_same_permissions_after_copy():
    fs = FileSystem("r­w", "no­auto", 620, false, 
        true, true, 8096, 10*1024*1024*1024, 1000000)
    f = File("a.txt", "rwxrwxrwx", 64, "xyzxyz", 
        "2016­12­12", "2016­12­12", "2016­12­12")
    fso = FileSystemOps(fs, true, false, 1024, 11)
    fso.copy(f, "b.txt")
    assert(fso.fileperm("a.txt") == fso.fileperm("b.txt"))
Obscure Test
Cause: Irrelevant information
which values affect the outcome?
There can be a hundred constants in a test
code
Obscure Test
Cause: Too much information
Solution: introduce higher-level test
language
def file_copy_permissions_should_be_as_original():
    given_a_filesystem()
    given_a_file_with_permissions("rwxrwxrwx")
    when_a_file_is_copied()
    then_the_new_file_has_permissions("rwxrwxrwx")
Obscure Test
Cause: Too much information, Eager
Test
The test verifies too much functionality in a
single
Test Method and therefore is hard to
understand
Obscure Test
Cause: Too much information, Eager
Test
def test_my_filesystem():
    fs = FileSystem("r­w", "no­auto", 620, false, true,
         true, 8096, 10*1024*1024*1024, 1000000)
    assert(fs.isReadOnly() == false)
    f = File("a.txt", "rwxrwxrwx", 64, "xyzxyz", 
        "2016­12­12", "2016­12­12", "2016­12­12")
    assert(f.getPermissions() == "rwxrwxrwx")
    assert(f.getCreationDate() == "2016­12­12")
    fso = FileSystemOps(fs, true, false, 1024, 11)
    fso.copy(f, "b.txt")
    assert(fso.fileperm("a.txt") == fso.fileperm("b.txt"))
    assert(fso.size("a.txt") == fso.size("b.txt")
Obscure Test
Cause: Too much information, Eager
Test
Often a Fragile Test
And a High-Maintenance Test
Obscure Test
Cause: Too much information
Not caring about clean code
No refactoring
"These are only tests"
"just do it in-line" mentality
Obscure Test
Cause: Too little information – Mystery
Guest
Cause and effect not clear
Something is hidden from the Test Method
Obscure Test
Cause: Too little information – Mystery
Guest
Doesn't exist because is copied to root?
def test123():
    fs = createFileSystem()
    f = new File("a.txt", "rwxrwxrwx", 64*MB, "xyzxyz", 
        "2016­12­12", "2016­12­12", "2016­12­12"
    )
    fso = new FileSystemOps(fs, true, false, 1024, 11)
    fso.copy(f, "/b.txt")
    assert(fso.exists("b.txt") == false)
Obscure Test
Cause: Too little information – Mystery
Guest
No, because createFileSystem creates read-only
filesystem:
def createFileSystem():
    return new FileSystem(
        "r­o", "no­auto", 620, false, true, true, 
        8096, 10*1024*1024*1024, 1000000
    )
)
Obscure Test
Cause: Setup-action-verify phases not
clear
def test123():
    fs = createFilesystem()
    f = createFile("a.txt")
    fso = createFso()
    f2 = fso.copy(f, "b.txt")
    s1 = fso.size("a.txt")
    s2 = fso.size("b.txt")
    assert(s1 == s2)
Do we test "size" here or "copy"?
Solution: Given-when-then
Obscure Test
Cause: Setup-action-verify phases not
clear
Solution: Given-when-then:
    given_filesystem()
    given_file()
    given_file_system_operations()
    when_the_file_is_copied()
    then_the_new_file_size_is_as_original()
Obscure Test
Cause: Overcomplicated Fixture
class TestFSFixture:
    def createRealOnlyFS():
    def createRWFS():
    def createJournalingFS():
    def createTransactionalFS():
    def createNFS():
    def createHDFS():
    def createNoAcFs():
    def createTwoFilesystems():
    def createPerfOptFS():
    def createBuggyFS():
    def createSlowFS():
Obscure Test
Cause: Overcomplicated Fixture
The fixture is too big and too complex
To understand the test, reading the fixture may
be necessary
Solutions:
Divide a General Fixture into smaller Fixtures
Use Minimal Fixture
Use Facades
Obscure Test
Cause: Indirect Testing
Testing one component through other
components
Example: Execute a product in debug mode to
see if log rotation works
Root Cause: software not designed for
testability
Sources
Gerard Meszaros - xUnit Test Patterns
testing.googleblog.com
Paul Chiusano and Rúnar Bjarnason - Functional
Programming in Scala
THE END

Weitere ähnliche Inhalte

Was ist angesagt?

Attack-driven defense
Attack-driven defenseAttack-driven defense
Attack-driven defenseZane Lackey
 
Why Software Test Performance Matters
Why Software Test Performance MattersWhy Software Test Performance Matters
Why Software Test Performance MattersSolano Labs
 
MongoDB World 2018: Tutorial - MongoDB Meets Chaos Monkey
MongoDB World 2018: Tutorial - MongoDB Meets Chaos MonkeyMongoDB World 2018: Tutorial - MongoDB Meets Chaos Monkey
MongoDB World 2018: Tutorial - MongoDB Meets Chaos MonkeyMongoDB
 
Functional Load Testing with Gatling
Functional Load Testing with GatlingFunctional Load Testing with Gatling
Functional Load Testing with GatlingGerald Muecke
 
2017 03-10 - vu amsterdam - testing safety critical systems
2017 03-10 - vu amsterdam - testing safety critical systems2017 03-10 - vu amsterdam - testing safety critical systems
2017 03-10 - vu amsterdam - testing safety critical systemsJaap van Ekris
 
2016-04-28 - VU Amsterdam - testing safety critical systems
2016-04-28 - VU Amsterdam - testing safety critical systems2016-04-28 - VU Amsterdam - testing safety critical systems
2016-04-28 - VU Amsterdam - testing safety critical systemsJaap van Ekris
 
2015 05-07 - vu amsterdam - testing safety critical systems
2015 05-07 - vu amsterdam - testing safety critical systems2015 05-07 - vu amsterdam - testing safety critical systems
2015 05-07 - vu amsterdam - testing safety critical systemsJaap van Ekris
 
First adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram InstituteFirst adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram InstituteAndrea Telatin
 
Testing Safety Critical Systems (10-02-2014, VU amsterdam)
Testing Safety Critical Systems (10-02-2014, VU amsterdam)Testing Safety Critical Systems (10-02-2014, VU amsterdam)
Testing Safety Critical Systems (10-02-2014, VU amsterdam)Jaap van Ekris
 
Need forbuildspeed agile2012
Need forbuildspeed agile2012Need forbuildspeed agile2012
Need forbuildspeed agile2012drewz lin
 
Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Arto Santala
 
Escaping Automated Test Hell - One Year Later
Escaping Automated Test Hell - One Year LaterEscaping Automated Test Hell - One Year Later
Escaping Automated Test Hell - One Year LaterWojciech Seliga
 
Effective approaches to web application security
Effective approaches to web application security Effective approaches to web application security
Effective approaches to web application security Zane Lackey
 
Fault-tolerance on the Cheap: Making Systems That (Probably) Won't Fall Over
Fault-tolerance on the Cheap: Making Systems That (Probably) Won't Fall Over Fault-tolerance on the Cheap: Making Systems That (Probably) Won't Fall Over
Fault-tolerance on the Cheap: Making Systems That (Probably) Won't Fall Over Brian Troutwine
 
4 colin walls - self-testing in embedded systems
4   colin walls - self-testing in embedded systems4   colin walls - self-testing in embedded systems
4 colin walls - self-testing in embedded systemsIevgenii Katsan
 
Malware analysis as a hobby (Owasp Göteborg)
Malware analysis as a hobby (Owasp Göteborg)Malware analysis as a hobby (Owasp Göteborg)
Malware analysis as a hobby (Owasp Göteborg)Michael Boman
 

Was ist angesagt? (20)

Attack-driven defense
Attack-driven defenseAttack-driven defense
Attack-driven defense
 
Why Software Test Performance Matters
Why Software Test Performance MattersWhy Software Test Performance Matters
Why Software Test Performance Matters
 
Test Dependencies and the Future of Build Acceleration
Test Dependencies and the Future of Build AccelerationTest Dependencies and the Future of Build Acceleration
Test Dependencies and the Future of Build Acceleration
 
MongoDB World 2018: Tutorial - MongoDB Meets Chaos Monkey
MongoDB World 2018: Tutorial - MongoDB Meets Chaos MonkeyMongoDB World 2018: Tutorial - MongoDB Meets Chaos Monkey
MongoDB World 2018: Tutorial - MongoDB Meets Chaos Monkey
 
Functional Load Testing with Gatling
Functional Load Testing with GatlingFunctional Load Testing with Gatling
Functional Load Testing with Gatling
 
2017 03-10 - vu amsterdam - testing safety critical systems
2017 03-10 - vu amsterdam - testing safety critical systems2017 03-10 - vu amsterdam - testing safety critical systems
2017 03-10 - vu amsterdam - testing safety critical systems
 
2016-04-28 - VU Amsterdam - testing safety critical systems
2016-04-28 - VU Amsterdam - testing safety critical systems2016-04-28 - VU Amsterdam - testing safety critical systems
2016-04-28 - VU Amsterdam - testing safety critical systems
 
2015 05-07 - vu amsterdam - testing safety critical systems
2015 05-07 - vu amsterdam - testing safety critical systems2015 05-07 - vu amsterdam - testing safety critical systems
2015 05-07 - vu amsterdam - testing safety critical systems
 
First adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram InstituteFirst adventure within a shell - Andrea Telatin at Quadram Institute
First adventure within a shell - Andrea Telatin at Quadram Institute
 
Testing Safety Critical Systems (10-02-2014, VU amsterdam)
Testing Safety Critical Systems (10-02-2014, VU amsterdam)Testing Safety Critical Systems (10-02-2014, VU amsterdam)
Testing Safety Critical Systems (10-02-2014, VU amsterdam)
 
Give A Great Tech Talk 2013
Give A Great Tech Talk 2013Give A Great Tech Talk 2013
Give A Great Tech Talk 2013
 
Need forbuildspeed agile2012
Need forbuildspeed agile2012Need forbuildspeed agile2012
Need forbuildspeed agile2012
 
Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)Automate Everything! (No stress development/Tallinn)
Automate Everything! (No stress development/Tallinn)
 
Escaping Automated Test Hell - One Year Later
Escaping Automated Test Hell - One Year LaterEscaping Automated Test Hell - One Year Later
Escaping Automated Test Hell - One Year Later
 
Effective approaches to web application security
Effective approaches to web application security Effective approaches to web application security
Effective approaches to web application security
 
Fault-tolerance on the Cheap: Making Systems That (Probably) Won't Fall Over
Fault-tolerance on the Cheap: Making Systems That (Probably) Won't Fall Over Fault-tolerance on the Cheap: Making Systems That (Probably) Won't Fall Over
Fault-tolerance on the Cheap: Making Systems That (Probably) Won't Fall Over
 
X page developer
X page developerX page developer
X page developer
 
4 colin walls - self-testing in embedded systems
4   colin walls - self-testing in embedded systems4   colin walls - self-testing in embedded systems
4 colin walls - self-testing in embedded systems
 
North east user group tour
North east user group tourNorth east user group tour
North east user group tour
 
Malware analysis as a hobby (Owasp Göteborg)
Malware analysis as a hobby (Owasp Göteborg)Malware analysis as a hobby (Owasp Göteborg)
Malware analysis as a hobby (Owasp Göteborg)
 

Andere mochten auch

Actividad de aprendizaje 08 - Vanessa Florián Serrano
Actividad de aprendizaje 08 - Vanessa Florián SerranoActividad de aprendizaje 08 - Vanessa Florián Serrano
Actividad de aprendizaje 08 - Vanessa Florián SerranoMonica Alvarez Muñoz
 
Safe alliance powerpoint pdf
Safe alliance powerpoint pdfSafe alliance powerpoint pdf
Safe alliance powerpoint pdfKambre' Glover
 
2-2-16-PC-s5-PRICE-SHOW-Animated
2-2-16-PC-s5-PRICE-SHOW-Animated2-2-16-PC-s5-PRICE-SHOW-Animated
2-2-16-PC-s5-PRICE-SHOW-AnimatedSydney Hatch King
 
Hms seminar2 prez_krivosija_lisica
Hms seminar2 prez_krivosija_lisicaHms seminar2 prez_krivosija_lisica
Hms seminar2 prez_krivosija_lisicaNina Krivošija
 
Self Directed Project in Kinesiology
Self Directed Project in KinesiologySelf Directed Project in Kinesiology
Self Directed Project in KinesiologyPhilip Yan
 
Why Millennials Hate Your Mobile Ads
Why Millennials Hate Your Mobile AdsWhy Millennials Hate Your Mobile Ads
Why Millennials Hate Your Mobile AdsBIEvents
 
Play for a Living - Sneak Preview
Play for a Living - Sneak PreviewPlay for a Living - Sneak Preview
Play for a Living - Sneak PreviewCharlie Hoehn
 
Web Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitWeb Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitMozDevz
 

Andere mochten auch (13)

Actividad de aprendizaje 08 - Vanessa Florián Serrano
Actividad de aprendizaje 08 - Vanessa Florián SerranoActividad de aprendizaje 08 - Vanessa Florián Serrano
Actividad de aprendizaje 08 - Vanessa Florián Serrano
 
Belive
BeliveBelive
Belive
 
Origami (1)
Origami (1)Origami (1)
Origami (1)
 
Safe alliance powerpoint pdf
Safe alliance powerpoint pdfSafe alliance powerpoint pdf
Safe alliance powerpoint pdf
 
2-2-16-PC-s5-PRICE-SHOW-Animated
2-2-16-PC-s5-PRICE-SHOW-Animated2-2-16-PC-s5-PRICE-SHOW-Animated
2-2-16-PC-s5-PRICE-SHOW-Animated
 
Hms seminar2 prez_krivosija_lisica
Hms seminar2 prez_krivosija_lisicaHms seminar2 prez_krivosija_lisica
Hms seminar2 prez_krivosija_lisica
 
Self Directed Project in Kinesiology
Self Directed Project in KinesiologySelf Directed Project in Kinesiology
Self Directed Project in Kinesiology
 
Nord Pas-de-Calais
Nord Pas-de-CalaisNord Pas-de-Calais
Nord Pas-de-Calais
 
Sinestezi pra100
Sinestezi pra100Sinestezi pra100
Sinestezi pra100
 
Why Millennials Hate Your Mobile Ads
Why Millennials Hate Your Mobile AdsWhy Millennials Hate Your Mobile Ads
Why Millennials Hate Your Mobile Ads
 
Play for a Living - Sneak Preview
Play for a Living - Sneak PreviewPlay for a Living - Sneak Preview
Play for a Living - Sneak Preview
 
Presentación1 tic sobre el diseño instruccional
Presentación1 tic sobre el diseño instruccionalPresentación1 tic sobre el diseño instruccional
Presentación1 tic sobre el diseño instruccional
 
Web Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitWeb Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to Git
 

Ähnlich wie Tests antipatterns

Open source bridge testing antipatterns presentation
Open source bridge testing antipatterns presentationOpen source bridge testing antipatterns presentation
Open source bridge testing antipatterns presentationmmrobins
 
PAC 2019 virtual Stephen Townshend
PAC 2019 virtual Stephen TownshendPAC 2019 virtual Stephen Townshend
PAC 2019 virtual Stephen TownshendNeotys
 
Testing and TDD - KoJUG
Testing and TDD - KoJUGTesting and TDD - KoJUG
Testing and TDD - KoJUGlburdz
 
An introduction to unit testing
An introduction to unit testingAn introduction to unit testing
An introduction to unit testingAdam Stephensen
 
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...TEST Huddle
 
Boston MeetUp 10.10
Boston MeetUp 10.10Boston MeetUp 10.10
Boston MeetUp 10.10Solano Labs
 
Google test training
Google test trainingGoogle test training
Google test trainingThierry Gayet
 
Creating testing tools to support development
Creating testing tools to support developmentCreating testing tools to support development
Creating testing tools to support developmentChema del Barco
 
Testing - How Vital and How Easy to use
Testing - How Vital and How Easy to useTesting - How Vital and How Easy to use
Testing - How Vital and How Easy to useUma Ghotikar
 
Agile Engineering Best Practices by Richard Cheng
Agile Engineering Best Practices by Richard ChengAgile Engineering Best Practices by Richard Cheng
Agile Engineering Best Practices by Richard ChengExcella
 
Need To Automate Test And Integration Beyond Current Limits?
Need To Automate Test And Integration Beyond Current Limits?Need To Automate Test And Integration Beyond Current Limits?
Need To Automate Test And Integration Beyond Current Limits?Ghodhbane Mohamed Amine
 
Performant Django - Ara Anjargolian
Performant Django - Ara AnjargolianPerformant Django - Ara Anjargolian
Performant Django - Ara AnjargolianHakka Labs
 
Agile Engineering Sparker GLASScon 2015
Agile Engineering Sparker GLASScon 2015Agile Engineering Sparker GLASScon 2015
Agile Engineering Sparker GLASScon 2015Stephen Ritchie
 
Whats In Your QA Tool Belt?
Whats In Your QA Tool Belt?Whats In Your QA Tool Belt?
Whats In Your QA Tool Belt?Walter Mamed
 
Unit Tests are Overrated (NDCOslo 2013)
Unit Tests are Overrated (NDCOslo 2013)Unit Tests are Overrated (NDCOslo 2013)
Unit Tests are Overrated (NDCOslo 2013)Lars-Erik Kindblad
 
Production debugging web applications
Production debugging web applicationsProduction debugging web applications
Production debugging web applicationsIdo Flatow
 
Next Generation Debugging
Next Generation DebuggingNext Generation Debugging
Next Generation DebuggingUndo
 
DX@Scale: Optimizing Salesforce Development and Deployment for large scale pr...
DX@Scale: Optimizing Salesforce Development and Deployment for large scale pr...DX@Scale: Optimizing Salesforce Development and Deployment for large scale pr...
DX@Scale: Optimizing Salesforce Development and Deployment for large scale pr...Paris Salesforce Developer Group
 

Ähnlich wie Tests antipatterns (20)

Open source bridge testing antipatterns presentation
Open source bridge testing antipatterns presentationOpen source bridge testing antipatterns presentation
Open source bridge testing antipatterns presentation
 
PAC 2019 virtual Stephen Townshend
PAC 2019 virtual Stephen TownshendPAC 2019 virtual Stephen Townshend
PAC 2019 virtual Stephen Townshend
 
NYC MeetUp 10.9
NYC MeetUp 10.9NYC MeetUp 10.9
NYC MeetUp 10.9
 
Testing and TDD - KoJUG
Testing and TDD - KoJUGTesting and TDD - KoJUG
Testing and TDD - KoJUG
 
An introduction to unit testing
An introduction to unit testingAn introduction to unit testing
An introduction to unit testing
 
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...
Testing As A Bottleneck - How Testing Slows Down Modern Development Processes...
 
Boston MeetUp 10.10
Boston MeetUp 10.10Boston MeetUp 10.10
Boston MeetUp 10.10
 
Software Testing 5/5
Software Testing 5/5Software Testing 5/5
Software Testing 5/5
 
Google test training
Google test trainingGoogle test training
Google test training
 
Creating testing tools to support development
Creating testing tools to support developmentCreating testing tools to support development
Creating testing tools to support development
 
Testing - How Vital and How Easy to use
Testing - How Vital and How Easy to useTesting - How Vital and How Easy to use
Testing - How Vital and How Easy to use
 
Agile Engineering Best Practices by Richard Cheng
Agile Engineering Best Practices by Richard ChengAgile Engineering Best Practices by Richard Cheng
Agile Engineering Best Practices by Richard Cheng
 
Need To Automate Test And Integration Beyond Current Limits?
Need To Automate Test And Integration Beyond Current Limits?Need To Automate Test And Integration Beyond Current Limits?
Need To Automate Test And Integration Beyond Current Limits?
 
Performant Django - Ara Anjargolian
Performant Django - Ara AnjargolianPerformant Django - Ara Anjargolian
Performant Django - Ara Anjargolian
 
Agile Engineering Sparker GLASScon 2015
Agile Engineering Sparker GLASScon 2015Agile Engineering Sparker GLASScon 2015
Agile Engineering Sparker GLASScon 2015
 
Whats In Your QA Tool Belt?
Whats In Your QA Tool Belt?Whats In Your QA Tool Belt?
Whats In Your QA Tool Belt?
 
Unit Tests are Overrated (NDCOslo 2013)
Unit Tests are Overrated (NDCOslo 2013)Unit Tests are Overrated (NDCOslo 2013)
Unit Tests are Overrated (NDCOslo 2013)
 
Production debugging web applications
Production debugging web applicationsProduction debugging web applications
Production debugging web applications
 
Next Generation Debugging
Next Generation DebuggingNext Generation Debugging
Next Generation Debugging
 
DX@Scale: Optimizing Salesforce Development and Deployment for large scale pr...
DX@Scale: Optimizing Salesforce Development and Deployment for large scale pr...DX@Scale: Optimizing Salesforce Development and Deployment for large scale pr...
DX@Scale: Optimizing Salesforce Development and Deployment for large scale pr...
 

Kürzlich hochgeladen

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUK Journal
 

Kürzlich hochgeladen (20)

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 

Tests antipatterns