SlideShare a Scribd company logo
Property-Based
Testing
Matt Bachmann @mattbachmann
InfoQ.com: News & Community Site
• Over 1,000,000 software developers, architects and CTOs read the site world-
wide every month
• 250,000 senior developers subscribe to our weekly newsletter
• Published in 4 languages (English, Chinese, Japanese and Brazilian
Portuguese)
• Post content from our QCon conferences
• 2 dedicated podcast channels: The InfoQ Podcast, with a focus on
Architecture and The Engineering Culture Podcast, with a focus on building
• 96 deep dives on innovative topics packed as downloadable emags and
minibooks
• Over 40 new content items per week
Watch the video with slide
synchronization on InfoQ.com!
https://www.infoq.com/presentations/
test-patterns
Purpose of QCon
- to empower software development by facilitating the spread of
knowledge and innovation
Strategy
- practitioner-driven conference designed for YOU: influencers of
change and innovation in your teams
- speakers and topics driving the evolution and innovation
- connecting and catalyzing the influencers and innovators
Highlights
- attended by more than 12,000 delegates since 2007
- held in 9 cities worldwide
Presented at QCon San Francisco
www.qconsf.com
Testing is Important
Testing is Important
Testing is Important
Testing is Hard
Testing is Hard
Testing is Hard
Capture the
Important Cases
Minimize The
Coding Overhead
Sorting a list of
integers
def test_sort_empty(xs):
assert quicksort([]) == []
def test_sorted(xs):
assert quicksort([1, 2, 3]) == [1, 2, 3]
def test_sort_unsorted(xs):
assert quicksort([5, 4]) == [4, 5]
Property Based Testing
● Describe the arguments
● Describe the result
● Have the computer try to
prove your code wrong
● The Arguments
○ List of Integers
● Properties of the Result
○ List
○ All elements preserved
○ Results are in ascending
order
Hypothesis
Inspired by Haskell’s
QuickCheck
Fantastic Docs
Offers training/contracting
http://hypothesis.works/
@given(st.lists(st.integers()))
def test_sort(xs):
sorted_xs = quicksort(xs)
assert isinstance(sorted_xs, list)
assert Counter(xs) == Counter(sorted_xs)
assert all(
x <= y for x, y in
zip(sorted_xs, sorted_xs[1:])
)
@given(st.lists(st.integers()))
def test_sort(xs):
sorted_xs = quicksort(xs)
assert isinstance(sorted_xs, list)
assert Counter(xs) == Counter(sorted_xs)
assert all(
x <= y for x, y in
zip(sorted_xs, sorted_xs[1:])
)
@given(st.lists(st.integers()))
def test_sort(xs):
sorted_xs = quicksort(xs)
assert isinstance(sorted_xs, list)
assert Counter(xs) == Counter(sorted_xs)
assert all(
x <= y for x, y in
zip(sorted_xs, sorted_xs[1:])
)
@given(st.lists(st.integers()))
def test_sort(xs):
sorted_xs = quicksort(xs)
assert isinstance(sorted_xs, list)
assert Counter(xs) == Counter(sorted_xs)
assert all(
x <= y for x, y in
zip(sorted_xs, sorted_xs[1:])
)
@given(st.lists(st.integers()))
def test_sort(xs):
sorted_xs = quicksort(xs)
assert isinstance(sorted_xs, list)
assert Counter(xs) == Counter(sorted_xs)
assert all(
x <= y for x, y in
zip(sorted_xs, sorted_xs[1:])
)
@given(st.lists(st.integers()))
def test_sort(xs):
sorted_xs = quicksort(xs)
assert isinstance(sorted_xs, list)
assert Counter(xs) == Counter(sorted_xs)
assert all(
x <= y for x, y in
zip(sorted_xs, sorted_xs[1:])
)
@given(st.lists(st.integers()))
def test_sort(xs):
sorted_xs = quicksort(xs)
assert isinstance(sorted_xs, list)
assert Counter(xs) == Counter(sorted_xs)
assert all(
x <= y for x, y in
zip(sorted_xs, sorted_xs[1:])
)
@given(st.lists(st.integers()))
test_sort([])
test_sort([0])
test_sort([93932932923, 82883982983838])
test_sort([9999,77,2,3,3,100,3,39,3993])
Check Out Other Languages
Haskell - QuickCheck
Scala - ScalaCheck
Java - QuickTheories
[-3223, -99999999999, 32]
[-3223, -99999999999, 32]
[-3223, -99999999999]
[-3223, -99999999999, 32]
[-3223, -99999999999]
[1, 0]
@given
@given(text())
def demonstrate(s):
print s
“10111 2”
“1120莭â”
“Ksdjkjadasdamaslk889
1h2ne d-1dni2hd”
@given(integers())
def demonstrate(s):
print s
12312312
0
-99423
@given(lists(integers()))
def demonstrate(s):
print s
[]
[1,3,23,42]
[-1]
@given(
dictionaries(
integers(), list(text())
)
)
def demonstrate(s):
print s
{323 : [“321312321”]}
{8382: [“”, “!1”, “asdas"}
{111: [“saodjad”]}
@given(
builds(
func,
integers()
)
)
def demonstrate(s):
print s
func(0)
func(31321)
func(-21)
@given(
sampled_from(
[‘A’, ‘B’, ‘C’]
)
)
def demonstrate(s):
print s
‘A’
‘A’
‘C’
@given(
recursive(
booleans()
lists
)
)
def demonstrate(s):
print s
True
[True]
[True, [[False, True]]]
@given(
st.builds(
Dog,
breed=st.text(),
name=st.text(),
height=st.floats(),
weight=st.floats()
)
)
@given(
st.builds(
Dog,
breed=st.sampled_from(KNOWN_BREEDS),
name=st.text(),
height=st.floats(),
weight=st.floats()
)
)
@given(
st.builds(
Dog,
breed=st.sampled_from(KNOWN_BREEDS),
name=st.text(min_size=5),
height=st.floats(),
weight=st.floats()
)
)
@given(
st.builds(
Dog,
breed=st.sampled_from(KNOWN_BREEDS),
name=st.text(min_size=5),
height=st.floats(
min_value=1, max_value=6, allow_nan=False, allow_infinity=False
),
weight=st.floats(
min_value=1, max_value=300, allow_nan=False, allow_infinity=False
),
)
)
@given(
st.builds(
Dog,
breed=st.sampled_from(KNOWN_BREEDS),
name=st.text(min_size=5),
height=st.floats(
min_value=1, max_value=6, allow_nan=False, allow_infinity=False
),
weight=st.floats(
min_value=1, max_value=300, allow_nan=False, allow_infinity=False
),
)
)
@example(Dog(breed="Labrador", name="Spot", height=2.1, weight=70))
Potentially infinite cases
Nothing hardcoded
Very little code
Slow Tests Make Their Voices Heard
Not Super Friendly to TDD
Properties Require More Thought
Pattern 1:
The code should not
explode
/batputer/criminals/aliases/{id}?
sort={sort}&max_results={max}
● JSON response
● Expected response codes
○ 200 - OK
○ 401 - Forbidden
○ 400 - Invalid data
○ 404 - Not Found
✓
@given(st.integers(),
st.text(),
st.integers()))
def test_no_explosion(id, sort, max):
response = requests.get(
BATPUTER_URL.format(id, sort, max)
)
assert response and response.json()
assert (response.status_code in
[200, 401, 400, 404])
@given(st.integers(),
st.text(),
st.integers()))
def test_no_explosion(id, sort, max):
response = requests.get(
BATPUTER_URL.format(id, sort, max)
)
assert response and response.json()
assert (response.status_code in
[200, 401, 400, 404])
@given(st.integers(),
st.text(),
st.integers()))
def test_no_explosion(id, sort, max):
response = requests.get(
BATPUTER_URL.format(id, sort, max)
)
assert response and response.json()
assert (response.status_code in
[200, 401, 400, 404])
@given(st.integers(),
st.text(),
st.integers()))
def test_no_explosion(id, sort, max):
response = requests.get(
BATPUTER_URL.format(id, sort, max)
)
assert response and response.json()
assert (response.status_code in
[200, 401, 400, 404])
@given(st.integers(),
st.text(),
st.integers()))
def test_no_explosion(id, sort, max):
my_cool_function(id, sort max)
@given(st.integers(),
st.text(),
st.integers()))
def test_no_explosion(id, sort, max):
try:
my_cool_function(id, sort max)
except ValueError:
pass
Pattern 2:
Reversible
Operations
Encoding
Undo Operations
Serialization
Encoding
Undo Operations
Serialization
class HistoricalEvent(object):
def __init__(self, id, desc, time):
self.id = id
self.desc = desc
self.time = time
class EventEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, HistoricalEvent):
return {
"id": obj.id
"description": obj.description
"event_time":obj.event_time.isoformat()
}
return json.JSONEncoder.default(self, obj)
def fromJson(json_str):
dct = json.loads(json_str)
return HistoricalEvent(
dct['id'],
dct['description'],
dateutil.parser.parse(
dct['event_time']
)
)
@given(st.integers(), st.text(), datetimes(timezones=['UTC']))
def test_to_from_json(id, desc, date):
original_event = HistoricalEvent(id, desc, date)
encoded_event = json.dumps(event, cls=EventEncoder)
decoded_event = json.loads(
encoded_event,
object_hook=HistoricalEvent.fromJson
)
assert decoded_event == original_event
@given(st.integers(), st.text(), datetimes(timezones=['UTC']))
def test_to_from_json(id, desc, date):
original_event = HistoricalEvent(id, desc, date)
encoded_event = json.dumps(event, cls=EventEncoder)
decoded_event = json.loads(
encoded_event,
object_hook=HistoricalEvent.fromJson
)
assert decoded_event == original_event
@given(st.integers(), st.text(), datetimes(timezones=['UTC']))
def test_to_from_json(id, desc, date):
original_event = HistoricalEvent(id, desc, date)
encoded_event = json.dumps(event, cls=EventEncoder)
decoded_event = json.loads(
encoded_event,
object_hook=HistoricalEvent.fromJson
)
assert decoded_event == original_event
@given(st.integers(), st.text(), datetimes(timezones=['UTC']))
def test_to_from_json(id, desc, date):
original_event = HistoricalEvent(id, desc, date)
encoded_event = json.dumps(event, cls=EventEncoder)
decoded_event = json.loads(
encoded_event,
object_hook=HistoricalEvent.fromJson
)
assert decoded_event == original_event
@given(st.integers(), st.text(), datetimes(timezones=['UTC']))
def test_to_from_json(id, desc, date):
original_event = HistoricalEvent(id, desc, date)
encoded_event = json.dumps(event, cls=EventEncoder)
decoded_event = json.loads(
encoded_event,
object_hook=HistoricalEvent.fromJson
)
assert decoded_event == original_event
Pattern 3:
Testing Oracle
Optimizing
Refactoring
Emulating
Leave It
Alone
=
@given(st.integers(), st.text())
def test_against_legacy(arg1, arg2):
assert (
new_hotness(arg1, arg2)
==
legacy_system(arg1, arg2)
)
Compare
Against Brute
Force
@given(st.lists(st.integers()))
def test_against_brute_force(input):
assert (
easy_but_inefficent(input)
==
optimized(input)
)
The System
The System
The System
The System
Pattern 4:
Invariants
Stateful Tests
● Define a state
● What operations can happen in
what conditions?
● How do operations affect the
state?
● What must be true for each step?
https://commons.wikimedia.org/wiki/File:Max-Heap.svg
http://hypothesis.works/articles/rule-based-stateful-testing/
Invariant
● No matter what series of
operations is performed the head
of the tree must be the max
element
http://hypothesis.works/articles/rule-based-stateful-testing/
__init__
push
pop
merge
FIND. ME. BUGS.
http://hypothesis.works/articles/rule-based-stateful-testing/
Integers
Heaps
http://hypothesis.works/articles/rule-based-stateful-testing/
__init__ Integers
Heaps
http://hypothesis.works/articles/rule-based-stateful-testing/
push Integers
Heaps
http://hypothesis.works/articles/rule-based-stateful-testing/
merge Integers
Heaps
http://hypothesis.works/articles/rule-based-stateful-testing/
pop Integers
Heaps
assert result actually max
http://hypothesis.works/articles/rule-based-stateful-testing/
class HeapMachine(RuleBasedStateMachine):
Heaps = Bundle('heaps')
@rule(target=Heaps)
def new_heap(self):
return Heap()
@rule(heap=Heaps, value=integers())
def heap_push(self, heap, value):
push(heap, value)
http://hypothesis.works/articles/rule-based-stateful-testing/
class HeapMachine(RuleBasedStateMachine):
Heaps = Bundle('heaps')
@rule(target=Heaps)
def new_heap(self):
return Heap()
@rule(heap=Heaps, value=integers())
def heap_push(self, heap, value):
push(heap, value)
class HeapMachine(RuleBasedStateMachine):
Heaps = Bundle('heaps')
@rule(target=Heaps)
def new_heap(self):
return Heap()
@rule(heap=Heaps, value=integers())
def heap_push(self, heap, value):
push(heap, value)
http://hypothesis.works/articles/rule-based-stateful-testing/
class HeapMachine(RuleBasedStateMachine):
Heaps = Bundle('heaps')
@rule(target=Heaps)
def new_heap(self):
return Heap()
@rule(heap=Heaps, value=integers())
def heap_push(self, heap, value):
push(heap, value)
http://hypothesis.works/articles/rule-based-stateful-testing/
http://hypothesis.works/articles/rule-based-stateful-testing/
…
@rule(target=Heaps, heap1=Heaps, heap2=Heaps)
def merge(self, heap1, heap2):
return heap_merge(heap1, heap2)
@rule(heap=Heaps.filter(bool))
def pop(self, heap):
correct = max(list(heap))
result = heap_pop(heap)
assert correct == result
http://hypothesis.works/articles/rule-based-stateful-testing/
…
@rule(target=Heaps, heap1=Heaps, heap2=Heaps)
def merge(self, heap1, heap2):
return heap_merge(heap1, heap2)
@rule(heap=Heaps.filter(bool))
def pop(self, heap):
correct = max(list(heap))
result = heap_pop(heap)
assert correct == result
FIND. ME. BUGS.
http://hypothesis.works/articles/rule-based-stateful-testing/
@rule(heap=Heaps.filter(bool))
def pop(self, heap):
correct = max(list(heap))
result = heap_pop(heap)
> assert correct == result
E AssertionError: assert 1 == 0
http://hypothesis.works/articles/rule-based-stateful-testing/
v1 = new_heap()
push(heap=v1, value=0)
push(heap=v1, value=1)
push(heap=v1, value=1)
v2 = merge(heap2=v1, heap1=v1)
pop(heap=v2)
pop(heap=v2)
Property Based Testing
● Describe the arguments
● Describe the result
● Have the computer try to
prove your code wrong
Thanks!
Matt Bachmann
https://github.com/Bachmann1234
Twitter: @mattbachmann
Slides: https://goo.gl/LbelRE
More about Hypothesis
● http://hypothesis.works/
More On Property Based Testing In General
● http://www.quviq.com/
● https://fsharpforfunandprofit.com/posts/property-based-testing-2/
Testing Eventual Consistency with RIAK
● https://www.youtube.com/watch?v=x9mW54GJpG0
Images
https://upload.wikimedia.org/wikipedia/commons/8/83/Jan_Fabre's_%22Searching_for_Ut
opia%22.jpg
https://www.flickr.com/photos/wonderlane/27784474073
https://upload.wikimedia.org/wikipedia/commons/3/36/Under_Floor_Cable_Runs_Tee.jpg
https://www.flickr.com/photos/versageek/493800514
versageek
https://creativecommons.org/licenses/by-sa/2.0/
https://upload.wikimedia.org/wikipedia/commons/3/39/Chip-pan-fire.jpg
https://upload.wikimedia.org/wikipedia/commons/4/4e/The_Thinker_by_Rodin_at_the_Cantor_Arts_Center_of_Stanford_University.JPG
https://www.flickr.com/photos/t0fugurl/2507049701
Picture (without crossout) by Leanne Poon
https://creativecommons.org/licenses/by-nc-nd/2.0/
https://upload.wikimedia.org/wikipedia/commons/thumb/1/19/Dtjohnnymonkey-Stopwatch-no-shading.svg/2000px-Dtjohnnymonkey-Stopwatch-no-shadi
ng.svg.png
https://commons.wikimedia.org/wiki/File:HK_Jockey_Club_Creative_Arts_Centre_JCCAC_Old_Machine_Printers.JPG
https://upload.wikimedia.org/wikipedia/commons/thumb/1/1d/Speed_bump,_Segev%C3%A5ng,_Malm%C3%B6.jpg/640px-Speed_bump,_Segev%C3%A5ng,_Malm%C3%B6.jpg
Images
https://upload.wikimedia.org/wikipedia/commons/6/62/Bird%27s_Rat%27s_nest.jpg
https://upload.wikimedia.org/wikipedia/commons/a/ac/Iceberg.jpg
https://upload.wikimedia.org/wikipedia/commons/4/49/Sleepy_Kit_(6969930840).jpg
http://imgs.xkcd.com/xk3d/303/compiling_4.png
https://pixabay.com/static/uploads/photo/2015/08/18/20/33/blueprints-894779_960_720.jpg
https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Jenga_distorted.jpg/686px-Jenga_distorted.jpg
https://upload.wikimedia.org/wikipedia/commons/5/5c/MSC_Tomoko_in_the_Santa_Barbara_Channel_-_IMO_9309461_(3898801499).jpg
https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Git-logo.svg/2000px-Git-logo.svg.png
https://upload.wikimedia.org/wikipedia/commons/c/c3/Podlaskie_-_Czarna_Bia%C5%82ostocka_-_Puszcza_Knyszy%C5%84ska_-_G%C3%B3ry_C
zuma%C5%BCowskie_-_E_-_v-NW.JPG
https://www.flickr.com/photos/petsadviser-pix/8126550573
Watch the video with slide
synchronization on InfoQ.com!
https://www.infoq.com/presentations/
test-patterns

More Related Content

What's hot

Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
Jonas Bonér
 
A bit about Scala
A bit about ScalaA bit about Scala
A bit about Scala
Vladimir Parfinenko
 
Scala for Jedi
Scala for JediScala for Jedi
Scala for Jedi
Vladimir Parfinenko
 
The Ring programming language version 1.10 book - Part 40 of 212
The Ring programming language version 1.10 book - Part 40 of 212The Ring programming language version 1.10 book - Part 40 of 212
The Ring programming language version 1.10 book - Part 40 of 212
Mahmoud Samir Fayed
 
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
PROIDEA
 
The Ring programming language version 1.6 book - Part 38 of 189
The Ring programming language version 1.6 book - Part 38 of 189The Ring programming language version 1.6 book - Part 38 of 189
The Ring programming language version 1.6 book - Part 38 of 189
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.2 book - Part 35 of 181
The Ring programming language version 1.5.2 book - Part 35 of 181The Ring programming language version 1.5.2 book - Part 35 of 181
The Ring programming language version 1.5.2 book - Part 35 of 181
Mahmoud Samir Fayed
 
Swift Study #2
Swift Study #2Swift Study #2
Swift Study #2
chanju Jeon
 
The Ring programming language version 1.5 book - Part 3 of 31
The Ring programming language version 1.5 book - Part 3 of 31The Ring programming language version 1.5 book - Part 3 of 31
The Ring programming language version 1.5 book - Part 3 of 31
Mahmoud Samir Fayed
 
An Introduction to Scala (2014)
An Introduction to Scala (2014)An Introduction to Scala (2014)
An Introduction to Scala (2014)
William Narmontas
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)
Stephen Chin
 
The Ring programming language version 1.5.4 book - Part 36 of 185
The Ring programming language version 1.5.4 book - Part 36 of 185The Ring programming language version 1.5.4 book - Part 36 of 185
The Ring programming language version 1.5.4 book - Part 36 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.4 book - Part 10 of 30
The Ring programming language version 1.4 book - Part 10 of 30The Ring programming language version 1.4 book - Part 10 of 30
The Ring programming language version 1.4 book - Part 10 of 30
Mahmoud Samir Fayed
 
Graph Connect: Importing data quickly and easily
Graph Connect: Importing data quickly and easilyGraph Connect: Importing data quickly and easily
Graph Connect: Importing data quickly and easily
Mark Needham
 
Spsl v unit - final
Spsl v unit - finalSpsl v unit - final
Spsl v unit - final
Sasidhar Kothuru
 
Exploring ZIO Prelude: The game changer for typeclasses in Scala
Exploring ZIO Prelude: The game changer for typeclasses in ScalaExploring ZIO Prelude: The game changer for typeclasses in Scala
Exploring ZIO Prelude: The game changer for typeclasses in Scala
Jorge Vásquez
 
The Ring programming language version 1.10 book - Part 47 of 212
The Ring programming language version 1.10 book - Part 47 of 212The Ring programming language version 1.10 book - Part 47 of 212
The Ring programming language version 1.10 book - Part 47 of 212
Mahmoud Samir Fayed
 
関数潮流(Function Tendency)
関数潮流(Function Tendency)関数潮流(Function Tendency)
関数潮流(Function Tendency)
riue
 
Scala in Places API
Scala in Places APIScala in Places API
Scala in Places API
Łukasz Bałamut
 

What's hot (19)

Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
A bit about Scala
A bit about ScalaA bit about Scala
A bit about Scala
 
Scala for Jedi
Scala for JediScala for Jedi
Scala for Jedi
 
The Ring programming language version 1.10 book - Part 40 of 212
The Ring programming language version 1.10 book - Part 40 of 212The Ring programming language version 1.10 book - Part 40 of 212
The Ring programming language version 1.10 book - Part 40 of 212
 
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
JDD2015: Functional programing and Event Sourcing - a pair made in heaven - e...
 
The Ring programming language version 1.6 book - Part 38 of 189
The Ring programming language version 1.6 book - Part 38 of 189The Ring programming language version 1.6 book - Part 38 of 189
The Ring programming language version 1.6 book - Part 38 of 189
 
The Ring programming language version 1.5.2 book - Part 35 of 181
The Ring programming language version 1.5.2 book - Part 35 of 181The Ring programming language version 1.5.2 book - Part 35 of 181
The Ring programming language version 1.5.2 book - Part 35 of 181
 
Swift Study #2
Swift Study #2Swift Study #2
Swift Study #2
 
The Ring programming language version 1.5 book - Part 3 of 31
The Ring programming language version 1.5 book - Part 3 of 31The Ring programming language version 1.5 book - Part 3 of 31
The Ring programming language version 1.5 book - Part 3 of 31
 
An Introduction to Scala (2014)
An Introduction to Scala (2014)An Introduction to Scala (2014)
An Introduction to Scala (2014)
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)
 
The Ring programming language version 1.5.4 book - Part 36 of 185
The Ring programming language version 1.5.4 book - Part 36 of 185The Ring programming language version 1.5.4 book - Part 36 of 185
The Ring programming language version 1.5.4 book - Part 36 of 185
 
The Ring programming language version 1.4 book - Part 10 of 30
The Ring programming language version 1.4 book - Part 10 of 30The Ring programming language version 1.4 book - Part 10 of 30
The Ring programming language version 1.4 book - Part 10 of 30
 
Graph Connect: Importing data quickly and easily
Graph Connect: Importing data quickly and easilyGraph Connect: Importing data quickly and easily
Graph Connect: Importing data quickly and easily
 
Spsl v unit - final
Spsl v unit - finalSpsl v unit - final
Spsl v unit - final
 
Exploring ZIO Prelude: The game changer for typeclasses in Scala
Exploring ZIO Prelude: The game changer for typeclasses in ScalaExploring ZIO Prelude: The game changer for typeclasses in Scala
Exploring ZIO Prelude: The game changer for typeclasses in Scala
 
The Ring programming language version 1.10 book - Part 47 of 212
The Ring programming language version 1.10 book - Part 47 of 212The Ring programming language version 1.10 book - Part 47 of 212
The Ring programming language version 1.10 book - Part 47 of 212
 
関数潮流(Function Tendency)
関数潮流(Function Tendency)関数潮流(Function Tendency)
関数潮流(Function Tendency)
 
Scala in Places API
Scala in Places APIScala in Places API
Scala in Places API
 

Viewers also liked

Property-based testing
Property-based testingProperty-based testing
Property-based testing
Dmitriy Morozov
 
Making property-based testing easier to read for humans
Making property-based testing easier to read for humansMaking property-based testing easier to read for humans
Making property-based testing easier to read for humans
Laura M. Castro
 
Property Based Testing
Property Based TestingProperty Based Testing
Property Based Testing
Shishir Dwivedi
 
ScalaCheckでProperty-based Testing
ScalaCheckでProperty-based TestingScalaCheckでProperty-based Testing
ScalaCheckでProperty-based Testing
Koji Agawa
 
Pino coviello, rodriguez
Pino coviello, rodriguezPino coviello, rodriguez
Pino coviello, rodriguez
alvaropinocoviello
 
Property-based testing
Property-based testingProperty-based testing
Property-based testing
Peter Gromov
 
Property-Based Testing for Services
Property-Based Testing for ServicesProperty-Based Testing for Services
Property-Based Testing for Services
jessitron
 
Property based testing - Less is more
Property based testing - Less is moreProperty based testing - Less is more
Property based testing - Less is more
Ho Tien VU
 
Unidad educativa quevedo
Unidad educativa quevedoUnidad educativa quevedo
Unidad educativa quevedo
Kevin Gaibor
 
여성흥분크림『 http://x5.ana.kr 』 톡 w2015 ♡ 여성흥분크림판매 , 여성흥분크림종류, 여성흥분크림 사용후기, 여성흥분크...
여성흥분크림『 http://x5.ana.kr  』 톡 w2015 ♡ 여성흥분크림판매 , 여성흥분크림종류, 여성흥분크림 사용후기, 여성흥분크...여성흥분크림『 http://x5.ana.kr  』 톡 w2015 ♡ 여성흥분크림판매 , 여성흥분크림종류, 여성흥분크림 사용후기, 여성흥분크...
여성흥분크림『 http://x5.ana.kr 』 톡 w2015 ♡ 여성흥분크림판매 , 여성흥분크림종류, 여성흥분크림 사용후기, 여성흥분크...
무우 단
 
Tami
TamiTami
Vecka 7 relationer kopia
Vecka 7 relationer kopiaVecka 7 relationer kopia
Vecka 7 relationer kopia
Marie Södergren
 
Top 10 los youtubers más ifluyentes en latinoamérica
Top 10 los youtubers más ifluyentes en latinoaméricaTop 10 los youtubers más ifluyentes en latinoamérica
Top 10 los youtubers más ifluyentes en latinoamérica
Helen Ariana Beltrán Romero
 
Hạn chế mệt mỏi sau 1 chuyến bay dài
Hạn chế mệt mỏi sau 1 chuyến bay dàiHạn chế mệt mỏi sau 1 chuyến bay dài
Hạn chế mệt mỏi sau 1 chuyến bay dài
Công ty Vận tải Con Mèo
 
El reconstruccionismo
El reconstruccionismoEl reconstruccionismo
El reconstruccionismo
Exavier Blasini
 
Implicaciones de la investigacion
Implicaciones de la investigacionImplicaciones de la investigacion
Implicaciones de la investigacion
agustin rojas
 
IV_WORKSHOP_NVIDIA-Audio_Processing
IV_WORKSHOP_NVIDIA-Audio_ProcessingIV_WORKSHOP_NVIDIA-Audio_Processing
IV_WORKSHOP_NVIDIA-Audio_Processing
diegogee
 
Property based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rulesProperty based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rules
Debasish Ghosh
 
Belajar Seo untuk pemula Terbaru 2017
Belajar Seo untuk pemula Terbaru 2017Belajar Seo untuk pemula Terbaru 2017
Belajar Seo untuk pemula Terbaru 2017
Putra Firmansyah
 

Viewers also liked (19)

Property-based testing
Property-based testingProperty-based testing
Property-based testing
 
Making property-based testing easier to read for humans
Making property-based testing easier to read for humansMaking property-based testing easier to read for humans
Making property-based testing easier to read for humans
 
Property Based Testing
Property Based TestingProperty Based Testing
Property Based Testing
 
ScalaCheckでProperty-based Testing
ScalaCheckでProperty-based TestingScalaCheckでProperty-based Testing
ScalaCheckでProperty-based Testing
 
Pino coviello, rodriguez
Pino coviello, rodriguezPino coviello, rodriguez
Pino coviello, rodriguez
 
Property-based testing
Property-based testingProperty-based testing
Property-based testing
 
Property-Based Testing for Services
Property-Based Testing for ServicesProperty-Based Testing for Services
Property-Based Testing for Services
 
Property based testing - Less is more
Property based testing - Less is moreProperty based testing - Less is more
Property based testing - Less is more
 
Unidad educativa quevedo
Unidad educativa quevedoUnidad educativa quevedo
Unidad educativa quevedo
 
여성흥분크림『 http://x5.ana.kr 』 톡 w2015 ♡ 여성흥분크림판매 , 여성흥분크림종류, 여성흥분크림 사용후기, 여성흥분크...
여성흥분크림『 http://x5.ana.kr  』 톡 w2015 ♡ 여성흥분크림판매 , 여성흥분크림종류, 여성흥분크림 사용후기, 여성흥분크...여성흥분크림『 http://x5.ana.kr  』 톡 w2015 ♡ 여성흥분크림판매 , 여성흥분크림종류, 여성흥분크림 사용후기, 여성흥분크...
여성흥분크림『 http://x5.ana.kr 』 톡 w2015 ♡ 여성흥분크림판매 , 여성흥분크림종류, 여성흥분크림 사용후기, 여성흥분크...
 
Tami
TamiTami
Tami
 
Vecka 7 relationer kopia
Vecka 7 relationer kopiaVecka 7 relationer kopia
Vecka 7 relationer kopia
 
Top 10 los youtubers más ifluyentes en latinoamérica
Top 10 los youtubers más ifluyentes en latinoaméricaTop 10 los youtubers más ifluyentes en latinoamérica
Top 10 los youtubers más ifluyentes en latinoamérica
 
Hạn chế mệt mỏi sau 1 chuyến bay dài
Hạn chế mệt mỏi sau 1 chuyến bay dàiHạn chế mệt mỏi sau 1 chuyến bay dài
Hạn chế mệt mỏi sau 1 chuyến bay dài
 
El reconstruccionismo
El reconstruccionismoEl reconstruccionismo
El reconstruccionismo
 
Implicaciones de la investigacion
Implicaciones de la investigacionImplicaciones de la investigacion
Implicaciones de la investigacion
 
IV_WORKSHOP_NVIDIA-Audio_Processing
IV_WORKSHOP_NVIDIA-Audio_ProcessingIV_WORKSHOP_NVIDIA-Audio_Processing
IV_WORKSHOP_NVIDIA-Audio_Processing
 
Property based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rulesProperty based Testing - generative data & executable domain rules
Property based Testing - generative data & executable domain rules
 
Belajar Seo untuk pemula Terbaru 2017
Belajar Seo untuk pemula Terbaru 2017Belajar Seo untuk pemula Terbaru 2017
Belajar Seo untuk pemula Terbaru 2017
 

Similar to Better Tests, Less Code: Property-based Testing

React.js Basics - ConvergeSE 2015
React.js Basics - ConvergeSE 2015React.js Basics - ConvergeSE 2015
React.js Basics - ConvergeSE 2015
Robert Pearce
 
Robust Operations of Kafka Streams
Robust Operations of Kafka StreamsRobust Operations of Kafka Streams
Robust Operations of Kafka Streams
confluent
 
R Basics
R BasicsR Basics
Types Working for You, Not Against You
Types Working for You, Not Against YouTypes Working for You, Not Against You
Types Working for You, Not Against You
C4Media
 
Easy, Scalable, Fault-tolerant stream processing with Structured Streaming in...
Easy, Scalable, Fault-tolerant stream processing with Structured Streaming in...Easy, Scalable, Fault-tolerant stream processing with Structured Streaming in...
Easy, Scalable, Fault-tolerant stream processing with Structured Streaming in...
DataWorks Summit
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
Stuart Roebuck
 
RではじめるTwitter解析
RではじめるTwitter解析RではじめるTwitter解析
RではじめるTwitter解析
Takeshi Arabiki
 
Rx 101 Codemotion Milan 2015 - Tamir Dresher
Rx 101   Codemotion Milan 2015 - Tamir DresherRx 101   Codemotion Milan 2015 - Tamir Dresher
Rx 101 Codemotion Milan 2015 - Tamir Dresher
Tamir Dresher
 
Tamir Dresher - Reactive Extensions (Rx) 101
Tamir Dresher - Reactive Extensions (Rx) 101Tamir Dresher - Reactive Extensions (Rx) 101
Tamir Dresher - Reactive Extensions (Rx) 101
Codemotion
 
What's new with Apache Spark's Structured Streaming?
What's new with Apache Spark's Structured Streaming?What's new with Apache Spark's Structured Streaming?
What's new with Apache Spark's Structured Streaming?
Miklos Christine
 
Beyond xUnit example-based testing: property-based testing with ScalaCheck
Beyond xUnit example-based testing: property-based testing with ScalaCheckBeyond xUnit example-based testing: property-based testing with ScalaCheck
Beyond xUnit example-based testing: property-based testing with ScalaCheck
Franklin Chen
 
R language introduction
R language introductionR language introduction
R language introduction
Shashwat Shriparv
 
Introduction to R programming
Introduction to R programmingIntroduction to R programming
Introduction to R programming
Alberto Labarga
 
Model-Driven Software Development - Static Analysis & Error Checking
Model-Driven Software Development - Static Analysis & Error CheckingModel-Driven Software Development - Static Analysis & Error Checking
Model-Driven Software Development - Static Analysis & Error Checking
Eelco Visser
 
Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2
Ed Charbeneau
 
On Growth and Software
On Growth and SoftwareOn Growth and Software
On Growth and Software
Carlo Pescio
 
Http4s, Doobie and Circe: The Functional Web Stack
Http4s, Doobie and Circe: The Functional Web StackHttp4s, Doobie and Circe: The Functional Web Stack
Http4s, Doobie and Circe: The Functional Web Stack
GaryCoady
 
Data in Motion: Streaming Static Data Efficiently
Data in Motion: Streaming Static Data EfficientlyData in Motion: Streaming Static Data Efficiently
Data in Motion: Streaming Static Data Efficiently
Martin Zapletal
 
Golang slidesaudrey
Golang slidesaudreyGolang slidesaudrey
Golang slidesaudrey
Audrey Lim
 
Kafka Summit NYC 2017 - Easy, Scalable, Fault-tolerant Stream Processing with...
Kafka Summit NYC 2017 - Easy, Scalable, Fault-tolerant Stream Processing with...Kafka Summit NYC 2017 - Easy, Scalable, Fault-tolerant Stream Processing with...
Kafka Summit NYC 2017 - Easy, Scalable, Fault-tolerant Stream Processing with...
confluent
 

Similar to Better Tests, Less Code: Property-based Testing (20)

React.js Basics - ConvergeSE 2015
React.js Basics - ConvergeSE 2015React.js Basics - ConvergeSE 2015
React.js Basics - ConvergeSE 2015
 
Robust Operations of Kafka Streams
Robust Operations of Kafka StreamsRobust Operations of Kafka Streams
Robust Operations of Kafka Streams
 
R Basics
R BasicsR Basics
R Basics
 
Types Working for You, Not Against You
Types Working for You, Not Against YouTypes Working for You, Not Against You
Types Working for You, Not Against You
 
Easy, Scalable, Fault-tolerant stream processing with Structured Streaming in...
Easy, Scalable, Fault-tolerant stream processing with Structured Streaming in...Easy, Scalable, Fault-tolerant stream processing with Structured Streaming in...
Easy, Scalable, Fault-tolerant stream processing with Structured Streaming in...
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
 
RではじめるTwitter解析
RではじめるTwitter解析RではじめるTwitter解析
RではじめるTwitter解析
 
Rx 101 Codemotion Milan 2015 - Tamir Dresher
Rx 101   Codemotion Milan 2015 - Tamir DresherRx 101   Codemotion Milan 2015 - Tamir Dresher
Rx 101 Codemotion Milan 2015 - Tamir Dresher
 
Tamir Dresher - Reactive Extensions (Rx) 101
Tamir Dresher - Reactive Extensions (Rx) 101Tamir Dresher - Reactive Extensions (Rx) 101
Tamir Dresher - Reactive Extensions (Rx) 101
 
What's new with Apache Spark's Structured Streaming?
What's new with Apache Spark's Structured Streaming?What's new with Apache Spark's Structured Streaming?
What's new with Apache Spark's Structured Streaming?
 
Beyond xUnit example-based testing: property-based testing with ScalaCheck
Beyond xUnit example-based testing: property-based testing with ScalaCheckBeyond xUnit example-based testing: property-based testing with ScalaCheck
Beyond xUnit example-based testing: property-based testing with ScalaCheck
 
R language introduction
R language introductionR language introduction
R language introduction
 
Introduction to R programming
Introduction to R programmingIntroduction to R programming
Introduction to R programming
 
Model-Driven Software Development - Static Analysis & Error Checking
Model-Driven Software Development - Static Analysis & Error CheckingModel-Driven Software Development - Static Analysis & Error Checking
Model-Driven Software Development - Static Analysis & Error Checking
 
Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2Giving Clarity to LINQ Queries by Extending Expressions R2
Giving Clarity to LINQ Queries by Extending Expressions R2
 
On Growth and Software
On Growth and SoftwareOn Growth and Software
On Growth and Software
 
Http4s, Doobie and Circe: The Functional Web Stack
Http4s, Doobie and Circe: The Functional Web StackHttp4s, Doobie and Circe: The Functional Web Stack
Http4s, Doobie and Circe: The Functional Web Stack
 
Data in Motion: Streaming Static Data Efficiently
Data in Motion: Streaming Static Data EfficientlyData in Motion: Streaming Static Data Efficiently
Data in Motion: Streaming Static Data Efficiently
 
Golang slidesaudrey
Golang slidesaudreyGolang slidesaudrey
Golang slidesaudrey
 
Kafka Summit NYC 2017 - Easy, Scalable, Fault-tolerant Stream Processing with...
Kafka Summit NYC 2017 - Easy, Scalable, Fault-tolerant Stream Processing with...Kafka Summit NYC 2017 - Easy, Scalable, Fault-tolerant Stream Processing with...
Kafka Summit NYC 2017 - Easy, Scalable, Fault-tolerant Stream Processing with...
 

More from C4Media

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
C4Media
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy Mobile
C4Media
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020
C4Media
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
C4Media
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
C4Media
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like Owners
C4Media
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
C4Media
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate Guide
C4Media
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CD
C4Media
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine Learning
C4Media
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
C4Media
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep Systems
C4Media
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.js
C4Media
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly Compiler
C4Media
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix Scale
C4Media
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's Edge
C4Media
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home Everywhere
C4Media
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing For
C4Media
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data Engineering
C4Media
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
C4Media
 

More from C4Media (20)

Streaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live VideoStreaming a Million Likes/Second: Real-Time Interactions on Live Video
Streaming a Million Likes/Second: Real-Time Interactions on Live Video
 
Next Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy MobileNext Generation Client APIs in Envoy Mobile
Next Generation Client APIs in Envoy Mobile
 
Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020Software Teams and Teamwork Trends Report Q1 2020
Software Teams and Teamwork Trends Report Q1 2020
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Kafka Needs No Keeper
Kafka Needs No KeeperKafka Needs No Keeper
Kafka Needs No Keeper
 
High Performing Teams Act Like Owners
High Performing Teams Act Like OwnersHigh Performing Teams Act Like Owners
High Performing Teams Act Like Owners
 
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to JavaDoes Java Need Inline Types? What Project Valhalla Can Bring to Java
Does Java Need Inline Types? What Project Valhalla Can Bring to Java
 
Service Meshes- The Ultimate Guide
Service Meshes- The Ultimate GuideService Meshes- The Ultimate Guide
Service Meshes- The Ultimate Guide
 
Shifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CDShifting Left with Cloud Native CI/CD
Shifting Left with Cloud Native CI/CD
 
CI/CD for Machine Learning
CI/CD for Machine LearningCI/CD for Machine Learning
CI/CD for Machine Learning
 
Fault Tolerance at Speed
Fault Tolerance at SpeedFault Tolerance at Speed
Fault Tolerance at Speed
 
Architectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep SystemsArchitectures That Scale Deep - Regaining Control in Deep Systems
Architectures That Scale Deep - Regaining Control in Deep Systems
 
ML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.jsML in the Browser: Interactive Experiences with Tensorflow.js
ML in the Browser: Interactive Experiences with Tensorflow.js
 
Build Your Own WebAssembly Compiler
Build Your Own WebAssembly CompilerBuild Your Own WebAssembly Compiler
Build Your Own WebAssembly Compiler
 
User & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix ScaleUser & Device Identity for Microservices @ Netflix Scale
User & Device Identity for Microservices @ Netflix Scale
 
Scaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's EdgeScaling Patterns for Netflix's Edge
Scaling Patterns for Netflix's Edge
 
Make Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home EverywhereMake Your Electron App Feel at Home Everywhere
Make Your Electron App Feel at Home Everywhere
 
The Talk You've Been Await-ing For
The Talk You've Been Await-ing ForThe Talk You've Been Await-ing For
The Talk You've Been Await-ing For
 
Future of Data Engineering
Future of Data EngineeringFuture of Data Engineering
Future of Data Engineering
 
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and MoreAutomated Testing for Terraform, Docker, Packer, Kubernetes, and More
Automated Testing for Terraform, Docker, Packer, Kubernetes, and More
 

Recently uploaded

Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
TIPNGVN2
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 

Recently uploaded (20)

Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 

Better Tests, Less Code: Property-based Testing