Good testing is governed by the scientific model. The “theory”
being tested is that the software works. Testers design
experiments, as Kaner says in Testing Computer Software,
to see if they can falsify the “theory.” Good testers
know how to design experiments, and they often benefit
from previous study of the sciences. Good testers think empirically,
in terms of observed behavior.
Developing software, on the other hand, is much like
creating theories. Laws are specified and rules are applied.
Many developers have benefited from studying
mathematics. Good developers think theoretically.
Developers who are focusing on their theory of how
the software works might dismiss a bug report that describes
behavior not allowed by their software theory.
“That can’t happen; it’s not possible.” Good testers focus
on what actually happens, and like other experimenters,
keep detailed logs. “Well, it did happen; here are the circumstances.”
People who are used to thinking theoretically
have a hard time accepting aberrant behavior without
some kind of explanation. Good testers are skeptics,
whereas good developers are believers.
There's several other good comparisons between testers and coders...and all in just 4 pages!