In the past few decades, software testing has evolved in terms of both the tools used to perform different activities and the mindset of the people using those tools. There used to be only a handful of tools used in software testing, but now we have a plethora of tools to choose from, from proprietary to open source. Likewise, people have started thinking of testers as information brokers instead of gatekeepers, and there have been a lot of positive developments in the agile world that have contributed to significant changes in the processes that teams follow in their software development lifecycle. Advancements in technology are to thank for these evolutions.
From the way we look at software, evaluate risks, think about complexity, design our test approach and strategy, and help to release a stable product to the customer, technology has definitely had an influence on how we test software, and that influence will only continue as technology advances. On a high level, here are five key things we’re already seeing that are going to shape the future of software testing.
1. Artificial Intelligence
About five years ago, everyone was talking about “mobile first” and giving the user a mobile experience using mobile web, native, and hybrid applications. Now, the new buzzword is AI. It is in self-driving cars, home assistants (people sure do love their Alexa), computer vision, health care, finance, and now in software testing.
Currently, there are very few reliable tools in the market that use machine learning to help in the authoring and execution of functional testing, end-to-end testing, and regression testing. They are primarily concentrated in UI-based test automation—the more tests the user creates, the smarter the algorithm becomes, which makes the tests more stable.
Here are some of the benefits we could expect to start seeing in testing thanks to AI:
- Easier authoring of tests
- Lower maintenance work on test scripts
- Fewer flaky tests
- Having nontechnical people start doing automation
- Easier CI/CD integration
- More reusable tests
For example, I built an automation framework with Cucumber, Java, and Appium. Although I had a robust framework and a lot of flexibility in writing custom code to perform various actions, I often suffered with the common problem of maintenance. When a developer changed attributes of an element that were already covered by my automated tests, the tests started failing. As a result, I spent a lot of time just maintaining these tests instead of writing new automation code to cover new functionalities that were implemented.
This problem can now be solved by using dynamic locators the AI extracts from the Document Object Model (DOM). In real time, the AI analyzes all the object trees and properties from the DOM and can create a list of different attributes for a particular element. So, when an attribute of an element changes, the AI tries to go to the next attribute in the list to locate the element and keeps going through the list until the element is located. The tests are more stable, the authoring and execution of tests are much faster, and the tester has to spend less time on maintenance.
DevOps has helped software development teams and operation teams to better collaborate, thereby ensuring there is constant automation and monitoring throughout the software development lifecycle (SDLC), which includes infrastructure management as well.
You may ask, how is this going to influence software testing? The answer: Everything we do as part of testing is going to change. The changes I foresee include:
- A need to start automation right at the beginning of the SDLC and ensure nearly all test cases are automated
- All the QA tasks would need to be aligned to ensure a smooth CI/CD cycle
- A high level of collaboration would be needed to ensure there is continuous monitoring in the production environment
- All the QA environments would need to be standardized
- The testing mindset changes from “completed testing on this module” to “What are the business risks that have been mitigated in the release candidate?”
The key to all the above changes is automation. DevOps and automation go hand in hand—without one, the other won’t work. This is where smart people and tools can help in bringing shorter and more dependable release cycles.
I worked at a company where there was minimum collaboration between the development, testing, and operations teams. We were seeing a lot of gaps in the SDLC cycle in terms of more bugs getting into production, unstable CI/CD infrastructure, and less visibility into production monitoring and statistics. Noticing these gaps, the team decided to implement a DevOps practice, and everyone started collaborating and contributing in each phase of the SDLC. This started from requirements gathering and extended all the way to production release and monitoring.
This increased culture of collaboration started having positive effects in team morale, more automation coming into place, and the whole team starting working together as one unit.
3. QA as a Service
Just like how we have SaaS (software as a service), IaaS (infrastructure as a service) and PaaS (platform as a service), we now have QAaaS. Over the past few years, this has become a popular way for companies to meet their software testing needs.
Companies that have QAaaS solutions make different aspects of your software testing process easier by providing:
- Test case management and maintenance solutions
- Test automation tools with less need for coding
- Robust test reporting features with logs, video recording, and screenshots
- Easy integration with CI systems
Resources such as mobile phones, virtual machines, secure networks, and human testersIn the past seven years of doing automation, one big problem I have always run into is having to maintain my own server machines to run my automated tests. The server machines have different problems, like running out of storage space, a flaky internet connection, slow processing speed for the number of tests that are being run continuously throughout the week, and the need to be frequently updated with the latest OS, build tools, security patches, IDEs, and so on. These kinds of problems could be solved with QaaS providers, as they can do all these activities for you, so team members can concentrate on more critical tasks.
In the future, QaaS providers are going to think about more ways to improve their offerings to stay ahead of their competitors, which will benefit software testers, too.
4. The Internet of Things
With the advent of wearables, smart homes, connected cars, and other cloud-based technologies, the internet of things (IoT) has become a big topic of discussion. The amazing thing about these devices is that there are so many communications and integrations taking place every second.
Let’s analyze, on a high level, the different communications taking place with a wearable fitness tracker. First, the mobile app and fitness tracker need to communicate with each other. The data captured by your mobile app should seamlessly integrate with the desktop, mobile web, and tablet versions of the app, and all these communications across devices should happen in real time. All the data travels to and from the cloud, the devices, and the apps. People also can form groups and compete with each other via the app, so these calculations and communications need to happen in real time, too. Based on different events triggered, the proper notifications need to be sent to the right user at the right time. All these communications happen over the internet.
Imagine you are a tester testing this fitness tracker. Where do you start? How would you design your test strategy and approach?
The IoT introduces its own level of complexity into software testing. It is going to affect the way we think about testing, particularly because more concentration needs to be given tointegration testing than the old approach of testing each component separately.
For example, when I was working for a travel booking company, we came up with a new app for the Apple Watch built using WatchOS (when it was first introduced by Apple). The application had limited but useful functionalities, like the ability to view notifications and rewards information, reservations, and locations of hotels, flights, and car rentals. While testing this application, I noticed that when the Apple Watch app was connected to the same app on my phone, there were weird issues: When I minimized the app on the phone, the Apple Watch went blank, showing only a black screen; but when I opened the app on the phone again, the black screen disappeared, and the Apple Watch app behaved normally.
This is a perfect example of why it is important to do integration testing. With more and more devices coming into the market, this is going to be critical for organizations and users.
There are now robots that do testing. Some people may think this is scary in terms of job security, but I still believe that the human mind can never be replaced. There would still need to be humans to monitor the robots to ensure they are doing what is expected of them and to actually program them to do things. How far is this scalable? Only time will tell.
In summary, advancements in technology have already started influencing the way we are doing software testing. It has also caused companies to rethink their organizational structure: The QA team is moving toward being embedded within the development team, and the whole team will own quality. It also will become important for the research and development group to be in frequent interaction with the development group in order to make products smarter and more useful for their customers.
There will also be a need to have procedures in place to handle large amounts of data, as well as appropriate computing power to comb through this data to get useful information and feedback. Finally, to make all this a reality, companies need to adopt lean processes and be much more transparent to prevent being an obstacle for innovation. Lean transformation will be vital for effective growth.
It’s important to change our mindsets about how we view systems and to test them accordingly. We can choose to either ignore it or embrace it. What will you do?