Colin,

I think the points you bring up here are very interesting, and reflect ideas 
that I have not yet been able to formulate. 

I certainly would think there is enough "stuff" in here for a talk, and also 
some ideas into how to grnerative test "bread and butter" code, as can I, and 
if so, how, generative-test my REST-api. Can I do it in some more meaningful 
way than just checking for a non 5xx status code?  How do I property base test 
my functions which take my domain "objects". Do I have to write generators for 
them, and am I then ending up in the same pain as I do writing mocks in Java? I 
know that I can compose generators, but I might end up needing users with e.g. 
genuine Norwegian addresses. 

These are my questions wrt generative testing in my world. 

Erik. 
-- 
i farta

> Den 22. okt. 2016 kl. 23.48 skrev Colin Fleming <colin.mailingl...@gmail.com>:
> 
> Yes, that is a major selling point. Generative testing is really cool, and 
> you should definitely not be disheartened - it's a tool like any other, with 
> its strong points and weak points (like static typing, too). It's definitely 
> not universally applicable, and even more than standard testing, it requires 
> you to write your code keeping in mind how you will test it. It happens that 
> in my case I believe that static typing is a better fit, but that doesn't 
> mean that it won't work well for your use case. You should definitely be 
> excited to try it and see - if it works well in your case, it's pretty 
> magical.
> 
> The limitation in my case is that generative testing works best when testing 
> pure functions. Because so much of my system involves calls out to a huge 
> mutable blob of Java, it doesn't work well for me. 
> 
> i actually don't have a lot of experience with generative testing, but here 
> are two examples from the little experience I have, one which worked well and 
> one which didn't. 
> 
> The one that worked well was testing a binary object serialiser. This was in 
> Java several years ago, so a lot of the complexity in my code was writing 
> generators - spec (via test.check) really helps with this and it would be 
> relatively trivial to achieve nowadays what took me a long time back then. 
> But once I had a generator which generated random objects, I then just ran a 
> bunch of tests which generated an object, serialised it, deserialised the 
> resulting bytes, and checked that the deserialised object was equal to the 
> original one. It was really useful, and caught a whole lot of edge case bugs 
> I would never have caught otherwise. Things to note are that the 
> serialisation and deserialisation are pure functions, and the success 
> condition is very easy to define.
> 
> One that I have not yet found a good way to test generatively is the paredit 
> code in Cursive, which occasionally suffers from edge case bugs. I'd also 
> like to test code refactorings. However here, the generation is much much 
> harder (I'd have to generate valid code in some way) and then I'd have to 
> randomly refactor it and somehow check that the refactored version is 
> equivalent. Here both the generation and the success condition are extremely 
> hard to define, and the risk is that in your success condition you really 
> just end up reimplementing your original algorithm and then what you're 
> testing is actually that those two algorithms are the same, not necessarily 
> that they do what you expect. I was lucky enough to talk at length to Thomas 
> Arts at Curry On last year and I asked him about this. He had done something 
> similar for Erlang code, and had a very complicated code generator. They 
> generated code that produced some output, then randomly refactored it, 
> compiled both versions, ran them both and checked that the output was the 
> same. His conclusion was that in that case, the tests weren't worth it - they 
> took forever to run and were very brittle.
> 
>> On 22 October 2016 at 02:54, Daniel <doubleagen...@gmail.com> wrote:
>> > In this sort of situation, a static type system which provides universal 
>> > guarantees (this value can never be null) is more useful than a contract 
>> > system (no null values have been seen yet for the test inputs you've 
>> > tried). There's simply no way I can test all combinations, or reproduce 
>> > all combinations that users might have running.
>> 
>> Isn't a major selling point of generative testing was that it creates loads 
>> of unique cases you can't invent on your own?
>> 
>> You don't trust it to do that? Is that from personal experience?  Genuinely 
>> curious because I am a little excited about using it in a project at work 
>> but this is disheartening.
>> 
>> --
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clojure@googlegroups.com
>> Note that posts from new members are moderated - please be patient with your 
>> first post.
>> To unsubscribe from this group, send email to
>> clojure+unsubscr...@googlegroups.com
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> ---
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
> 
> -- 
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> --- 
> You received this message because you are subscribed to the Google Groups 
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to