Think Like a Tester
It is a natural desire to want to protect and defend what we build. If we don’t love our own work, who will?
A developer’s mentality is to create and protect. If we build code well, why would we try to destroy our efforts?
A software tester, however, has no sense of protection. A software tester functions more like a reporter; we are objective seekers of the current state. We have no attachment to a program working well or working poorly. It is what we find; we are observers.
Software testing often asks, what if? Switching from thinking about the positive proof that the code works to a more curious and destructive mentality: what if I try this?
If you want to find the cracks, breaks and vulnerabilities in your code, try to think like a software tester. Let go of your protective instincts. Realize that when you find the weaknesses in a program, you have an opportunity to strengthen and improve the product. Testing is about thinking destructively so that you can construct a better product.
How do you think like a tester if you’re the developer who built the code?
I'm not sure that I can summarize a mentality that has taken me a couple of decades to cultivate; a mentality that is embedded deeply and naturally now that nearly every object and experience I encounter as part of ordinary life, I think with a curious approach continually asking, what if?
It might be best to attempt to disconnect from the feelings of ownership and begin by thinking like a consumer of what you've built. Realize that users don't necessarily know what they're supposed to do and so they naturally make "mistakes," enter unexpected data, exposing software defects in their wake.
To embrace a different mentality, begin by trying to suspend or discard these thoughts:
1. Why would anyone do X?
They might, accept this.
2. But the user isn't supposed to do X.
Forget it; users can do what they want.
3. But it works on my PC.
That's great, but if it doesn't work on other people's PCs or environments, it’s not a usable product.
Use your knowledge to an advantage. As the creator, you know what and where error conditions and messages have been built. Challenge those areas. Software defects often lurk at the boundaries, poke at the boundaries. Then push on the boundaries.
Break past the desire to protect. Be willing to unravel and even destroy. And then like whacking at a piñata with a stick begin to delight in seeing the product unravel. Yes, you've destroyed what you built but now, you can build it even better.