SlideShare a Scribd company logo
1 of 99
Download to read offline
1
JavaZone 2016
www.slideshare.net/filipvanlaenen/dial-m-for-mutation
Filip van Laenen
fvl@computas.com
@filipvanlaenen
Dial M for Mutation
3
4
https://www.quora.com/What-are-the-funniest-desire-path-examples-you-know/answer/Katie-Sonder5
https://www.reddit.com/r/funny/comments/35vomd/oh_the_irony/6
Hadi Hariri, “The Silver Bullet Syndrome”, JavaZone 2016
7
8
9
https://blog.codecentric.de/en/2016/02/sensible-mutation-testing-dont-go-killing-spree-2/
10
11
MUTATION TESTING
12
Mutation Testing
• Unit tests testing the
source code
13
Mutation Testing
• Unit tests testing the
source code
14
Mutation Testing
• Unit tests testing the
source code
• Make a change to the
source code
15
Mutation Testing
• Unit tests testing the
source code
• Make a change to the
source code
• Failing unit test
16
Mutation Testing
• Unit tests testing the
source code
• Make a change to the
source code
• Failing unit test
• Many failing unit tests
17
Mutation Testing
• Unit tests testing the
source code
• Make a change to the
source code
• Failing unit test
• Many failing unit tests
• Infinite loops, compilation
errors, run-time errors,
etc…
18
Mutation Testing Book
• Free e-book
• Work in progress
• leanpub.com/mutationtesting
19
Mutation Testing Tools
• PITest
• Java
• http://pitest.org/
• Mutant
• Ruby
• https://github.com/mbj/mutant
20
GETTERS, SETTERS,
CONSTRUCTORS AND BUILDERS
21
Getters and Setters
• How difficult can it be?
• If I had a dime for every
time…
22 https://www.flickr.com/photos/mussikatz/16015546324/
Detach from the Input
• Isolate inner state from
input parameters
• Detach from input
parameters
• Arrays
• Collections
• Objects in general
23 https://www.flickr.com/photos/macieksz/503731332/
Detach the Output
• Don’t expose internal
state
• (Deep) copies
• Unmodifiable collections
24 https://www.flickr.com/photos/kelloggphotography/2099315965/
Unit Testing Getters, Setters, Constructors and Builders
• Are getters, setters, constructors and builders wired together
correctly?
• Primitive types, but also objects
• Are setters, constructors and builders detaching correctly from
input parameters?
• Arrays, collections, objects
• Are getters returning (deep) copies or unmodifiable versions?
25
BOUNDARY CHECKS
26
Unit Testing a Square
• How many unit tests do
you need?
27 https://www.flickr.com/photos/jasoncooper/13204428724/
Unit Testing a Square
• How many unit tests do
you need?
• 0?
28 https://www.flickr.com/photos/jasoncooper/13204428724/
Unit Testing a Square
• How many unit tests do
you need?
• 0?
• 1?
29 https://www.flickr.com/photos/jasoncooper/13204428724/
Unit Testing a Square
• How many unit tests do
you need?
• 0?
• 1?
• 2?
30 https://www.flickr.com/photos/jasoncooper/13204428724/
Unit Testing a Square
• How many unit tests do
you need?
• 0?
• 1?
• 2?
• 4?
31 https://www.flickr.com/photos/jasoncooper/13204428724/
Unit Testing a Square
• How many unit tests do
you need?
• 0?
• 1?
• 2?
• 4?
• 8?
32 https://www.flickr.com/photos/jasoncooper/13204428724/
33
[-1, 1] × [-1, 1]
34
[-1, 1] × [-1, 1]
KISS implementation:
boolean isInside(double x, double y) {
return -1 <= x && x <= 1
&& -1 <= y && y <= 1;
}
35
[-1, 1] × [-1, 1]
KISS implementation:
boolean isInside(double x, double y) {
return -1 <= x && x <= 1
&& -1 <= y && y <= 1;
}
36
“Naive” Unit Tests
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
37
“Naive” Unit Tests
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
→ 9 out of 17 mutants killed
38
“Naive” Unit Tests
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
→ 9 out of 17 mutants killed
39
“Naive” Unit Tests
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
→ 9 out of 17 mutants killed
40
Adding a Corner Case
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
41
Adding a Corner Case
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
→ 11 (+2) out of 17 mutants killed
42
Adding Corner Cases
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
43
Adding Corner Cases
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
→ 13 (+2) out of 17 mutants killed
44
Adding Corner Cases
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
→ 13 (+2) out of 17 mutants killed
45
Adding Corner Cases
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
→ 13 (+2) out of 17 mutants killed
46
Conditions in Isolation
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
47
Conditions in Isolation
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
→ 14 (+1) out of 17 mutants killed
48
Conditions in Isolation
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
49
Conditions in Isolation
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
→ 15 (+1) out of 17 mutants killed
50
Conditions in Isolation
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
assertFalse(square.isInside(2, 0));
51
Conditions in Isolation
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
assertFalse(square.isInside(2, 0));
→ 16 (+1) out of 17 mutants killed52
Conditions in Isolation
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
assertFalse(square.isInside(2, 0));
assertFalse(square.isInside(0, -2));
53
Conditions in Isolation
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
assertFalse(square.isInside(2, 0));
assertFalse(square.isInside(0, -2));
54
“Naive” Unit Tests?
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
assertFalse(square.isInside(2, 0));
assertFalse(square.isInside(0, -2));
55
Useless Unit Tests
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
assertFalse(square.isInside(2, 0));
assertFalse(square.isInside(0, -2));
56
Useless Unit Tests
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
assertFalse(square.isInside(2, 0));
assertFalse(square.isInside(0, -2));
57
Useless Unit Tests
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
assertFalse(square.isInside(2, 0));
assertFalse(square.isInside(0, -2));
58
Six Unit Tests
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
assertFalse(square.isInside(2, 0));
assertFalse(square.isInside(0, -2));
59
Unit Testing a Square
• How many unit tests do
you need?
• 0?
• 1?
• 2?
• 4?
• 8?
• 6
60 https://www.flickr.com/photos/jasoncooper/13204428724/
Unit Testing a Square
• How many unit tests do
you need?
• 0?
• 1?
• 2?
• 4?
• 8?
• At least 6
61 https://www.flickr.com/photos/jasoncooper/13204428724/
[-1, 1] × [-1, 1]
KISS implementation:
boolean isInside(double x, double y) {
return -1 <= x && x <= 1
&& -1 <= y && y <= 1;
}
62
[-1, 1] × [-1, 1]
A mutant (currently) not generated by
PIT:
boolean isInside(double x, double y) {
return -1 <= x && Math.floor(x) <= 1
&& -1 <= y && y <= 1;
}
63
[-1, 1] × [-1, 1]
A mutant (currently) not generated by
PIT:
boolean isInside(double x, double y) {
return -1 <= x && Math.floor(x) <= 1
&& -1 <= y && y <= 1;
}
64
[-1, 1] × [-1, 1]
A mutant (currently) not generated by
PIT:
boolean isInside(double x, double y) {
return -1 <= x && Math.floor(x) <= 1
&& -1 <= y && y <= 1;
}
65
[-1, 1] × [-1, 1]
And other mutants…
66
[-1, 1] × [-1, 1]
And other mutants…
…which may require domain
knowledge to construct…
67
Binding the Square
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-2, 0));
assertFalse(square.isInside(0, 2));
assertFalse(square.isInside(2, 0));
assertFalse(square.isInside(0, -2));
68
Binding the Square
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-1.01, 0));
assertFalse(square.isInside(0, 1.01));
assertFalse(square.isInside(1.01, 0));
assertFalse(square.isInside(0, -1.01));
69
Unit Testing a Square
• How many unit tests do
you need?
• 0?
• 1?
• 2?
• 4?
• 8?
• At least 6
70 https://www.flickr.com/photos/jasoncooper/13204428724/
71
https://www.flickr.com/photos/jasoncooper/13204428724/
Notice the difference
CONDITIONALS
72
Testing Conditionals
• Involves three things:
• Exercising the conditional
• Running the conditional
clause
• Verifying the functionality
of the conditional clause
73 https://www.flickr.com/photos/borkurdotnet/6797142125/
Testing Conditionals
• Involves three things:
• Exercising the conditional
• Running the conditional
clause
• Verifying the functionality
of the conditional clause
If you can’t reach the clause,
consider removing the code!
74 https://www.flickr.com/photos/borkurdotnet/6797142125/
Mutating Conditionals
• Three ways to mutate a
conditional:
• Negate
• Replace with false
• Replace with true
75
Mutating Conditionals
• Three ways to mutate* a
conditional:
• Negate
• Replace with false
• Replace with true
* Or get it wrong
76
Mutating Conditionals
• Three ways to mutate* a
conditional:
• Negate
• Replace with false
• Replace with true
* Or get it wrong
77
PRESENCE AND NECESSITY
OF EVERY EXPRESSION
78
Conditions in Isolation
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-1.01, 0));
79
Unused Code
• Missing unit tests?
• Code that can be deleted?
80
LOGS AND EXCEPTION MESSAGES
81
Testing Log Messages
• Why shouldn’t you?
• Ways to get log messages
wrong:
• Absent
• Wrong log level
• Wrong message content
• Exceptions
82 https://www.flickr.com/photos/waltstoneburner/7946581522/
How to Test Logging
• Create an in-memory
appender
• Set up the condition for
the message to be logged
• Check for:
• Its presence
• Log level
• Message content
83 https://www.flickr.com/photos/waltstoneburner/7946581522/
How to Test Exceptions
• Set up the condition for
the exception to be
thrown
• Check for:
• Its presence
• Exception type
• Message content
84 https://www.flickr.com/photos/7304439@N06/1453921573/
CONSTANTS
85
“
86
Πάντα εῥ ῖ – Everything flows
https://en.wikipedia.org/wiki/Heraclitus
Constant Constants
• Some constants are
pretty constant:
• 0, 1, 2, e, π, c, …
• Others may change:
• 18 (age of majority)
• 16, 21, 25, …
• Or are magic numbers :
• 42, population sizes, …
87 https://www.flickr.com/photos/theilr/16621361510/
Reuse or Redefine?
• Constant constants:
• Reuse
• Changing constants:
• Redefine
• Magic numbers:
• Redefine
• Double-entry
bookkeeping
88 https://www.flickr.com/photos/52814185@N02/6643480765/
Unit Testing Constants
• Constant constants:
• Implicitly
• Changing constants:
• Implicitly
• Magic numbers:
• Explicitly
89 https://www.flickr.com/photos/quasimondo/97503572
ACCESS MODIFIERS
90
Testing Public APIs
• Functionality ≠ public API
• Testing in the same
package:
• Common practice
• JUnit, TestNG, …
• Maven conventions
• IDEs
• “Interface exhibitionism”
91 https://www.flickr.com/photos/neesam/28674222645/
Testing Public APIs
• Test functionality in the
same package
• Use the default access
modifier when needed
• Test the public API from a
different package
• To figure out which
interfaces, classes and
methods should be public
92 https://www.flickr.com/photos/neesam/28674222645/
Access Modifier Mutator
• I could wish for an access
modifier mutator:
• On every interface, class,
method, field, etc…
• public → protected
• protected → (package)
• (package) → private
93 https://www.flickr.com/photos/neesam/28674222645/
CONCLUSION
94
https://www.reddit.com/r/funny/comments/35vomd/oh_the_irony/95
96
Useless Unit Tests
assertTrue(square.isInside(0, 0));
assertFalse(square.isInside(2, 2));
assertTrue(square.isInside(1, 1));
assertTrue(square.isInside(-1, -1));
assertFalse(square.isInside(-1.01, 0));
assertFalse(square.isInside(0, 1.01));
assertFalse(square.isInside(1.01, 0));
assertFalse(square.isInside(0, -1.01));
97
JavaZone 2016
www.slideshare.net/filipvanlaenen/dial-m-for-mutation
Filip van Laenen
fvl@computas.com
@filipvanlaenen
Questions?
Comments?
Thanks!

More Related Content

Viewers also liked

Viewers also liked (14)

กลุ่ม4 303
กลุ่ม4 303กลุ่ม4 303
กลุ่ม4 303
 
Spring 2 2016_5
Spring 2 2016_5Spring 2 2016_5
Spring 2 2016_5
 
กลุ่ม4 305
กลุ่ม4 305กลุ่ม4 305
กลุ่ม4 305
 
Spring 2016 8
Spring 2016 8Spring 2016 8
Spring 2016 8
 
Types of variation
Types of variationTypes of variation
Types of variation
 
Texts Summary
Texts SummaryTexts Summary
Texts Summary
 
Lecture 21
Lecture 21Lecture 21
Lecture 21
 
genetic variations
genetic variationsgenetic variations
genetic variations
 
Molecular basis of mutations
Molecular basis of mutationsMolecular basis of mutations
Molecular basis of mutations
 
Chapter 3: HEREDITY AND VARIATIONS
Chapter 3: HEREDITY AND VARIATIONSChapter 3: HEREDITY AND VARIATIONS
Chapter 3: HEREDITY AND VARIATIONS
 
Plasmid
PlasmidPlasmid
Plasmid
 
TRANSPOSABLE ELEMENTS
TRANSPOSABLE ELEMENTSTRANSPOSABLE ELEMENTS
TRANSPOSABLE ELEMENTS
 
Gene expression in prokaryotes
Gene expression in prokaryotesGene expression in prokaryotes
Gene expression in prokaryotes
 
Bacterial recombination (1)
Bacterial recombination (1)Bacterial recombination (1)
Bacterial recombination (1)
 

Similar to Dial M for Mutation

Playing Go with Clojure
Playing Go with ClojurePlaying Go with Clojure
Playing Go with Clojureztellman
 
Practical unit testing 2014
Practical unit testing 2014Practical unit testing 2014
Practical unit testing 2014Andrew Fray
 
An introduction to Google test framework
An introduction to Google test frameworkAn introduction to Google test framework
An introduction to Google test frameworkAbner Chih Yi Huang
 
Generatingcharacterizationtestsforlegacycode
GeneratingcharacterizationtestsforlegacycodeGeneratingcharacterizationtestsforlegacycode
GeneratingcharacterizationtestsforlegacycodeCarl Schrammel
 
adversarial robustness lecture
adversarial robustness lectureadversarial robustness lecture
adversarial robustness lectureMuhammadAhmedShah2
 
Lecture 6: Stochastic Hydrology (Estimation Problem-Kriging-, Conditional Sim...
Lecture 6: Stochastic Hydrology (Estimation Problem-Kriging-, Conditional Sim...Lecture 6: Stochastic Hydrology (Estimation Problem-Kriging-, Conditional Sim...
Lecture 6: Stochastic Hydrology (Estimation Problem-Kriging-, Conditional Sim...Amro Elfeki
 
Fighting fraud: finding duplicates at scale (Highload+ 2019)
Fighting fraud: finding duplicates at scale (Highload+ 2019)Fighting fraud: finding duplicates at scale (Highload+ 2019)
Fighting fraud: finding duplicates at scale (Highload+ 2019)Alexey Grigorev
 
20181106 arie van_deursen_testday2018
20181106 arie van_deursen_testday201820181106 arie van_deursen_testday2018
20181106 arie van_deursen_testday2018STAMP Project
 
Modularity for Accurate Static Analysis of Smart Contracts
Modularity for Accurate Static Analysis of Smart ContractsModularity for Accurate Static Analysis of Smart Contracts
Modularity for Accurate Static Analysis of Smart ContractsFacultad de Informática UCM
 
Neural networks across space & time : Deep learning in java
Neural networks across space & time : Deep learning in javaNeural networks across space & time : Deep learning in java
Neural networks across space & time : Deep learning in javaDave Snowdon
 
Lorentz workshop - 2018
Lorentz workshop - 2018Lorentz workshop - 2018
Lorentz workshop - 2018XavierDevroey
 
Python fundamentals - basic | WeiYuan
Python fundamentals - basic | WeiYuanPython fundamentals - basic | WeiYuan
Python fundamentals - basic | WeiYuanWei-Yuan Chang
 
หัดเขียน A.I. แบบ AlphaGo กันชิวๆ
หัดเขียน A.I. แบบ AlphaGo กันชิวๆหัดเขียน A.I. แบบ AlphaGo กันชิวๆ
หัดเขียน A.I. แบบ AlphaGo กันชิวๆKan Ouivirach, Ph.D.
 
Geospatial Indexing and Search at Scale with Apache Lucene
Geospatial Indexing and Search at Scale with Apache LuceneGeospatial Indexing and Search at Scale with Apache Lucene
Geospatial Indexing and Search at Scale with Apache LuceneNicholas Knize, Ph.D., GISP
 
Spock Testing Framework
Spock Testing FrameworkSpock Testing Framework
Spock Testing FrameworkAmir Langer
 
Thinking in Properties
Thinking in PropertiesThinking in Properties
Thinking in PropertiesSusan Potter
 

Similar to Dial M for Mutation (19)

Playing Go with Clojure
Playing Go with ClojurePlaying Go with Clojure
Playing Go with Clojure
 
Gd 26
Gd 26Gd 26
Gd 26
 
Practical unit testing 2014
Practical unit testing 2014Practical unit testing 2014
Practical unit testing 2014
 
An introduction to Google test framework
An introduction to Google test frameworkAn introduction to Google test framework
An introduction to Google test framework
 
Generatingcharacterizationtestsforlegacycode
GeneratingcharacterizationtestsforlegacycodeGeneratingcharacterizationtestsforlegacycode
Generatingcharacterizationtestsforlegacycode
 
Microchip Mfg. problem
Microchip Mfg. problemMicrochip Mfg. problem
Microchip Mfg. problem
 
adversarial robustness lecture
adversarial robustness lectureadversarial robustness lecture
adversarial robustness lecture
 
Software Testing
Software TestingSoftware Testing
Software Testing
 
Lecture 6: Stochastic Hydrology (Estimation Problem-Kriging-, Conditional Sim...
Lecture 6: Stochastic Hydrology (Estimation Problem-Kriging-, Conditional Sim...Lecture 6: Stochastic Hydrology (Estimation Problem-Kriging-, Conditional Sim...
Lecture 6: Stochastic Hydrology (Estimation Problem-Kriging-, Conditional Sim...
 
Fighting fraud: finding duplicates at scale (Highload+ 2019)
Fighting fraud: finding duplicates at scale (Highload+ 2019)Fighting fraud: finding duplicates at scale (Highload+ 2019)
Fighting fraud: finding duplicates at scale (Highload+ 2019)
 
20181106 arie van_deursen_testday2018
20181106 arie van_deursen_testday201820181106 arie van_deursen_testday2018
20181106 arie van_deursen_testday2018
 
Modularity for Accurate Static Analysis of Smart Contracts
Modularity for Accurate Static Analysis of Smart ContractsModularity for Accurate Static Analysis of Smart Contracts
Modularity for Accurate Static Analysis of Smart Contracts
 
Neural networks across space & time : Deep learning in java
Neural networks across space & time : Deep learning in javaNeural networks across space & time : Deep learning in java
Neural networks across space & time : Deep learning in java
 
Lorentz workshop - 2018
Lorentz workshop - 2018Lorentz workshop - 2018
Lorentz workshop - 2018
 
Python fundamentals - basic | WeiYuan
Python fundamentals - basic | WeiYuanPython fundamentals - basic | WeiYuan
Python fundamentals - basic | WeiYuan
 
หัดเขียน A.I. แบบ AlphaGo กันชิวๆ
หัดเขียน A.I. แบบ AlphaGo กันชิวๆหัดเขียน A.I. แบบ AlphaGo กันชิวๆ
หัดเขียน A.I. แบบ AlphaGo กันชิวๆ
 
Geospatial Indexing and Search at Scale with Apache Lucene
Geospatial Indexing and Search at Scale with Apache LuceneGeospatial Indexing and Search at Scale with Apache Lucene
Geospatial Indexing and Search at Scale with Apache Lucene
 
Spock Testing Framework
Spock Testing FrameworkSpock Testing Framework
Spock Testing Framework
 
Thinking in Properties
Thinking in PropertiesThinking in Properties
Thinking in Properties
 

More from Filip Van Laenen

How JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate OrbiterHow JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate OrbiterFilip Van Laenen
 
How JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate OrbiterHow JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate OrbiterFilip Van Laenen
 
Clouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp EdgesClouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp EdgesFilip Van Laenen
 
Become an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint ArchitectBecome an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint ArchitectFilip Van Laenen
 
Mutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kodeMutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kodeFilip Van Laenen
 
Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?Filip Van Laenen
 
Five Inconvenient Truths about REST
Five Inconvenient Truths about RESTFive Inconvenient Truths about REST
Five Inconvenient Truths about RESTFilip Van Laenen
 
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...Filip Van Laenen
 
Oop 2015 – Mutation Testing
Oop 2015 – Mutation TestingOop 2015 – Mutation Testing
Oop 2015 – Mutation TestingFilip Van Laenen
 
#NoEstimates – Smidig 2014
 #NoEstimates – Smidig 2014 #NoEstimates – Smidig 2014
#NoEstimates – Smidig 2014Filip Van Laenen
 
#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014Filip Van Laenen
 
Tre ubeleilige sannheter om REST
Tre ubeleilige sannheter om RESTTre ubeleilige sannheter om REST
Tre ubeleilige sannheter om RESTFilip Van Laenen
 
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)Filip Van Laenen
 
Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?Filip Van Laenen
 
Mutation testing (OOP 2012, 2012-JAN-24)
Mutation testing (OOP 2012, 2012-JAN-24)Mutation testing (OOP 2012, 2012-JAN-24)
Mutation testing (OOP 2012, 2012-JAN-24)Filip Van Laenen
 
SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)Filip Van Laenen
 
SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)Filip Van Laenen
 

More from Filip Van Laenen (19)

Drawing for IT Architects
Drawing for IT ArchitectsDrawing for IT Architects
Drawing for IT Architects
 
How JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate OrbiterHow JSR 385 could have saved the Mars Climate Orbiter
How JSR 385 could have saved the Mars Climate Orbiter
 
How JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate OrbiterHow JSR-385 Could Have Saved the Mars Climate Orbiter
How JSR-385 Could Have Saved the Mars Climate Orbiter
 
Clouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp EdgesClouds with Trenches and Sharp Edges
Clouds with Trenches and Sharp Edges
 
Become an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint ArchitectBecome an SVG Architect, not a PowerPoint Architect
Become an SVG Architect, not a PowerPoint Architect
 
Mutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kodeMutasjonstesting – Lag bugs for å få bedre kode
Mutasjonstesting – Lag bugs for å få bedre kode
 
Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?Hvem kommer til å vinne kommunevalget?
Hvem kommer til å vinne kommunevalget?
 
Five Inconvenient Truths about REST
Five Inconvenient Truths about RESTFive Inconvenient Truths about REST
Five Inconvenient Truths about REST
 
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
How Free Data Can Drive Some of the Monkey Business Out of Political Journali...
 
Oop 2015 – Mutation Testing
Oop 2015 – Mutation TestingOop 2015 – Mutation Testing
Oop 2015 – Mutation Testing
 
#NoEstimates – Smidig 2014
 #NoEstimates – Smidig 2014 #NoEstimates – Smidig 2014
#NoEstimates – Smidig 2014
 
#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014#NoEstimates – Javazone 2014
#NoEstimates – Javazone 2014
 
Tre ubeleilige sannheter om REST
Tre ubeleilige sannheter om RESTTre ubeleilige sannheter om REST
Tre ubeleilige sannheter om REST
 
What Architects Really Do
What Architects Really DoWhat Architects Really Do
What Architects Really Do
 
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
Mutation Testing with PIT (Booster 2014, 2014-MAR-13)
 
Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?Hvorfor stole på e-valg 2011/13?
Hvorfor stole på e-valg 2011/13?
 
Mutation testing (OOP 2012, 2012-JAN-24)
Mutation testing (OOP 2012, 2012-JAN-24)Mutation testing (OOP 2012, 2012-JAN-24)
Mutation testing (OOP 2012, 2012-JAN-24)
 
SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)SVG (Devoxx 2011, 2011-NOV-14)
SVG (Devoxx 2011, 2011-NOV-14)
 
SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)SVG (Framsia, 27-SEP-2011)
SVG (Framsia, 27-SEP-2011)
 

Recently uploaded

Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataBradBedford3
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Intelisync
 
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...ICS
 
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...kellynguyen01
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...MyIntelliSource, Inc.
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...aditisharan08
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...gurkirankumar98700
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...OnePlan Solutions
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantAxelRicardoTrocheRiq
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...soniya singh
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...MyIntelliSource, Inc.
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about usDynamic Netsoft
 
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.pdfkalichargn70th171
 
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 CCTVshikhaohhpro
 
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.docxComplianceQuest1
 

Recently uploaded (20)

Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer DataAdobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
Adobe Marketo Engage Deep Dives: Using Webhooks to Transfer Data
 
Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)Introduction to Decentralized Applications (dApps)
Introduction to Decentralized Applications (dApps)
 
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...
 
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...
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
Steps To Getting Up And Running Quickly With MyTimeClock Employee Scheduling ...
 
Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...Unit 1.1 Excite Part 1, class 9, cbse...
Unit 1.1 Excite Part 1, class 9, cbse...
 
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
(Genuine) Escort Service Lucknow | Starting ₹,5K To @25k with A/C 🧑🏽‍❤️‍🧑🏻 89...
 
Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...Advancing Engineering with AI through the Next Generation of Strategic Projec...
Advancing Engineering with AI through the Next Generation of Strategic Projec...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
Salesforce Certified Field Service Consultant
Salesforce Certified Field Service ConsultantSalesforce Certified Field Service Consultant
Salesforce Certified Field Service Consultant
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
Russian Call Girls in Karol Bagh Aasnvi ➡️ 8264348440 💋📞 Independent Escort S...
 
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
Try MyIntelliAccount Cloud Accounting Software As A Service Solution Risk Fre...
 
DNT_Corporate presentation know about us
DNT_Corporate presentation know about usDNT_Corporate presentation know about us
DNT_Corporate presentation know about us
 
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
 
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...Call Girls In Mukherjee Nagar 📱  9999965857  🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
Call Girls In Mukherjee Nagar 📱 9999965857 🤩 Delhi 🫦 HOT AND SEXY VVIP 🍎 SE...
 
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
 

Dial M for Mutation