Testing and test-driven development