Kind of ambitious title right there but still I honestly think that the following picture (originally presented by Brian Marick) contains everything about testing.
Lets first look at the four areas: Unit, Acceptance, Usability & Exploratory and Property testing.
Unit testing supports programmers to design their code. Unit tests are automated (usually with help of some XUnit framework) and they closer to tech than business. Based on my experience it is not common that companies actually have unit tests written, especially not Test-First fashion. In Huitale we implement JUnit tests in Test-First way (... I do not use TDD here as it is a misleading term).
Acceptance testing helps to design the product (if done in agile way). What I've seen is that most companies still have "testing phase" in their process, where some testers manually go trough the "customer acceptance" tests. It's a shame cause nowdays there are lots of acceptance testing frameworks helping out to automate the acceptance testing and getting it as part of your (expecting you have it) continuous integration cycle. In Huitale we have managed to automate all acceptance tests (for the user stories) with Selenium - eventhough Ajax has been a bit painful to test and our build cycle has come pretty long due to these tests (they are executed on every build, every 2 hours).
Usability & Exploratory testing are manual and will be manual in the future. You simply cannot automate usability evaluation nor thoughtful tester. We have practiced setting up the UI experts together with scrum team and it has been challenging. I may blog about our experiences in near future.
The challenge of property testing is often attacked with silver bullet-projects that try to fully automate every bit of the process. I have never seen such an effort to succeed, maybe cause the analysis involved cannot simply be automated :) What you usually need is just tools to help you with the testing, but still you need the analytical mind of an engineer to look into the results, tweak the variables involved etc. Some simple checks naturally can be automated, but one should try to proceed step-by-step when building such solution.
Anyway, I hope that you got something out of this - at least it clarified my mind. Sometimes you know all the stuff beforehand but it still is not crystal clear until you get it nailed down into one simple picture. If you want to read more about the picture, see Brian's blog