SlideShare a Scribd company logo
1 of 55
IMPROVE YOUR
TESTS QUALITY WITH
MUTATION TESTING
EVGENY MANDRIKOV
NICOLAS FRÄNKEL
THE ENTHUSIAST
@nicolas_frankel @_godin_ #mutationtesting
Developer & Architect
• As Consultant
Teacher/trainer
Book Author
Blogger
2
THE DEVIL’S ADVOCATE
➢Software Gardener
addicted to open source and
code quality
➢@SonarSource Language
Team Technical Leader
@nicolas_frankel @_godin_ #mutationtesting
3
MANY KINDS OF TESTING
@nicolas_frankel @_godin_ #mutationtesting
Unit Testing
Integration Testing
End-to-end Testing
Performance Testing
Penetration Testing
Exploratory Testing
etc.
4
THEIR ONLY SINGLE GOAL
@nicolas_frankel @_godin_ #mutationtesting
Ensure the Quality of the
production code
5
THE PROBLEM
@nicolas_frankel @_godin_ #mutationtesting
How to check the Quality of
the testing code?
6
CODE COVERAGE
@nicolas_frankel @_godin_ #mutationtesting
“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
7
MEASURING CODE COVERAGE
@nicolas_frankel @_godin_ #mutationtesting
Check whether a source
code line is executed during a
test
• Or Branch Coverage
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 @_godin_ #mutationtesting
9
JAVA TOOLS FOR CODE COVERAGE
@nicolas_frankel @_godin_ #mutationtesting
JaCoCo
Clover
Cobertura
etc.
10
100% CODE COVERAGE?
@nicolas_frankel @_godin_ #mutationtesting
“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/unclebobma
rtin/status/5596662050966732
8
11
ASSERT-LESS TESTING
@Test
public void add_should_add() {
new Math().add(1, 1);
}
@nicolas_frankel @_godin_ #mutationtesting
But, where is the
assert?
As long as the Code Coverage is
OK…
12
CODE COVERAGE AS A MEASURE OF
TEST QUALITY
@nicolas_frankel @_godin_ #mutationtesting
Any metric can be gamed!
Code coverage is a metric…
⇒ Code coverage can be
gamed
• On purpose
• Or by accident
13
CODE COVERAGE AS A MEASURE OF
TEST QUALITY
@nicolas_frankel @_godin_ #mutationtesting
Code Coverage lulls you into
a false sense of security…
14
THE PROBLEM STILL STANDS
@nicolas_frankel @_godin_ #mutationtesting
Code coverage cannot
ensure test quality
• Is there another way?
Mutation Testing to the
rescue!
15
THE CAST
@nicolas_frankel @_godin_ #mutationtesting
William Stryker
Original Source Code
Jason Stryker
Modified Source Code
a.k.a “The Mutant”
16
public class Math {
public int add(int i1, int i2) {
return i1 + i2;
}
}
@nicolas_frankel @_godin_ #mutationtesting
public class Math {
public int add(int i1, int i2) {
return i1 - i2;
}
}
17
STANDARD TESTING
@nicolas_frankel @_godin_ #mutationtesting
✔Execute Test
18
MUTATION TESTING
@nicolas_frankel @_godin_ #mutationtesting
?Execute SAME Test
MUTATION
19
MUTATION TESTING
@nicolas_frankel @_godin_ #mutationtesting
✗
✔Execute SAME Test
Execute SAME Test
Mutant
Killed
Mutant Survived
20
KILLED OR SURVIVING?
@nicolas_frankel @_godin_ #mutationtesting
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
21
TEST THE CODE
@nicolas_frankel @_godin_ #mutationtesting
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
22
SURVIVING MUTANT
@nicolas_frankel @_godin_ #mutationtesting
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
23
TEST THE CODE
@nicolas_frankel @_godin_ #mutationtesting
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
24
KILLED MUTANT
@nicolas_frankel @_godin_ #mutationtesting
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
25
MUTATION TESTING IN JAVA
@nicolas_frankel @_godin_ #mutationtesting
PIT is a tool for Mutation
testing
Available as
• Command-line tool
• Ant target
• Maven plugin
26
MUTATORS
@nicolas_frankel @_godin_ #mutationtesting
Mutators are patterns
applied to source code to
produce mutations
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 @_godin_ #mutationtesting
28
IMPORTANT MUTATORS
@nicolas_frankel @_godin_ #mutationtesting
Conditionals Boundary
• Probably a potential serious bug
smell
 if (foo > bar)
29
IMPORTANT MUTATORS
@nicolas_frankel @_godin_ #mutationtesting
Void Method Call
 Assert.checkNotNull()
 connection.close(
)
30
REMEMBER
@nicolas_frankel @_godin_ #mutationtesting
 It’s not because the IDE
generates code safely that
it will never change
• equals()
• hashCode()
31
ENOUGH TALK…
@nicolas_frankel @_godin_ #mutationtesting
32
FALSE POSITIVES
➢Mutation Testing is not
100% bulletproof
➢Might return false positives
➢Be cautious!
@nicolas_frankel @_godin_ #mutationtesting
37
if (p < 0)
...
// changed condition boundary -> survived:
if (p > 0)
...
return 0;
PIT IS IMPERFECT
@nicolas_frankel @_godin_ #mutationtesting
38
void rebootMachine() {
// removed method call:
checkUserPermissions();
Runtime.getRuntime().exec("reboot");
}
PIT IS IMPERFECT
@nicolas_frankel @_godin_ #mutationtesting
39
BENCHMARKING (KIND OF)
part of SonarSource C++
Frontend
15K source LoC
about 1K tests in 13K LoC
mvn test
11 sec
You're doing it wrong.
@nicolas_frankel @_godin_ #mutationtesting
40
BENCHMARKING (KIND OF)
mvn pitest:mutationCoverage
3 min 31 sec
➢Slow
➢Sluggish
➢Crawling
➢Sulky
➢Lethargic
➢etc.
WHY SO SLOW?
@nicolas_frankel @_godin_ #mutationtesting
Analyze test code
For each class under test
• For each mutator
• Create mutation
• For each mutation
• Run test
• Analyze result
• Aggregate results
42
WORKAROUNDS
@nicolas_frankel @_godin_ #mutationtesting
This is not acceptable in a
normal test run
But there are workarounds
43
THREADS
<configuration>
<threads>
4
</threads>
</configuration>
mvn pitest:mutationCoverage
1 min 53 sec
@nicolas_frankel @_godin_ #mutationtesting
44
SET MUTATORS
<configuration>
<mutators>
<mutator>
CONSTRUCTOR_CALLS
</mutator>
<mutator>
NON_VOID_METHOD_CALLS
</mutator>
</mutators>
</configuration>
@nicolas_frankel @_godin_ #mutationtesting
45
SET TARGET CLASSES
<configuration>
<targetClasses>
<param>ch.frankel.pit*</param>
</targetClasses>
</configuration>
@nicolas_frankel @_godin_ #mutationtesting
46
SET TARGET TESTS
<configuration>
<targetTests>
<param>ch.frankel.pit*</param>
</targetTests>
</configuration>
@nicolas_frankel @_godin_ #mutationtesting
47
DEPENDENCY DISTANCE
@nicolas_frankel @_godin_ #mutationtesting
1 2
48
LIMIT DEPENDENCY DISTANCE
<configuration>
<maxDependencyDistance>
4
</maxDependencyDistance>
</configuration>
@nicolas_frankel @_godin_ #mutationtesting
49
LIMIT NUMBER OF MUTATIONS
<configuration>
<maxMutationsPerClass>
10
</maxMutationsPerClass>
</configuration>
@nicolas_frankel @_godin_ #mutationtesting
50
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 @_godin_ #mutationtesting
51
INCREMENTAL ANALYSIS
ØSome metadata stored between runs
ØDuring each following run mutant will not be
checked again, if the last time it:
•timed out, and class has not changed
•was killed, and neither class nor test have
changed
•survived, and there are no new/changed tests
for it
@nicolas_frankel @_godin_ #mutationtesting
52
INCREMENTAL ANALYSIS
<configuration>
<historyInputFile>
.pitHistory
</historyInputFile>
<historyOutputFile>
.pitHistory
</historyOutputFile>
</configuration>
mvn pitest:mutationCoverage
8 sec - no changes
47 sec - after removal of unused method call
@nicolas_frankel @_godin_ #mutationtesting
53
USE SCMMUTATIONCOVERAGE
mvn 
org.pitest:pitest-maven:scmMutationCoverage

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

More Related Content

What's hot

The Power of GitOps with Flux & GitOps Toolkit
The Power of GitOps with Flux & GitOps ToolkitThe Power of GitOps with Flux & GitOps Toolkit
The Power of GitOps with Flux & GitOps Toolkit
Weaveworks
 

What's hot (10)

Викторина для тестировщиков
Викторина для тестировщиковВикторина для тестировщиков
Викторина для тестировщиков
 
ISTQB - What's testing
ISTQB - What's testingISTQB - What's testing
ISTQB - What's testing
 
SDLC & DevOps Transformation with Agile
SDLC & DevOps Transformation with AgileSDLC & DevOps Transformation with Agile
SDLC & DevOps Transformation with Agile
 
ISTQB Technical Test Analyst 2012 Training - The Technical Test Analyst's Tas...
ISTQB Technical Test Analyst 2012 Training - The Technical Test Analyst's Tas...ISTQB Technical Test Analyst 2012 Training - The Technical Test Analyst's Tas...
ISTQB Technical Test Analyst 2012 Training - The Technical Test Analyst's Tas...
 
The Power of GitOps with Flux & GitOps Toolkit
The Power of GitOps with Flux & GitOps ToolkitThe Power of GitOps with Flux & GitOps Toolkit
The Power of GitOps with Flux & GitOps Toolkit
 
KubeCon EU 2022: From Kubernetes to PaaS to Err What's Next
KubeCon EU 2022: From Kubernetes to PaaS to Err What's NextKubeCon EU 2022: From Kubernetes to PaaS to Err What's Next
KubeCon EU 2022: From Kubernetes to PaaS to Err What's Next
 
TestOps and Shift Left
TestOps and Shift LeftTestOps and Shift Left
TestOps and Shift Left
 
тестирование по
тестирование потестирование по
тестирование по
 
Test automation - What? Why? How?
Test automation - What? Why? How?Test automation - What? Why? How?
Test automation - What? Why? How?
 
Software Quality Gate.pptx
Software Quality Gate.pptxSoftware Quality Gate.pptx
Software Quality Gate.pptx
 

Viewers also liked

A Igreja ComeçOu Assim
A Igreja ComeçOu AssimA Igreja ComeçOu Assim
A Igreja ComeçOu Assim
Edney Perganin
 

Viewers also liked (6)

Mutation testing
Mutation testingMutation testing
Mutation testing
 
Mutation Analysis vs. Code Coverage in Automated Assessment of Students’ Test...
Mutation Analysis vs. Code Coverage in Automated Assessment of Students’ Test...Mutation Analysis vs. Code Coverage in Automated Assessment of Students’ Test...
Mutation Analysis vs. Code Coverage in Automated Assessment of Students’ Test...
 
Can You Trust Your Tests? (Agile Tour 2015 Kaunas)
Can You Trust Your Tests? (Agile Tour 2015 Kaunas)Can You Trust Your Tests? (Agile Tour 2015 Kaunas)
Can You Trust Your Tests? (Agile Tour 2015 Kaunas)
 
MUTANTS KILLER - PIT: state of the art of mutation testing system
MUTANTS KILLER - PIT: state of the art of mutation testing system MUTANTS KILLER - PIT: state of the art of mutation testing system
MUTANTS KILLER - PIT: state of the art of mutation testing system
 
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
MUTANTS KILLER (Revised) - PIT: state of the art of mutation testing system
 
A Igreja ComeçOu Assim
A Igreja ComeçOu AssimA Igreja ComeçOu Assim
A Igreja ComeçOu Assim
 

Similar to Joker - Improve your tests with mutation testing

Similar to Joker - Improve your tests with mutation testing (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
 
Javantura v3 - Mutation Testing for everyone – Nicolas Fränkel
Javantura v3 - Mutation Testing for everyone – Nicolas FränkelJavantura v3 - Mutation Testing for everyone – Nicolas Fränkel
Javantura v3 - Mutation Testing for everyone – Nicolas Fränkel
 
Craft-Conf - Improve your Tests with Mutation Testing
Craft-Conf - Improve your Tests with Mutation TestingCraft-Conf - Improve your Tests with Mutation Testing
Craft-Conf - Improve your Tests with Mutation Testing
 
Voxxed Days Athens - Improve your tests with Mutation Testing
Voxxed Days Athens - Improve your tests with Mutation TestingVoxxed Days Athens - Improve your tests with Mutation Testing
Voxxed Days Athens - Improve your tests with Mutation Testing
 
ConFoo - Improve your tests with mutation testing
ConFoo - Improve your tests with mutation testingConFoo - Improve your tests with mutation testing
ConFoo - 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
 
Codemash - Mutation testing to the rescue of your tests
Codemash - Mutation testing to the rescue of your testsCodemash - Mutation testing to the rescue of your tests
Codemash - Mutation testing to the rescue of your tests
 
Java Dominicano - Mutation testing
Java Dominicano - Mutation testingJava Dominicano - Mutation testing
Java Dominicano - Mutation testing
 
Codemotion Berlin - Improve your tests with Mutation Testing
Codemotion Berlin - Improve your tests with Mutation TestingCodemotion Berlin - Improve your tests with Mutation Testing
Codemotion Berlin - 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
 
Mutation Testing.pdf
Mutation Testing.pdfMutation Testing.pdf
Mutation Testing.pdf
 
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
 
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
 
des mutants dans le code.pdf
des mutants dans le code.pdfdes mutants dans le code.pdf
des mutants dans le code.pdf
 
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
 
Must.kill.mutants. TopConf Tallinn 2016
Must.kill.mutants. TopConf Tallinn 2016Must.kill.mutants. TopConf Tallinn 2016
Must.kill.mutants. TopConf Tallinn 2016
 
Deliberate Practice, New Learning Styles (2015)
Deliberate Practice, New Learning Styles (2015)Deliberate Practice, New Learning Styles (2015)
Deliberate Practice, New Learning Styles (2015)
 
Mutation testing pixels camp 2019
Mutation testing   pixels camp 2019Mutation testing   pixels camp 2019
Mutation testing pixels camp 2019
 
Unit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of PurityUnit Testing like a Pro - The Circle of Purity
Unit Testing like a Pro - The Circle of Purity
 
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
 

More from Nicolas Fränkel

jLove - A Change-Data-Capture use-case: designing an evergreen cache
jLove - A Change-Data-Capture use-case: designing an evergreen cachejLove - A Change-Data-Capture use-case: designing an evergreen cache
jLove - A Change-Data-Capture use-case: designing an evergreen cache
Nicolas Fränkel
 
OSCONF Hyderabad - Shorten all URLs!
OSCONF Hyderabad - Shorten all URLs!OSCONF Hyderabad - Shorten all URLs!
OSCONF Hyderabad - Shorten all URLs!
Nicolas Fränkel
 
JOnConf - A CDC use-case: designing an Evergreen Cache
JOnConf - A CDC use-case: designing an Evergreen CacheJOnConf - A CDC use-case: designing an Evergreen Cache
JOnConf - A CDC use-case: designing an Evergreen Cache
Nicolas Fränkel
 

More from Nicolas Fränkel (20)

SnowCamp - Adding search to a legacy application
SnowCamp - Adding search to a legacy applicationSnowCamp - Adding search to a legacy application
SnowCamp - Adding search to a legacy application
 
Un CV de dévelopeur toujours a jour
Un CV de dévelopeur toujours a jourUn CV de dévelopeur toujours a jour
Un CV de dévelopeur toujours a jour
 
Zero-downtime deployment on Kubernetes with Hazelcast
Zero-downtime deployment on Kubernetes with HazelcastZero-downtime deployment on Kubernetes with Hazelcast
Zero-downtime deployment on Kubernetes with Hazelcast
 
jLove - A Change-Data-Capture use-case: designing an evergreen cache
jLove - A Change-Data-Capture use-case: designing an evergreen cachejLove - A Change-Data-Capture use-case: designing an evergreen cache
jLove - A Change-Data-Capture use-case: designing an evergreen cache
 
BigData conference - Introduction to stream processing
BigData conference - Introduction to stream processingBigData conference - Introduction to stream processing
BigData conference - Introduction to stream processing
 
ADDO - Your own Kubernetes controller, not only in Go
ADDO - Your own Kubernetes controller, not only in GoADDO - Your own Kubernetes controller, not only in Go
ADDO - Your own Kubernetes controller, not only in Go
 
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java applicationOSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
OSCONF Jaipur - A Hitchhiker's Tour to Containerizing a Java application
 
GeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cache
GeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cacheGeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cache
GeekcampSG 2020 - A Change-Data-Capture use-case: designing an evergreen cache
 
JavaDay Istanbul - 3 improvements in your microservices architecture
JavaDay Istanbul - 3 improvements in your microservices architectureJavaDay Istanbul - 3 improvements in your microservices architecture
JavaDay Istanbul - 3 improvements in your microservices architecture
 
OSCONF Hyderabad - Shorten all URLs!
OSCONF Hyderabad - Shorten all URLs!OSCONF Hyderabad - Shorten all URLs!
OSCONF Hyderabad - Shorten all URLs!
 
Devclub.lv - Introduction to stream processing
Devclub.lv - Introduction to stream processingDevclub.lv - Introduction to stream processing
Devclub.lv - Introduction to stream processing
 
OSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring Boot
OSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring BootOSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring Boot
OSCONF Koshi - Zero downtime deployment with Kubernetes, Flyway and Spring Boot
 
JOnConf - A CDC use-case: designing an Evergreen Cache
JOnConf - A CDC use-case: designing an Evergreen CacheJOnConf - A CDC use-case: designing an Evergreen Cache
JOnConf - A CDC use-case: designing an Evergreen Cache
 
London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...
London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...
London In-Memory Computing Meetup - A Change-Data-Capture use-case: designing...
 
JUG Tirana - Introduction to data streaming
JUG Tirana - Introduction to data streamingJUG Tirana - Introduction to data streaming
JUG Tirana - Introduction to data streaming
 
Java.IL - Your own Kubernetes controller, not only in Go!
Java.IL - Your own Kubernetes controller, not only in Go!Java.IL - Your own Kubernetes controller, not only in Go!
Java.IL - Your own Kubernetes controller, not only in Go!
 
vJUG - Introduction to data streaming
vJUG - Introduction to data streamingvJUG - Introduction to data streaming
vJUG - Introduction to data streaming
 
London Java Community - An Experiment in Continuous Deployment of JVM applica...
London Java Community - An Experiment in Continuous Deployment of JVM applica...London Java Community - An Experiment in Continuous Deployment of JVM applica...
London Java Community - An Experiment in Continuous Deployment of JVM applica...
 
OSCONF - Your own Kubernetes controller: not only in Go
OSCONF - Your own Kubernetes controller: not only in GoOSCONF - Your own Kubernetes controller: not only in Go
OSCONF - Your own Kubernetes controller: not only in Go
 
vKUG - Migrating Spring Boot apps from annotation-based config to Functional
vKUG - Migrating Spring Boot apps from annotation-based config to FunctionalvKUG - Migrating Spring Boot apps from annotation-based config to Functional
vKUG - Migrating Spring Boot apps from annotation-based config to Functional
 

Recently uploaded

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
anilsa9823
 

Recently uploaded (20)

5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 

Joker - Improve your tests with mutation testing