Keeping Quality in DevOps
Before DevOps, it was common for companies to deploy changes to production as a large batch in what many of us called the “big bang” approach, which would occur on a quarterly or bimonthly basis. Batching many changes together seemed like a good idea back then because we didn’t want to inconvenience our users any more than was absolutely necessary.
Unfortunately, big-bang deploys also typically had too many moving parts and were packed with risk, often resulting in systems outages. Long before anyone started discussing DevOps, many of us began thinking that there had to be a better approach.
My own experience was that moving to more frequent deployments, such as twice a week, helped to avoid costly mistakes. By automating the entire application build, package, and deployment, we managed to support changes to production much more frequently.
One problem with this approach is that the business sometimes cannot handle changes so rapidly. The other problem is that too often, the QA and testing team cannot keep up with the need to verify and validate changes. DevOps may be able to deliver changes to production, but the rest of the team may not be able to handle continuous deployments. Improving the QA and testing function can help deal with these challenges and enable organizations to effectively handle the impact of continuous delivery and continuous deployment.
Many organizations do a fair job of ensuring that unit tests are written, and most firms also implement functional regression testing. These are all essential strategies. But what is emerging is a more effective way to handle testing coverage by delving deeper into the application and testing at the API. This approach requires some coding skills, which necessitates collaboration between testers and developers—which is also a function of DevOps.
Because some required test machines may not always be available, service virtualization testing is emerging as another best practice, whereby the interaction between test resources is recorded and played back via common messaging protocols such as a REST API. Improving the testing capability of any complex system requires automated testing interfaces, which are usually not easy to implement.
The term continuous testing is emerging as a best practice that focuses on developing testing procedures, primarily automated, to meet the growing need for fast and effective application testing. While organizations will continue to develop automated application build, package, and deployment strategies with the ultimate goal of continuous deployment, the QA and testing function must be enhanced to ensure that application quality is maintained and ensured.
We learn from these experiences that every aspect of the software and systems lifecycle is essential. In our drive for better quality and productivity, we are coming closer than ever to realizing full continuous application lifecycle management, which focuses on a wider scope of all of the capabilities—from requirements gathering to operations.