SlideShare a Scribd company logo
— Ruslan Shevchenko [iov42; codespace]
// @rssh1, ruslan@shevchenko.kiev.ua
PROPERTY BASED TESTING
”
“
WHAT IS IT ?
PROPERTY BASED TESTING
Eng: property
властивість
свойство
Other : example
приклад
пример
for all x: Int x < (x+1)
3 < (3 + 1)
SHOW ME THE CODE/SCALA
import org.scalacheck.Properties
import org.scalacheck.Prop.forAll
object IntSpecification extends Properties("Int")
{
property("x < x+1") =
forAll{ (x:Int) => x < x+1 }
}
SHOW ME THE CODE/SCALA
import org.scalacheck.Properties
import org.scalacheck.Prop.forAll
object IntSpecification extends Properties("Int")
{
property(“x < x+1") =
forAll{ (x:Int) => x < x+1 }
}
[info] ! Int.x > x+1: Falsified after 3 passed tests.
[info] > ARG_0: 2147483647
[info] Failed: Total 1, Failed 1, Errors 0, Passed 0
[error] Failed tests:
[error] IntSpecification
[error] (test:test) sbt.TestsFailedException: Tests unsuccessfu
SHOW ME THE CODE/JAVA
…..
@RunWith(JUnitQuickcheck.class) public class IntPropertyTest {
@Property public void xLessIncr(int x)
{
assert(x < x+1);
}
}
SHOW ME THE CODE/JAVA
…..
@RunWith(JUnitQuickcheck.class) public class IntPropertyTest {
@Property public void xLessIncr(int x)
{
assert(x < x+1);
}
}
[info] Running com.github.rssh.IntPropertyTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0,
Time elapsed: 0.75 sec
// Problem not found.
// Generation of random values are differ ;)
SHOW ME THE CODE/JAVASCRIPT
var jsc = require("jsverify")
describe('double ceiling', function() {
it ('x < x + 1e-15',function() {
expect(
jsc.checkForall(jsc.number,function(x){
return x < x+1e-15
})
).toBe(true)
});
});
// explore the limits of the floating point ceiling.
SHOW ME THE CODE/JAVASCRIPT
var jsc = require("jsverify")
describe('double ceiling', function() {
it ('x < x + 1e-15',function() {
expect(
jsc.checkForall(jsc.number,function(x){
return x < x+1e-15
})
).toBe(true)
});
});
// explore the limits of the floating point ceiling.
Failed after 8 tests and 1 shrinks. rngState:
0879d03f2e184b6c5a; Counterexample: 19.7693584933877;
[ 19.7693584933877 ]
F
Failures:
1) double ceiling x < x + 1e-15
1.1) Expected Object({ counterexample: [ 19.7693584933877 ],
counterexamplestr: '19.7693584933877', shrinks: 1, exc:
false, tests: 8, rngState: '0879d03f2e184b6c5a' }) to be
true.
MONKEY TESTING
PROPERTY-BASED TESTING
We generate random values.
Pass one to our function or service to test
Expect, that result of this function satisfy some properties
laws (classical property-based testing); crash
The Infinite Monkey Theorem
HISTORY
QuickCheck. Haskell. 1999
• https://en.wikipedia.org/wiki/QuickCheck
• http://www.cse.chalmers.se/~rjmh/QuickCheck/
John Hughes founded QuivQ
• commercial version of QuickCheck for Erlang
• extensions/interfaces for
• C/C++
• WebServices
• Industry specific standards … (appl. Volvo cars)
IMPLEMENTATIONS FOR POPULAR LANGUAGES
Scala: scalacheck
http://www.scalacheck.org
Java: junit-quickcheck
http://pholser.github.io/junit-quickcheck/
JavaScript: jsverify
http://jsverify.github.io/
Python: Hypothesis
http://hypothesis.works/
PHP: eris; phpquickchek
https://github.com/giorgiosironi/eris
https://github.com/steos/php-quickcheck
…………………… practically any language.
TYPICAL USAGE
Thinks and describe laws
(dependencies between input & output)
Tune input generators
Check such properties in output
Demos:
Programming tasks (sorting, serialization)
Form validation
State checks
LET’S CHECK SORTED ALGORITHM
def sort(x:IndexedSeq[T]):IndexedSeq[T]
invariant: length
definition of sorted:
idempotency:
LET’S CHECK SORTED ALGORITHM
def sort(x:Vector[T]): Vector[T]
invariant: length
property(“sorted array must the same size of origin”) =
forAll{ (x: Vector[Int]) => x.size == sort(x).size }
LET’S CHECK SORTED ALGORITHM
We need to generate:
• n - max number of entries
• sorted vector of the length n
• i < n
• j: i < j < n
CUSTOM GENERATOR
val orderedVectorGen = for {
n <- Gen.choose(2,100)
x <- Gen.containerOfN[Vector,Int]
i <- Gen.choose(0,n-2)
j <- Gen.choose(i,n-1)
} yield (n, sort(x), i, j)
CUSTOM GENERATOR
val orderedVectorGen = for {
n <- Gen.choose(2,100)
x <- Gen.containerOfN[Vector,Int]
i <- Gen.choose(0,n-2)
j <- Gen.choose(i,n-1)
} yield (n, sort(x), i, j)
property(“sorted array must reflect ordered indexes”) =
forAll(orderedVectorGen){ case (n, x, i, j) => x(i) <= x(j) }
property test can serve as documentation for input and output.
LAWS
Ordering[T]:
• reflexivity:
forall{ x:T => x <= x}
• anitsimmetry:
forall{ x:T, y:T =>
x <= y & y <= x ==> x==y }
• transitivity:
• forall{ x:T, y:T, z: T =>
x <= y & y <= z ==> x <= z }
// Laws = set of properties.
// Can be used as specification for type argument.
EXAMPLE: DATA VALIDATION
case class Subsriber(id:Long, // must be unique
firstName: String, // max 20 sym, no spaces.
lastName:String // max 20 sym, no space
)
val correctSubscriberGen = for {
id <- arbitrary[Long]
firstName <- Gen.alphaStr suchThat (_.length <= FIRST_NAME_LEN)
lastName <- Gen.alphaStr suchThat (_.length <= LAST_NAME_LEN)
} yield Subscriber(id,firstName, lastName)
val incorrectSubscriberGen = for {
id <- arbitrary[Long]
firstName <- incorrectNameGen(FIRST_NAME_LEN)
………
GENERAL QUESTIONS
Is property-based testing useful itself ?
— definitely yes.
— force to think hight-level
Are we steel need example-based testing ?
— probably yes.
• What to manual construct thing, which
• explore some type of bug.
• Dimension Problem.
• N probes can be very tiny part.
QUESTIONS ?
THANKS FOR LISTENING
Full example code is available on github:
https://github.com/rssh/property-based-testing-talk
@rssh1
Ruslan Shevchenko
<ruslan@shevchenko.kiev.ua>

More Related Content

What's hot

Gpars workshop
Gpars workshopGpars workshop
Gpars workshop
Vaclav Pech
 
Pure Future
Pure FuturePure Future
Pure Future
Wiem Zine Elabidine
 
5-minute intro to property-based testing in Python with hypothesis
5-minute intro to property-based testing in Python with hypothesis5-minute intro to property-based testing in Python with hypothesis
5-minute intro to property-based testing in Python with hypothesis
Franklin Chen
 
Fiber supervision in ZIO
Fiber supervision in ZIOFiber supervision in ZIO
Fiber supervision in ZIO
Wiem Zine Elabidine
 
Testing for Educational Gaming and Educational Gaming for Testing
Testing for Educational Gaming and Educational Gaming for TestingTesting for Educational Gaming and Educational Gaming for Testing
Testing for Educational Gaming and Educational Gaming for Testing
Tao Xie
 
ZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in ScalaZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in Scala
Wiem Zine Elabidine
 
ZIO Queue
ZIO QueueZIO Queue
The Ring programming language version 1.2 book - Part 21 of 84
The Ring programming language version 1.2 book - Part 21 of 84The Ring programming language version 1.2 book - Part 21 of 84
The Ring programming language version 1.2 book - Part 21 of 84
Mahmoud Samir Fayed
 
Java simple programs
Java simple programsJava simple programs
Java simple programs
VEERA RAGAVAN
 
Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015
Leonardo Borges
 
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMEREVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
Andrey Karpov
 
Zio from Home
Zio from Home Zio from Home
Zio from Home
Wiem Zine Elabidine
 
Java Collections API
Java Collections APIJava Collections API
Java Collections API
Alex Miller
 
Spotify 2016 - Beyond Lambdas - the Aftermath
Spotify 2016 - Beyond Lambdas - the AftermathSpotify 2016 - Beyond Lambdas - the Aftermath
Spotify 2016 - Beyond Lambdas - the Aftermath
Daniel Sawano
 
Using Redux-Saga for Handling Side Effects
Using Redux-Saga for Handling Side EffectsUsing Redux-Saga for Handling Side Effects
Using Redux-Saga for Handling Side Effects
GlobalLogic Ukraine
 
Flying Futures at the same sky can make the sun rise at midnight
Flying Futures at the same sky can make the sun rise at midnightFlying Futures at the same sky can make the sun rise at midnight
Flying Futures at the same sky can make the sun rise at midnight
Wiem Zine Elabidine
 
Kotlin Perfomance on Android / Александр Смирнов (Splyt)
Kotlin Perfomance on Android / Александр Смирнов (Splyt)Kotlin Perfomance on Android / Александр Смирнов (Splyt)
Kotlin Perfomance on Android / Александр Смирнов (Splyt)
Ontico
 
JDays 2016 - Beyond Lambdas - the Aftermath
JDays 2016 - Beyond Lambdas - the AftermathJDays 2016 - Beyond Lambdas - the Aftermath
JDays 2016 - Beyond Lambdas - the Aftermath
Daniel Sawano
 
Final JAVA Practical of BCA SEM-5.
Final JAVA Practical of BCA SEM-5.Final JAVA Practical of BCA SEM-5.
Final JAVA Practical of BCA SEM-5.
Nishan Barot
 
Scalaz 8 vs Akka Actors
Scalaz 8 vs Akka ActorsScalaz 8 vs Akka Actors
Scalaz 8 vs Akka Actors
John De Goes
 

What's hot (20)

Gpars workshop
Gpars workshopGpars workshop
Gpars workshop
 
Pure Future
Pure FuturePure Future
Pure Future
 
5-minute intro to property-based testing in Python with hypothesis
5-minute intro to property-based testing in Python with hypothesis5-minute intro to property-based testing in Python with hypothesis
5-minute intro to property-based testing in Python with hypothesis
 
Fiber supervision in ZIO
Fiber supervision in ZIOFiber supervision in ZIO
Fiber supervision in ZIO
 
Testing for Educational Gaming and Educational Gaming for Testing
Testing for Educational Gaming and Educational Gaming for TestingTesting for Educational Gaming and Educational Gaming for Testing
Testing for Educational Gaming and Educational Gaming for Testing
 
ZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in ScalaZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in Scala
 
ZIO Queue
ZIO QueueZIO Queue
ZIO Queue
 
The Ring programming language version 1.2 book - Part 21 of 84
The Ring programming language version 1.2 book - Part 21 of 84The Ring programming language version 1.2 book - Part 21 of 84
The Ring programming language version 1.2 book - Part 21 of 84
 
Java simple programs
Java simple programsJava simple programs
Java simple programs
 
Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015Parametricity - #cljsyd - May, 2015
Parametricity - #cljsyd - May, 2015
 
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMEREVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
EVERYTHING ABOUT STATIC CODE ANALYSIS FOR A JAVA PROGRAMMER
 
Zio from Home
Zio from Home Zio from Home
Zio from Home
 
Java Collections API
Java Collections APIJava Collections API
Java Collections API
 
Spotify 2016 - Beyond Lambdas - the Aftermath
Spotify 2016 - Beyond Lambdas - the AftermathSpotify 2016 - Beyond Lambdas - the Aftermath
Spotify 2016 - Beyond Lambdas - the Aftermath
 
Using Redux-Saga for Handling Side Effects
Using Redux-Saga for Handling Side EffectsUsing Redux-Saga for Handling Side Effects
Using Redux-Saga for Handling Side Effects
 
Flying Futures at the same sky can make the sun rise at midnight
Flying Futures at the same sky can make the sun rise at midnightFlying Futures at the same sky can make the sun rise at midnight
Flying Futures at the same sky can make the sun rise at midnight
 
Kotlin Perfomance on Android / Александр Смирнов (Splyt)
Kotlin Perfomance on Android / Александр Смирнов (Splyt)Kotlin Perfomance on Android / Александр Смирнов (Splyt)
Kotlin Perfomance on Android / Александр Смирнов (Splyt)
 
JDays 2016 - Beyond Lambdas - the Aftermath
JDays 2016 - Beyond Lambdas - the AftermathJDays 2016 - Beyond Lambdas - the Aftermath
JDays 2016 - Beyond Lambdas - the Aftermath
 
Final JAVA Practical of BCA SEM-5.
Final JAVA Practical of BCA SEM-5.Final JAVA Practical of BCA SEM-5.
Final JAVA Practical of BCA SEM-5.
 
Scalaz 8 vs Akka Actors
Scalaz 8 vs Akka ActorsScalaz 8 vs Akka Actors
Scalaz 8 vs Akka Actors
 

Similar to Ruslan Shevchenko - Property based testing

An introduction to property-based testing
An introduction to property-based testingAn introduction to property-based testing
An introduction to property-based testing
Vincent Pradeilles
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scala
Xing
 
Functional Operations - Susan Potter
Functional Operations - Susan PotterFunctional Operations - Susan Potter
Functional Operations - Susan Potter
distributed matters
 
An introduction to Google test framework
An introduction to Google test frameworkAn introduction to Google test framework
An introduction to Google test framework
Abner Chih Yi Huang
 
Mutation @ Spotify
Mutation @ Spotify Mutation @ Spotify
Mutation @ Spotify
STAMP Project
 
ScalaCheck
ScalaCheckScalaCheck
ScalaCheck
BeScala
 
Using xUnit as a Swiss-Aarmy Testing Toolkit
Using xUnit as a Swiss-Aarmy Testing ToolkitUsing xUnit as a Swiss-Aarmy Testing Toolkit
Using xUnit as a Swiss-Aarmy Testing Toolkit
Chris Oldwood
 
Software Testing:
 A Research Travelogue 
(2000–2014)
Software Testing:
 A Research Travelogue 
(2000–2014)Software Testing:
 A Research Travelogue 
(2000–2014)
Software Testing:
 A Research Travelogue 
(2000–2014)
Alex Orso
 
Be smart when testing your Akka code
Be smart when testing your Akka codeBe smart when testing your Akka code
Be smart when testing your Akka code
Mykhailo Kotsur
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
Stuart Roebuck
 
(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?
Tomasz Wrobel
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scala
Mohsen Zainalpour
 
Property-based testing
Property-based testingProperty-based testing
Property-based testing
Dmitriy Morozov
 
Unit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMockUnit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMock
Robot Media
 
Meet scala
Meet scalaMeet scala
Meet scala
Wojciech Pituła
 
Scala coated JVM
Scala coated JVMScala coated JVM
Scala coated JVM
Stuart Roebuck
 
JVM Mechanics: Understanding the JIT's Tricks
JVM Mechanics: Understanding the JIT's TricksJVM Mechanics: Understanding the JIT's Tricks
JVM Mechanics: Understanding the JIT's Tricks
Doug Hawkins
 
Unit testing en iOS @ MobileCon Galicia
Unit testing en iOS @ MobileCon GaliciaUnit testing en iOS @ MobileCon Galicia
Unit testing en iOS @ MobileCon Galicia
Robot Media
 
Akka.NET streams and reactive streams
Akka.NET streams and reactive streamsAkka.NET streams and reactive streams
Akka.NET streams and reactive streams
Bartosz Sypytkowski
 
An Introduction to Property Based Testing
An Introduction to Property Based TestingAn Introduction to Property Based Testing
An Introduction to Property Based Testing
C4Media
 

Similar to Ruslan Shevchenko - Property based testing (20)

An introduction to property-based testing
An introduction to property-based testingAn introduction to property-based testing
An introduction to property-based testing
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scala
 
Functional Operations - Susan Potter
Functional Operations - Susan PotterFunctional Operations - Susan Potter
Functional Operations - Susan Potter
 
An introduction to Google test framework
An introduction to Google test frameworkAn introduction to Google test framework
An introduction to Google test framework
 
Mutation @ Spotify
Mutation @ Spotify Mutation @ Spotify
Mutation @ Spotify
 
ScalaCheck
ScalaCheckScalaCheck
ScalaCheck
 
Using xUnit as a Swiss-Aarmy Testing Toolkit
Using xUnit as a Swiss-Aarmy Testing ToolkitUsing xUnit as a Swiss-Aarmy Testing Toolkit
Using xUnit as a Swiss-Aarmy Testing Toolkit
 
Software Testing:
 A Research Travelogue 
(2000–2014)
Software Testing:
 A Research Travelogue 
(2000–2014)Software Testing:
 A Research Travelogue 
(2000–2014)
Software Testing:
 A Research Travelogue 
(2000–2014)
 
Be smart when testing your Akka code
Be smart when testing your Akka codeBe smart when testing your Akka code
Be smart when testing your Akka code
 
Scala @ TechMeetup Edinburgh
Scala @ TechMeetup EdinburghScala @ TechMeetup Edinburgh
Scala @ TechMeetup Edinburgh
 
(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?(How) can we benefit from adopting scala?
(How) can we benefit from adopting scala?
 
An introduction to scala
An introduction to scalaAn introduction to scala
An introduction to scala
 
Property-based testing
Property-based testingProperty-based testing
Property-based testing
 
Unit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMockUnit testing in iOS featuring OCUnit, GHUnit & OCMock
Unit testing in iOS featuring OCUnit, GHUnit & OCMock
 
Meet scala
Meet scalaMeet scala
Meet scala
 
Scala coated JVM
Scala coated JVMScala coated JVM
Scala coated JVM
 
JVM Mechanics: Understanding the JIT's Tricks
JVM Mechanics: Understanding the JIT's TricksJVM Mechanics: Understanding the JIT's Tricks
JVM Mechanics: Understanding the JIT's Tricks
 
Unit testing en iOS @ MobileCon Galicia
Unit testing en iOS @ MobileCon GaliciaUnit testing en iOS @ MobileCon Galicia
Unit testing en iOS @ MobileCon Galicia
 
Akka.NET streams and reactive streams
Akka.NET streams and reactive streamsAkka.NET streams and reactive streams
Akka.NET streams and reactive streams
 
An Introduction to Property Based Testing
An Introduction to Property Based TestingAn Introduction to Property Based Testing
An Introduction to Property Based Testing
 

More from Ievgenii Katsan

8 andrew kalyuzhin - 30 ux-advices, that will make users love you
8   andrew kalyuzhin - 30 ux-advices, that will make users love you8   andrew kalyuzhin - 30 ux-advices, that will make users love you
8 andrew kalyuzhin - 30 ux-advices, that will make users love you
Ievgenii Katsan
 
5 hans van loenhoud - master-class the 7 skills of highly successful teams
5   hans van loenhoud - master-class the 7 skills of highly successful teams5   hans van loenhoud - master-class the 7 skills of highly successful teams
5 hans van loenhoud - master-class the 7 skills of highly successful teams
Ievgenii Katsan
 
4 alexey orlov - life of product in startup and enterprise
4   alexey orlov - life of product in startup and enterprise4   alexey orlov - life of product in startup and enterprise
4 alexey orlov - life of product in startup and enterprise
Ievgenii Katsan
 
3 dmitry gomeniuk - how to make data-driven decisions in saa s products
3   dmitry gomeniuk - how to make data-driven decisions in saa s products3   dmitry gomeniuk - how to make data-driven decisions in saa s products
3 dmitry gomeniuk - how to make data-driven decisions in saa s products
Ievgenii Katsan
 
7 hans van loenhoud - the problem-goal-solution trinity
7   hans van loenhoud - the problem-goal-solution trinity7   hans van loenhoud - the problem-goal-solution trinity
7 hans van loenhoud - the problem-goal-solution trinity
Ievgenii Katsan
 
1 hans van loenhoud -
1   hans van loenhoud - 1   hans van loenhoud -
1 hans van loenhoud -
Ievgenii Katsan
 
3 denys gobov - change request specification the knowledge base or the task...
3   denys gobov - change request specification the knowledge base or the task...3   denys gobov - change request specification the knowledge base or the task...
3 denys gobov - change request specification the knowledge base or the task...
Ievgenii Katsan
 
5 victoria cupet - learn to play business analysis
5   victoria cupet - learn to play business analysis5   victoria cupet - learn to play business analysis
5 victoria cupet - learn to play business analysis
Ievgenii Katsan
 
5 alina petrenko - key requirements elicitation during the first contact wi...
5   alina petrenko - key requirements elicitation during the first contact wi...5   alina petrenko - key requirements elicitation during the first contact wi...
5 alina petrenko - key requirements elicitation during the first contact wi...
Ievgenii Katsan
 
3 karabak kuyavets transformation of business analyst to product owner
3   karabak kuyavets transformation of business analyst to product owner3   karabak kuyavets transformation of business analyst to product owner
3 karabak kuyavets transformation of business analyst to product owner
Ievgenii Katsan
 
4 andrii melnykov - stakeholder management for pd ms and b-as and why it is...
4   andrii melnykov - stakeholder management for pd ms and b-as and why it is...4   andrii melnykov - stakeholder management for pd ms and b-as and why it is...
4 andrii melnykov - stakeholder management for pd ms and b-as and why it is...
Ievgenii Katsan
 
3 zornitsa nikolova - the product manager between decision making and facil...
3   zornitsa nikolova - the product manager between decision making and facil...3   zornitsa nikolova - the product manager between decision making and facil...
3 zornitsa nikolova - the product manager between decision making and facil...
Ievgenii Katsan
 
4 viktoriya gudym - how to effectively manage remote employees
4   viktoriya gudym - how to effectively manage remote employees4   viktoriya gudym - how to effectively manage remote employees
4 viktoriya gudym - how to effectively manage remote employees
Ievgenii Katsan
 
9 natali renska - product and outsource development, how to cook 2 meals in...
9   natali renska - product and outsource development, how to cook 2 meals in...9   natali renska - product and outsource development, how to cook 2 meals in...
9 natali renska - product and outsource development, how to cook 2 meals in...
Ievgenii Katsan
 
7 denis parkhomenko - from idea to execution how to make a product that cus...
7   denis parkhomenko - from idea to execution how to make a product that cus...7   denis parkhomenko - from idea to execution how to make a product that cus...
7 denis parkhomenko - from idea to execution how to make a product that cus...
Ievgenii Katsan
 
6 anton vitiaz - inside the mvp in 3 days
6   anton vitiaz - inside the mvp in 3 days6   anton vitiaz - inside the mvp in 3 days
6 anton vitiaz - inside the mvp in 3 days
Ievgenii Katsan
 
5 mariya popova - ideal product management. unicorns in our reality
5   mariya popova - ideal product management. unicorns in our reality5   mariya popova - ideal product management. unicorns in our reality
5 mariya popova - ideal product management. unicorns in our reality
Ievgenii Katsan
 
2 victor podzubanov - design thinking game
2   victor podzubanov - design thinking game2   victor podzubanov - design thinking game
2 victor podzubanov - design thinking game
Ievgenii Katsan
 
3 sergiy potapov - analyst to product owner
3   sergiy potapov - analyst to product owner3   sergiy potapov - analyst to product owner
3 sergiy potapov - analyst to product owner
Ievgenii Katsan
 
4 anton parkhomenko - how to make effective user research with no budget at...
4   anton parkhomenko - how to make effective user research with no budget at...4   anton parkhomenko - how to make effective user research with no budget at...
4 anton parkhomenko - how to make effective user research with no budget at...
Ievgenii Katsan
 

More from Ievgenii Katsan (20)

8 andrew kalyuzhin - 30 ux-advices, that will make users love you
8   andrew kalyuzhin - 30 ux-advices, that will make users love you8   andrew kalyuzhin - 30 ux-advices, that will make users love you
8 andrew kalyuzhin - 30 ux-advices, that will make users love you
 
5 hans van loenhoud - master-class the 7 skills of highly successful teams
5   hans van loenhoud - master-class the 7 skills of highly successful teams5   hans van loenhoud - master-class the 7 skills of highly successful teams
5 hans van loenhoud - master-class the 7 skills of highly successful teams
 
4 alexey orlov - life of product in startup and enterprise
4   alexey orlov - life of product in startup and enterprise4   alexey orlov - life of product in startup and enterprise
4 alexey orlov - life of product in startup and enterprise
 
3 dmitry gomeniuk - how to make data-driven decisions in saa s products
3   dmitry gomeniuk - how to make data-driven decisions in saa s products3   dmitry gomeniuk - how to make data-driven decisions in saa s products
3 dmitry gomeniuk - how to make data-driven decisions in saa s products
 
7 hans van loenhoud - the problem-goal-solution trinity
7   hans van loenhoud - the problem-goal-solution trinity7   hans van loenhoud - the problem-goal-solution trinity
7 hans van loenhoud - the problem-goal-solution trinity
 
1 hans van loenhoud -
1   hans van loenhoud - 1   hans van loenhoud -
1 hans van loenhoud -
 
3 denys gobov - change request specification the knowledge base or the task...
3   denys gobov - change request specification the knowledge base or the task...3   denys gobov - change request specification the knowledge base or the task...
3 denys gobov - change request specification the knowledge base or the task...
 
5 victoria cupet - learn to play business analysis
5   victoria cupet - learn to play business analysis5   victoria cupet - learn to play business analysis
5 victoria cupet - learn to play business analysis
 
5 alina petrenko - key requirements elicitation during the first contact wi...
5   alina petrenko - key requirements elicitation during the first contact wi...5   alina petrenko - key requirements elicitation during the first contact wi...
5 alina petrenko - key requirements elicitation during the first contact wi...
 
3 karabak kuyavets transformation of business analyst to product owner
3   karabak kuyavets transformation of business analyst to product owner3   karabak kuyavets transformation of business analyst to product owner
3 karabak kuyavets transformation of business analyst to product owner
 
4 andrii melnykov - stakeholder management for pd ms and b-as and why it is...
4   andrii melnykov - stakeholder management for pd ms and b-as and why it is...4   andrii melnykov - stakeholder management for pd ms and b-as and why it is...
4 andrii melnykov - stakeholder management for pd ms and b-as and why it is...
 
3 zornitsa nikolova - the product manager between decision making and facil...
3   zornitsa nikolova - the product manager between decision making and facil...3   zornitsa nikolova - the product manager between decision making and facil...
3 zornitsa nikolova - the product manager between decision making and facil...
 
4 viktoriya gudym - how to effectively manage remote employees
4   viktoriya gudym - how to effectively manage remote employees4   viktoriya gudym - how to effectively manage remote employees
4 viktoriya gudym - how to effectively manage remote employees
 
9 natali renska - product and outsource development, how to cook 2 meals in...
9   natali renska - product and outsource development, how to cook 2 meals in...9   natali renska - product and outsource development, how to cook 2 meals in...
9 natali renska - product and outsource development, how to cook 2 meals in...
 
7 denis parkhomenko - from idea to execution how to make a product that cus...
7   denis parkhomenko - from idea to execution how to make a product that cus...7   denis parkhomenko - from idea to execution how to make a product that cus...
7 denis parkhomenko - from idea to execution how to make a product that cus...
 
6 anton vitiaz - inside the mvp in 3 days
6   anton vitiaz - inside the mvp in 3 days6   anton vitiaz - inside the mvp in 3 days
6 anton vitiaz - inside the mvp in 3 days
 
5 mariya popova - ideal product management. unicorns in our reality
5   mariya popova - ideal product management. unicorns in our reality5   mariya popova - ideal product management. unicorns in our reality
5 mariya popova - ideal product management. unicorns in our reality
 
2 victor podzubanov - design thinking game
2   victor podzubanov - design thinking game2   victor podzubanov - design thinking game
2 victor podzubanov - design thinking game
 
3 sergiy potapov - analyst to product owner
3   sergiy potapov - analyst to product owner3   sergiy potapov - analyst to product owner
3 sergiy potapov - analyst to product owner
 
4 anton parkhomenko - how to make effective user research with no budget at...
4   anton parkhomenko - how to make effective user research with no budget at...4   anton parkhomenko - how to make effective user research with no budget at...
4 anton parkhomenko - how to make effective user research with no budget at...
 

Recently uploaded

Use PyCharm for remote debugging of WSL on a Windo cf5c162d672e4e58b4dde5d797...
Use PyCharm for remote debugging of WSL on a Windo cf5c162d672e4e58b4dde5d797...Use PyCharm for remote debugging of WSL on a Windo cf5c162d672e4e58b4dde5d797...
Use PyCharm for remote debugging of WSL on a Windo cf5c162d672e4e58b4dde5d797...
shadow0702a
 
Engineering Drawings Lecture Detail Drawings 2014.pdf
Engineering Drawings Lecture Detail Drawings 2014.pdfEngineering Drawings Lecture Detail Drawings 2014.pdf
Engineering Drawings Lecture Detail Drawings 2014.pdf
abbyasa1014
 
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECTCHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
jpsjournal1
 
Textile Chemical Processing and Dyeing.pdf
Textile Chemical Processing and Dyeing.pdfTextile Chemical Processing and Dyeing.pdf
Textile Chemical Processing and Dyeing.pdf
NazakatAliKhoso2
 
22CYT12-Unit-V-E Waste and its Management.ppt
22CYT12-Unit-V-E Waste and its Management.ppt22CYT12-Unit-V-E Waste and its Management.ppt
22CYT12-Unit-V-E Waste and its Management.ppt
KrishnaveniKrishnara1
 
ISPM 15 Heat Treated Wood Stamps and why your shipping must have one
ISPM 15 Heat Treated Wood Stamps and why your shipping must have oneISPM 15 Heat Treated Wood Stamps and why your shipping must have one
ISPM 15 Heat Treated Wood Stamps and why your shipping must have one
Las Vegas Warehouse
 
IEEE Aerospace and Electronic Systems Society as a Graduate Student Member
IEEE Aerospace and Electronic Systems Society as a Graduate Student MemberIEEE Aerospace and Electronic Systems Society as a Graduate Student Member
IEEE Aerospace and Electronic Systems Society as a Graduate Student Member
VICTOR MAESTRE RAMIREZ
 
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
Yasser Mahgoub
 
john krisinger-the science and history of the alcoholic beverage.pptx
john krisinger-the science and history of the alcoholic beverage.pptxjohn krisinger-the science and history of the alcoholic beverage.pptx
john krisinger-the science and history of the alcoholic beverage.pptx
Madan Karki
 
UNLOCKING HEALTHCARE 4.0: NAVIGATING CRITICAL SUCCESS FACTORS FOR EFFECTIVE I...
UNLOCKING HEALTHCARE 4.0: NAVIGATING CRITICAL SUCCESS FACTORS FOR EFFECTIVE I...UNLOCKING HEALTHCARE 4.0: NAVIGATING CRITICAL SUCCESS FACTORS FOR EFFECTIVE I...
UNLOCKING HEALTHCARE 4.0: NAVIGATING CRITICAL SUCCESS FACTORS FOR EFFECTIVE I...
amsjournal
 
Manufacturing Process of molasses based distillery ppt.pptx
Manufacturing Process of molasses based distillery ppt.pptxManufacturing Process of molasses based distillery ppt.pptx
Manufacturing Process of molasses based distillery ppt.pptx
Madan Karki
 
Computational Engineering IITH Presentation
Computational Engineering IITH PresentationComputational Engineering IITH Presentation
Computational Engineering IITH Presentation
co23btech11018
 
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODELDEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
gerogepatton
 
BPV-GUI-01-Guide-for-ASME-Review-Teams-(General)-10-10-2023.pdf
BPV-GUI-01-Guide-for-ASME-Review-Teams-(General)-10-10-2023.pdfBPV-GUI-01-Guide-for-ASME-Review-Teams-(General)-10-10-2023.pdf
BPV-GUI-01-Guide-for-ASME-Review-Teams-(General)-10-10-2023.pdf
MIGUELANGEL966976
 
KuberTENes Birthday Bash Guadalajara - K8sGPT first impressions
KuberTENes Birthday Bash Guadalajara - K8sGPT first impressionsKuberTENes Birthday Bash Guadalajara - K8sGPT first impressions
KuberTENes Birthday Bash Guadalajara - K8sGPT first impressions
Victor Morales
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Christina Lin
 
Hematology Analyzer Machine - Complete Blood Count
Hematology Analyzer Machine - Complete Blood CountHematology Analyzer Machine - Complete Blood Count
Hematology Analyzer Machine - Complete Blood Count
shahdabdulbaset
 
Properties Railway Sleepers and Test.pptx
Properties Railway Sleepers and Test.pptxProperties Railway Sleepers and Test.pptx
Properties Railway Sleepers and Test.pptx
MDSABBIROJJAMANPAYEL
 
spirit beverages ppt without graphics.pptx
spirit beverages ppt without graphics.pptxspirit beverages ppt without graphics.pptx
spirit beverages ppt without graphics.pptx
Madan Karki
 
132/33KV substation case study Presentation
132/33KV substation case study Presentation132/33KV substation case study Presentation
132/33KV substation case study Presentation
kandramariana6
 

Recently uploaded (20)

Use PyCharm for remote debugging of WSL on a Windo cf5c162d672e4e58b4dde5d797...
Use PyCharm for remote debugging of WSL on a Windo cf5c162d672e4e58b4dde5d797...Use PyCharm for remote debugging of WSL on a Windo cf5c162d672e4e58b4dde5d797...
Use PyCharm for remote debugging of WSL on a Windo cf5c162d672e4e58b4dde5d797...
 
Engineering Drawings Lecture Detail Drawings 2014.pdf
Engineering Drawings Lecture Detail Drawings 2014.pdfEngineering Drawings Lecture Detail Drawings 2014.pdf
Engineering Drawings Lecture Detail Drawings 2014.pdf
 
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECTCHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
CHINA’S GEO-ECONOMIC OUTREACH IN CENTRAL ASIAN COUNTRIES AND FUTURE PROSPECT
 
Textile Chemical Processing and Dyeing.pdf
Textile Chemical Processing and Dyeing.pdfTextile Chemical Processing and Dyeing.pdf
Textile Chemical Processing and Dyeing.pdf
 
22CYT12-Unit-V-E Waste and its Management.ppt
22CYT12-Unit-V-E Waste and its Management.ppt22CYT12-Unit-V-E Waste and its Management.ppt
22CYT12-Unit-V-E Waste and its Management.ppt
 
ISPM 15 Heat Treated Wood Stamps and why your shipping must have one
ISPM 15 Heat Treated Wood Stamps and why your shipping must have oneISPM 15 Heat Treated Wood Stamps and why your shipping must have one
ISPM 15 Heat Treated Wood Stamps and why your shipping must have one
 
IEEE Aerospace and Electronic Systems Society as a Graduate Student Member
IEEE Aerospace and Electronic Systems Society as a Graduate Student MemberIEEE Aerospace and Electronic Systems Society as a Graduate Student Member
IEEE Aerospace and Electronic Systems Society as a Graduate Student Member
 
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
2008 BUILDING CONSTRUCTION Illustrated - Ching Chapter 02 The Building.pdf
 
john krisinger-the science and history of the alcoholic beverage.pptx
john krisinger-the science and history of the alcoholic beverage.pptxjohn krisinger-the science and history of the alcoholic beverage.pptx
john krisinger-the science and history of the alcoholic beverage.pptx
 
UNLOCKING HEALTHCARE 4.0: NAVIGATING CRITICAL SUCCESS FACTORS FOR EFFECTIVE I...
UNLOCKING HEALTHCARE 4.0: NAVIGATING CRITICAL SUCCESS FACTORS FOR EFFECTIVE I...UNLOCKING HEALTHCARE 4.0: NAVIGATING CRITICAL SUCCESS FACTORS FOR EFFECTIVE I...
UNLOCKING HEALTHCARE 4.0: NAVIGATING CRITICAL SUCCESS FACTORS FOR EFFECTIVE I...
 
Manufacturing Process of molasses based distillery ppt.pptx
Manufacturing Process of molasses based distillery ppt.pptxManufacturing Process of molasses based distillery ppt.pptx
Manufacturing Process of molasses based distillery ppt.pptx
 
Computational Engineering IITH Presentation
Computational Engineering IITH PresentationComputational Engineering IITH Presentation
Computational Engineering IITH Presentation
 
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODELDEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
DEEP LEARNING FOR SMART GRID INTRUSION DETECTION: A HYBRID CNN-LSTM-BASED MODEL
 
BPV-GUI-01-Guide-for-ASME-Review-Teams-(General)-10-10-2023.pdf
BPV-GUI-01-Guide-for-ASME-Review-Teams-(General)-10-10-2023.pdfBPV-GUI-01-Guide-for-ASME-Review-Teams-(General)-10-10-2023.pdf
BPV-GUI-01-Guide-for-ASME-Review-Teams-(General)-10-10-2023.pdf
 
KuberTENes Birthday Bash Guadalajara - K8sGPT first impressions
KuberTENes Birthday Bash Guadalajara - K8sGPT first impressionsKuberTENes Birthday Bash Guadalajara - K8sGPT first impressions
KuberTENes Birthday Bash Guadalajara - K8sGPT first impressions
 
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming PipelinesHarnessing WebAssembly for Real-time Stateless Streaming Pipelines
Harnessing WebAssembly for Real-time Stateless Streaming Pipelines
 
Hematology Analyzer Machine - Complete Blood Count
Hematology Analyzer Machine - Complete Blood CountHematology Analyzer Machine - Complete Blood Count
Hematology Analyzer Machine - Complete Blood Count
 
Properties Railway Sleepers and Test.pptx
Properties Railway Sleepers and Test.pptxProperties Railway Sleepers and Test.pptx
Properties Railway Sleepers and Test.pptx
 
spirit beverages ppt without graphics.pptx
spirit beverages ppt without graphics.pptxspirit beverages ppt without graphics.pptx
spirit beverages ppt without graphics.pptx
 
132/33KV substation case study Presentation
132/33KV substation case study Presentation132/33KV substation case study Presentation
132/33KV substation case study Presentation
 

Ruslan Shevchenko - Property based testing

  • 1. — Ruslan Shevchenko [iov42; codespace] // @rssh1, ruslan@shevchenko.kiev.ua PROPERTY BASED TESTING ” “
  • 2. WHAT IS IT ? PROPERTY BASED TESTING Eng: property властивість свойство Other : example приклад пример for all x: Int x < (x+1) 3 < (3 + 1)
  • 3. SHOW ME THE CODE/SCALA import org.scalacheck.Properties import org.scalacheck.Prop.forAll object IntSpecification extends Properties("Int") { property("x < x+1") = forAll{ (x:Int) => x < x+1 } }
  • 4. SHOW ME THE CODE/SCALA import org.scalacheck.Properties import org.scalacheck.Prop.forAll object IntSpecification extends Properties("Int") { property(“x < x+1") = forAll{ (x:Int) => x < x+1 } } [info] ! Int.x > x+1: Falsified after 3 passed tests. [info] > ARG_0: 2147483647 [info] Failed: Total 1, Failed 1, Errors 0, Passed 0 [error] Failed tests: [error] IntSpecification [error] (test:test) sbt.TestsFailedException: Tests unsuccessfu
  • 5. SHOW ME THE CODE/JAVA ….. @RunWith(JUnitQuickcheck.class) public class IntPropertyTest { @Property public void xLessIncr(int x) { assert(x < x+1); } }
  • 6. SHOW ME THE CODE/JAVA ….. @RunWith(JUnitQuickcheck.class) public class IntPropertyTest { @Property public void xLessIncr(int x) { assert(x < x+1); } } [info] Running com.github.rssh.IntPropertyTest Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.75 sec // Problem not found. // Generation of random values are differ ;)
  • 7. SHOW ME THE CODE/JAVASCRIPT var jsc = require("jsverify") describe('double ceiling', function() { it ('x < x + 1e-15',function() { expect( jsc.checkForall(jsc.number,function(x){ return x < x+1e-15 }) ).toBe(true) }); }); // explore the limits of the floating point ceiling.
  • 8. SHOW ME THE CODE/JAVASCRIPT var jsc = require("jsverify") describe('double ceiling', function() { it ('x < x + 1e-15',function() { expect( jsc.checkForall(jsc.number,function(x){ return x < x+1e-15 }) ).toBe(true) }); }); // explore the limits of the floating point ceiling. Failed after 8 tests and 1 shrinks. rngState: 0879d03f2e184b6c5a; Counterexample: 19.7693584933877; [ 19.7693584933877 ] F Failures: 1) double ceiling x < x + 1e-15 1.1) Expected Object({ counterexample: [ 19.7693584933877 ], counterexamplestr: '19.7693584933877', shrinks: 1, exc: false, tests: 8, rngState: '0879d03f2e184b6c5a' }) to be true.
  • 9. MONKEY TESTING PROPERTY-BASED TESTING We generate random values. Pass one to our function or service to test Expect, that result of this function satisfy some properties laws (classical property-based testing); crash The Infinite Monkey Theorem
  • 10. HISTORY QuickCheck. Haskell. 1999 • https://en.wikipedia.org/wiki/QuickCheck • http://www.cse.chalmers.se/~rjmh/QuickCheck/ John Hughes founded QuivQ • commercial version of QuickCheck for Erlang • extensions/interfaces for • C/C++ • WebServices • Industry specific standards … (appl. Volvo cars)
  • 11. IMPLEMENTATIONS FOR POPULAR LANGUAGES Scala: scalacheck http://www.scalacheck.org Java: junit-quickcheck http://pholser.github.io/junit-quickcheck/ JavaScript: jsverify http://jsverify.github.io/ Python: Hypothesis http://hypothesis.works/ PHP: eris; phpquickchek https://github.com/giorgiosironi/eris https://github.com/steos/php-quickcheck …………………… practically any language.
  • 12. TYPICAL USAGE Thinks and describe laws (dependencies between input & output) Tune input generators Check such properties in output Demos: Programming tasks (sorting, serialization) Form validation State checks
  • 13. LET’S CHECK SORTED ALGORITHM def sort(x:IndexedSeq[T]):IndexedSeq[T] invariant: length definition of sorted: idempotency:
  • 14. LET’S CHECK SORTED ALGORITHM def sort(x:Vector[T]): Vector[T] invariant: length property(“sorted array must the same size of origin”) = forAll{ (x: Vector[Int]) => x.size == sort(x).size }
  • 15. LET’S CHECK SORTED ALGORITHM We need to generate: • n - max number of entries • sorted vector of the length n • i < n • j: i < j < n
  • 16. CUSTOM GENERATOR val orderedVectorGen = for { n <- Gen.choose(2,100) x <- Gen.containerOfN[Vector,Int] i <- Gen.choose(0,n-2) j <- Gen.choose(i,n-1) } yield (n, sort(x), i, j)
  • 17. CUSTOM GENERATOR val orderedVectorGen = for { n <- Gen.choose(2,100) x <- Gen.containerOfN[Vector,Int] i <- Gen.choose(0,n-2) j <- Gen.choose(i,n-1) } yield (n, sort(x), i, j) property(“sorted array must reflect ordered indexes”) = forAll(orderedVectorGen){ case (n, x, i, j) => x(i) <= x(j) } property test can serve as documentation for input and output.
  • 18. LAWS Ordering[T]: • reflexivity: forall{ x:T => x <= x} • anitsimmetry: forall{ x:T, y:T => x <= y & y <= x ==> x==y } • transitivity: • forall{ x:T, y:T, z: T => x <= y & y <= z ==> x <= z } // Laws = set of properties. // Can be used as specification for type argument.
  • 19. EXAMPLE: DATA VALIDATION case class Subsriber(id:Long, // must be unique firstName: String, // max 20 sym, no spaces. lastName:String // max 20 sym, no space ) val correctSubscriberGen = for { id <- arbitrary[Long] firstName <- Gen.alphaStr suchThat (_.length <= FIRST_NAME_LEN) lastName <- Gen.alphaStr suchThat (_.length <= LAST_NAME_LEN) } yield Subscriber(id,firstName, lastName) val incorrectSubscriberGen = for { id <- arbitrary[Long] firstName <- incorrectNameGen(FIRST_NAME_LEN) ………
  • 20. GENERAL QUESTIONS Is property-based testing useful itself ? — definitely yes. — force to think hight-level Are we steel need example-based testing ? — probably yes. • What to manual construct thing, which • explore some type of bug. • Dimension Problem. • N probes can be very tiny part.
  • 21. QUESTIONS ? THANKS FOR LISTENING Full example code is available on github: https://github.com/rssh/property-based-testing-talk @rssh1 Ruslan Shevchenko <ruslan@shevchenko.kiev.ua>