Testing in Production: It’s Time
Testing in Production: It’s Time!
In the world of deployment to the cloud, distributed applications and microservices, agile and DevOps methodologies, there is no longer a lifecycle phase devoted to traditional functional testing. Much of the testing becomes automated, from unit tests to smoke tests to system tests, but we have less and less functional and exploratory testing, and no phase of the lifecycle devoted strictly to testing.
Moving fast is a mantra in modern software methodologies; we deploy without full hands-on testing but have the ability to rapidly revert to an earlier “good” version. In the process, we are leaving some aspects of the application quality behind.
When that application is in production, we have to know when it is in trouble, and just what that trouble is, to understand the nature of the problem and have some data for diagnosis and repair. Even today, many cloud teams simply check whether or not their application is still operating using a continuous “ping” command, without information on performance or the availability of specific operations. In fact, all a ping tells IT and the application team is whether or not the server or instance is still running, not how healthy it is.
Ways to test in production
Instead of continuous “ping commands,” companies must invest in application monitoring to ensure that they continue to offer their users a high-quality application in production. Application monitoring encompasses a wide range of testing and data collection activities that confirm that your application is performing at optimal levels. This affirms that you are continuously providing your audience with a top-notch user experience.
One type of testing that comprises application monitoring is synthetic testing, which lets teams record and execute tests representing how users might use the application. These tests can run at different times of the day, and typically from different locations around the world.
Monitoring in production also incorporates real user monitoring or RUM. RUM is just what the term implies – in real-time, it looks at user requests coming in, and how the application responds. When you profile a large sample of users, you get a good picture of how actual users perceive and use your application.
Last, monitoring can include tracing individual transactions through the different components and tiers of the application. By tracing a transaction, you can look at code pathways and see what code is being exercised during a user session. This is useful in finding defects and slow code, as well as understanding what features are more commonly used.
While major cloud providers such as Amazon with CloudWatch and Google with Stackdriver have their own tools that perform at least some application monitoring functions, independent software companies such as AppDynamics, New Relic, Dynatrace, and some TestCraft integrations provide more complete monitoring solutions.
Production monitoring in testing
Now that we understand the role of monitoring applications in production, let’s delve into why production monitoring is becoming a function of the software tester. Testing in production is not only something a tester should be doing, but will also be a responsibility that will fall under the purview of almost every testing job in the future. Unless we want the professional practice of testing to gradually fade away, it must adapt to new ways of building applications and managing the application lifecycle.
Think of production monitoring as shifting testing to the right. We talk a lot about shifting left, where more testing occurs earlier in the development process. That’s fine and important, but testing is almost always incomplete when an application is deployed in a DevOps or agile team because new features are rushed to the production build. How do we make up the testing, especially if we are deploying regularly or even continuously?
Simply, we do so when the application is in production. We find ways to look for defects and poor performance after the application is serving real users. Using application monitoring techniques, testers can use real data to find and diagnose application errors quickly, and with information that is derived from the actual production environment.
Risk vs. reward when testing in production
While some may feel that testing in production is a new phenomenon, it’s something that many QA teams already do informally. No matter how many times you review the code and rerun the tests before you deploy, there is often a gap between the team’s original testing plans and what actually happens in real-time. Therefore, when you think about it, there will always be uncertainty when it comes to releasing new application updates. Testing in production is a great way to address these uncertainties in a responsible, thought-out way.
When deciding whether or not to implement a more formalized version of testing in production, it can help when you mitigate the risks of deploying a release that may contain a bug or waiting until the application is virtually bug-free before deploying. This is not a suggestion to deploy buggy software that will upset your users; testing early in production is also critical as bugs are generally more expensive to resolve later on in development. Rather, this exercise is a way to determine whether you are delaying deployment out of legitimate concerns or out of a fear that can prevent your company from moving forward.
There are examples of many companies across multiple industries that have found testing in production quite beneficial when they make the investment. You can learn from their example to determine the most effective to implement testing in production and get over the fear of risks that will hinder your company’s growth.
Testing in production as the future
The idea of testing continuing into production bothers many testers because testing has traditionally verified the quality of the application prior to release to production. However, thanks to agile and DevOps, testing is changing radically, and testers have to look at the best way to change. Engaging the application at all times during development and deployment is the most promising way of doing that.
Testing in production is in the future of testing. Testers will continue to do traditional test activities, especially exploratory testing. Automation has proven itself valuable in functional testing, by enabling testers to spend less time on rote manual testing. And AI will provide yet-undefined benefits across the testing process.
Editor’s Note: The post was originally published in January 2019 and has been updated for accuracy and comprehensiveness.