Ward Cunningham is one of the great innovators of our time. He invented the wiki. He was on the first Extreme Programming team. He was instrumental in the early days of the Patterns movement. He hosted the Portland Patterns Repository, which also became the de facto home of XP (where the ideas came together). He plays with robots. He is inventing a federated wiki.
Ward also introduced me to one of the most important phrases in pair programming. “I have an alternate idea. But let’s keep following yours. I want to see how it turns out. We can always come back to mine if you’re interested or we run into trouble.”
Of course, when Ward says that, my idea is usually within a couple of minutes of running into trouble.
I asked Ward the same question that I asked everyone else:
What are the characteristics of a good test suite?
A test suite should provide a return on the investment required to create it. The return can be in the form of insurance (protection from losses) or productivity (accelerated development). The return on investment can be improved by lowering the cost of testing through improved methods, tools and frameworks. With integrated tests it is possible to simultaneously reduce the costs of test and increase development productivity.
As a developer, I am most interested in test suites that improve my development productivity. The characteristics I admire include:
- Straightforward — Tests are easy to create, easy to understand when they fail, and easy to assess assumptions present in the tests.
- Reliable — A suite has a high probability of detecting mistakes and a low probability of raising false alarms
- Fast — Testing fits easily into an interactive development workflow with alerts returned before development activity advances to the next task.
- Durable — Tests remain valuable throughout the product lifetime and serve the development of replacement products.
Love (or hate) that answer? Want to see other answers?