[Tutor] designing POOP

Kent Johnson kent37 at tds.net
Fri Feb 8 13:00:36 CET 2008


Alan Gauld wrote:

> Unit tests and TDD is not a design technique per se.
> It is definitely not a technique for designing OOP programs
> its a programming technique that makes code more reliable
> (whether OOP or not).
> 
> Where it does help in design is by focussing attention
> on how a class (or function) should behave from the consumers
> perspective.

I agree that TDD is not a design technique, but it does strongly 
influence design by introducing testability as a design requirement. TDD 
strongly encourages loose coupling and reusability.
- loose coupling because classes and functions that depend on many other 
classes/functions/modules are harder to test
- reusability because of the loose coupling and because any code that 
has unit tests already has two clients - the production code and the tests.

I like to say, no code is reusable until it has been reused. Although a 
bit of an overstatement, there is a lot of truth in it. It is very hard 
to anticipate how a bit of code might be reused without actual reuse. 
TDD provides an artificial second use which promotes reusability.

TDD also promotes incremental development where the design evolves to 
meet current requirements. This is sometimes called Test-Driven Design:
http://www.agiledata.org/essays/tdd.html
http://www.salientblue.com/blog/?p=10

So TD development can be part of a process that includes design.

Kent


More information about the Tutor mailing list