Introduction
Continuous Testing is the process of testing at all stages of software development – one after the another- without any human intervention. Continuous Testing is key to faster delivery of Agile products to the market.
Continuous Testing makes it possible to eliminate testing as a bottleneck for faster software development and delivery. But the path to achieving Continuous Testing has its own challenges, most common of which are mentioned below.
Common Challenges
1. Lack of Testability Support in Products: A test automation system is a very basic requirement for Continuous Testing. To achieve strong automated testing for a product, you need to have almost all of your test cases automated. But does the product have the testability support required to automate all test cases? Not always! If products are not designed, keeping testability in mind, achieving continuous testing may become a distant dream.
Achieving continuous testing for new feature work done in legacy products becomes more difficult if the product didn’t have testability support initially. Adding testability support to such products is expensive and may not always get prioritized as compared to other items on the product roadmap, draining down the efforts for Continuous Testing.
2. Lack of Standard Tools: For a variety of products, standard tools to achieve continuous testing don’t exist. Teams often resort to using in-house test automation tools or frameworks which are neither well-documented nor well-maintained. This adds to the woes of the testing team as they now have to struggle with the issues of the tool/framework also.
With in-house tools/frameworks, you have the benefit of code-ownership. You can make changes to the tool/framework to get desired behaviour, but that is a costly affair in terms of resources. You are now investing your resources to evolve the tool/framework rather than the product. Practically, teams don’t have the luxury to customize the testing tool/framework for their needs when they need to deliver a quality product on an impending timeline.
3. Lack of Faster Feedback Loops: To leverage Continuous Testing, it is important to incorporate feedback on an on-going basis. To incorporate feedback on a continuous basis, you need feedback loops in the system that can help you gather feedback in real-time. Lack of such feedback loops introduce a delay in action, later affecting the quality of the product.
For example, if one of the test environments used to run automation tests is down, an alert message for the same helps you act timely to rectify it rather than digging into the cause of the non-arrival of the test report for scheduled test automation run.
Similarly, it helps to have a real-time dashboard for performance which depicts the performance metrics over a period of time rather than digging into logs and code-profiler reports every time you want to check on a product’s performance. When such dashboards are accessible to everyone on the team, it helps in bringing critical issues to the table and gets them prioritized.
4. Lack of Testing Infrastructure: Often, organizations embark on the path of embracing Continuous Testing, without realizing the budgetary needs for it.
To implement Continuous Testing, you might need additional test environments that need to be maintained and kept up and running round the clock. You might also need advanced tools to incorporate faster feedback loops.
Although these costs aren’t significant as compared to the cost incurred due to the poor quality of the product, there is a need for organizational commitment. A half-way journey to continuous testing without adequate infrastructure only adds to the woes of the testing team and doesn’t help anyone.
5. Lack of Enough Testers: Most product teams don’t have enough testers, which sometimes creates bottlenecks for achieving continuous testing. Continuous testing is an on-going journey and requires high initial investments in terms of setup, which may create extra workload for testers.
Until continuous testing reaches the stage where it can replace the need for traditional testing, testers are often caught in balancing the efforts required for switching to continuous testing and their regular testing tasks that usually have a high priority w.r.t product needs. This adds to the pending backlogs for achieving continuous testing, creating a chicken-and-egg situation, where continuous testing can reduce the testing time but there is no time to set up continuous testing.
6. Test Data Management: Depending on the product and its testing needs, test data management sometimes becomes a bottleneck for continuous testing.
Test data when stored locally for testing environments may result in different versions of test data which may be difficult to maintain. Maintaining test data in a central repository and then accessing it from different test environments may ease this problem but may introduce other issues like network latency in tests.
7. Increased Complexity: As the scope for the product grows, so does the scope for continuous testing.
With a large number of tests added to the system, it becomes a challenge to make the tests execute quickly. If tests take too long to run, it defeats the whole purpose of continuous testing as quick feedback is not available. If not all tests are run, it seems like a compromise on the quality of the product. Also, if not all tests are run, it makes the effort of adding all those tests to the system go in vain.
8. Scalability Issues: Not all testing frameworks/tools may be suitable for scaling purposes.
Lack of support for large concurrent test sessions and slow test executions can become serious bottlenecks for your dream of achieving Continuous Testing.
Such scalability issues aren’t always noticeable in the beginning. They become clearly visible only after a significant amount of tests have been added to the system and the test system starts to get highly loaded. This makes the situation worse as at such a stage, it’s even more difficult to switch to a different tool/framework.
9. Inefficient Processes: Sometimes, the processes followed in the team/organization are not conducive for achieving Continuous Testing. Let’s check:
i. Change in Requirements: If requirement specifications keep on changing frequently, it creates a lot of rework for the team, especially the testing team as tests may need to be updated every time there is a change in the requirements. This may adversely impact the efforts for continuous testing.
ii. Unclear Roles and Responsibilities of Team Members: If the roles and responsibilities of team members are not clearly defined, it may result in ambiguous ownership of tasks. Such ambiguity can lead to redundant efforts on some tasks and some tasks getting totally ignored. Clear ownership of tasks is important in achieving Continuous Testing.
iii. Excluding Testing Team in Initial Discussions: If the testing team is not included in all product-related discussions from the beginning, it would create gaps in the understanding which may impact continuous testing. Also, it would require additional processes such as hand-offs from Developers to Testers from time to time, adding inefficiency to the whole system.
iv. Bureaucratic Approvals: If your team/organization functions with heavy bureaucracy and approvals are needed for every small thing, it can add inefficiency to the whole system which can make it hard to achieve continuous testing.
For example, if a test environment has gone down and you don’t have the required access privileges to bring it back up and need to wait on some other team/person for this, it can lead to inefficiency in the continuous testing pipeline.
Suggestions for Resolving Some Common Challenges
Most of the common challenges discussed above can be worked around with the help of some suggestions discussed below.
1. Include Testability from Beginning:
i. Testability should be part of the low-level design for the product.
ii. Any feature developed for the product should not be considered complete unless it has the required testability support for Continuous Testing.
2. Evaluate Tools/Frameworks before Including them in the System:
i. It’s good to evaluate any testing tool/framework for required support before getting bound to it by making it part of the system.
ii. The right combination of open source and paid test frameworks/tools can be used rather than relying solely on open-source test frameworks/tools.
iii. Having a defined set of parameters to capture results of experiments with new tools can help in a better evaluation of tools/frameworks in a much-organized way.
3. Evaluate Budget Requirements before Embracing Continuous Testing: Implementing Continuous Testing may need a significant budget for test environments and tools/frameworks.
Evaluating budget requirements before starting on the path of Continuous Testing helps in making informed decisions early rather than being stuck in the middle of the path due to budgetary constraints.
4. Leveraging Cloud-based Virtual Infrastructure: Cloud-based test environments can be made accessible instantaneously on demand. They also save testing teams from most of the headache associated with managing and maintaining traditional test environments. Leveraging cloud-based virtual environments can help resolve a lot of issues related to the availability of test environments for Continuous Testing.
Using test automation tools that support test automation workflows on the cloud can further add to these benefits. Testsigma is one such tool.
Completely hosted on the cloud, Testsigma saves you from any installation and configuration issues. You are ready to start automating soon after signup.
5. Have Enough Testers: Continuous Testing is an on-going journey and testers are the major contributors to make this journey successful. It’s good to have sufficient testers in the team to share the load, at least during the initial period of switching to continuous testing. Once your Continuous Testing pipeline is well established and you have completely done away with the need for traditional testing, you can then try to reduce the number of testers on the team as per the new need.
6. Efficient Test Data Management: Test Data Management can vary from product to product. Maintaining a central repository of test data helps to avoid fragmentation issues and facilitates easy updation.
To workaround, the latency issues in accessing central test data repository from test environments, the network topology of the environments can be customized to get the optimum experience.
7. Leveraging Distributed Systems: To combat issues related to complexity and scalability, the continuous testing pipeline can be designed as a distributed system. Most modern tools and frameworks support distributed architecture and can be used for scalability.
Also, if you use a tool hosted on the cloud-like Testsigma. It gives you the ability to scale up and down your infrastructure needs according to your testing needs.
8. Resolve Inefficient Processes: Processes that are inefficient and not well designed are bound to create bottlenecks in the overall effort of achieving continuous testing. Such processes should be resolved before they become part of the continuous testing initiative.
Conclusion
Continuous testing is an important component of the continuous integration and continuous deployment (CI/CD) pipeline. To make CI/CD effective, it is necessary to make continuous testing effective. Continuous testing needs to have organizational and infrastructural support to achieve the speed and reliability that can enable quicker delivery of Agile products to the market.