Stockholm syndrome

"Premature optimization is the root of all evil"

Donald Knuth

When testing makes no sense

Miro Svrtan

@msvrtan

When should we write tests?

High cost to fix?

Cost of fixing > cost of testing

When it brings "value"

Value = benefit - cost

Value = benefit - cost

Fallacy #1:

It makes my project more expensive

Do you charge for manual testing?

Bugs cost too

Ask for forgiveness, not permission

Fallacy #2:

It takes a lot of time

learning != using

Fallacy #3:

It takes extra time

Manual testing takes time as well

Fallacy #4:

ship PoC to production

Feature lifecycle

Phase 1: Exploration

Phase 2: Modelling/architecture

Phase 3: Development

Phase 4: Production

Fallacy #5:

100% code coverage


class User
{
...
    fn isAdmin() : bool{
        return value;
    }
...
}

Fallacy #6:

we have "tests"

Fallacy #7:

writing tests later is OK


class Customer
{
...
    fn shouldChargeVat(){
        if company {
            return false
        }
        return true
    }
...
}

Fallacy #8:

TDD has something to do with testing

Fallacy #9:

TDD all the way

Easier onboarding

Easier to add new features


class Customer
{
...
    fn shouldChargeVat(){
        if company {
            return false
        }
        return true
    }
...
}
class Customer
{
...
    fn shouldChargeVat(){
        if company {
            if 'DE' == country{
                return true
            }else{
                return false
            }
        }
        return true
    }
...
}

Easier refactoring

class Customer
{
...
    fn shouldChargeVat(){
        if company {
            if 'DE' == country{
                return true
            }else{
                return false
            }
        }
        return true
    }
...
}
class Customer
{
...
    fn shouldChargeVat(){

        if 'DE' == country{
            return true
        }

        if company {
            return false    
        }

        return true
    }
...
}
class Customer
{
...
    fn shouldChargeVat(){

        if 'DE' == country{
            return true
        }

        if company {
            return false    
        }

        return true
    }
...
}
class Customer
{
...
    fn shouldChargeVat(){
        if company {
            if 'DE' == country{
                return true
            }else{
                return false
            }
        }
        return true
    }
...
}

Easier rewriting

Cleaner code

It's hard to test

shitty code

Small app

One off app

Exploration phase

Job security

Thank you!

Miro Svrtan

@msvrtan

miro (at) mirosvrtan.me

Questions?

@msvrtan

When testing makes no sense (WeAreDevs 2019)

By Miro Svrtan

When testing makes no sense (WeAreDevs 2019)

WeAreDevelopers 2019, Berlin

  • 2,013