[erlang-questions] QuickCheck
Edmond Begumisa
ebegumisa@REDACTED
Sun May 22 20:12:05 CEST 2011
On Mon, 23 May 2011 03:57:15 +1000, Edmond Begumisa
<ebegumisa@REDACTED> wrote:
> On Sun, 22 May 2011 16:15:59 +1000, Anthony Molinaro
> <anthonym@REDACTED> wrote:
>
>>
>> On Sun, May 22, 2011 at 08:01:09AM +1000, Edmond Begumisa wrote:
>>> I'm a QuickCheck noob trying out PropEr. Actually, I'm very
>>> embarrassed to admit that I'm very new to formal testing in general
>>> (I've always done things in the ad-hoc way for longer than I care to
>>> admit). I only confess to this coz I probably wouldn't get away with
>>> lying about it on *this* list when I start asking stupid questions!
>>
>> I'm mostly a noob myself, but I have used both quickcheck and proper
>> and figured anything helps when you're just learning these tools.
>>
>>> Anyways, I'm having A LOT of trouble getting started. The initial
>>> inertia just isn't there. Even with the available documentation from
>>> both QuviQ and PropEr. I look at my code and don't know where to
>>> begin writing tests for it! A sad state of affairs.
>>
>> The one thing to remember is that there are many types of testing
>> and quickcheck/proper focus on randomized testing of properties.
>> Getting you head around testing in that fashion can be a challenge,
>> it forces you to think about generating random data for which you
>> know the answer. Quickcheck and proper excel at problems where
>> you have a function and it's reverse (like encode and decode), because
>> the property of decode (encode (Data)) == Data is pretty easy to setup,
>> you just supply random Data and let it run for a few hundred thousand
>> tests. For other functions where you don't have an inverse the trick
>> is knowing the answer when you give it random data (at least this
>> is what I've found with my limited use of these tools).
>>
>> Other testing frameworks like eunit or common_test may be more of
>> what you are looking for, but it really depends on what you are
>> testing. If you have a general description of the code, I might
>> be able to make some suggestions, but its hard to say without
>> know what you are trying to test
>
> Firstly, I have a few general purpose libraries. Mainly extensions to
> existing standard libraries like my_lists.erl, my_binaries.erl,
> my_proplists.erl, etc. Auto-testing these is probably not that
> important. But my guess is it would be a good place to start for
> simplicity.
>
> Secondly, I also have a TCP socket application that's designed to have
> pluggable codecs. The idea being I can just plugin a module called
> http_codec.beam, and the socket server starts doing http. Then I can
> plugin websocket_codec.beam on top of that and it starts doing websocks
> over http. Then I can remove those and plugin ubf_codec.beam, and it
> starts doing UBF over TCP. You get the picture.
>
> The socket server is the usual multi-acceptor (gen_server), spawn new
> connections (gen_fsm) setup. The codecs are just plain modules with
> decode/encode functions that continue from where they last left off. I
> really want to test this coz it's at the center of all the apps I'm
> developing and frequently misbehaves in annoying little ways that I
> should have foreseen but don't realise til it actually happens (little
> perfect storms creep up on me.) I figure automated testing is they only
> solution.
And I also figured I could use QuickCheck/PropEr to create these scenarios
that I can't seem to foresee!
- Edmond -
>
> Thirdly, most of the products I'm working on make heavy use of state
> machines that sit on top of the socket toolkit described above. These
> are application specific and need testing too. Oh, and these interact
> frequently with CouchDB.
>
> That's the basic picture. I want to start testing ALL of this :P Any
> more tips would be great.
>
> Thanks.
>
> - Edmond -
>
>>
>>> I think I just need a few good tutorials. Can anyone recommend some
>>> QuickCheck resources to get me going that they've actually
>>> successfully used? Do I need to first start out with more
>>> "traditional" testing tools first before even attempting QuickCheck?
>>
>> There are a few nice examples here
>>
>> http://www.trapexit.org/Category:QuickCheck
>>
>> There are also a few videos and other things if you search for
>> erlang quickcheck tutorial on your favorite search engine.
>>
>> Hope that helps,
>>
>> -Anthony
>>
>>
>
>
--
Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
More information about the erlang-questions
mailing list