It’s Time to Graduate from Automation to Autonomous Software Testing
Automation is relatively easy for me as an engineer. I start with a manual task and then I figure out how to remove the human element.
Forty years ago I might have been writing this blog as a news article, using a pen and paper, or a typewriter. When I had finished my article, I had someone check it for spelling and grammar. The process of publishing my article involved typesetting, a printing press, and distribution by trucks to people’s houses and places of business. Now that process is entirely automated. Many of the manual, time-consuming steps of publishing have been eliminated.
But it is not autonomous. My laptop does not write the blog for me, or know to add keyword tags and an image, or format it for a publishing platform like WordPress so that you can read it a minute later on your smartphone. None of these automated steps are connected to each other, nor do they help me write a more comprehensive article in less time the next time around.
In the world of software development, the same distinction exists. We are seeing a multitude of software testing tools which automate software testing tasks. In our space, everyone does automated testing already.
But no one, to our knowledge, has created autonomous testing.
The difference between autonomous and automation is in the degree of independence.
Your car can have automatic (automated) elements like an automatic transmission, automatic windows, and a moonroof, which are all things a driver no longer has to operate manually (with hands). A voice-activated entertainment system in a car is a similar form of automation. It is a single thing that is dependent upon your voice to operate it; it’s safer because you no longer take your eyes off the road to select a music channel or song.
An autonomous vehicle, by comparison, is a holistic, integrated system of automation which operates the majority of its functions independently from a driver. It accelerates, merges, steers, brakes, and comes to a complete stop in a parking spot without a driver performing those functions. The autonomous system takes over for the driver, and the driver takes on a new role: passenger.
The amount of data and systems involved for autonomy is vastly greater than the data needed for automation. A self-driving vehicle is an integrated system that involves hundreds of on-board sensors, cameras, and the LiDAR program. Plus, the car is constantly downloading maps for navigation, maps which have to be accurate within a single inch. Network World reported that self-driving vehicles will generate and consume roughly 40 terabytes of data for every eight hours of driving, according to Intel CEO Brian Krzanich.
Powered by artificial intelligence, autonomous software testing has more in common with the self-driving vehicle. It aggregates the data that it learns from the tasks that it performs, and uses that to test the next software application faster and more meticulously. It says, in effect, “I’ve seen this situation previously, and I know exactly what to test, where to test, and most importantly, where not to test.”
Your software quality and testing speed will not necessarily improve with isolated elements of automation, especially if they have to be initiated or controlled by human intervention—manual steps which are prone to error, forgetfulness, or fatigue.
Autonomous testing restores agility by connecting tools and restoring end-to-end test execution. Test cases are paired with analytics and correlation results. IT can now keep up with rapidly changing requirements across entire the application landscape.
Here are several key elements in the software development life-cycle that can be run independently by a self-learning, autonomous testing system:
- Application awareness
- Test script generation
- Test data generation
- Self-correcting tests through continuous deep-learning
- Impact analysis for smarter regression testing
The self-learning autonomous system covers the life-cycle of test script generation, dynamic data generation, and continuous test execution. Tests are run as frequently as needed to match the pace of development. Test scripts are created and maintained from plain English test suites without the need to ever write code. Defects are pushed to CI/CD tools for resolution.
As you consider the automation of software testing, make sure you are investing in an independent, end-to-end autonomous system that covers the entire software development life-cycle (a self-driving car) versus an automated module that only addresses a single task (automatic transmission) and doesn’t learn anything from the test.