Re: A worked example of TDD in D, with some personal ruminations on my own style, and notes on the D language..

Osias Jota <[email protected]> Mon, 6 Jan 2014 15:13:04 -0200
Newsgroups gmane.comp.programming.test-driven-development
Message-ID <CAL1TF4Ns+sWdgxN+OcQjfmO9PN9Npe00_3VCRn4PbxaFCWG-MA@mail.gmail.com>
#likedthispost


On Sun, Dec 29, 2013 at 6:40 PM, John Carter <[email protected]>wrote:

>
>
> So I have being doing TDD for years now.
>
> But I started noting I tend not to do it exactly "By The Book".
>
> So as an exercise I tried going back to doing it...
>
> * Very fine grained steps.
> * Small change so Test fails - commit.
> * Small change so Test passes - commit.
> * Refactor so test passes - Commit.
>
> As small as I could.
>
>  Oh, and just for the fun of it, I'm learning the D language, so I did it
> in D.
>
> So here is the result, complete with a blow-by-blow Mercurial Repository
> of every step.
>
>
> https://bitbucket.org/JohnCarter/roman/src/47ab019ccdf7a4d5d64c1f10ffc7418e67d6f916/roman.d?at=default
>
> * Conclusions from the exercise.*
>
>    1. Very fine grained steps resulted in fewer bugs and fewer backtracks.
>    2. Very fine grained steps resulted in better factored code.
>    3. Watching others do the same exercise led me to the attitude "adding
>    more test cases is Bad". (Slower, hard to maintain tests, more lines of
>    code)
>    4. Very fine grained steps slowed me down compared to my more usual
>    somewhat loose style.
>    5. *Thoughtfully adding Provocative test cases in the order of "What I
>    need to Handle Next" is Very Very Good.*
>    6. *Replacing "Fine Grained Steps" with, whenever stuck, pull out a
>    smaller  chunk and TDD that first (with Provocative test cases) works Very
>    Very  Well.*
>
>
> Bottom Line?
> In future I will be doing...
>
>    1. Thoughtfully choosing a minimal number of provocative test cases in
>    the order that challenges a single new behaviour, ie. A test case that
>    requires a single additional behaviour in the code.
>    2. I will take the largest steps I can where I can go from test fail
>    to test pass in a single change.
>    3. Whenever I misjudged and take too large a step, I will factor out
>    a  smaller function and test and develop that first via the same process.
>    4. Factoring out works best like this...
>       1. Revert to last passing state, leaving failing test commented out.
>       2. Copy pasta the code you wish to factor / enhance into a small
>       function leaving original function untouched.
>       3. Get tests for new function to pass.
>       4. Wire new function into parent cleaning out original copy.
>       5. Get tests to pass.
>       6. Reenable commented out test... hopefully it passes now.
>
>
> *What do I mean by provocative test cases?*
>
> For example, when converting Roman numerals.
>
>
> "I" is provocative.
>
> "II" is provocative.
>
> "III" is NOT provocative, it merely is extra Lines of Code (and hence a
> liability).
>
> "IV" is provocative, but a bad choice for next test case as it adds two
> new behaviours at once.
>
> "V" is provocative and adds a single new behaviour.
>
> "IV" is now provocative and adds only a single new behaviour.
>
>
> Conclusions about D.
>
>  I love it.
>
>  It is C / C++ with the worst stuff removed, and the best stuff stolen
> from it's competitors.
>
>  If you are serious about industrial grade, high quality, defect free,
> efficient programming, you urgently need to be looking at D as your next
> language.
>
>  Sigh! Unicode.
>
>  That's not D's fault.
>
>  D handles Unicode remarkably smoothly, but ye ancient 7bit ASCII is
> always going to be faster and conceptually easier than variable length code
> point UTF8.
>
>  It took a bit of time and effort to get my head around D's template
> system (richer, safer, better than C++)
>
>  It took even more time to get my head around Ranges, (again, richer, more
> flexible, safer than C++ iterators, more efficient than generators,
> coroutines or enumerators.)
>
>  The choices D has made are rich in very powerful, very efficient
> implications.
>
> Possibly the most striking is Compile Time Function Evaluation.
>
> If it can be evaluated at compile time.... in D it will be.
>
> And that is startling powerful.
>
>
> --
> John Carter
> Phone : (64)(3) 358 6639
> Tait Electronics
> PO Box 1645 Christchurch
> New Zealand
>
>
> ------------------------------
> This email, including any attachments, is only for the intended recipient.
> It is subject to copyright, is confidential and may be the subject of legal
> or other privilege, none of which is waived or lost by reason of this
> transmission.
> If you are not an intended recipient, you may not use, disseminate,
> distribute or reproduce such email, any attachments, or any part thereof.
> If you have received a message in error, please notify the sender
> immediately and erase all copies of the message and any attachments.
> Unfortunately, we cannot warrant that the email has not been altered or
> corrupted during transmission nor can we guarantee that any email or any
> attachments are free from computer viruses or other conditions which may
> damage or interfere with recipient data, hardware or software. The
> recipient relies upon its own procedures and assumes all risk of use and of
> opening any attachments.
> ------------------------------
>
>  
>



-- 
Osias, o Osias