As I mentioned last time, I came back from the ACCU conference with a bunch of notes and a lot of thoughts. Recording them in this blog seems like a good way of remembering and sharing these thoughts.
Last time I referred to the Great TDD debate. At the conference Mary Poppendieck reminded us of the key principle behind TDD and other forms of unit (especially automated) testing when she quoted from one of the original Toyota sources:
- Testing to find defects is waste: the defects should not be there in the first place so any attempt to find them is waste.
- Testing to prevent defects is essential: defects slip in, we should catch them as soon as possible so create systems with tests that prevent defects.
Hopefully it should be obvious were TDD fits it: TDD is there to prevent defects and reduce waste. However, testing later in the cycle, e.g. system test, is waste and although it may be necessary right now we want to get away from faults, testing and waste.
On the face of it this is bad news for software testers. If we start testing to prevent waste rather than find waste then they are out of a job. Well I have three reassuring thoughts for software testers, they will not be unemployed anytime soon because:
- Few organizations can actually implement this principle, some will always need testers.
- We have a lot of code out there where nobody prevented the defeats and therefore needs testing.
- Testing itself is an activity that can add value to products – as Oracle considered last year.
Also, most of the software test managers I have ever worked with have been keen to point out that they would rather conduct Quality Assurance than Test. Too often these activities are lumped together but when you think about it they are very different.
So, in the short term testers have plenty of work, in the long term their future is in quality assurance – a more value add activity.
Now at this point a lot of people tell me I’m an idealist. After all, everyone knows software is buggy, has always been buggy, and always will be buggy. I remember being taught at University how every piece of software contained an infinite number of bugs.
I asked Mary Poppendieck about this, her answer was basically: you get what you expect, if you expect to get bugs then you will.
Well, maybe I am an idealist. But what is wrong with wanting software without bugs? What is wrong with setting my sights higher?