Things have progressed since then!
The recommended way is now a variant of Test early, test often mixed with Iterate - either XP, Agile or perhaps some form of RUP (for the BSDM fans) or whatever the current name is.
Nowadays you prototype, testing as you go along, releasing incrementally and refactoring when needed, all in an iterative way. All this requires a strong test-suite, which is buld preferebly before development. Testing is a lifelong process, and the testsuite keeps growing - often it is larger than the application - but it keeps everyone happy, as we all know that the system is working as expected.