"I believe one contributing factor is a matter of perspective, that a great tester approaches software in a different way than a developer."
I agree! And I think that's one of the primary factors which allows testers to add significant value.
Here's something I wrote a while back:
In my experience, developers tend to be optimistic folks, while testers tend to be more pessimistic.
- Developers are creators, with a natural optimism about making new things and solving difficult problems.
- Testers are fault finders, with a necessary skepticism and doubt.
- If developers are the yin, testers are the yang.
I believe this is a good thing, a sort of checks-and-balances tension that makes for better software.
But it does lead to some interesting contrasts...
Optimistic Developer: The glass is half full
Pessimistic Tester: The glass is twice as big as required
Optimistic Developer: This code hasn't yet been tested. It's not known if it has any bugs
Pessimistic Tester: This code hasn't yet been tested. It's not known if it actually works
Optimistic Developer: We are 90% done
Pessimistic Tester: We don't know when we'll be done, if ever
Optimistic Developer: We will refactor the code to make it better
Pessimistic Tester: They are throwing out the working code and replacing it with an unknown quantity
Optimistic Developer: I only changed one line of code
Pessimistic Tester: The entire system must be retested
Optimistic Developer: The code is the design
Pessimistic Tester: There is no design
Optimistic Developer: We'll fix those bugs later, when we have time
Pessimistic Tester: We never have enough time to fix the bugs
Optimistic Developer: This build is feature complete
Pessimistic Tester: The features exist; some are completely broken
Optimistic Developer: Anything is possible, given enough time
Pessimistic Tester: Everything has flaws, and given enough time I can prove it
Optimistic Developer: Of course it will work
Pessimistic Tester: It might work, but probably won't
Optimistic Developer: One last bug fix, and we can ship tomorrow
Pessimistic Tester: Fixing this one bug will likely lead to two more
Optimistic Developer: Stop finding bugs, or we'll never be done
Pessimistic Tester: Stop creating bugs, so I can find them all
Optimistic Developer: There's no need for more tests
Pessimistic Tester: Let's just run a few more tests to be sure
Optimistic Developer: There is no I in TEAM
Pessimistic Tester: We can't spell BUGS without U
Optimistic Developer: That's an "undocumented feature"
Pessimistic Tester: That's a bug
Optimistic Developer: I like to build things
Pessimistic Tester: I like to break things
Optimistic Developer: Sure, we can use the Beta version of this component in Production
Pessimistic Tester: We should wait until version 2.1
Optimistic Developer: Willing to bet that there are no more bugs
Pessimistic Tester: Willing to take that bet
Optimistic Developer: Let's slip these changes in now, because I'm starting my vacation tomorrow
Pessimistic Tester: Let's not
Optimistic Developer: That will never happen in Production
Pessimistic Tester: Never is a long time
Optimistic Developer: It works on my machine
Pessimistic Tester: Perhaps your machine is the only one where it works?
Optimistic Developer: The sun'll come out, tomorrow...
Pessimistic Tester: Raindrops keep fallin' on my head...
Optimistic Developer: I'm a Realist
Pessimistic Tester: I'm a Realist
And here's a slideshow version, in case you need it: