Posted by Ben Simo
A couple nights ago, my son and I were in a store with a list of grocery items to purchase. My wife had given the list to our son and he was calling out a few items at a time. If he called out too many items, I'd forget them all and ask him to start over. When he called out something that I knew was nearby, we'd head in that direction and get that item. Darting back and forth may not be a very efficient way to shop, but it likely costs me less than systematically going through the store. When I go grocery shopping with an always-hungry 10 year old boy, it is very likely that we will buy twice as much stuff as is on our list.
Although he will claim that I always say "no", my son is skilled at talking his dad into buying things. In this trip to the store, he first asked for some expensive pastries knowing that I would say no -- like I always do. :) Then he proposed the cookies that I think he really wanted and gave me a well-thought-out argument as to why these were better and cheaper. The cookies found their way into our cart.
I wasn't very concerned about the accuracy of our selections because my wife was elsewhere in the store helping our daughter find some new gym pants for school. I knew that my selections would be tested before I paid for anything. Should anything not pass the inspection, I knew I could put it back and replace it with the correct item.
This trip to the store reminded me of a shopping trip a couple months back. My wife gave me a hand-written shopping list containing the text shown below.
DVD Lens Cleaner
Toilet Paper - get extra
canned dog & cat, kitty litter
Tea Tree Oil
Lined paper - college ruled
Mech. pencil 0.7
hamburger meat, chicken
cone shaped coffee filters
white vinegar 64oz - same isle ^
canned tuna fish
crackers - saltines + Ritz
Fig Newtons Maple Syrup
reg. coke + apple soda
coffee creamer, eggs, yogurt
variety juices from freezer section
Pears - bartlett
As I worked my way though the list, I noticed that the level of detail specified for each item varied. Some things contained specifics while others did not. However, there is much implied in the list that is not written. How do I know that there is much implied? I've been married to Sophie for 16 years. I know my wife and she knows me. At least that's what I like to think.
She knows that she has to specify regular Coke because I'd buy Diet Coke if she didn't tell me otherwise. She also knows that I know that when she writes "apple soda", she is referring to a specific brand of apple flavored soda pop.
She did not specify what kind of toilet paper to buy but I have learned from experience which brands she will find to be acceptable. I had no idea how much was extra, so I ensured that we would not run out anytime soon.
She wrote "canned dog & cat", knowing that I would joke about not finding canned dog or cat meat in the store while understanding that I should get canned dog food and canned cat food.
She specifically told me what shape coffee filter to buy because she had recently bought a new coffee maker that requires a different shaped filter. Had she not told me which shape, I would have likely bought the wrong kind: the kind I had been buying for years. However, I discovered that there is more than one style and size of cone shaped coffee filter. I did my best to guess as to what size the new coffee maker used. I had not yet used the new coffee maker, but I had seen it. Then, before I left the store, I called home to confirm that I selected the right size.
From a conversation before I went to the store, I knew that the "canned tuna fish" was for the cats. I made an executive decision and bought tuna flavored cat food because it cost less. If I didn't know this, I might have thought that the tuna was to put on the crackers for our lunch.
I knew that "Fig Newtons" did not require that I buy that specific brand of fig bars. I also knew from experience that there were some brands I should not buy.
I am intelligent enough to know that the maple syrup is a separate item from the fig bars. However, I did not know if Sophie wanted real maple syrup or if maple flavored corn syrup would do. I bought both.
The list did not say anything about what kind of cheese I should buy but I knew what kind of cheeses we usually eat and made a guess.
I knew that "coffee creamer" came with many unwritten requirements that I have learned from shopping with my wife.
I knew what "variety juices" my family will drink and what they will not drink.
I knew that if I made a mistake in my selection of items, I might have to make another trip to the store. I was more careful in my selections than I am when Sophie is in the store. I double checked my list before I left the store.
I got most of the items right. The coffee filters fit the new coffee pot. I didn't get the vinegar right in spite of the more detailed directions about type, size, and location. And, I totally forgot the most important item on the list: the chocolate.
So, what do my shopping adventures have to do with software testing? Very much.
- Written requirements are only part of the story
- Explicit written requirements cannot fully communicate user needs
- Requirements may be communicated in passing
- Communication before, during, and after implementation is essential
- Familiarity improves the success rate -- and makes requirements definition easier
- Unit testing by implementers does not ensure success
- User acceptance testing earlier in the process costs less than waiting until the end
- Context frames everything
After nearly 16 years of marriage, I failed to completely meet expectations implementing something as simple as a shopping list.
And yet we expect people on software projects, that hardly know each other, to understand each other's desires.
What else can we learn from shopping lists?