Sunday, August 29, 2004

Unit Tests (Design tests) or not...

When do you use unit tests - tests that test your design vs. tests that test the functionality of the app.

Unit test have good and bad aspects to them. The good stuff:
1) They encourage you to understand what your building at a microscopic level
2) They help with defect triangulation - a particular test should fail when a piece inside the system fails.
3) They encourage better design
4) They can cause you to write fewer functional tests - I find this is especially true around error handling, not sure about "calculation" business logic.

They have bad aspects:
1) They cause your design to be more rigid. Its harder to throw away design when it has a bunch of unit tests, because you must bring all the tests up to date as well. Some may be relevant and some may not.
2) They are far more fragile - I find myself maintaining them far more than the acceptance tests, often for things that are not interesting (renaming a variable/Constant).

In summary, we are experimenting with implementing them AFTER the design has solidified.

1) Get your functional test working - brute force (no unit tests, simplest thing possible)
2) Get some moretests working - brute force (no unit tests, simplest thing possible)
3) REDESIGN and Unit test once the design has become clear from the former examples.
4) Unit test when things get interesting


Post a Comment

<< Home