Bach’s Definition: ‘Any testing to the extent that the tester actively controls the design of the tests as those tests are performed and uses information gained while testing to design new and better tests.’
Which simply can be put as: A type of testing where we explore software, write and execute the test scripts simultaneously.
Exploratory testing is a type of testing where 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 testing, does it only with an idea to more and more understand 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 un-detected bugs, which is very hard to find out through normal testing.
- As it covers almost all the normal type of testing, it helps in improving our productivity in terms of covering the scenarios in scripted testing and those which are not scripted as well.
- It is a learn and work type of testing 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 and more creativity.
Who Does Exploratory Testing?
Any software tester knowingly or unknowingly does it. While testing, if a tester comes across a bug, as a general practice, tester registers that bug with the programmer. Along with registering the bug, tester also tries to make it sure that he/she has understood the scenario and functionality properly and can reproduce the bug condition. Once programmer fixes the bug, tester runs a test case with the same scenario replication in which the bug had occurred previously. If 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 an 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 and accepts the number 100. Tester logs this bug to the programmer and now is waiting for the fix. Once programmer fixes the bug, it sends it across to the tester so as to get it tested. Tester now will try to test the bug with same input value (100: as he/she had found that this condition causes application to fail) in the field. If 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, 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 character 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 represent 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.
- 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 tester in confirming 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 shading of load of unnecessary test cases which do not yield and result.
- Exploratory testing covers almost all types of testing, hence 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).