SlideShare a Scribd company logo
1 of 62
IMPROVE YOUR
TEST QUALITY
WITH MUTATION
TESTING
NICOLAS FRANKEL
@nicolas_frankel
ME, MYSELF AND I
Developer & Architect
• As Consultant
Teacher/trainer
Book Author
Blogger
@nicolas_frankel
SHAMELESS SELF-PROMOTION
@nicolas_frankel #mutationtesting
3
MANY KINDS OF TESTING
Unit Testing
Integration Testing
End-to-end Testing
Performance Testing
Penetration Testing
Exploratory Testing
etc.
@nicolas_frankel #mutationtesting 4
THEIR ONLY SINGLE GOAL
Ensure the Quality of the
production code
@nicolas_frankel #mutationtesting 5
THE PROBLEM
How to check the Quality of
the testing code?
@nicolas_frankel #mutationtesting 6
CODE COVERAGE
“Code coverage is a
measure used to describe the
degree to which the source
code of a program is tested”
--Wikipedia
http://en.wikipedia.org/wiki/Co
de_coverage
@nicolas_frankel #mutationtesting 7
MEASURING CODE COVERAGE
Check whether a source
code line is executed during a
test
• Or Branch Coverage
@nicolas_frankel #mutationtesting 8
COMPUTING CODE COVERAGE
CC =
Lexecuted
Ltotal
*100
CC: Code Coverage
(in percent)
Lexecuted: Number of
executed lines of code
Ltotal: Number of total
lines of code
@nicolas_frankel #mutationtesting
9
JAVA TOOLS FOR CODE COVERAGE
JaCoCo
Clover
Cobertura
etc.
@nicolas_frankel #mutationtesting 10
100% CODE COVERAGE?
“Is 100% code coverage
realistic? Of course it is. If you
can write a line of code, you can
write another that tests it.”
Robert Martin (Uncle Bob)
https://twitter.com/unclebobmarti
n/status/55966620509667328
@nicolas_frankel #mutationtesting 11
ASSERT-LESS TESTING
@Test
public void add_should_add() {
new Math().add(1, 1);
}
@nicolas_frankel #mutationtesting
12
But, where is the
assert?
As long as the Code Coverage is
OK…
CODE COVERAGE AS A MEASURE OF TEST QUAL
Any metric can be gamed!
Code coverage is a metric…
⇒ Code coverage can be
gamed
• On purpose
• Or by accident
@nicolas_frankel #mutationtesting 13
CODE COVERAGE AS A MEASURE OF TEST QUAL
Code Coverage lulls you into
a false sense of security…
@nicolas_frankel #mutationtesting 14
THE PROBLEM STILL STANDS
Code coverage cannot
ensure test quality
• Is there another way?
Mutation Testing to the
rescue!
@nicolas_frankel #mutationtesting 15
THE CAST
@nicolas_frankel #mutationtesting
16
William Stryker
Original Source Code
Jason Stryker
Modified Source Code
a.k.a “The Mutant”
public class Math {
public int add(int i1, int i2) {
return i1 + i2;
}
}
@nicolas_frankel #mutationtesting
17
public class Math {
public int add(int i1, int i2) {
return i1 - i2;
}
}
STANDARD TESTING
@nicolas_frankel #mutationtesting
18
✔Execute Test
MUTATION TESTING
@nicolas_frankel #mutationtesting
19
?Execute SAME Test
MUTATION
MUTATION TESTING
@nicolas_frankel #mutationtesting
20
✗
✔Execute SAME Test
Execute SAME Test
Mutant
Killed
Mutant Survived
KILLED OR SURVIVING?
Surviving means changing
the source code did not
change the test result
• It’s bad!
Killed means changing the
source code changed the test
result
• It’s good
@nicolas_frankel #mutationtesting 21
TEST THE CODE
@nicolas_frankel #mutationtesting
22
public class Math {
public int add(int i1, int i2) {
return i1 + i2;
}
}
@Test
public void add_should_add() {
new Math().add(1, 1);
}
✔Execute Test
SURVIVING MUTANT
@nicolas_frankel #mutationtesting
23
public class Math {
public int add(int i1, int i2) {
return i1 - i2;
}
}
@Test
public void add_should_add() {
new Math().add(1, 1);
}
✔Execute SAME Test
TEST THE CODE
@nicolas_frankel #mutationtesting
24
public class Math {
public int add(int i1, int i2) {
return i1 + i2;
}
}
@Test
public void add_should_add() {
int sum = new Math().add(1, 1);
Assert.assertEquals(sum, 2);
}
✔Execute Test
KILLED MUTANT
@nicolas_frankel #mutationtesting
25
public class Math {
public int add(int i1, int i2) {
return i1 - i2;
}
}
@Test
public void add_should_add() {
int sum = new Math().add(1, 1);
Assert.assertEquals(sum, 2);
}
✗Execute SAME Test
MUTATION TESTING IN JAVA
PIT is a tool for Mutation
testing
Available as
• Command-line tool
• Ant target
• Maven plugin
@nicolas_frankel #mutationtesting 26
MUTATORS
Mutators are patterns
applied to source code to
produce mutations
@nicolas_frankel #mutationtesting 27
PIT MUTATORS SAMPLE
Name Example source Result
Conditionals Boundary > >=
Negate Conditionals == !=
Remove Conditionals foo == bar true
Math + -
Increments foo++ foo--
Invert Negatives -foo foo
Inline Constant static final FOO= 42 static final FOO = 43
Return Values return true return false
Void Method Call System.out.println("foo")
Non Void Method Call long t = System.currentTimeMillis() long t = 0
Constructor Call Date d = new Date() Date d = null;
@nicolas_frankel #mutationtesting
28
IMPORTANT MUTATORS
Conditionals Boundary
• Probably a potential serious
bug smell
 if (foo > bar)
@nicolas_frankel #mutationtesting 29
IMPORTANT MUTATORS
Void Method Call
 Assert.checkNotNull()
 connection.close(
)
@nicolas_frankel #mutationtesting 30
REMEMBER
 It’s not because the IDE
generates code safely that
it will never change
• equals()
• hashCode()
@nicolas_frankel #mutationtesting 31
FALSE POSITIVES
Mutation Testing is not
100% bulletproof
Might return false positives
Be cautious!
@nicolas_frankel #mutationtesting 32
ENOUGH TALK…
@nicolas_frankel #mutationtesting
33
DRAWBACKS
Slow
Sluggish
Crawling
Sulky
Lethargic
etc.
@nicolas_frankel #mutationtesting 38
METRICS (KIND OF)
On joda-money
mvn clean test-
compile
mvn surefire:test
• Total time: 2.181 s
mvn pit-test...
• Total time: 48.634 s
@nicolas_frankel #mutationtesting 39
WHY SO SLOW?
Analyze test code
For each class under test
• For each mutator
• Create mutation
• For each mutation
• Run test
• Analyze result
• Aggregate results
@nicolas_frankel #mutationtesting 40
WORKAROUNDS
This is not acceptable in a
normal test run
But there are workarounds
@nicolas_frankel #mutationtesting 41
SET MUTATORS
<configuration>
<mutators>
<mutator>
CONSTRUCTOR_CALLS
</mutator>
<mutator>
NON_VOID_METHOD_CALLS
</mutator>
</mutators>
</configuration>
@nicolas_frankel #mutationtesting
42
SET TARGET CLASSES
<configuration>
<targetClasses>
<param>ch.frankel.pit*</param>
</targetClasses>
</configuration>
@nicolas_frankel #mutationtesting
43
SET TARGET TESTS
<configuration>
<targetTests>
<param>ch.frankel.pit*</param>
</targetTests>
</configuration>
@nicolas_frankel #mutationtesting
44
DEPENDENCY DISTANCE
@nicolas_frankel #mutationtesting
45
1 2
LIMIT DEPENDENCY DISTANCE
<configuration>
<maxDependencyDistance>
4
</maxDependencyDistance>
</configuration>
@nicolas_frankel #mutationtesting
46
LIMIT NUMBER OF MUTATIONS
<configuration>
<maxMutationsPerClass>
10
</maxMutationsPerClass>
</configuration>
@nicolas_frankel #mutationtesting
47
USE MUTATIONFILTER
From extension points
@nicolas_frankel #mutationtesting 48
PIT EXTENSION POINTS
Must be packaged in JAR
Have Implementation-
Vendor and Implementation-
Title in MANIFEST.MF that
match PIT’s
Set on the classpath
Use Java’s Service Provider
feature
@nicolas_frankel #mutationtesting 49
SERVICE PROVIDER
Inversion of control
• Since Java 1.3!
Text file located in META-
INF/services
Interface
• Name of the file
Implementation class
• Content of the file
@nicolas_frankel #mutationtesting 50
SAMPLE STRUCTURE
@nicolas_frankel #mutationtesting
51
JAR
ch.frankel.lts.Sample
SERVICE PROVIDER API
@nicolas_frankel #mutationtesting
52
SERVICE PROVIDER SAMPLE
ServiceLoader<ISample> loaders =
ServiceLoader.load(ISample.class);
for (ISample sample: loaders) {
// Use the sample
}
@nicolas_frankel #mutationtesting
53
OUTPUT FORMATS
Out-of-the-box
• HTML
• XML
• CSV
@nicolas_frankel #mutationtesting 54
OUTPUT FORMATS
<configuration>
<outputFormats>
<outputFormat>XML</outputFormat>
<outputFormat>HTML</outputFormat>
</outputFormats>
</configuration>
@nicolas_frankel #mutationtesting
55
@nicolas_frankel #mutationtesting
56
MUTATION FILTER
Remove mutations from the
list of available mutations for
a class
@nicolas_frankel #mutationtesting 57
@nicolas_frankel #mutationtesting
58
@nicolas_frankel #mutationtesting
59
DON’T BIND TO TEST PHASE!
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<executions>
<execution>
<goals>
<goal>mutationCoverage</goal>
</goals>
<phase>test</phase>
</execution>
</executions>
</plugin>
@nicolas_frankel #mutationtesting
60
USE SCMMUTATIONCOVERAGE
mvn 
org.pitest:pitest-maven:scmMutationCoverage

-DtimestampedReports=false
@nicolas_frankel #mutationtesting
61
DO USE ON CONTINUOUS INTEGRATION
SERVERS
mvn 
org.pitest:pitest-maven:mutationCoverage 
-DtimestampedReports=false
@nicolas_frankel #mutationtesting
62
IS MUTATION TESTING THE SILVER BULLET?
Sorry, no!
It only
• Checks the relevance of your
unit tests
• Points out potential bugs
@nicolas_frankel #mutationtesting 63
WHAT IT DOESN’T DO
Validate the assembled
application
• Integration Testing
Check the performance
• Performance Testing
Look out for display bugs
• End-to-end testing
Etc.
@nicolas_frankel #mutationtesting 64
TESTING IS ABOUT ROI
Don’t test to achieve 100%
coverage
Test because it saves money
in the long run
Prioritize:
• Business-critical code
• Complex code
@nicolas_frankel #mutationtesting 65
Q&A
@nicolas_frankel
http://blog.frankel.ch/
https://leanpub.com/inte
grationtest/
@nicolas_frankel

More Related Content

Viewers also liked

Viewers also liked (20)

Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der ...
Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der ...Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der ...
Javantura v3 - The Internet of (Lego) Trains – Johan Janssen, Ingmar van der ...
 
Javantura v3 - Apache Spark revolution – what’s it all about – Petar Zečević
Javantura v3 - Apache Spark revolution – what’s it all about – Petar ZečevićJavantura v3 - Apache Spark revolution – what’s it all about – Petar Zečević
Javantura v3 - Apache Spark revolution – what’s it all about – Petar Zečević
 
Javantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
Javantura v3 - Going Reactive with RxJava – Hrvoje CrnjakJavantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
Javantura v3 - Going Reactive with RxJava – Hrvoje Crnjak
 
Javantura v3 - FIWARE – from ideas to real projects – Krunoslav Hrnjak
Javantura v3 - FIWARE – from ideas to real projects – Krunoslav HrnjakJavantura v3 - FIWARE – from ideas to real projects – Krunoslav Hrnjak
Javantura v3 - FIWARE – from ideas to real projects – Krunoslav Hrnjak
 
Javantura v3 - Develop the right way with S-CASE – Marin Orlić
Javantura v3 - Develop the right way with S-CASE – Marin OrlićJavantura v3 - Develop the right way with S-CASE – Marin Orlić
Javantura v3 - Develop the right way with S-CASE – Marin Orlić
 
Javantura v3 - ES6 – Future Is Now – Nenad Pečanac
Javantura v3 - ES6 – Future Is Now – Nenad PečanacJavantura v3 - ES6 – Future Is Now – Nenad Pečanac
Javantura v3 - ES6 – Future Is Now – Nenad Pečanac
 
Javantura v3 - Just say it – using language to communicate with the computer ...
Javantura v3 - Just say it – using language to communicate with the computer ...Javantura v3 - Just say it – using language to communicate with the computer ...
Javantura v3 - Just say it – using language to communicate with the computer ...
 
Javantura v3 - Conquer the Internet of Things with Java and Docker – Johan Ja...
Javantura v3 - Conquer the Internet of Things with Java and Docker – Johan Ja...Javantura v3 - Conquer the Internet of Things with Java and Docker – Johan Ja...
Javantura v3 - Conquer the Internet of Things with Java and Docker – Johan Ja...
 
Javantura v3 - Java & JWT Stateless authentication – Karlo Novak
Javantura v3 - Java & JWT Stateless authentication – Karlo NovakJavantura v3 - Java & JWT Stateless authentication – Karlo Novak
Javantura v3 - Java & JWT Stateless authentication – Karlo Novak
 
Javantura v3 - CQRS – another view on application architecture – Aleksandar S...
Javantura v3 - CQRS – another view on application architecture – Aleksandar S...Javantura v3 - CQRS – another view on application architecture – Aleksandar S...
Javantura v3 - CQRS – another view on application architecture – Aleksandar S...
 
Javantura v3 - Husky – (y)our tool for tracking value in data – Mladen Marovi...
Javantura v3 - Husky – (y)our tool for tracking value in data – Mladen Marovi...Javantura v3 - Husky – (y)our tool for tracking value in data – Mladen Marovi...
Javantura v3 - Husky – (y)our tool for tracking value in data – Mladen Marovi...
 
Javantura v3 - Rational Team Concert – integrated agile development and colla...
Javantura v3 - Rational Team Concert – integrated agile development and colla...Javantura v3 - Rational Team Concert – integrated agile development and colla...
Javantura v3 - Rational Team Concert – integrated agile development and colla...
 
Javantura v3 - Microservice – no fluff the REAL stuff – Nakul Mishra
Javantura v3 - Microservice – no fluff the REAL stuff – Nakul MishraJavantura v3 - Microservice – no fluff the REAL stuff – Nakul Mishra
Javantura v3 - Microservice – no fluff the REAL stuff – Nakul Mishra
 
Javantura v3 - Logs – the missing gold mine – Franjo Žilić
Javantura v3 - Logs – the missing gold mine – Franjo ŽilićJavantura v3 - Logs – the missing gold mine – Franjo Žilić
Javantura v3 - Logs – the missing gold mine – Franjo Žilić
 
Javantura v3 - What really motivates developers – Ivan Krnić
Javantura v3 - What really motivates developers – Ivan KrnićJavantura v3 - What really motivates developers – Ivan Krnić
Javantura v3 - What really motivates developers – Ivan Krnić
 
Javantura v3 - ELK – Big Data for DevOps – Maarten Mulders
Javantura v3 - ELK – Big Data for DevOps – Maarten MuldersJavantura v3 - ELK – Big Data for DevOps – Maarten Mulders
Javantura v3 - ELK – Big Data for DevOps – Maarten Mulders
 
Javantura v3 - Real-time BigData ingestion and querying of aggregated data – ...
Javantura v3 - Real-time BigData ingestion and querying of aggregated data – ...Javantura v3 - Real-time BigData ingestion and querying of aggregated data – ...
Javantura v3 - Real-time BigData ingestion and querying of aggregated data – ...
 
Javantura v4 - Java or Scala – Web development with Playframework 2.5.x - Kre...
Javantura v4 - Java or Scala – Web development with Playframework 2.5.x - Kre...Javantura v4 - Java or Scala – Web development with Playframework 2.5.x - Kre...
Javantura v4 - Java or Scala – Web development with Playframework 2.5.x - Kre...
 
Javantura v4 - DMN – supplement your BPMN - Željko Šmaguc
Javantura v4 - DMN – supplement your BPMN - Željko ŠmagucJavantura v4 - DMN – supplement your BPMN - Željko Šmaguc
Javantura v4 - DMN – supplement your BPMN - Željko Šmaguc
 
Javantura v4 - CroDuke Indy and the Kingdom of Java Skills - Branko Mihaljevi...
Javantura v4 - CroDuke Indy and the Kingdom of Java Skills - Branko Mihaljevi...Javantura v4 - CroDuke Indy and the Kingdom of Java Skills - Branko Mihaljevi...
Javantura v4 - CroDuke Indy and the Kingdom of Java Skills - Branko Mihaljevi...
 

Similar to Javantura v3 - Mutation Testing for everyone – Nicolas Fränkel

GeeCON - Improve your tests with Mutation Testing
GeeCON - Improve your tests with Mutation TestingGeeCON - Improve your tests with Mutation Testing
GeeCON - Improve your tests with Mutation TestingNicolas Fränkel
 
DevExperience - Improve your tests with mutation testing
DevExperience - Improve your tests with mutation testingDevExperience - Improve your tests with mutation testing
DevExperience - Improve your tests with mutation testingNicolas Fränkel
 
TestCon Europe - Mutation Testing to the Rescue of Your Tests
TestCon Europe - Mutation Testing to the Rescue of Your TestsTestCon Europe - Mutation Testing to the Rescue of Your Tests
TestCon Europe - Mutation Testing to the Rescue of Your TestsNicolas Fränkel
 
I.T.A.K.E Unconference - Mutation testing to the rescue of your tests
I.T.A.K.E Unconference - Mutation testing to the rescue of your testsI.T.A.K.E Unconference - Mutation testing to the rescue of your tests
I.T.A.K.E Unconference - Mutation testing to the rescue of your testsNicolas Fränkel
 
Mutation Testing.pdf
Mutation Testing.pdfMutation Testing.pdf
Mutation Testing.pdfKeir Bowden
 
Kill the mutants - A better way to test your tests
Kill the mutants - A better way to test your testsKill the mutants - A better way to test your tests
Kill the mutants - A better way to test your testsRoy van Rijn
 
Kill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van RijnKill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van RijnNLJUG
 
How to quickly add a safety net to a legacy codebase
How to quickly add a safety net to a legacy codebaseHow to quickly add a safety net to a legacy codebase
How to quickly add a safety net to a legacy codebaseNelis Boucké
 
Mutation Testing and MuJava
Mutation Testing and MuJavaMutation Testing and MuJava
Mutation Testing and MuJavaKrunal Parmar
 
Must.Kill.Mutants. Agile Testing Days 2017
Must.Kill.Mutants. Agile Testing Days 2017Must.Kill.Mutants. Agile Testing Days 2017
Must.Kill.Mutants. Agile Testing Days 2017Gerald Muecke
 
Getting started with Test Driven Development
Getting started with Test Driven DevelopmentGetting started with Test Driven Development
Getting started with Test Driven DevelopmentFerdous Mahmud Shaon
 
Getting started with Test Driven Development - Ferdous Mahmud Shaon
Getting started with Test Driven Development - Ferdous Mahmud ShaonGetting started with Test Driven Development - Ferdous Mahmud Shaon
Getting started with Test Driven Development - Ferdous Mahmud ShaonCefalo
 
Are you testing your unit tests?
Are you testing your unit tests?Are you testing your unit tests?
Are you testing your unit tests?Soham Dasgupta
 
Continous testing for grails
Continous testing for grailsContinous testing for grails
Continous testing for grailswinkler1
 
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 LaulusaQA or the Highway
 

Similar to Javantura v3 - Mutation Testing for everyone – Nicolas Fränkel (20)

GeeCON - Improve your tests with Mutation Testing
GeeCON - Improve your tests with Mutation TestingGeeCON - Improve your tests with Mutation Testing
GeeCON - Improve your tests with Mutation Testing
 
DevExperience - Improve your tests with mutation testing
DevExperience - Improve your tests with mutation testingDevExperience - Improve your tests with mutation testing
DevExperience - Improve your tests with mutation testing
 
TestCon Europe - Mutation Testing to the Rescue of Your Tests
TestCon Europe - Mutation Testing to the Rescue of Your TestsTestCon Europe - Mutation Testing to the Rescue of Your Tests
TestCon Europe - Mutation Testing to the Rescue of Your Tests
 
I.T.A.K.E Unconference - Mutation testing to the rescue of your tests
I.T.A.K.E Unconference - Mutation testing to the rescue of your testsI.T.A.K.E Unconference - Mutation testing to the rescue of your tests
I.T.A.K.E Unconference - Mutation testing to the rescue of your tests
 
Mutation Testing.pdf
Mutation Testing.pdfMutation Testing.pdf
Mutation Testing.pdf
 
Mutation testing
Mutation testingMutation testing
Mutation testing
 
Kill the mutants - A better way to test your tests
Kill the mutants - A better way to test your testsKill the mutants - A better way to test your tests
Kill the mutants - A better way to test your tests
 
Kill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van RijnKill the mutants and test your tests - Roy van Rijn
Kill the mutants and test your tests - Roy van Rijn
 
des mutants dans le code.pdf
des mutants dans le code.pdfdes mutants dans le code.pdf
des mutants dans le code.pdf
 
Avoiding paths from errors to failures
Avoiding paths from errors to failuresAvoiding paths from errors to failures
Avoiding paths from errors to failures
 
How to quickly add a safety net to a legacy codebase
How to quickly add a safety net to a legacy codebaseHow to quickly add a safety net to a legacy codebase
How to quickly add a safety net to a legacy codebase
 
Mutation Testing and MuJava
Mutation Testing and MuJavaMutation Testing and MuJava
Mutation Testing and MuJava
 
Must.Kill.Mutants. Agile Testing Days 2017
Must.Kill.Mutants. Agile Testing Days 2017Must.Kill.Mutants. Agile Testing Days 2017
Must.Kill.Mutants. Agile Testing Days 2017
 
Mutation Testing
Mutation TestingMutation Testing
Mutation Testing
 
Tdd
TddTdd
Tdd
 
Getting started with Test Driven Development
Getting started with Test Driven DevelopmentGetting started with Test Driven Development
Getting started with Test Driven Development
 
Getting started with Test Driven Development - Ferdous Mahmud Shaon
Getting started with Test Driven Development - Ferdous Mahmud ShaonGetting started with Test Driven Development - Ferdous Mahmud Shaon
Getting started with Test Driven Development - Ferdous Mahmud Shaon
 
Are you testing your unit tests?
Are you testing your unit tests?Are you testing your unit tests?
Are you testing your unit tests?
 
Continous testing for grails
Continous testing for grailsContinous testing for grails
Continous testing for grails
 
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
 

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association (20)

Java cro'21 the best tools for java developers in 2021 - hujak
Java cro'21   the best tools for java developers in 2021 - hujakJava cro'21   the best tools for java developers in 2021 - hujak
Java cro'21 the best tools for java developers in 2021 - hujak
 
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK KeynoteJavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
 
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan LozićJavantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
 
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
 
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
 
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
 
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander RadovanJavantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
 
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
 
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
 
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
 
Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...
 
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej VidakovićJavantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
 
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
 
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
 
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
 
Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...
 
Javantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela PetracJavantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela Petrac
 
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje RuhekJavantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
 
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
 
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario KusekJavantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
 

Recently uploaded

Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfjimielynbastida
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraDeakin University
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 

Recently uploaded (20)

Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Science&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdfScience&tech:THE INFORMATION AGE STS.pdf
Science&tech:THE INFORMATION AGE STS.pdf
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
#StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Artificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning eraArtificial intelligence in the post-deep learning era
Artificial intelligence in the post-deep learning era
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 

Javantura v3 - Mutation Testing for everyone – Nicolas Fränkel

Editor's Notes

  1. All are integrated in Maven JaCoCo is also integrated into Sonar out-of-the-box
  2. There are also experimental mutators http://pitest.org/quickstart/mutators/
  3. skinparam dpi 300 class Test class Mutant1 class Dependency class Mutant2 Test .up.> Mutant1 Test .right.> Dependency Dependency .up.> Mutant2 hide members
  4. skinparam dpi 300 hide empty attributes hide empty methods package java.util { interface Iterable<T> class ServiceLoader<T> { {static} load(service:Class<T>, loader:ClassLoader):ServiceLoader<T> {static} load(service:Class<T>):ServiceLoader<T> {static} loadInstalled(service:Class<T>):ServiceLoader<T> reload(); } } ServiceLoader .up.|> Iterable
  5. hide attributes package org.pitest { package plugin { interface ToolClasspathPlugin { {abstract} description():String } } package mutationtest { interface MutationResultListenerFactory { {abstract} name():String {abstract} getListener(args:ListenerArguments):MutationResultListener } interface MutationResultListener { {abstract} runStart() {abstract} handleMutationResult(results:ClassMutationResults) {abstract} runEnd() } class ListenerArguments { + getOutputStrategy():ResultOutputStrategy + getCoverage():CoverageDatabase + getStartTime():long + getLocator():SourceLocator + getEngine():MutationEngine } class ClassMutationResults { + getFileName():String + getMutations():Collection<MutationResult> + getMutatedClass():ClassName + getPackageName():String } } MutationResultListenerFactory -up-|> ToolClasspathPlugin MutationResultListenerFactory .right.> MutationResultListener MutationResultListenerFactory .down.> ListenerArguments MutationResultListener .down.> ClassMutationResults
  6. hide attributes hide empty methods package org.pitest { package plugin { interface ToolClasspathPlugin { {abstract} description():String } } package mutationtest { package filter { interface MutationFilterFactory { {abstract} createFilter(code:CodeSource, maxMutationsPerClass:int):MutationFilter } interface MutationFilter { {abstract} filter(mutations:Collection<MutationDetails>):Collection<MutationDetails> } } package engine { class MutationDetails } } package classpath { class CodeSource } } MutationFilterFactory -up-|> ToolClasspathPlugin MutationFilterFactory .right.> MutationFilter MutationFilterFactory .down.> CodeSource MutationFilter .down.> MutationDetails