Overcoming the Challenges of Exploratory Testing
Exploratory testing is different from scripted testing; learn how to understand and overcome its challenges.
Join the DZone community and get the full member experience.Join For Free
It is pretty evident from the name exploratory testing that it is the continuous process of learning through a cycle of trial and error. Unlike scripted testing, exploratory testing does not have test cases which can be executed and compared with the results. Rather, it is an intelligent way of testing which calls for innovation and individual thought process of the tester. This is also a reason why despite automation being the big word in the modern day, exploratory testing is a hot topic.
But like every other technology, some people from the testing fraternity are getting into this practice without weighing in the key pros and cons. This is not because of the lack of information, but due to the lack of implementation.
Planning to empower your team with the ability to explore their options rather sticking to the usual? Well, let’s have a look at some common challenges in Exploratory testing & how you could overcome them. By the end of this article, you will also have an idea of the best practices for exploratory testing.
Understanding and Expectations
This point is valid not only for the tester but also the client. It is very important to understand the qualitative benefits of exploratory testing rather than focusing on the quantity and amount of resource utilization. It is a tester’s responsibility to first themselves understand the significance of the art of exploratory testing and then conveying the same to the client. This poses a major challenge in Exploratory testing.
Clear communication and understanding of the process in layman’s terms are very important to maintain realistic expectations about the scope of work and it’s timelines. Unlike scripted testing, exploratory testing cannot deliver complete test coverage most of the time. And this is one of the most common challenges of exploratory testing which professionals face from clients who are looking to get their testing process automated and innovated at the same time. It is simply impossible.
Thus, a key solution to this problem is an insight into the process and to identify how it is different in terms of execution and deliverables.
Documentation (Or Lack Thereof)
We know how regular (scripted) testing works. The team prepares a strategy for the testing process, creates a well-documented plan, sends it to the team to obtain the necessary approvals. This document includes the reference terms, the plan of action the strategy, and the test scripts which are to be used. This helps the team map out the timeline involved while initiating the testing process and also keeps the client posted on the project progress. Well, this is the traditional way of testing. But if we look at the exploratory testing method, one does not have such documentation to leverage and map out the entire flow.
In fact, testers adapting the method often mistake the lack of evidence as an excuse to not document their testing process! This is absolutely wrong and should never be done.
You must be thinking about how this impacts the testing process? Productivity is a major concern for any testing project and without proper documentation and timeline definition, one cannot determine if the work is being done with optimum speed.
Additionally, for a well-defined system being tested, the bug reports generated might be less. For an individual tester, it can become difficult to explain his work progress for the time period in such a case. Now that we know this as another one of the common challenges of exploratory testing let us understand how we can minimize its impact on our working.
Like documentation, logging is extremely important. Going by the thumb rule, “Log as you execute” will make things easier for you as a tester. Moreover, logging in any form helps you create evidence for the efforts that have been put in irrespective of the outcome or delay.
2. Progress Update
Communication is key and when working with exploratory testing it can lack. But keeping the team and the client updated about the latest progress will make it easier to execute the work without undue pressure and also display your effort. Updating the team could be as simple as Sharing the logs with them.
The Oracle Problem
According to Wikipedia, “Determining the correct output for a given input (and a set of program/system states) is known as the oracle problem or test oracle problem.” This is a much harder problem than it seems and involves working with problems related to controllability and observability.
The oracle problem is one of the biggest challenges in exploratory testing. An oracle is basically a mechanism which determines the output of a certain test as either true or false. It operates independent of the system and when the test system oracles cannot be used, human intervention is required.
One of the most common best practices for exploratory testing includes human intervention in the oracle problem which has two approaches. It is either quantitative or qualitative. These inputs are supplied by the tester.
A quantitative approach focuses on looking for the right quantity of information which suffices the test results. This information is sufficient for the client to be able to take a call on the release of the software.
Similarly, a qualitative approach will make use of suitable input data with respect to the output from the test system. Usually, these values include realistic data to make sense of the results. A common example is a statistical oracle such as image analysis. In this, the range of certainty is defined and it is an example of a human oracle.
When we talk about testing, a common misconception about a tester is that testing is intended to ‘identify’ bugs document their behaviours well. But as a tester, it is important to understand that creativity and innovation are essential to a well-designed product, even the testing phase. A tester looks for the broken pieces of the software and works on it. But that particular feature might work just fine for the developer. What do we do then?
Well, an intelligent tester is the one who steps into their user’s shoes and tries using the application. This is when best practices of exploratory testing come into play as it helps the tester find the hidden overlooked bugs and errors. A simple example is leaving a field, which might be important to the client blank or enters an invalid piece of information. These incidents are called edge cases and a software can have multiple edge cases to be reported. The tester is responsible for coming up with as many scenarios as possible.
Timing the Execution
Another common issue while ensuring best practices in exploratory testing is not knowing when to adapt to exploratory testing. In fact, when it comes to exploratory testing it is more important to know when to run it than how to. This is also important because of the lack of test cases.
Exploratory testing is considered more informal than scripted testing thus making it unfit for auditing purposes. This is why not knowing how to time it can have a negative impact on the entire working.
A regulatory approval is only available based on concrete research and result which is something one cannot obtain with this method. Thus, test cases prepared post exploration is considered a validation. But now that we know it’s effect how do we make sure timing doesn’t create challenges for exploratory testing? Well, let’s have a look.
Being informal in nature, exploratory testing is perfect for prompt action. This means it should be used to find out bugs in the program. Once fixed, it can be used to verify the implementation. But when it comes to larger coverage the tester should not use this method. Once finished, a scripted testing process should be run to ensure entire coverage and verify the bug fixes.
Exploratory Testing Best Practices
1. Organize Your Test Cycle With Enough Time Window
Exploratory testing involves venturing into the unknown and trying to find faults that might get missed by scripts and other traditional forms of testing. The benefits that we get is that critical bugs can be caught through this method. However, there is a downside to it and that is the time the testers need to perform several rounds of exploratory testing.
It is very important that the project owners provide the required freedom in terms of time and implementation strategy to the testers. The freedom ensures a thorough check on the application and a higher possibility of critical bugs to be discovered.
2. Add Checkpoints Early on in the Testing Process
Exploratory Testing is a time-consuming process and this might often lead to long spells of no information regarding the testing progress. To avoid multiple teams from waiting on the entire testing process to complete, it is highly recommended that certain checkpoints be set by the testers.
These checkpoints serve two purposes. First is that the other teams like management or developers are aware of when the next communication is going to take place and the testers will have a rough path that will help them to track their process.
It is essential to note that these checkpoints need not be exact and set expectations on the outcomes. They can be rough time estimates and the area of focus in the project.
3. Record the Entire Process With Great Detail
As it is with any kind of exploration, there will not be a fixed path that can be traversed while testing an application. This would make testing an open-ended problem with countless paths to identify bugs and vulnerabilities within the system.
Recording the details will not only ensure that the tester will not repeat the same process again, but it will also help testers and developers in the future to understand what was performed and what the outcome was.
4. Aim to Be a User When Performing Exploratory Testing
Real users of the application don’t usually have a supervised guidance or a manual that gives the best way to use an application. Based on the users’ intuition and experience using other similar applications, they might use the same feature of an application in multiple ways.
Testers are usually equipped with scripts and other automation tools to test the applications. When performing exploratory testing, it’s imperative to not use these automation tools and rather think like a user and try to use the application in ways that the end-users might use them.
5. Define the Scope of Exploratory Testing With Precision
Unlike the traditional testing methods, the aim of exploratory testing isn’t to test the entire application. Sometimes, the testing is performed to address a specific need. The specific need can be to identify security threats to critical modules of an application or to discover the points of failure in a new module that has been added to the UI.
So, before the exploratory testing begins, define which specific area of the application is being tested.
6. Prioritize and Classify Your Bugs
The bugs encountered while performing Exploratory testing should be appropriately prioritized and classified. Every organization has a process where they classify the most frequently encountered bugs. This classification could be on the basis of various functionality offered by the application. This classification would help with RCA(Root Cause Analysis) later on.
Prioritization is another factor that is critical from a bug management point of view. You can prioritize your bugs depending upon the severity of damage they cause upon the application’s functionality. Is it a minor bug specific to a single web page or Is it a major one that could affect the functionality of related web pages too? Naming conventions for prioritization also vary from one organization to another.
7. Prepare an Informative Bug Report
Bug reporting is an art and one that needs to be performed with caution and concentration. Make sure you provide a unique yet relevant title to the bug for easy identification. It is always recommended as a best practice to provide the steps to reproduce. As a tester you perform a lot of tests in a day, without proper steps to reproduce, there is no guarantee that you can recollect the procedure to reproduce by just looking at the title of the bug. These steps would also ease the time and effort of your developer team. Here is an advanced guide on writing a bug report.
Exploratory testing has its own set of challenges, some of which we discussed above. Yet, it is a revolutionary method of testing which ensures a well-tested and well thought of product leaving a very little scope for common error apart from technical errors which can be taken care of by automation. Thus, it will be ideal to say that despite its challenges, exploratory testing is very important to the testing process. Feel free to share about your experience with exploratory testing in the comment section below. If you have got some questions for us then we will be happy to answer them. Happy testing!
Published at DZone with permission of Akshay Pai. See the original article here.
Opinions expressed by DZone contributors are their own.