SlideShare a Scribd company logo
1 of 48
Download to read offline
Mutation testing
Too good to be true?
@pkubowicz
Piotr Kubowicz
nexocode
➔ Java/JVM since 2007
➔ now: backend Kotlin
$ whois piotr-kubowicz
ThoughtWorks
Our teams have used Pitest for a while now, and we
recommend its use in Java projects to measure the
health of the test suite.
Technology Radar, Oct 2020
Hype for Mutation Testing
What is it?
fun canPayFrom(account: Account, amount: Int): Boolean =
account.balance > amount
fun canPayFrom(account: Account, amount: Int): Boolean =
account.balance > amount
@Test
fun `can pay more`() {
assertThat(canPayFrom(Account(10), 1)).isTrue()
}
@Test
fun `cannot pay less`() {
assertThat(canPayFrom(Account(10), 20)).isFalse()
}
100% coverage ✓
has coverage != well tested
Mutation
fun canPayFrom(account: Account, amount: Int): Boolean =
account.balance > amount
fun canPayFrom(account: Account, amount: Int): Boolean =
account.balance >= amount
tests pass ⚠
☢
Example mutations
➔ conditional boundary: > becomes >=
➔ a && b becomes a && !b
➔ remove line
➔ return null/false/0
Tools
➔ Java/JVM: Pitest (2013)
➔ JS, .NET: Stryker
➔ LLVM/C/C++: Mull
➔ Ruby: Mutant
➔ PHP: Infection
Pitest
Run steps
1. Collect coverage
2. Determine what to mutate and how
3. Execute each mutation
a. load modified class → execute covering tests
b. killed mutation = some test failed; otherwise survived
Testing approach vs. mutation testing
➔ test 1:1 code, isolated ☢👍
➔ test high-level API, use DB ☢👎
10-30x slower
⬅
⬅
Gregor
➔ built-in
Descartes
➔ external lib
Gregor
➔ built-in
➔ mutates expressions, lines
or whole blocks
Descartes
➔ external lib
➔ Extreme Mutation
Testing: replaces whole
method body
return account.balance > amount
Gregor
return account.balance >= amount
Descartes
return true
Gregor
➔ doesn't understand Kotlin
Descartes
➔ does not mutate getters
➔ respects nullability
Detecting bad tests
Use case
Send reminders about invoices not paid in time
➔ don't notify about PAID, CANCELLED
➔ include invoice ID
Really bad test
whenever(invoiceRepository.findAllByStatusNotIn(any())).thenReturn(
Flux.just(Invoice("i1", 151, WEEK_AGO)) // Flux == reactive list
)
overdueInvoiceNotificationJob.sendNotifications()
verify(invoiceRepository).findAllByStatusNotIn(any())
verify(notificationSender).sendNotification(any())
whenever(invoiceRepository.findAllByStatusNotIn(any()
)).thenReturn(
Flux.just(Invoice("i1", 151, WEEK_AGO))
)
overdueInvoiceNotificationJob.sendNotifications()
verify(invoiceRepository).findAllByStatusNotIn(any())
verify(notificationSender).sendNotification(any())
fun sendNotifications() {
invoiceRepository.findAllByStatusNotIn(listOf(PAID))
.filter { isOverdue(it, clock) }
.next()
.doOnNext { sendNotification(it) }
.subscribe()
}
private fun sendNotification(invoice: Invoice) {
notificationSender.sendNotification(
"${invoice.status} is overdue!"
)
}
whenever(invoiceRepository.findAllByStatusNotIn(any()
)).thenReturn(
Flux.just(Invoice("i1", 151, WEEK_AGO))
)
overdueInvoiceNotificationJob.sendNotifications()
verify(invoiceRepository).findAllByStatusNotIn(any())
verify(notificationSender).sendNotification(any())
fun sendNotifications() {
invoiceRepository.findAllByStatusNotIn(listOf(PAID))
.filter { isOverdue(it, clock) }
.next()
.doOnNext { sendNotification(it) }
.subscribe()
}
private fun sendNotification(invoice: Invoice) {
notificationSender.sendNotification(
"${invoice.status} is overdue!"
)
}
whenever(invoiceRepository.findAllByStatusNotIn(any()
)).thenReturn(
Flux.just(Invoice("i1", 151, WEEK_AGO))
)
overdueInvoiceNotificationJob.sendNotifications()
verify(invoiceRepository).findAllByStatusNotIn(any())
verify(notificationSender).sendNotification(any())
fun sendNotifications() {
invoiceRepository.findAllByStatusNotIn(listOf(PAID))
.filter { isOverdue(it, clock) }
.next()
.doOnNext { sendNotification(it) }
.subscribe()
}
private fun sendNotification(invoice: Invoice) {
notificationSender.sendNotification(
"${invoice.status} is overdue!"
)
}
whenever(invoiceRepository.findAllByStatusNotIn(any()
)).thenReturn(
Flux.just(Invoice("i1", 151, WEEK_AGO))
)
overdueInvoiceNotificationJob.sendNotifications()
verify(invoiceRepository).findAllByStatusNotIn(any())
verify(notificationSender).sendNotification(any())
fun sendNotifications() {
invoiceRepository.findAllByStatusNotIn(listOf(PAID))
.filter { isOverdue(it, clock) }
.next()
.doOnNext { sendNotification(it) }
.subscribe()
}
private fun sendNotification(invoice: Invoice) {
notificationSender.sendNotification(
"${invoice.status} is overdue!"
)
}
whenever(invoiceRepository.findAllByStatusNotIn(any()
)).thenReturn(
Flux.just(Invoice("i1", 151, WEEK_AGO))
)
overdueInvoiceNotificationJob.sendNotifications()
verify(invoiceRepository).findAllByStatusNotIn(any())
verify(notificationSender).sendNotification(any())
fun sendNotifications() {
invoiceRepository.findAllByStatusNotIn(listOf(PAID))
.filter { isOverdue(it, clock) }
.next()
.doOnNext { sendNotification(it) }
.subscribe()
}
private fun sendNotification(invoice: Invoice) {
notificationSender.sendNotification(
"${invoice.status} is overdue!"
)
}
4, 3, 2, 1, 0…
Pitest default
fun sendNotifications() {
invoiceRepository.findAllByStatusNotIn(listOf(PAID))
.filter { isOverdue(it, clock) }
.next()
.doOnNext { sendNotification(it) }
.subscribe()
}
private fun sendNotification(invoice: Invoice) {
notificationSender.sendNotification("${invoice.status} is overdue!")
}
Gregor, mutators=STRONGER
fun sendNotifications() {
invoiceRepository.findAllByStatusNotIn(listOf(PAID))
.filter { isOverdue(it, clock) }
.next()
.doOnNext { sendNotification(it) }
.subscribe()
}
private fun sendNotification(invoice: Invoice) {
notificationSender.sendNotification("${invoice.status} is overdue!")
}
Descartes
fun sendNotifications() {
invoiceRepository.findAllByStatusNotIn(listOf(PAID))
.filter { isOverdue(it, clock) }
.next()
.doOnNext { sendNotification(it) }
.subscribe()
}
private fun sendNotification(invoice: Invoice) {
notificationSender.sendNotification("${invoice.status} is overdue!")
}
⬅
Gregor, mutators=ALL
fun sendNotifications() {
invoiceRepository.findAllByStatusNotIn(listOf(PAID))
.filter { isOverdue(it, clock) }
.next()
.doOnNext { sendNotification(it) }
.subscribe()
}
private fun sendNotification(invoice: Invoice) {
notificationSender.sendNotification("${invoice.status} is overdue!")
}
⬅
Blind spots
➔ bad values in a constant list
◆ listOf(PAID, CANCELLED)
➔ bad field or constant
◆ dto.timeFinished = entity.timeStarted
➔ fluent APIs (reactive programming)
◆ .next()
Not useful mutations
Comparing with our tools
➔ community size
➔ language support (Kotlin)
➔ context-based mutations
➔ code review integration
How to apply
10–30x
80%
When to run
➔ locally during development
When to run
➔ locally during development slow
➔ report in PR
When to run
➔ locally during development slow
➔ report in PR false positives and blind spots
➔ fail PR if too low
When to run
➔ locally during development slow
➔ report in PR false positives and blind spots
➔ fail PR if too low wasting effort
➔ very low test quality?
Thank you!
Piotr Kubowicz
/in/pkubowicz | @pkubowicz
github.com/pkubowicz/pitest-gradle-sandbox
pitest.org | stryker-mutator.io
testing.googleblog.com/2021/04/mutation-testing.html

More Related Content

What's hot

The Ring programming language version 1.6 book - Part 69 of 189
The Ring programming language version 1.6 book - Part 69 of 189The Ring programming language version 1.6 book - Part 69 of 189
The Ring programming language version 1.6 book - Part 69 of 189Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 63 of 180
The Ring programming language version 1.5.1 book - Part 63 of 180The Ring programming language version 1.5.1 book - Part 63 of 180
The Ring programming language version 1.5.1 book - Part 63 of 180Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 69 of 185
The Ring programming language version 1.5.4 book - Part 69 of 185The Ring programming language version 1.5.4 book - Part 69 of 185
The Ring programming language version 1.5.4 book - Part 69 of 185Mahmoud Samir Fayed
 
Error Management: Future vs ZIO
Error Management: Future vs ZIOError Management: Future vs ZIO
Error Management: Future vs ZIOJohn De Goes
 
The Ring programming language version 1.5.4 book - Part 67 of 185
The Ring programming language version 1.5.4 book - Part 67 of 185The Ring programming language version 1.5.4 book - Part 67 of 185
The Ring programming language version 1.5.4 book - Part 67 of 185Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 79 of 212
The Ring programming language version 1.10 book - Part 79 of 212The Ring programming language version 1.10 book - Part 79 of 212
The Ring programming language version 1.10 book - Part 79 of 212Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 73 of 196
The Ring programming language version 1.7 book - Part 73 of 196The Ring programming language version 1.7 book - Part 73 of 196
The Ring programming language version 1.7 book - Part 73 of 196Mahmoud Samir Fayed
 
The Ring programming language version 1.2 book - Part 47 of 84
The Ring programming language version 1.2 book - Part 47 of 84The Ring programming language version 1.2 book - Part 47 of 84
The Ring programming language version 1.2 book - Part 47 of 84Mahmoud Samir Fayed
 
The Ring programming language version 1.8 book - Part 75 of 202
The Ring programming language version 1.8 book - Part 75 of 202The Ring programming language version 1.8 book - Part 75 of 202
The Ring programming language version 1.8 book - Part 75 of 202Mahmoud Samir Fayed
 
Watch out: Observables are here to stay
Watch out: Observables are here to stayWatch out: Observables are here to stay
Watch out: Observables are here to stayGuilherme Ventura
 
The Ring programming language version 1.2 book - Part 48 of 84
The Ring programming language version 1.2 book - Part 48 of 84The Ring programming language version 1.2 book - Part 48 of 84
The Ring programming language version 1.2 book - Part 48 of 84Mahmoud Samir Fayed
 
The Ring programming language version 1.2 book - Part 49 of 84
The Ring programming language version 1.2 book - Part 49 of 84The Ring programming language version 1.2 book - Part 49 of 84
The Ring programming language version 1.2 book - Part 49 of 84Mahmoud Samir Fayed
 
Modificacion del programa
Modificacion del programaModificacion del programa
Modificacion del programaMario José
 
The Ring programming language version 1.6 book - Part 71 of 189
The Ring programming language version 1.6 book - Part 71 of 189The Ring programming language version 1.6 book - Part 71 of 189
The Ring programming language version 1.6 book - Part 71 of 189Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 72 of 196
The Ring programming language version 1.7 book - Part 72 of 196The Ring programming language version 1.7 book - Part 72 of 196
The Ring programming language version 1.7 book - Part 72 of 196Mahmoud Samir Fayed
 
The Ring programming language version 1.3 book - Part 63 of 88
The Ring programming language version 1.3 book - Part 63 of 88The Ring programming language version 1.3 book - Part 63 of 88
The Ring programming language version 1.3 book - Part 63 of 88Mahmoud Samir Fayed
 

What's hot (18)

The Ring programming language version 1.6 book - Part 69 of 189
The Ring programming language version 1.6 book - Part 69 of 189The Ring programming language version 1.6 book - Part 69 of 189
The Ring programming language version 1.6 book - Part 69 of 189
 
The Ring programming language version 1.5.1 book - Part 63 of 180
The Ring programming language version 1.5.1 book - Part 63 of 180The Ring programming language version 1.5.1 book - Part 63 of 180
The Ring programming language version 1.5.1 book - Part 63 of 180
 
The Ring programming language version 1.5.4 book - Part 69 of 185
The Ring programming language version 1.5.4 book - Part 69 of 185The Ring programming language version 1.5.4 book - Part 69 of 185
The Ring programming language version 1.5.4 book - Part 69 of 185
 
Error Management: Future vs ZIO
Error Management: Future vs ZIOError Management: Future vs ZIO
Error Management: Future vs ZIO
 
The Ring programming language version 1.5.4 book - Part 67 of 185
The Ring programming language version 1.5.4 book - Part 67 of 185The Ring programming language version 1.5.4 book - Part 67 of 185
The Ring programming language version 1.5.4 book - Part 67 of 185
 
The Ring programming language version 1.10 book - Part 79 of 212
The Ring programming language version 1.10 book - Part 79 of 212The Ring programming language version 1.10 book - Part 79 of 212
The Ring programming language version 1.10 book - Part 79 of 212
 
The Ring programming language version 1.7 book - Part 73 of 196
The Ring programming language version 1.7 book - Part 73 of 196The Ring programming language version 1.7 book - Part 73 of 196
The Ring programming language version 1.7 book - Part 73 of 196
 
Ip project
Ip projectIp project
Ip project
 
The Ring programming language version 1.2 book - Part 47 of 84
The Ring programming language version 1.2 book - Part 47 of 84The Ring programming language version 1.2 book - Part 47 of 84
The Ring programming language version 1.2 book - Part 47 of 84
 
The Ring programming language version 1.8 book - Part 75 of 202
The Ring programming language version 1.8 book - Part 75 of 202The Ring programming language version 1.8 book - Part 75 of 202
The Ring programming language version 1.8 book - Part 75 of 202
 
Watch out: Observables are here to stay
Watch out: Observables are here to stayWatch out: Observables are here to stay
Watch out: Observables are here to stay
 
C++ practical
C++ practicalC++ practical
C++ practical
 
The Ring programming language version 1.2 book - Part 48 of 84
The Ring programming language version 1.2 book - Part 48 of 84The Ring programming language version 1.2 book - Part 48 of 84
The Ring programming language version 1.2 book - Part 48 of 84
 
The Ring programming language version 1.2 book - Part 49 of 84
The Ring programming language version 1.2 book - Part 49 of 84The Ring programming language version 1.2 book - Part 49 of 84
The Ring programming language version 1.2 book - Part 49 of 84
 
Modificacion del programa
Modificacion del programaModificacion del programa
Modificacion del programa
 
The Ring programming language version 1.6 book - Part 71 of 189
The Ring programming language version 1.6 book - Part 71 of 189The Ring programming language version 1.6 book - Part 71 of 189
The Ring programming language version 1.6 book - Part 71 of 189
 
The Ring programming language version 1.7 book - Part 72 of 196
The Ring programming language version 1.7 book - Part 72 of 196The Ring programming language version 1.7 book - Part 72 of 196
The Ring programming language version 1.7 book - Part 72 of 196
 
The Ring programming language version 1.3 book - Part 63 of 88
The Ring programming language version 1.3 book - Part 63 of 88The Ring programming language version 1.3 book - Part 63 of 88
The Ring programming language version 1.3 book - Part 63 of 88
 

Similar to Mutation testing too good to be true

Mutation testing: Too good to be true? (4Developers)
Mutation testing: Too good to be true? (4Developers)Mutation testing: Too good to be true? (4Developers)
Mutation testing: Too good to be true? (4Developers)Piotr Kubowicz
 
Atomically { Delete Your Actors }
Atomically { Delete Your Actors }Atomically { Delete Your Actors }
Atomically { Delete Your Actors }John De Goes
 
How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014Guillaume POTIER
 
Practical approach for testing your software with php unit
Practical approach for testing your software with php unitPractical approach for testing your software with php unit
Practical approach for testing your software with php unitMario Bittencourt
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기Wanbok Choi
 
Pegomock, a mocking framework for Go
Pegomock, a mocking framework for GoPegomock, a mocking framework for Go
Pegomock, a mocking framework for GoPeter Goetz
 
Symfony (Unit, Functional) Testing.
Symfony (Unit, Functional) Testing.Symfony (Unit, Functional) Testing.
Symfony (Unit, Functional) Testing.Basel Issmail
 
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."sjabs
 
Kotlin coroutine - behind the scenes
Kotlin coroutine - behind the scenesKotlin coroutine - behind the scenes
Kotlin coroutine - behind the scenesAnh Vu
 
A Mock to far - GeeCon
A Mock to far -  GeeConA Mock to far -  GeeCon
A Mock to far - GeeConMichał Lipski
 
Simple design/programming nuggets
Simple design/programming nuggetsSimple design/programming nuggets
Simple design/programming nuggetsVivek Singh
 
Droidjam 2019 flutter isolates pdf
Droidjam 2019 flutter isolates pdfDroidjam 2019 flutter isolates pdf
Droidjam 2019 flutter isolates pdfAnvith Bhat
 
Automatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method DeclarationsAutomatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method DeclarationsICSM 2010
 
Bacon.js — Gérer efficacement les flux de données en Javascript
Bacon.js — Gérer efficacement les flux de données en JavascriptBacon.js — Gérer efficacement les flux de données en Javascript
Bacon.js — Gérer efficacement les flux de données en JavascriptRodolphe Belouin
 
Stop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScriptStop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScriptRyan Anklam
 

Similar to Mutation testing too good to be true (20)

Mutation testing: Too good to be true? (4Developers)
Mutation testing: Too good to be true? (4Developers)Mutation testing: Too good to be true? (4Developers)
Mutation testing: Too good to be true? (4Developers)
 
Clojure workshop
Clojure workshopClojure workshop
Clojure workshop
 
Atomically { Delete Your Actors }
Atomically { Delete Your Actors }Atomically { Delete Your Actors }
Atomically { Delete Your Actors }
 
How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014How to test complex SaaS applications - The family july 2014
How to test complex SaaS applications - The family july 2014
 
Practical approach for testing your software with php unit
Practical approach for testing your software with php unitPractical approach for testing your software with php unit
Practical approach for testing your software with php unit
 
LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기LetSwift RxSwift 시작하기
LetSwift RxSwift 시작하기
 
Pegomock, a mocking framework for Go
Pegomock, a mocking framework for GoPegomock, a mocking framework for Go
Pegomock, a mocking framework for Go
 
Symfony (Unit, Functional) Testing.
Symfony (Unit, Functional) Testing.Symfony (Unit, Functional) Testing.
Symfony (Unit, Functional) Testing.
 
Mock geecon2
Mock geecon2Mock geecon2
Mock geecon2
 
Property Based Testing
Property Based TestingProperty Based Testing
Property Based Testing
 
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."
Kamil Chmielewski, Jacek Juraszek - "Hadoop. W poszukiwaniu złotego młotka."
 
Kotlin coroutine - behind the scenes
Kotlin coroutine - behind the scenesKotlin coroutine - behind the scenes
Kotlin coroutine - behind the scenes
 
A Mock to far - GeeCon
A Mock to far -  GeeConA Mock to far -  GeeCon
A Mock to far - GeeCon
 
Marcus Portfolio
Marcus  PortfolioMarcus  Portfolio
Marcus Portfolio
 
Simple design/programming nuggets
Simple design/programming nuggetsSimple design/programming nuggets
Simple design/programming nuggets
 
Developer Testing Tools Roundup
Developer Testing Tools RoundupDeveloper Testing Tools Roundup
Developer Testing Tools Roundup
 
Droidjam 2019 flutter isolates pdf
Droidjam 2019 flutter isolates pdfDroidjam 2019 flutter isolates pdf
Droidjam 2019 flutter isolates pdf
 
Automatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method DeclarationsAutomatically Repairing Test Cases for Evolving Method Declarations
Automatically Repairing Test Cases for Evolving Method Declarations
 
Bacon.js — Gérer efficacement les flux de données en Javascript
Bacon.js — Gérer efficacement les flux de données en JavascriptBacon.js — Gérer efficacement les flux de données en Javascript
Bacon.js — Gérer efficacement les flux de données en Javascript
 
Stop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScriptStop Making Excuses and Start Testing Your JavaScript
Stop Making Excuses and Start Testing Your JavaScript
 

More from Piotr Kubowicz

Lotny start z testami kontraktowymi 4Developers
Lotny start z testami kontraktowymi 4DevelopersLotny start z testami kontraktowymi 4Developers
Lotny start z testami kontraktowymi 4DevelopersPiotr Kubowicz
 
Lotny start z testami kontraktowymi
Lotny start z testami kontraktowymiLotny start z testami kontraktowymi
Lotny start z testami kontraktowymiPiotr Kubowicz
 
Flying Start into Contract Testing
Flying Start into Contract TestingFlying Start into Contract Testing
Flying Start into Contract TestingPiotr Kubowicz
 
Problem sprytnego programisty
Problem sprytnego programistyProblem sprytnego programisty
Problem sprytnego programistyPiotr Kubowicz
 
Czego oczekiwać od modułów w Javie 9
Czego oczekiwać od modułów w Javie 9Czego oczekiwać od modułów w Javie 9
Czego oczekiwać od modułów w Javie 9Piotr Kubowicz
 
Programista wychodzi z piwnicy
Programista wychodzi z piwnicy Programista wychodzi z piwnicy
Programista wychodzi z piwnicy Piotr Kubowicz
 

More from Piotr Kubowicz (7)

Lotny start z testami kontraktowymi 4Developers
Lotny start z testami kontraktowymi 4DevelopersLotny start z testami kontraktowymi 4Developers
Lotny start z testami kontraktowymi 4Developers
 
Po co nam RSocket?
Po co nam RSocket?Po co nam RSocket?
Po co nam RSocket?
 
Lotny start z testami kontraktowymi
Lotny start z testami kontraktowymiLotny start z testami kontraktowymi
Lotny start z testami kontraktowymi
 
Flying Start into Contract Testing
Flying Start into Contract TestingFlying Start into Contract Testing
Flying Start into Contract Testing
 
Problem sprytnego programisty
Problem sprytnego programistyProblem sprytnego programisty
Problem sprytnego programisty
 
Czego oczekiwać od modułów w Javie 9
Czego oczekiwać od modułów w Javie 9Czego oczekiwać od modułów w Javie 9
Czego oczekiwać od modułów w Javie 9
 
Programista wychodzi z piwnicy
Programista wychodzi z piwnicy Programista wychodzi z piwnicy
Programista wychodzi z piwnicy
 

Recently uploaded

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
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
 
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
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
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
 
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
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
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
 

Recently uploaded (20)

Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 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)
 
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
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
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...
 
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
 
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
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
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
 

Mutation testing too good to be true