The (Little) QuickCheck Workbook
$7.99
Minimum price
$14.99
Suggested price

The (Little) QuickCheck Workbook

Experience Property-Based Testing in Haskell

About the Book

This is an in-progress book, we've just field-tested the first exercises. We don't know how big it's going to be, we currently guess around 70 to a 100 pages when finished. Get the book, give feedback and influence what it will be :-).

Although the QuickCheck library has been around since 2000, and has more recently been ported to several other languages, we believe more teams could benefit from using it in anger.

We've been doing example based testing since 1999, and believe property-based testing is a valuable and fun addition to our toolbag. Property-based testing also influences our design, and writing this book is a way to explore how our designs are influenced.

Example based approaches like BDD and TDD focus on what changes. Given we have state x, When event y happens we'll have state z.

Property based testing forces you to think about things that stay the same: invariant properties of your code, and forces you to capture these invariants explicitly.

Although the QuickCheck library has been around since 2000, and has more recently been ported to several other languages, we believe more teams could benefit from using it in anger.

We've been doing example based testing since 1999, and believe property-based testing is a valuable and fun addition to our toolbag. Property-based testing also influences our design, and writing this book is a way to explore how our designs are influenced.

Example based approaches like BDD and TDD focus on what changes. Given we have state x, When event y happens we'll have state z.

Property based testing forces you to think about things that stay the same: invariant properties of your code, and forces you to capture these invariants explicitly.

Benefits

  • Understand existing libraries, quickly test a wide range of cases (e.g. numeric types or libraries to represent money) or legacy code.
  • Test validation logic with very good test/code ratio.
  • Test mappings / adapters / marshalling. Properties let us easily exploit symmetries between input and output here.
  • Find pesky corner cases
  • Find out why a regular unit tests sometimes passes, and sometimes doesn't (flickering tests)

How does Property Based Testing work?

  • you define properties - invariants of the system-under-test
  • the property based testing library generate lots of random input data
  • the system under test is run with this input data and the testing library verifies that the invariants hold under all inputs.

There are many implementations of QuickCheck, but the original one is in Haskell. We chose to write this book with Haskell to experience it at the source. Some knowledge of Haskell is required, but not too much - we've tested some of the material at a conference and it seemed to work for people who don't use Haskell in their day job. We'll incorporate your feedback so we can make it as approachable as possible.

Open the book, flex your property-writing muscles, have fun and profit!

About the Author

Willem van den Ende
Willem van den Ende

Willem created his first legacy software aged 16, and has been looking for better ways of developing software since then. He's been doing and teaching Test Driven Development since 2000.

Table of Contents

  • Foreword
    • Work in progress
    • Changelog
    • Known defects
  • What is Property Based Testing?
    • Benefits
    • Key concepts
    • I want this in my favorite language!
  • Getting Started
    • Before this chapter you need to…
    • After this section you will…
    • Let’s go
  • Debugging {#sec:debugging}
    • Using standard haskell debugging
    • Playing with the number of test cases
    • Expecting failure
    • TODO explain use of sample to see what data gets generated.
    • Running only the failing property
  • Basic generators and Properties - Menu Sorting
    • Menu Sorting - What is in a String?
    • Sorting with words
    • Sorting and sampling food records
  • Modelling Money
    • Getting started
    • Currency Properties
    • Implement behaviour for Money
    • Exercise: Money allocation
    • Exercise: Converting from string
    • Reflection
  • A suite of properties
  • A vending machine with a coin box
    • Getting started
    • Mutating state: doing checkouts
    • Inserting coins
    • Possible next steps
  • Legacy code - The Gilded Rose Kata
    • Exercise
    • TODO
    • What did you learn?
  • Chapters we’ll write if you want us to
    • Worked through examples for each exercise
    • Lazyness to the max - Auto-generalize your code and properties with quickspec
    • Testing concurrency
    • Specify a DSL by example
    • Legacy code and coverage
    • Testing with State - REST APis
    • Using QuickCheck for end-to-end tests with Selenium Webdriver
  • Useful reading for QuickCheck
    • Original papers
    • Original tutorial and API Docs
    • Integratiion with other test frameworks
    • Hspec
    • Tasty
    • Up and downsides of both
  • Things to explore
    • Reusing properties across typeclasses
    • Using Property based tests for stateful applications
    • Testing legacy code
  • Essays including QuickCheck as part of a wider discussion
  • Appendix - From the cutting room floor
    • A note about test oracles
  • References

The Leanpub 60 Day 100% Happiness Guarantee

Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.

Now, this is technically risky for us, since you'll have the book or course files either way. But we're so confident in our products and services, and in our authors and readers, that we're happy to offer a full money back guarantee for everything we sell.

You can only find out how good something is by trying it, and because of our 100% money back guarantee there's literally no risk to do so!

So, there's no reason not to click the Add to Cart button, is there?

See full terms...

Earn $8 on a $10 Purchase, and $16 on a $20 Purchase

We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book for $20, you'll earn $80,000.

(Yes, some authors have already earned much more than that on Leanpub.)

In fact, authors have earnedover $14 millionwriting, publishing and selling on Leanpub.

Learn more about writing on Leanpub

Free Updates. DRM Free.

If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).

Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.

Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.

Learn more about Leanpub's ebook formats and where to read them

Write and Publish on Leanpub

You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!

Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.

Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.

Learn more about writing on Leanpub