Bug Hunting: A Masterclass
- Bug (n.)
Anything that threatens the value of the product to someone that matters
- Issue (n.)
Anything that threatens the value of testing, the project or the business
- Inconsistency (n.)
A bug based on a requirement, or a requirements document
Questions for Testers (and their clients)
- How should we test this product?
- Where should we look for bugs?
- Are there bugs here?
- Do those bugs matter? Who decides? Whose values matter?
- What might slow or prevent testing?
- Are we ready to release?
- How might we be fooling ourselves?
FEW HICCUPS – Oracles Mnemonic
When a product is inconsistent with any of the following criteria, we can reasonably surmise that there may be a problem with it:
- Comparable Products
- User Desires*
- Statutes & Standards
*On a basic level, User Desires can be expressed as Quality Criteria:
- Capability – The functionality of the the product itself
- Scalability – Can this thing be expanded as the user base or the load it takes on grows?
- Reliability – Is it going to break? Will it require lots of maintenance?
- Compatibility – Will it work well with our existing technologies?
- Usability – Is it easy to use? Would it pass the ‘Granny Test?’
- Performance – Does it work efficiently on our test and production architecture? Does it affect the speed and performance of our product?
- Charisma – Does it engage people? Do people want to use it?
- Installability – Does it install cleanly and easily? Even the best app in the world is of no use if it can’t be installed.
- Security – Of paramount importance. Is the product secure? Does it inspire confidence?
Many test approaches focus on testing for Capability (functionality) and underemphasise the other criteria. Yet inconsistency amongst any of these criteria may represent diminished value to a person who matters.
As a subset of ourselves, a development team has their own set of Quality Criteria:
- Supportability – It it simple to fix problems, or change things based on feedback?
- Maintainability – How easy is it to carry out maintenance and keep things running smoothly?
- Portability – Can it be transferred between platforms? Between Desktop and Mobile App, between different flavours of mobile?
- Localisability – Can it be easily translated for different languages? Different markets?
- Testability – Do we have the opportunity to observe and control the product? Does it create log files? Does it have a scriptable interface? Reduced testability gives bugs more time to entrench, and more opportunities to hide.
The Language of Testing
The Phoenix Checklist
- Write your challenge. Isolate the challenge you want to think about and commit yourself to an answer by a certain date.
- Ask questions. Use the checklist to dissect the challenge into a variety of areas.
- Record your answers.
- Why is it necessary to solve the problem?
- What benefits will you gain by solving the problem?
- What is the unknown?
- What is it you don’t yet understand?
- What is the information you have?
- What isn’t the problem?
- Is the information sufficient? Or is it insufficient? Or redundant? Or contradictory?
- Should you draw a diagram of the problem? A figure?
- Where are the boundaries of the problem?
- Can you separate the various parts of the problem? Can you write them down? What are the relationships of the parts of the problem?
- What are the constants (things that can’t be changed) of the problem?
- Have you seen this problem before?
- Have you seen this problem in slightly different form?
- Do you know a related problem?
- Try to think of a familiar problem having the same or a similar unknown.
- Suppose you find a problem related to yours that has already been solved. Can you use it? Can you use its method?
- Can you restate your problem? How many different ways can you restate it? More general? More specific? Can the rules be changed?
- What are the best, worst, and most probable outcomes you can imagine?
- Can you solve the whole problem? Part of the problem?
- What would you like the resolution to be? Can you picture it?
- How much of the unknown can you determine?
- Can you derive something useful from the information you have?
- Have you used all the information?
- Have you taken into account all essential notions in the problem?
- Can you separate the steps in the problem-solving process? Can you determine the correctness of each step?
- What creative thinking techniques can you use to generate ideas? How many different techniques?
- Can you see the result? How many different kinds of results can you see?
- How many different ways have you tried to solve the problem?
- What have others done?
- Can you intuit the solution? Can you check the result?
- What should be done? How should it be done?
- Where should it be done?
- When should it be done?
- Who should do it?
- What do you need to do at this time?
- Who will be responsible for what?
- Can you use this problem to solve some other problem?
- What is the unique set of qualities that makes this problem what it is and none other?
- What milestones can best mark your progress?
- How will you know when you are successful?