I wish more people would understand (and the article alludes to it) that testing is only one of the three general methods to achieve software quality (lack of defects), the other two being:
- Abstractions - preventing bugs by having a proper language in which to express the ideas
- Assertions - making sure that certain assumptions are satisfied during the actual execution of the code, AKA defensive programming
And in particular, unit testing is IMHO a rather weak method of testing, compared to property-based or integration testing. There is this famous quote "bad programmers worry about the code, good programmers worry about the data". Similarly, I believe we should spend more time testing the assumptions that we have about data (can this value be 0?) rather than testing the logic of the code under the same and possibly wrong (or unstated) assumptions.