Software testing is not an island on its own. It is influenced by changes and advancements in the technology landscape, and testing itself influences change in how software is built and shipped. Gone are the days of manually testing a software application within the confines of a corporate firewall. Today’s cloud-native applications are being tested by open source technologies, automated processes, distributed teams, and as part of a CI/CD pipeline.
Let’s look at the leading technology trends shaping software testing today, and discuss how you can leverage them to stay ahead of the curve.
1. GitOps and extreme shift-left
In the DevOps world, a recent trend has been to take shift-left to its extreme and move testing so early in the release pipeline that testing happens alongside development. The basic ideas for this have been around for a long time—the earlier you test, the more bugs you avoid, and the more costs and resources you save down the line. However, the technology and mindset to implement this have not been available until recently.
GitOps is one example of this trend. GitOps is about using GitHub repositories as the centerpiece of the pipeline. As developers write code, GitOps recommends that they do dry-run tests on their code to get immediate feedback on what’s broken. This puts more onus on the developer writing the code to test what they write and take responsibility for code quality themselves. AWS pioneered this approach with their ‘you build it, you run it’ mantra a decade ago, but GitOps is more clearly defining how this can be implemented in any organization.
That it has led to newer, lightweight testing solutions like headless testing, which are employed at the very start of the pipeline. Headless testing is lightweight because it does away with the browser frontend, and instead, uses a headless browser to run unit tests. It is executed using lightweight container instances rather than VMs. It requires that test scripts be kept extremely small and focused. The results of each test are delivered immediately, with sub-second latency.
2. Continuous deployments and extreme shift-right
Application deployment is much more frequent and dynamic than it used to be. Modern deployment tactics like blue-green deployments, canary releasing, and A/B testing have greatly quickened deployments. They reduce the risk of sending out faulty releases to all users and restrict the blast radius of issues to a small subset of users. They bring predictability to product development and improve the user experience by leaps and bounds.
Despite these benefits, continuous deployment has added much complexity for DevOps teams. Teams can no longer use production-like sandbox environments to run tests before releasing a version of the application. The reason is they can’t accurately replicate production data and real-world usage scenarios. The only solution is to have software testing shift right, all the way to testing in production.
These tests are closely knit to blue-green and canary releases. They require robust monitoring to track performance in real-time and make decisions on which versions to roll back and which to promote from alpha to beta. There needs to be a feedback loop so results can be traced back to their origin early in the pipeline. Testing in production was a dream for QA teams in the past, but today, it is a necessity.
3. The explosion of platforms & devices
With the explosion of operating systems, browsers, mobile devices, and application types, QA teams have found it impossible to write unique tests for each combination. Instead, the idea of ‘write once run anywhere’ has caught on with both developers who build applications, and QA teams that are looking to implement testing at scale.
Open source test frameworks have led the way in calling for cross-platform solutions. Selenium was the first to introduce cross-browser testing way back. More recently, mobile frameworks like Calabash and Appium brought this capability to mobile testing. Today, there are many ways to implement cross-platform tests that run on both Android and iOS, and across all browsers, and all versions of each browser. Even with hardware, real mobile device clouds have sprung up that rent out mobile devices on which you can run tests remotely via the cloud. ‘Write once run anywhere’ is a complex challenge to solve, but recent trends in the field of software testing have been very promising.
4. Machines testing other machines
The majority of QA teams have yet to perfect their test automation practice, but most have started automating their tests to some extent. While this is happening, we’re on the verge of a whole new wave of test automation. This new wave utilizes artificial intelligence and machine learning to run tests and handle test data rather than have a person designing automated tests.
This is still a bit futuristic, but the day is not far off when algorithms are trained to crawl application code and data, and generate test scripts on their own. At least starting with unit tests, there’s the opportunity to replicate the most common unit tests irrespective of which application it’s for.
While we’ve witnessed an explosion in mobile devices over the past decade, the next decade will see an explosion in IoT (Internet of Things) and connected devices that far exceeds what we’ve seen with mobile. At this massive scale, algorithms will need to be implemented to analyze patterns and anomalies in vast quantities of data. This doesn’t negate the need for QA professionals, but rather, redefines what it means to be one.
Software testing is always changing according to the larger technology trends. The best approach for QA teams is not to be dismissive of these advancements, but to embrace them and make the most of them. Teams that are the best at this will remain indispensable and will build the application experiences of tomorrow.