When it comes to Software Testing, the human brain is the best testing tool. When we test software, we process information, solve problems, make decisions and create new ideas.
As testers, we should be aware of the different thinking types so that we can relate them to different situations. For example, when we look at a design diagram, we need to be analytical. When we think of scenarios, we need to think in an abstract way.
Different testing activities require different thought processes. For this reason, it is important to be able to “switch on” the different thinking modes for each activity.
Types of thinking covered in this post are:
- Creative thinking
- Analytical thinking
- Critical thinking
- Concrete thinking
- Abstract thinking
- Divergent thinking
- Convergent thinking
- Sequential thinking
- Holistic thinking
Thinking Types in the Context of Software Testing
Let’s examine the different thinking types and how each can be applied in the context of Software Testing and various testing activities.
Creative or Lateral Thinking
Creative thinking means looking at something in a new way. It is the very definition of “thinking outside the box.”
In creative thinking, we break away from established theories, rules and procedures and do things in a new and imaginative way.
In the context of testing, for example, this could be when we apply new test techniques, e.g. pairwise test technique to reduce the number of permutations yet increase coverage.
Analytical thinking refers to the ability to separate a whole into its basic parts in order to examine the parts and their relationships. It involves thinking in a logical, step-by-step manner to break down a larger system of information into its parts.
For instance when we look at architectural diagrams and try to figure out the path through the system and individual components.
A good example is when we analyze what happens when a user submits a form and the request is sent to an API which communicates with a Database.
Critical thinking is the ability to reason by carefully analyzing something in order to determine its validity or accuracy. It is about being an active learner rather than a passive recipient of information.
Critical thinking is possibly the most important type of thinking in the context of testing. As testers, we should always question ideas and assumptions rather than accept them at face value.
For example, when looking at a user story, we could be asking questions about the acceptance criteria rather than accepting them as they are given to us.
Concrete thinking refers to the ability to comprehend and apply factual knowledge. It is the opposite of abstract thinking.
People who think concretely like to follow instructions and have detailed plans. They hate anything that is fuzzy or ambiguous. As such concrete thinkers prefer to work with lists and spreadsheets.
In the context of testing, this is when testers demand that all instructions should exist before starting to test. E.g. some testers won’t start testing until all acceptance criteria are defined in a user story.
Opposite of concrete thinking, abstract thinking refers to the ability to think about things that are not actually present.
Software testers who think in an abstract way look at the broader significance of ideas and information rather than the concrete details.
For example in the context of testing and story grooming sessions, testers with the ability to think in an abstract way can come up with interesting test scenarios. Rather than just reading the acceptance criteria, testers will look at a user story and try to figure out how this could relate to or impact other parts of the system.
Divergent Thinking refers to the ability to generate creative ideas by exploring many possible solutions in an effort to find one that works. It involves bringing facts and data together from various sources and then applying logic and knowledge to make decisions.
When doing exploratory testing, we apply oracles and heuristics and make judgments based on our previous experiences.
Convergent thinking is the ability to put a number of different pieces or perspectives of a topic together in some organized, logical manner to find a single answer.
For example, when we try to find a root cause of a defect, we gather relevant information and extract necessary data.
Sequential (linear) thinking refers to the ability to process information in an orderly prescribed manner. It involves a step-by-step progression where a response to a step must be obtained before another step is taken.
In the context of software testing, this correlates to when we follow a script with predefined steps and expected results.
Holistic (nonlinear) thinking is the ability to see the big picture and recognize how the components form the larger system. It involves expanding your thought process in multiple directions, rather than in just one direction.
In the context of testing, this is when we perform integration or system testing.
Software testing requires deep thinking. It is a process of constantly asking questions and analyzing the information we receive. Different test activities require different thinking processes. Understanding the different thinking types will help in asking the right questions.
When interviewing testers, we should be asking scenario based questions which exercise the tester’s thinking ability in terms of the above thinking types.