uTest invited me to be interviewed for Testing the Limits series this month. They have graciously referred to me as "one of the most insightful and entertaining testers in the business". Please give the interview a read. And if you have additional questions, please send them my way.
August 25, 2010
February 19, 2010
February 7, 2010
A checklist for buying a new computer
Buying a computer has changed significantly in the past 25 years. Or not?
From Melbourne's The Age, 18 June 1984
Some features that are really important to me:
- on-off switching (the most important feature)
- security against blow-up (because I fear burns and shrapnel from exploding computers)
- position of reset key (a reset key next to the shift key would be a pain)
- big yellow bus (aren't computers good for education?)
- radiation shielding (don't want to be sterilized while playing Pole Position)
- movable screen (I might want to take the screen home with me)
- ease of plug-in ROM installation (cartridges are better than tapes)
- recognize commands in u/l case (I expect the computer to understand me -- EVEN WHEN I YELL AT IT!)
- hard disc option (I prefer to save data to tape, but a hard disc would be a nice option)
- stand-alone capability of slaves (I want slaves that can work without being micro-managed)
- octave range (I need a computer that can sing soprano)
- RS-232C port (In case I want to interface it to my lawn sprinkler system)
- Paddles (to spank the computer when it misbehaves)
- key-word dictionary (to understand this check list)
- country of origin (can I get a machine made in the USA?)
- dynamic debugging tool (certainly don't want a static debugging tool)
- Logo (because I just love that little turtle)
January 7, 2010
December 6, 2009
December 5, 2009
Numbers don't lie, people do.
“despite its mathematical base,
statistics is as much an art as it is a science.
… Often the statistician must choose among methods,
a subjective process,
and find the one
that he will use to represent the facts.
This suggests giving statistical material …
a very sharp second look
before accepting any of them. …
But arbitrarily rejecting statistical methods
makes no sense either.
That is like refusing to read
because writers sometimes
use words to hide facts and relationships
rather than to reveal them.”
- Darrell Huff,
How To Lie With Statistics, 1954
“No doubt
some graphics do distort
the underlying data,
making it hard for the viewer
to learn the truth.
But data graphics are no different
from words in this regard,
for any means of communication
can be used to deceive.”
- Edward Tufte,
The Visual Display of Quantitative Information
November 16, 2009
Talkin' 'bout test in a differrent light
Pullin' out my big black book
Cause when I need a word defined that's where I look
So I move to the L's quick, fast, in a hurry
Threw on my specs, thought my vision was blurry
I look again but to my dismay
It was black and white with no room for grey
Ya see, a big "V" stood beyond my word
And yo that's when it hit me, that luv is a verb.
Words come easy but they don't mean much
When the words they're sayin' we can put trust in
We're talkin' 'bout love in a different light
And if we all learn to love it would be just right.
- DC Talk
The DC Talk song "Luv is a Verb" points out that love is something to be acted out. Real love is action, not just words and feelings. Love is expressed through action.
Like love, the word test is both a noun and a verb. Also like love, test requires action. Even the noun definitions for test describe action.
While I don't think we'll find anyone that argues that test is not a verb, people involved in software development seem to use it primarily as a noun. I have nothing against the many things we create that we call tests. Our test cases, test code, test charters, and whatever test things we create can be useful tools -- but they are not the test.
Let's think about test in a different light.
Several years ago, Shrini Kulkarni challenged me in questioning whether there can be such a thing as an automated test. I don't think I disagreed with Shrini. I've not been one to trust testing to machines, but I've been a fan of automation throughout my testing career. I've automated many testing tasks, but not believed I can automate the testing itself.
Earlier this year, Michael Bolton told me of a distinction he was thinking about between checking and testing. While I had no disagreement with this distinction, I wasn't thrilled with the terms. I wanted something more descriptive. I thought Michael was making a distinction I had been trying to make: a distinction between validation and investigation. I've since come to understand that Michael is making a slightly different distinction. Michael has recently written a series of blog posts better describing the Checking vs. Testing distinction. Michael has limited the scope of checking to observations and decisions rules that can be executed without sapience -- without a brain-engaged human. If something requires human sapience, it is testing, not checking.
Yesterday, an insightful tester, Lanette Cream, made a nice attempt at defining test on her blog. In her latest revision, she defines test as follows.
I like that this definition identifies action, discovery, and evaluation as being core to testing. However, I'm thinking of pushing, or rather constraining, this just a bit further.
What if we were to say that the evaluation is the action and discovery is the goal?
A test would then be the sapient part of validation or investigation -- the thinking and learning that cannot be automated. All those other things we do to test are really support activities that help us evaluate.
Test is not a document. Test is not code. Test is not executing a program. Test is not applying a procedural decision rule. Test is not anything that can be done by a machine. Test is the act of evaluating. Test requires sapience.
Test is thinking and learning that leads to discovery. We may test by evaluating existing data. We may test by running experiments that produce new data. We may take the output of automated checks to test. We may provide what we learn as input to coding new automated checks. The test is the action we perform in our minds.
This may come across as nitpicking vocabulary. That's not my intent. My goal is not to limit anyone's definition of test, but rather to shed a different light on what I believe sets testing apart from checking, and gives both checking and testing value.
If a check fails in a forest and no one is around to hear it, does it make a sound?
The true value of our checking and testing is in the mind of a sapient tester. What value is there in all the things we call checks and tests without a tester (whatever their role or title) evaluating information and learning?
I'm not quite comfortable with this. I want the emphasis to be on the sapient activity; and not generating and collecting data to support the thinking without ignoring that it is a necessary part of testing.
Regardless of where we shine the light or draw lines, let's keep in mind that test is a verb.
What do you think? Testing of my half-baked ideas is welcome and appreciated.
Cause when I need a word defined that's where I look
So I move to the L's quick, fast, in a hurry
Threw on my specs, thought my vision was blurry
I look again but to my dismay
It was black and white with no room for grey
Ya see, a big "V" stood beyond my word
And yo that's when it hit me, that luv is a verb.
Words come easy but they don't mean much
When the words they're sayin' we can put trust in
We're talkin' 'bout love in a different light
And if we all learn to love it would be just right.
- DC Talk
The DC Talk song "Luv is a Verb" points out that love is something to be acted out. Real love is action, not just words and feelings. Love is expressed through action.
Like love, the word test is both a noun and a verb. Also like love, test requires action. Even the noun definitions for test describe action.
test
noun
verb
- trying something out to find out about it
- any standardized procedure for measuring sensitivity or memory or intelligence or aptitude or personality, etc.
- a set of questions or exercises evaluating skill or knowledge
- the act of undergoing testing
- the act of testing something
- put to the test, as for its quality, or give experimental use to
- test or examine for the presence of disease or infection
- examine someone's knowledge of something
- show a certain characteristic when tested
- achieve a certain score or rating on a test
- determine the presence or properties of (a substance)
- undergo a test
from Princeton WordNet
While I don't think we'll find anyone that argues that test is not a verb, people involved in software development seem to use it primarily as a noun. I have nothing against the many things we create that we call tests. Our test cases, test code, test charters, and whatever test things we create can be useful tools -- but they are not the test.
Let's think about test in a different light.
Several years ago, Shrini Kulkarni challenged me in questioning whether there can be such a thing as an automated test. I don't think I disagreed with Shrini. I've not been one to trust testing to machines, but I've been a fan of automation throughout my testing career. I've automated many testing tasks, but not believed I can automate the testing itself.
Earlier this year, Michael Bolton told me of a distinction he was thinking about between checking and testing. While I had no disagreement with this distinction, I wasn't thrilled with the terms. I wanted something more descriptive. I thought Michael was making a distinction I had been trying to make: a distinction between validation and investigation. I've since come to understand that Michael is making a slightly different distinction. Michael has recently written a series of blog posts better describing the Checking vs. Testing distinction. Michael has limited the scope of checking to observations and decisions rules that can be executed without sapience -- without a brain-engaged human. If something requires human sapience, it is testing, not checking.
Yesterday, an insightful tester, Lanette Cream, made a nice attempt at defining test on her blog. In her latest revision, she defines test as follows.
A test is
an action
which produces discoveries
that can be used to evaluate product quality.
I like that this definition identifies action, discovery, and evaluation as being core to testing. However, I'm thinking of pushing, or rather constraining, this just a bit further.
What if we were to say that the evaluation is the action and discovery is the goal?
A test would then be the sapient part of validation or investigation -- the thinking and learning that cannot be automated. All those other things we do to test are really support activities that help us evaluate.
Test is not a document. Test is not code. Test is not executing a program. Test is not applying a procedural decision rule. Test is not anything that can be done by a machine. Test is the act of evaluating. Test requires sapience.
Test is thinking and learning that leads to discovery. We may test by evaluating existing data. We may test by running experiments that produce new data. We may take the output of automated checks to test. We may provide what we learn as input to coding new automated checks. The test is the action we perform in our minds.
This may come across as nitpicking vocabulary. That's not my intent. My goal is not to limit anyone's definition of test, but rather to shed a different light on what I believe sets testing apart from checking, and gives both checking and testing value.
If a check fails in a forest and no one is around to hear it, does it make a sound?
The true value of our checking and testing is in the mind of a sapient tester. What value is there in all the things we call checks and tests without a tester (whatever their role or title) evaluating information and learning?
Test is sapient evaluation that leads to discovery.
Regardless of where we shine the light or draw lines, let's keep in mind that test is a verb.
What do you think? Testing of my half-baked ideas is welcome and appreciated.
November 12, 2009
Comprehensive Understanding?
"Anyone who feels
that he
can precisely define
the boundaries of his profession
either
possesses a skill of little importance
or
is incredibly naive."
that he
can precisely define
the boundaries of his profession
either
possesses a skill of little importance
or
is incredibly naive."
- William F. Sharpe,
The Economics of Computers, 1969
The Economics of Computers, 1969
Marginal value & cost of software
* Image from the Economics of Computers, by William F. Sharpe.
Cost of additional copies approaches zero ONLY IF no maintenance or customer support costs are associated with sales of additional copies.
If your quality stinks, expect that supposedly 99% profit copy you sold me to increase your costs.
Quality improvement that reduces maintenance and support costs can have great value!
November 11, 2009
If scripted tests can't find bugs...
Shrini Kulkarni (@shrinik) tweeted that a friend told him if exploratory testing finds bugs not found by scripted testing, it may be due to insufficient or incorrect test planning and review.Perhaps there aren't enough test cases. Perhaps testing techniques weren't applied properly. Perhaps the review of tests was done wrong.
However, perhaps -- just perhaps -- people are fallible and can't completely understand or work through the complexity of their customer's problems and the technical implementation of a solution with finite knowledge, finances, and time.
If it is reasonable to expect testers to design enough tests to exercise near-infinite paths with near-infinite data variations in a software system, then I think it should be reasonable to expect software designers and coders to anticipate everything that could go wrong and prevent all threats to the value of the software they produce -- all with finite finances and time.
If this were reasonable, then it would be reasonable to skip testing altogether.
In the real world, it is just as unreasonable to expect perfection from test case designers as it is to expect perfection from all the other people involved in developing software. Is it not?
One of the things exploratory testing helps avoid is locking in our level of ignorance that exists at the start. An explorer can use information gained as they explore to help guide where they go and what they do next.
So you think you've achieved maturity?
Some people say that Ada may be the last major high level language that will ever be developed, since automatic program generation techniques may be available in the not too distant future. Thus it seems fitting that the last major programming language be named in honor of the first female prorammer.
- Richard Wiener and Richard Sincovec,
Programming in Ada, 1983
Arrogance combined with foolish optimism? :)
August 5, 2009
Freedom & Responsibility Culture
Cool. Based on this slide deck, it appears that Netflix has a good understanding of developing and sustaining a corporate culture of Freedom & Responsibility.
May 7, 2009
February 15, 2009
Is There A Problem Here?
Over the years, I have collected a number of examples of software failures in the wild -- some I've encountered myself, some were shared by others. I've had intentions to create a blog for sharing these software failures, and new ones as they are discovered, with hope that software designers, developers, and testers can discuss and learn from them. I have finally launched that blog. It is titled Is There A Problem Here?
I invite you to visit the blog and contribute at http://IsThereAProblemHere.com.
I invite you to visit the blog and contribute at http://IsThereAProblemHere.com.
January 5, 2009
I'm helping you. I'm helping you.
A few months ago, I enlisted my 11 year old son to help me with some work around the house. After a short while, he was doing something other than what I had asked him to do.
I told him, "You're not helping me."
"But I am helping you.", he replied.
"No you're not."
"I'm helping you. I'm helping you.", he shot back. He was frustrated. He really thought he was helping me; and I was putting down his work. I was frustrated too. From my view, his helping was creating more work for me. I did not feel helped.
Then it hit me. I've heard this argument before -- from software testers.
I've seen testers, and test managers, attempt to justify their work by telling team members and stakeholders "I'm helping you. I'm helping you." We QA and tester people develop metrics and reports to help us demonstrate how helpful we are. We talk about our quality assurance and testing processes. We talk about all the test cases we develop and execute. We like to show off our test automation that spits out impressive color-coded results.
However, we still encounter unhappy team members and stakeholders. We develop adversarial relationships with developers. We have to explain ourselves to project leads that question the value of our testing. We hear people tell us we're not helping and we keep saying "I'm helping you. I'm helping you."
Maybe, just like my son, we're not giving our stakeholders what they need. Maybe we aren't really helping. So instead of shooting back the "I'm helping you." line, we can stop and listen. Find out what our stakeholders want from us. Listen and ask clarifying questions to better understand how we can help.
I'm not advocating that we just give in and do whatever we're asked without defending our positions. However, we can be willing to adjust our positions to better serve our stakeholders. (Joining an overly optimistic rush to release poor quality software usually doesn't serve them.) If there is disagreement, work to resolve it. Sometimes we may need to educate others on our areas of expertise. Yet we testers also need to respect others' roles and expertise. Listen and learn.
So, the next time you feel like screaming "I'm helping you. I'm helping you.", try to better understand how you can help before turning up your defenses.
Serve your stakeholders.
September 30, 2008
The Antonym of Testing
"... one usually encounters a definition such as, 'Testing is the process of confirming that a program is correct. It is the demonstration that errors are not present.' The main trouble with this definition is that it is totally wrong; in fact, it almost defines the antonym of testing."
- Glenford Myers,
Software Reliability: Principles & Practices, 1976
People keep telling me that testing is a validation activity -- that the purpose of testing is to validate that the software meets all the specifications, has no errors, meets performance SLAs, meets expectations of anonymous users, or some other lofty goal.
I read about testing processes designed to validate software. I use testing tools built to support validation. I listen to service companies pitch testing services to validate software. I read about testing metrics built on the assertion that software systems can be proved correct. I attend testing presentations explaining the presenters' best practices for validation.
The trouble is that we cannot prove software correct. We cannot prove the absence of bugs. We cannot test every possible state and input. We cannot evaluate every possible output. We cannot fully understand the desires of stakeholders. We cannot prove that customers will be happy. We cannot prove that a software product will solve the problems it was built to solve. If all this were possible, I suspect insurance companies would find a way to make a profit selling software quality insurance.
"If you think you can fully test a program without testing its response to every possible input, fine. Give us a list of your test cases. We can write a program that will pass all your tests but still fail spectacularly on an input you missed. If we can do this deliberately, our contention is that we or other programmers can do it accidentally."
- Cem Kaner, Jack Falk, and Hung Quoc Nguyen,
Testing Computer Software, Second Edition, 1999
Now, thirty-two years since Glenford Myers called testing to prove correctness the opposite of testing, we're surrounded by testing practices and tools based on proving correctness. The myth of proving correctness is alive and well.
Activities designed to try to prove correctness are the antonym of testing.
So if testing is not validation, what is testing? Testing is investigation; and communicating useful information about quality to decision makers.
"Testing is the process by which we explore and understand the status of the benefits and the risk associated with release of a software system."
- James Bach,
James Bach on Risk-Based Testing, STQE Magazine, Nov 1999
"Testing is done to find information. Critical decisions about the project or the product are made on the basis of that information."
- Cem Kaner, James Bach, Bret Pettichord,
Lessons Learned In Software Testing: A Context-Driven Approach, 2002
"A software tester’s job is to test software, find bugs, and report them so that they can be fixed. An effective software tester focuses on the software product itself and gathers empirical information regarding what it does and doesn’t do. This is a big job all by itself. The challenge is to provide accurate, comprehensive, and timely information, so managers can make informed decisions."
- Brett Pettichord,
Don't Become the Quality Police, StickyMinds.com, 2002
Once we admit that we cannot prove the software correct, we can refocus our efforts on finding useful quality-related information. Instead of pretending to assure quality or validate correctness, we can gather and communicate useful information. Investigate the software. Find information about threats to the quality of the systems under investigation. Communicate that information in terms that matter to stakeholders. Help managers make informed decisions.
July 26, 2008
Pause at the Pump
- My fuel gauge is on empty.
- I don't want to stop, but pull into the gas station.
- I tell the children to stay in the car.
- I get out of the car.
- The children are asking me questions from inside the car that I can't hear well enough to understand.
- I swipe my credit card in the pump's card reader.
- The pump responds by prompting me to "SELECT WINDOW OR OUTSIDE".
- The children are still talking to me. I still don't understand.
- I pause and stare at the keypad.

Is there a problem here?
- I pause to think for a moment.
- I hear the children asking me questions that I still don't understand through the closed car windows.
- I scan the keypad again.
- I cant find the "OUTSIDE" button.
Recognizing Bugs
At CAST last week, Pradeep Soundararajan gave a Lighting Talk about the importance of testers being able to recognize a bug. Tests may be of little use if the tester doesn't recognize the bugs triggered by the test.
Sometimes bugs are obvious. Sometimes bugs are not clearly violations of requirements documents. This is especially true when it comes to human computer interaction problems.
Requirements are not always clear and objective.
So, do you recognize why I may have paused when I read the prompt on the gasoline pump? It wasn't the price of the $4 per gallon fuel. It wasn't because I had to think about how I wanted to pay.
I paused because I didn't see a button labeled "OUTSIDE". Plus, I already swiped my credit card indicating that I wanted to pay at the pump. And even if I were to pay at the cashier window, I would still be outside.
I wonder how many minutes are wasted each month prompting customers to select where they want to pay after they have swiped their credit card. I wonder how many other people pause and read twice in search of the button to indicate that they want to pay outside.
The developers and testers of the software in this pump may have not recognized this problem. Maybe the makers executed test scripts -- either automated or manual -- and were blind to the problem. Or maybe they didn't deem it important enough to change.
Sometimes familiarity with the technical details of a system can hide problems that are obvious to those that don't know the technology, the requirements documents, and the test scripts. As testers it is important that we be careful not to let our familiarity with a system make us blind to to bugs -- things that bug our users.
Will you recognize a problem if you see it?
May 20, 2008
Is There A Problem Here?

msn video
To use this product, you need to install free software
This product requires Microsoft Internet Explorer 6 with Microsoft Media Players 10 and Macromedia Flash 6 or higher versions, or Mozilla Firefox 1.5 with Macromedia Flash 8, or Safari 2.0.4 with Macromedia Flash 8. To download these free software applications, click the links below and follow the on-screen instructions.
Step 1: download firefox 1.5download firefox 1.5
Step 2: Download Macromedia Flash PlayerMacromedia Flash player is free to download.
If still having problems, uninstall Flash and then re-install Flash.
Once the installations are complete, reload this page.
May 10, 2008
Aggravation Testing
An example:

How Long Do I Have To Wait?

A few hours? I don't have hours. I am sitting in the car using borrowed WiFi from a campground. I had to seek out Internet access to use software that came on a CD. I finally find Internet access and now it says I may have to wait a several hours. Can I abort if it takes longer than I have? What happens if I lose my internet access while the firmware update is underway?
I'm already frustrated with this device. I'm already frustrated with the software. I was hoping that a firmware update might fix bugs and usability issues on the device itself. I have reached the tipping point. This thing is going back to the store.
How Long Do I Have To Wait?
A few hours? I don't have hours. I am sitting in the car using borrowed WiFi from a campground. I had to seek out Internet access to use software that came on a CD. I finally find Internet access and now it says I may have to wait a several hours. Can I abort if it takes longer than I have? What happens if I lose my internet access while the firmware update is underway?
I'm already frustrated with this device. I'm already frustrated with the software. I was hoping that a firmware update might fix bugs and usability issues on the device itself. I have reached the tipping point. This thing is going back to the store.
May 4, 2008
Terrified by Improvisation

[Improvisational comedy] involves people making very sophisticated decisions on the spur of the moment, without benefit of any kind of script or plot. That's what makes it so compelling -- and to be frank -- terrifying. ... What is terrifying about improv is the fact that it appears utterly random and chaotic. It seems as though you have to get up onstage and make everything up, right there on the spot. But the truth is that improv isn't random or chaotic at all. ... Improv is an art form governed by a set of rules... How good people's decisions are under the fast-moving, high-stress conditions of rapid cognition is a function of training, rules, and rehearsal.- Malcolm Gladwell, Blink: The Power of Thinking Without Thinking
Now, reread the quote above and replace improv with exploratory testing. See a connection? Just as improvisational theater may appear to be random and chaotic (although entertaining) to the ignorant, exploratory testing can appear to be random and chaotic to those that have been taught to rely on scripts. Good improv and exploratory testing is neither. There are rules -- heuristics.
Heuristics are rules of thumb that help solve problems. In improvisational comedy, there are rules. These are not hard rules that guarantee comedy. These are rules that skilled improv actors can use to help keep things funny. Sometimes these rules don't work and actors have to adapt. And, because they aren't following a script, they can adapt when things don't work out. Some parts of improv are scripted. I am a fan of the television show Whose Line is it Anyway. Each comedy sketch in this show is given a structure (think charter) to direct the improvisation. This structure defines and restricts (think script) specific components of each sketch while leaving the bulk of the activity open to each actor to adapt to what happens as the sketch plays itself out. While we do not see it on screen, I suspect that a great deal of training, rules, and rehearsal went into the production of Whose Line. The shows did suffer from an occasional guest participant (usually a trained script actor) that was not as skilled at improv as the regulars. However, other guests (sometimes not actors) who understand the rules of improv have helped produce some of the funniest sketches.
Good exploratory testing works in the same way. Skilled exploratory testers set out with a charter -- a goal for each testing session. Skilled exploratory testers use heuristics to help them learn about the systems they test. Skilled exploratory testers practice.
Improvisation can have scripted aspects and rules that guide it. It is not chaotic and random. It is smart people using simple rules to make quick decisions and adapt to a changing environment under pressure.
Subscribe to:
Posts (Atom)


