Art of Unit Testing

Noel Rappin noel.rappin at openwave.com
Fri Aug 17 22:18:50 EDT 2001


Disclaimer: I'm not a true XP expert, but I believe in the value of test 
first design....

>         I have read about, and downloaded, some of the Python unit
>testing frameworks available, but I have never yet been able to
>actually use any one of them to implement actual _tests_. I wish to
>use unit tests(at least, the kind of unit tests used in Extreme
>Programming(I think))because one of the claims of aficionados of
>this approach is that it helps them get over the problem of how to
>make programs that can't be kept in mind as a whole. This amazing
>feat is done, say the aficionados, by writing the unit tests out before
>the code.  I have both great hope and significant doubts about this
>method.

To be more specific, when doing test-first design in the XP way, you don't 
write _all_ the tests before you code.  You write one test, code the 
simplest thing that could possibly work, then write another test.  You 
continue to go back and forth between tests and code, refactoring the code 
mercilessly to keep it simple as you add new tests.  By following this 
method, your code is always a) working, b) as simple as possible.  When 
defects are found, write a test that exposes the defect and fix the code -- 
you'll have a quick guarantee that you haven't broken any other test.

Now, the art of this is, of course, in the exact definitions of "simple", 
"working", and "refactoring", and "test everything".  The goal here is not 
complete testing in the formal sense, but enough testing to give you 
confidence that the code works.  Still, my experience is that you do tend 
to end up with clear, simple, and elegant code using this method.

>         I hope, as I said above, that this method will allow me to finish
>various projects I have started and had to abandon because I got
>stuck in binds I could not specifically understand or find out how to
>resolve.  My doubts lie with the thought that it is very difficult to
>figure out what the requirements of a program will be before you
>write the program, and will this method make programming into a
>tiresome, irritating task, even if I can write these bigger programs?

Happily, using XP and test-first, you don't need to know what the 
requirements will be before you write it.  In fact, the XP processes are 
based on the assumption that you won't know what all the requirements are 
before you start, or that they will change during coding.  The goals of 
test-first are to keep the code in a state where it is easily modified to 
accommodate change and to give you the test suite so that you can make 
changes confident that you haven't broken anything without realizing it.

My experience is that, far from making programing tiresome and irritating, 
test-first literally rekindled my enjoyment of programming, because of the 
constant feedback.  Especially at the beginning of a project, it's nice to 
have feedback that you are moving forward and doing things well, even 
before there is much in the way of visible results.  I've found that 
programming test-first has reduced long debug sessions to about nil, and 
that writing tests is far less tiresome than long debug sessions.

>         My question to you all is this:  Do you have any suggestions on
>how to deal with learning to use unit testing in this way, or examples
>of setting up games with this kind of unit testing, or GUI programs?
>Really, any thoughts or comments you might have about this form of
>unit testing, or how to learn to use it, would be very appreciated.


Other people have posted examples.  You can also try www.xprogramming.com 
and www.objectmentor.com for some more examples of test-first (not in 
Python, unfortunately).  There's a Yahoo Group for XP that will answer your 
questions as well.

Hope this helps,

Noel

-------------
Noel Rappin, Principal Software Engineer, Internal Development
Openwave <Noel.Rappin at openwave.com>

The contents of this email message do not necessarily reflect the opinions 
or programming practices of Openwave Systems.







More information about the Python-list mailing list