Innovation in software testing and validation has been scarce - certainly in comparison to the constant stream of new languages, design approaches and frameworks that has characterized design and implementation. The techniques employed for the various test and QA activities - unit testing, integration testing, code inspection, UI testing, acceptance testing etc. - seem to have changed little over the years, largely unaffected even by the advent of object-oriented techniques (although classes provided a handy way of grouping unit tests). What about Test Driven Development (TDD) and JUnit? Well yes, unit testing has become more popular and pervasive, but it's still necessary to create unit tests manually in a very familiar way. TDD should have a more fundamental impact, by forcing class design into test-amenable forms, and we'll come back to that.