SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

Haskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのかHaskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのか
Kousuke Ruichi
 

Tendances (20)

Dexcs2021 of install2
Dexcs2021 of install2Dexcs2021 of install2
Dexcs2021 of install2
 
Introduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for JavaIntroduction to BDD with Cucumber for Java
Introduction to BDD with Cucumber for Java
 
Unit testing with java
Unit testing with javaUnit testing with java
Unit testing with java
 
Power mock
Power mockPower mock
Power mock
 
DevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágilDevCamp - O papel de um testador em uma equipe ágil
DevCamp - O papel de um testador em uma equipe ágil
 
RSpec on Rails Tutorial
RSpec on Rails TutorialRSpec on Rails Tutorial
RSpec on Rails Tutorial
 
Haskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのかHaskell Day2012 - 参照透過性とは何だったのか
Haskell Day2012 - 参照透過性とは何だったのか
 
Junit
JunitJunit
Junit
 
Decision Testing and Decision Coverage. ISTQB Whitebox techniques with TestCo...
Decision Testing and Decision Coverage. ISTQB Whitebox techniques with TestCo...Decision Testing and Decision Coverage. ISTQB Whitebox techniques with TestCo...
Decision Testing and Decision Coverage. ISTQB Whitebox techniques with TestCo...
 
Code Coverage
Code CoverageCode Coverage
Code Coverage
 
Clean architecture - Protecting the Domain
Clean architecture - Protecting the DomainClean architecture - Protecting the Domain
Clean architecture - Protecting the Domain
 
Google test training
Google test trainingGoogle test training
Google test training
 
Software testing
Software testingSoftware testing
Software testing
 
Unit and integration Testing
Unit and integration TestingUnit and integration Testing
Unit and integration Testing
 
Parallel Running Automation Solution with Docker, Jenkins and Zalenium
Parallel Running Automation Solution with Docker, Jenkins and ZaleniumParallel Running Automation Solution with Docker, Jenkins and Zalenium
Parallel Running Automation Solution with Docker, Jenkins and Zalenium
 
An introduction to Google test framework
An introduction to Google test frameworkAn introduction to Google test framework
An introduction to Google test framework
 
Clean Pragmatic Architecture - Avoiding a Monolith
Clean Pragmatic Architecture - Avoiding a MonolithClean Pragmatic Architecture - Avoiding a Monolith
Clean Pragmatic Architecture - Avoiding a Monolith
 
Ukoug webinar - testing PLSQL APIs with utPLSQL v3
Ukoug webinar - testing PLSQL APIs with utPLSQL v3Ukoug webinar - testing PLSQL APIs with utPLSQL v3
Ukoug webinar - testing PLSQL APIs with utPLSQL v3
 
Test NG Framework Complete Walk Through
Test NG Framework Complete Walk ThroughTest NG Framework Complete Walk Through
Test NG Framework Complete Walk Through
 
What is JUnit? | Edureka
What is JUnit? | EdurekaWhat is JUnit? | Edureka
What is JUnit? | Edureka
 

En vedette

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

En vedette (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
 

Similaire à Joker - Improve your tests with mutation testing

Similaire à 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
 

Plus de 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
 

Plus de 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
 

Dernier

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Dernier (20)

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 ...
 
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
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
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
 
How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...How to Choose the Right Laravel Development Partner in New York City_compress...
How to Choose the Right Laravel Development Partner in New York City_compress...
 
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
 
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
The Guide to Integrating Generative AI into Unified Continuous Testing Platfo...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdfAzure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
Azure_Native_Qumulo_High_Performance_Compute_Benchmarks.pdf
 
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
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 

Joker - Improve your tests with mutation testing