SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Downloaden Sie, um offline zu lesen
Can
You
Trust
Your
Tests?
2015 Vaidas Pilkauskas & Tadas Ščerbinskas
Van Halen
Band Tour Rider
Van Halen’s 1982
Tour Rider
Agenda
1. Test quality & code coverage
2. Mutation testing in theory
3. Mutation testing in practice
Prod vs. Test code quality
Code has bugs.
Tests are code.
Tests have bugs.
Test quality
Readable
Focused
Concise
Well named
“Program testing can be used to show
the presence of bugs, but never to
show their absence!”
- Edsger W. Dijkstra
Code Coverage
Types of Code Coverage
Lines
Branches
Instructions
Cyclomatic Complexity
Methods
& more
Lines
boolean doFoo() {
return "a" + "b";
}
assertThat(a.doFoo(), is("ab"));
Lines
boolean doFoo(boolean arg) {
return arg ? "a" : "b";
}
assertThat(a.doFoo(true), is("a"));
SUCCESS: 26/26 (100%) Tests passed
Branches
boolean doFoo(boolean arg) {
return arg ? "a" : "b";
}
assertThat(a.doFoo(true), is("a"));
assertThat(a.doFoo(false), is("b"));
Can you trust 100% coverage?
Code coverage can only show what is not tested.
For interpreted languages 100% code coverage is
kind of like full compilation.
Code Coverage can be gamed
On purpose or by accident
Mutation testing
Mutation testing
Changes your program code and
expects your tests to fail.
Wait! What exactly is a mutation?
def isFoo(a) {
return a == foo;
}
def isFoo(a) {
return a != foo;
}
def isFoo(a) {
return true;
}
def isFoo(a) {
return null;
}
>
>
>
Terminology
Applying a mutation to some code creates a mutant.
If test passes - mutant has survived.
If test fails - mutant is killed.
Failing is the new
passing
array = [a, b, c]
max(array) == ???
//test
max([0]) == 0
//implementation
max(a) {
return 0
}
//test
max([0]) == 0
max([1]) == 1
//implementation
max(a) {
return a.first
}
//test
max([0]) == 0
max([1]) == 1
max([0, 2] == 2
//implementation
max(a) {
m = a.first
for (e in a)
if (e > m)
m = e
return m
}
Coverage
Mutation
// test
max([0]) == 0
max([1]) == 1
max([0, 2] == 2
// implementation
max(a) {
m = a.first
for (e in a)
if (e > m)
m = e
return m
}
Mutation
// test
max([0]) == 0
max([1]) == 1
max([0, 2] == 2
// implementation
max(a) {
m = a.first
for (e in a)
if (true)
m = e
return m
}
// test
max([0]) == 0
max([1]) == 1
max([0, 2]) == 2
// implementation
max(a) {
return a.last
}
Baby steps matter
// test
max([0]) == 0
max([1]) == 1
max([0, 2]) == 2
max([2, 1]) == 2
// implementation
max(a) {
m = a.first
for (e in a)
if (e > m)
m = e
}
Tests’ effectiveness is measured by
number of killed mutants by your
test suite.
It’s like hiring a white-hat hacker to try to break into
your server and making sure you detect it.
What if mutant survives
● Simplify your code
● Add additional tests
● TDD - minimal amount of code to pass the
test
Challenges
1. High computation cost - slow
2. Equivalent mutants - false negatives
3. Infinite loops
Equivalent mutations
// Original
int i = 0;
while (i != 10) {
doSomething();
i += 1;
}
// Mutant
int i = 0;
while (i < 10) {
doSomething();
i += 1;
}
Infinite Runtime
// Original
while (expression)
doSomething();
// Mutant
while (true)
doSomething();
Disadvantages
● Can slow down your TDD rhythm
● May be very noisy
Let’s say we have codebase with:
● 300 classes
● around 10 tests per class
● 1 test runs around 1ms
● total test suite runtime is about 3s
Is it really slow?
Let’s do 10 mutations per class
● We get 3000 (300 * 10) mutations
● runtime with all mutations is
150 minutes (3s * 3000)
Speeding it up
Run only tests that cover the mutation
● 300 classes
● 10 tests per class
● 10 mutations per class
● 1ms test runtime
● total mutation runtime
10 * 10 * 1 * 300 = 30s
Speeding it up
During development run tests that cover
only your current changes
Usage scenarios
● Continuous integration
● TDD with mutation testing only on new
changes
● Add mutation testing to your legacy
project, but do not fail a build -
produce warning report
Tools
● Ruby - Mutant
● Java - PIT
● And many tools for other languages
Summary
● Code coverage highlights code that is
definitely not tested
● Mutation testing highlights code that
definitely is tested
● Given non equivalent mutations, good test
suite should work the same as a hash
function
About us
Vaidas Pilkauskas
@liucijus
● Vilnius JUG co-
founder
● Vilnius Scala leader
● Coderetreat facilitator
● Mountain bicycle
rider
● Snowboarder
Tadas Ščerbinskas
@tadassce
● VilniusRB co-
organizer
● RubyConfLT co-
organizer
● RailsGirls Vilnius &
Berlin coach
● Various board sports’
enthusiast
Credits
A lot of presentation content is based on
work by these guys
● Markus Schirp - author of Mutant
● Henry Coles - author of PIT
● Filip Van Laenen - working on a book
Q&A

Weitere ähnliche Inhalte

Ähnlich wie Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests?

Test Driven Development in Python
Test Driven Development in PythonTest Driven Development in Python
Test Driven Development in Python
Anoop Thomas Mathew
 
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Victoria Schiffer
 

Ähnlich wie Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests? (20)

DSR Testing (Part 1)
DSR Testing (Part 1)DSR Testing (Part 1)
DSR Testing (Part 1)
 
Test Driven Development in Python
Test Driven Development in PythonTest Driven Development in Python
Test Driven Development in Python
 
Mutation @ Spotify
Mutation @ Spotify Mutation @ Spotify
Mutation @ Spotify
 
Shift-Left Testing: QA in a DevOps World by David Laulusa
Shift-Left Testing: QA in a DevOps World by David LaulusaShift-Left Testing: QA in a DevOps World by David Laulusa
Shift-Left Testing: QA in a DevOps World by David Laulusa
 
Actor Concurrency
Actor ConcurrencyActor Concurrency
Actor Concurrency
 
Generating characterization tests for legacy code
Generating characterization tests for legacy codeGenerating characterization tests for legacy code
Generating characterization tests for legacy code
 
Advanced patterns in asynchronous programming
Advanced patterns in asynchronous programmingAdvanced patterns in asynchronous programming
Advanced patterns in asynchronous programming
 
Refactoring Ruby Code
Refactoring Ruby CodeRefactoring Ruby Code
Refactoring Ruby Code
 
Software Arch TDD ppt.pdf
Software Arch TDD ppt.pdfSoftware Arch TDD ppt.pdf
Software Arch TDD ppt.pdf
 
Change Software Like a Scientist
Change Software Like a ScientistChange Software Like a Scientist
Change Software Like a Scientist
 
JUnit Pioneer
JUnit PioneerJUnit Pioneer
JUnit Pioneer
 
Software Quality Testing
Software Quality TestingSoftware Quality Testing
Software Quality Testing
 
Working Effectively with Legacy Code (draft)
Working Effectively with Legacy Code (draft)Working Effectively with Legacy Code (draft)
Working Effectively with Legacy Code (draft)
 
Stamp breizhcamp 2019
Stamp breizhcamp 2019Stamp breizhcamp 2019
Stamp breizhcamp 2019
 
Iterative architecture
Iterative architectureIterative architecture
Iterative architecture
 
Grails unit testing
Grails unit testingGrails unit testing
Grails unit testing
 
Mutation Testing: Testing your tests
Mutation Testing: Testing your testsMutation Testing: Testing your tests
Mutation Testing: Testing your tests
 
Tdd guide
Tdd guideTdd guide
Tdd guide
 
Core java
Core javaCore java
Core java
 
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
Agile Developer Immersion Workshop, LASTconf Melbourne, Australia, 19th July ...
 

Mehr von Agile Lietuva

Agile Pusryčiai 2023 - „Kaip užsitikrinti projekto sėkmę dar iki projekto pra...
Agile Pusryčiai 2023 - „Kaip užsitikrinti projekto sėkmę dar iki projekto pra...Agile Pusryčiai 2023 - „Kaip užsitikrinti projekto sėkmę dar iki projekto pra...
Agile Pusryčiai 2023 - „Kaip užsitikrinti projekto sėkmę dar iki projekto pra...
Agile Lietuva
 
Agile Pusryčiai 2023 - „Viešasis sektorius – neatskleistas inovacijų paklauso...
Agile Pusryčiai 2023 - „Viešasis sektorius – neatskleistas inovacijų paklauso...Agile Pusryčiai 2023 - „Viešasis sektorius – neatskleistas inovacijų paklauso...
Agile Pusryčiai 2023 - „Viešasis sektorius – neatskleistas inovacijų paklauso...
Agile Lietuva
 

Mehr von Agile Lietuva (20)

Agile Pusryčiai 2023 - „Skaitmeninė transformacija viešajame sektoriuje: nuo ...
Agile Pusryčiai 2023 - „Skaitmeninė transformacija viešajame sektoriuje: nuo ...Agile Pusryčiai 2023 - „Skaitmeninė transformacija viešajame sektoriuje: nuo ...
Agile Pusryčiai 2023 - „Skaitmeninė transformacija viešajame sektoriuje: nuo ...
 
Agile Pusryčiai 2023 - „Kaip užsitikrinti projekto sėkmę dar iki projekto pra...
Agile Pusryčiai 2023 - „Kaip užsitikrinti projekto sėkmę dar iki projekto pra...Agile Pusryčiai 2023 - „Kaip užsitikrinti projekto sėkmę dar iki projekto pra...
Agile Pusryčiai 2023 - „Kaip užsitikrinti projekto sėkmę dar iki projekto pra...
 
Agile pusryčiai 2023 - „Pirštas ant projekto pulso: CPO LT Agile patirtis ir ...
Agile pusryčiai 2023 - „Pirštas ant projekto pulso: CPO LT Agile patirtis ir ...Agile pusryčiai 2023 - „Pirštas ant projekto pulso: CPO LT Agile patirtis ir ...
Agile pusryčiai 2023 - „Pirštas ant projekto pulso: CPO LT Agile patirtis ir ...
 
Agile Pusryčiai 2023 - „Viešasis sektorius – neatskleistas inovacijų paklauso...
Agile Pusryčiai 2023 - „Viešasis sektorius – neatskleistas inovacijų paklauso...Agile Pusryčiai 2023 - „Viešasis sektorius – neatskleistas inovacijų paklauso...
Agile Pusryčiai 2023 - „Viešasis sektorius – neatskleistas inovacijų paklauso...
 
M. Kaminskas ir A. K. Remeikienė. LEAN projektas: sėkmės istorijos, iššūkiai ...
M. Kaminskas ir A. K. Remeikienė. LEAN projektas: sėkmės istorijos, iššūkiai ...M. Kaminskas ir A. K. Remeikienė. LEAN projektas: sėkmės istorijos, iššūkiai ...
M. Kaminskas ir A. K. Remeikienė. LEAN projektas: sėkmės istorijos, iššūkiai ...
 
B. den Haak. How to make OKRs Lean Again
B. den Haak. How to make OKRs Lean AgainB. den Haak. How to make OKRs Lean Again
B. den Haak. How to make OKRs Lean Again
 
D. Aitcheson. How to make forecasts that are actually accurate.
D. Aitcheson. How to make forecasts that are actually accurate.D. Aitcheson. How to make forecasts that are actually accurate.
D. Aitcheson. How to make forecasts that are actually accurate.
 
Aleksandra Černiauskienė. Misija Bloomberg: Agile pagal amerikiečius
Aleksandra Černiauskienė. Misija Bloomberg: Agile pagal amerikiečiusAleksandra Černiauskienė. Misija Bloomberg: Agile pagal amerikiečius
Aleksandra Černiauskienė. Misija Bloomberg: Agile pagal amerikiečius
 
Maija Aniskovič. Agile įtaka komandos motyvacijai.
Maija Aniskovič. Agile  įtaka komandos motyvacijai.Maija Aniskovič. Agile  įtaka komandos motyvacijai.
Maija Aniskovič. Agile įtaka komandos motyvacijai.
 
dr. E. Janiūnienė. Asociacijos Agile Lietuva atlikto Agile tyrimo pristatymas
dr. E. Janiūnienė. Asociacijos Agile Lietuva atlikto Agile tyrimo pristatymasdr. E. Janiūnienė. Asociacijos Agile Lietuva atlikto Agile tyrimo pristatymas
dr. E. Janiūnienė. Asociacijos Agile Lietuva atlikto Agile tyrimo pristatymas
 
M. Aniskovič. Laužome stereotipus: Agile gali drąsiai taikyti visi
M. Aniskovič. Laužome stereotipus: Agile gali drąsiai taikyti visiM. Aniskovič. Laužome stereotipus: Agile gali drąsiai taikyti visi
M. Aniskovič. Laužome stereotipus: Agile gali drąsiai taikyti visi
 
R. Krukonis. Reikalingas greitas rezultatas – pakeiskime projekto darbų organ...
R. Krukonis. Reikalingas greitas rezultatas – pakeiskime projekto darbų organ...R. Krukonis. Reikalingas greitas rezultatas – pakeiskime projekto darbų organ...
R. Krukonis. Reikalingas greitas rezultatas – pakeiskime projekto darbų organ...
 
M. Jovaišas. Viešojo sektoriaus lankstumas įgyvendinant transformacijas
M. Jovaišas. Viešojo sektoriaus lankstumas įgyvendinant transformacijasM. Jovaišas. Viešojo sektoriaus lankstumas įgyvendinant transformacijas
M. Jovaišas. Viešojo sektoriaus lankstumas įgyvendinant transformacijas
 
A. Kovaliov. Kas nėra Agile jaunystėje, tas neturi širdies. Kas nėra Watefall...
A. Kovaliov. Kas nėra Agile jaunystėje, tas neturi širdies. Kas nėra Watefall...A. Kovaliov. Kas nėra Agile jaunystėje, tas neturi širdies. Kas nėra Watefall...
A. Kovaliov. Kas nėra Agile jaunystėje, tas neturi širdies. Kas nėra Watefall...
 
V. Vasiliauskas. Nestandartinis atvejis: nuo Kanban prie Scrum
V. Vasiliauskas. Nestandartinis atvejis: nuo Kanban prie ScrumV. Vasiliauskas. Nestandartinis atvejis: nuo Kanban prie Scrum
V. Vasiliauskas. Nestandartinis atvejis: nuo Kanban prie Scrum
 
Leonard Vorobej. Agile projektų valdymas pradedantiesiems
Leonard Vorobej. Agile projektų valdymas pradedantiesiemsLeonard Vorobej. Agile projektų valdymas pradedantiesiems
Leonard Vorobej. Agile projektų valdymas pradedantiesiems
 
Giedrė Žemulaitytė. Agile personalo skyriaus valdyme
Giedrė Žemulaitytė. Agile personalo skyriaus valdyme Giedrė Žemulaitytė. Agile personalo skyriaus valdyme
Giedrė Žemulaitytė. Agile personalo skyriaus valdyme
 
Gabija Fatėnaitė. Agile ir Scrum turinio kūrimo ir marketingo komandose
Gabija Fatėnaitė. Agile ir Scrum turinio kūrimo ir marketingo komandoseGabija Fatėnaitė. Agile ir Scrum turinio kūrimo ir marketingo komandose
Gabija Fatėnaitė. Agile ir Scrum turinio kūrimo ir marketingo komandose
 
Gediminas Milieška. Agile kelionės: nuo transformacijos iki planavimo dideliu...
Gediminas Milieška. Agile kelionės: nuo transformacijos iki planavimo dideliu...Gediminas Milieška. Agile kelionės: nuo transformacijos iki planavimo dideliu...
Gediminas Milieška. Agile kelionės: nuo transformacijos iki planavimo dideliu...
 
Denis Vanpoucke. Agile kelionės:nuo transformacijos iki planavimo dideliu mastu
Denis Vanpoucke. Agile kelionės:nuo transformacijos iki planavimo dideliu mastuDenis Vanpoucke. Agile kelionės:nuo transformacijos iki planavimo dideliu mastu
Denis Vanpoucke. Agile kelionės:nuo transformacijos iki planavimo dideliu mastu
 

Kürzlich hochgeladen

Abortion pills in Jeddah |• +966572737505 ] GET CYTOTEC
Abortion pills in Jeddah |• +966572737505 ] GET CYTOTECAbortion pills in Jeddah |• +966572737505 ] GET CYTOTEC
Abortion pills in Jeddah |• +966572737505 ] GET CYTOTEC
Abortion pills in Riyadh +966572737505 get cytotec
 
Beyond the Codes_Repositioning towards sustainable development
Beyond the Codes_Repositioning towards sustainable developmentBeyond the Codes_Repositioning towards sustainable development
Beyond the Codes_Repositioning towards sustainable development
Nimot Muili
 
Agile Coaching Change Management Framework.pptx
Agile Coaching Change Management Framework.pptxAgile Coaching Change Management Framework.pptx
Agile Coaching Change Management Framework.pptx
alinstan901
 

Kürzlich hochgeladen (15)

International Ocean Transportation p.pdf
International Ocean Transportation p.pdfInternational Ocean Transportation p.pdf
International Ocean Transportation p.pdf
 
BDSM⚡Call Girls in Sector 99 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 99 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 99 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 99 Noida Escorts >༒8448380779 Escort Service
 
GENUINE Babe,Call Girls IN Baderpur Delhi | +91-8377087607
GENUINE Babe,Call Girls IN Baderpur  Delhi | +91-8377087607GENUINE Babe,Call Girls IN Baderpur  Delhi | +91-8377087607
GENUINE Babe,Call Girls IN Baderpur Delhi | +91-8377087607
 
Intro_University_Ranking_Introduction.pptx
Intro_University_Ranking_Introduction.pptxIntro_University_Ranking_Introduction.pptx
Intro_University_Ranking_Introduction.pptx
 
internal analysis on strategic management
internal analysis on strategic managementinternal analysis on strategic management
internal analysis on strategic management
 
Call Now Pooja Mehta : 7738631006 Door Step Call Girls Rate 100% Satisfactio...
Call Now Pooja Mehta :  7738631006 Door Step Call Girls Rate 100% Satisfactio...Call Now Pooja Mehta :  7738631006 Door Step Call Girls Rate 100% Satisfactio...
Call Now Pooja Mehta : 7738631006 Door Step Call Girls Rate 100% Satisfactio...
 
Abortion pills in Jeddah |• +966572737505 ] GET CYTOTEC
Abortion pills in Jeddah |• +966572737505 ] GET CYTOTECAbortion pills in Jeddah |• +966572737505 ] GET CYTOTEC
Abortion pills in Jeddah |• +966572737505 ] GET CYTOTEC
 
Strategic Management, Vision Mission, Internal Analsysis
Strategic Management, Vision Mission, Internal AnalsysisStrategic Management, Vision Mission, Internal Analsysis
Strategic Management, Vision Mission, Internal Analsysis
 
Dealing with Poor Performance - get the full picture from 3C Performance Mana...
Dealing with Poor Performance - get the full picture from 3C Performance Mana...Dealing with Poor Performance - get the full picture from 3C Performance Mana...
Dealing with Poor Performance - get the full picture from 3C Performance Mana...
 
Call now : 9892124323 Nalasopara Beautiful Call Girls Vasai virar Best Call G...
Call now : 9892124323 Nalasopara Beautiful Call Girls Vasai virar Best Call G...Call now : 9892124323 Nalasopara Beautiful Call Girls Vasai virar Best Call G...
Call now : 9892124323 Nalasopara Beautiful Call Girls Vasai virar Best Call G...
 
Reviewing and summarization of university ranking system to.pptx
Reviewing and summarization of university ranking system  to.pptxReviewing and summarization of university ranking system  to.pptx
Reviewing and summarization of university ranking system to.pptx
 
Safety T fire missions army field Artillery
Safety T fire missions army field ArtillerySafety T fire missions army field Artillery
Safety T fire missions army field Artillery
 
Beyond the Codes_Repositioning towards sustainable development
Beyond the Codes_Repositioning towards sustainable developmentBeyond the Codes_Repositioning towards sustainable development
Beyond the Codes_Repositioning towards sustainable development
 
Agile Coaching Change Management Framework.pptx
Agile Coaching Change Management Framework.pptxAgile Coaching Change Management Framework.pptx
Agile Coaching Change Management Framework.pptx
 
Day 0- Bootcamp Roadmap for PLC Bootcamp
Day 0- Bootcamp Roadmap for PLC BootcampDay 0- Bootcamp Roadmap for PLC Bootcamp
Day 0- Bootcamp Roadmap for PLC Bootcamp
 

Vaidas Pilkauskas and Tadas Ščerbinskas - Can you trust your tests?