Introduction to Exploratory Testing

Exploratory testing is the only type of testing that can help in uncovering bugs that stand more of a chance of being ignored by other strategies.
Bach's Definition: 'Any testing done to the extent that the tester actively controls the design of the tests as they are performed and uses the information gained to design new and better tests.'

Which simply can be put as: A type of testing where we explore software and write, execute the test scripts simultaneously.

In exploratory testing, the tester does not have specifically planned test cases, but he/she does the testing more with a point-of-view to explore the software features and tries to break it in order to find out unknown bugs.

A tester who does this, does it only with an idea to understand more about the software and appreciate its features. During this process, he/she also tries to think of all possible scenarios where the software may fail and a bug can be revealed.

Why Do We Need Exploratory Testing?
  • At times, it helps in revealing many unknown and undetected bugs, which are very hard to find out through normal testing.
  • As it covers almost all the normal types of testing, it helps in improving our productivity.
  • It is a learn and work type of activity, where a tester can at least learn more and understand the software if at all he/she was not able to reveal any potential bug.
  • Exploratory testing, even though disliked by many, helps testers in learning new methods, test strategies, and also think out of the box and attain more creativity.
Who Does Exploratory Testing?

Any software tester knowingly or unknowingly does it. If a tester comes across a bug, as a general practice, he/she registers that bug with the programmer. Along with registering the bug, the tester also tries to make sure that he/she has understood the scenario and functionality properly and can reproduce the bug condition. Once the programmer fixes the bug, the tester runs a test case with the same scenario replication in which the bug had occurred previously. If the tester finds that the bug is fixed, he/she again tries to find out if the fix can handle any such type of scenario with different inputs.

For example, lets consider that a tester finds a bug related to an input text field on a form, where the field is supposed to accept any digit other than the digits from 1 to 100, which it fails to do, and accepts the number 100. Tester logs this bug to the programmer and now is waiting for the fix. Once the programmer fixes the bug, he/she sends it back to the tester. The tester will now try to test the bug with the same input value (100: as he/she had found that this condition causes the application to fail) in the field. If the application rejects the number (100) entered by the tester, he/she can safely close the defect.

Now, along with the above given test input value, which had revealed the bug, the tester tries to check if there is any other value from this set (0 to 100), which can cause the application to fail. He/she may try to enter values from 0 to 100, or may be some characters or a combination of characters and numbers in any order. All these test cases are thought by the tester as a variation of the type of value he/she had entered previously and represents only one test scenario. This testing is called exploratory testing, as the tester tried to explore and find out the possibility of revealing a bug by using any possible way.

What Qualities Do I Need to Possess for Exploratory Testing?

As I mentioned above, any software tester can perform this testing. The only limit to the extent to which you can perform it is your imagination and creativity, more you can think of ways to explore, understand the software, more test cases you will be able write and execute simultaneously.

Advantages
  • It can uncover bugs, which are normally ignored (or hard to find) by other testing strategies.
  • It helps testers in learning new strategies, expand the horizon of their imagination that helps them in understanding and executing more and more test cases and finally improve their productivity.
  • It helps the tester confirm that he/she understands the application and its functionality properly and has no confusion about the working of even a smallest part of it, hence covering the most important part of requirement understanding.
  • As in case of this testing, we write and execute the test cases simultaneously. It helps in collecting result oriented test scripts and shedding the load of unnecessary test cases, which do not yield any useful result.
  • Exploratory testing covers almost all types of testing, hence the tester can be sure of covering various scenarios once the testing is performed at the highest level (i.e., if the exploratory testing performed can ensure that all the possible scenarios and test cases are covered).