If you ask me, I'll tell you a great tester
Is devious
A great tester has a streak of deviousness. Anyone can follow the
lists of test cases that abundantly fill most books on testing. A great
tester can move beyond these lists and dream up an endless series of gnarly
methods for attacking the program. A great tester is described by
developers as "sick" and "demented".
Is curious
A great tester is interested by everything. A great tester wants to
understand why everything works that way it does. The best (or worst,
depending on your point of view) bugs are a result of interaction between two
pieces of software (applications, modules, components, whatever). A great
tester knows that understanding how something works leads directly to
understanding how that something interacts with another something, which
interaction leads directly to bugs. A great tester manifests this
curiosity in every aspect of life: how does marketing work? How are
construction cranes built? Why do they add rebar to concrete? How
are crayons made? A great tester's curiosity knows no bounds.
Is excited by bugs
A great tester thinks bugs are cool. A great tester shows up in a
developer's office on a regular basis with a big grin eager to show off the latest
nifty keen horridly awful bug that the tester found in the developer's
code. A great tester boasts about bugs to other testers and eagerly
listens to other testers' exploits.
Knows there are always more bugs
A great tester knows that no application is ever bug free. A great
tester knows that an application that seems to be bug free is really full of
bugs they haven't thought to look for. A great tester is always on the
lookout for new types of bugs. A great tester views every bug found by a
customer as a sign they missed an entire class of bugs.
Stays on track
A great tester knows that finding and isolating bugs to their root cause
requires focus. A great tester doesn't ignore bugs found along the way,
but postpones investigating them until the current bug is nailed. (And,
of course, gleefully told to the corresponding developer. And boasted
about to other testers.)
Scopes appropriately
A great tester knows that they will not have sufficient time to run every
test case they would like to run. A great tester prioritizes and scopes
their tests so that the tests most likely to find the bugs most likely to
affect the customer are executed first.
Investigates weird behavior
A great tester watches for odd occurrences. Icons that display one
position off from where they should and radio buttons that don't stay set may
be a simple programming error, but a great tester knows that such oddities are
just as likely to be but the tip of a nasty bug. A great tester goes
beyond "That's weird but that's life" to "A-ha! That's
what's going on!"
Writes precise bugs
A great tester takes the time to narrow a bug down to the minimum number of
steps necessary to reproduce a bug. A great tester tests around a bug to
understand what the bug actually is. A great tester writes bugs that
state the bug exactly and clearly distinguish between what is proven fact and
what is conjecture on the part of the tester.
Has passion for the customer
A great tester knows that they are the last defense against the customer
receiving a product that doesn't serve the customer's needs. A great
tester understands every aspect of the customer. A great tester
understands what the customer needs to do and how the customer wants to use the
product. A great tester looks beyond the customer's needs to see how the
product can revolutionize the customer's tasks. A great tester promotes
the customer's point of view throughout the product cycle, from the first
nascent product vision through specifying and implementing features to cutting
features and triaging bugs to product release and ongoing maintenance. A
great tester helps the rest of the product team understand the customer as well
as they do.
Is a specializing generalist
A great tester is completely familiar with every detail of their feature.
A great tester also understands how their feature fits into and affects the
entire product. A great tester is willing to change or even cut their
feature in order to make the product as a whole better.
Picks their fights
A great tester recognizes that fixing every bug is often not worth the
resources that would be required. A great tester balances each bug
against each other bug and allows some bugs to be shipped so that other bugs
can be fixed.
Stands their ground
A great tester knows that some bugs just have to be fixed. A great
tester is willing to be obstinate and obdurate and to ruffle feathers if
necessary in order to ensure that a must fix bug is in fact fixed. A
great tester calmly shows why the bug must be fixed and convinces the rest of the
team that it indeed can't be shipped.
Can ask developers where the bathroom is
Visitors to a foreign country are well advised to become familiar with the
language and customs of the country, enough so that they can get a cab back to
their hotel, ask for directions to the bathroom, and know whether shaking hands
is the height of civility or completely gauche. Likewise, a great tester
is familiar with the language and customs of developers. A great tester
understands UML well enough to get the gist of UML diagrams and to draw a class
or sequence diagram without making developers laugh too hard. A great
tester can write code at least as well as first year programming college
students. A great tester understands design concepts sufficiently to
participate in design discussions and reviews without being asked to leave the
room.
Knows testability is just one of many
concerns
A great tester knows the only way to truly test an application is to build
testability in to every aspect of the product. A great tester analyzes
the product's architecture, design, and features, and develops a plethora of
ideas for ensuring the product can be tested. A great tester, however,
knows that testability is not the only factor affecting the architecture,
design and features. A great tester balances testability against the
other factors and helps the team create the right mix.
Knows when to ask for help
A great tester takes pleasure in a challenge. A great tester, then,
enjoys banging up against a brick wall and slowly breaking through it.
Some walls are thicker than others, however, and sometimes the wall has a
tester-size hole that the tester continually manages to miss. A great
tester realizes when it's time to ask for help and does so. A great
tester knows who to ask for help. A great tester knows there isn't any
shame in asking for help.
Makes time for training
A great tester knows that the only way to continue to be a great tester is
to never stop learning. A great tester doesn't limit this education to
testing, either, but also researches programming, program management,
marketing, and anything else that is remotely related to the process of
creating software.
Never stops testing
A great tester goes beyond feature boundaries and tests throughout the product.
A great tester tests other products. A great tester tests books, refrigerators,
lights, doors...anything in any part of their life that makes them go
"That's not right".