The majority of software development teams believe they don't test well. They understand that the effect of quality defects is substantial, and they invest heavily in quality assurance, but they still aren't getting the results they want. This is not due to a lack of talent or effort -- the technology supporting software testing is simply not effective. The industry has been underserved.
There can't be a successful release until software has been properly and thoroughly tested, and testing can sometimes take significant resources considering the amount of time and human effort required to get the job done right. This gaping need is just beginning to be filled.
Machine learning (ML), which has disrupted and improved so many industries, is just starting to make its way into software testing. Heads are turning, and for good reason: the industry is never going to be the same again. While machine learning is still growing and evolving, the software industry is employing it more and more, and its impact is starting to significantly change the way software testing will be done as the technology improves.
Let's delve into the current state of affairs in software testing, review how machine learning has developed, and then explore how ML techniques are radically changing the software testing industry.
Software testing is the process of examining whether the software performs the way it was designed to. Functional quality assurance (QA) testing, the form of testing that ensures nothing is fundamentally broken, is executed in three ways: unit, API, and end-to-end testing.
Unit testing is the process of making sure a block of code gives the correct output to each input. API tests call interfaces between code modules to make sure they can communicate. These tests are small, discrete, and meant to ensure the functionality of highly deterministic pieces of code.
End-to-end (E2E) testing makes sure the entire application works when it's all put together and operating in the wild. E2E testing tests how all of the code works together and how the application performs as one product. Testers will interact with the program as a consumer would through core testing (where they test what's done repeatedly) and edge testing (where they test unexpected interactions). These tests discover when the application does not respond in the way a customer would want it to, allowing developers to make repairs.
Conventional E2E testing can be manual or automated. Manual testing requires humans to click through the application every time it's tested. It's time-consuming and error prone. Test automation involves writing scripts to replace the humans, but these scripts tend to function inconsistently, and require a huge time sink of maintenance as the application evolves. Both methods are expensive and rely heavily on human intuition to succeed. The entire E2E testing space is sufficiently dysfunctional that it is ripe for disruption by AI/ML techniques.
While machine learning is often used synonymously with AI, they're not strictly the same thing. Machine learning uses algorithms to make decisions, and it uses feedback from human input to update those algorithms.
A good example is machine vision. A machine vision application may identify something as a cat when in fact it is a dog. A human corrects it (by telling it, "no, this is a dog") and the set of algorithms that decide whether something is a cat or a dog update based on this feedback. Machine learning is designed to make better decisions over time based on this continuing feedback from testers and users.
Machine Learning has struggled to reach the world of E2E testing due to the lack of data and feedback. E2E testing is typically built through human intuition about what is important to test, or what features seem important or risky. New applications are using product analytics data to inform and improve test automation, opening the door for machine learning cycles to greatly accelerate test maintenance and construction.
The future of software testing is faster tests, faster results, and most importantly, tests that learn what really matters to users. Ultimately, all testing is designed to make sure the user experience is wonderful. If we can teach a machine what users care about, we can test better than ever before.
Conventionally, testing lags development, both in speed and utility. Test automation is often a weak spot for engineering teams. ML can help to make it a strength.
What ML means for the future of software testing is autonomy. Smart machines will be able to, using data from current application usage and past testing experience, build, maintain, execute, and interpret tests without human input.
It's likely that not all aspects of software development should be automated. Given a long tradition of E2E testing being driven primarily by human intuition and manpower, the industry as a whole may initially resist handing the process over to machines. Across practically every industry, insiders contend that machines could never do a human's job. Those who have resisted the rise of ML and doubled down on human labor often find themselves left behind.
A familiar story is unfolding in the world of testing: ML-driven test automation is in its infancy today, but it is likely only a few years away from taking over the industry.
Machine Learning's core advantage in E2E testing is being able to leverage highly complex product analytics data to identify and anticipate user needs. ML-driven testing is able to watch every single user interaction on a Web application, understand the common (and edge) journeys that users walk through, and make sure these use cases always work as expected.
If that machine is testing many applications, then it can learn from all of those applications to anticipate how new changes to an application will impact the user experience. ML-driven testing can already build better and more meaningful tests than humans thanks to this data.
The tests developed by ML-driven automation are built and maintained faster and far less-expensively than test automation built by humans. Such testing leads to much faster (and higher quality) deployments and is a boon for any VP Engineering's budget.
What about the people currently doing these jobs?
Quality engineers still have a major role to play in software development. The most efficient way to assure quality in software is to embed quality control into the design and development of the code itself. Testing only exists because that process is imperfect.
As ML takes over the burden of E2E testing from test engineers, those engineers can use their expertise in concert with software engineers to build high-quality code from the ground up. From our own interviews on the matter, it seems most quality engineers would far prefer this to grinding away at test maintenance all day.
ML offers a more streamlined and effective software testing process. It establishes a process that's better equipped to handle the volume of developments and create the needed specialized tests. Smart software testing means data-based tests, accurate results, and innovative industry development.
We hope this article has helped prepare you for the future of software testing and the amazing things machine learning has in store for our world.