Achieving Assured Quality in DevOps With Continuous Testing
DevOps has finally ushered in the era of greater collaboration between teams. Organizations today realize that they can no longer work in siloes. To achieve the required speed of delivery, all invested in the software delivery process, the developers, the operations, business teams, and the QA and testing teams have to function as one consolidated and harmonious unit. DevOps provides organizations this new IT model and enables teams to become cross-functional and innovation focused. The conviction that DevOps helps organizations respond and adapt to market changes faster, shrinks product delivery timelines, and helps to deliver high-quality software products is reflected in the DevOps adoption figures. According to the Puppet State of DevOps Report, in 2016, 76% of the survey respondents adopted DevOps practices, up from 66% in 2015.
One of the hallmarks of the DevOps methodology is an increased emphasis on testing. The approach has shifted from the traditional method of adding incremental tests for each functionality at the end of each development cycle. The accepted way now is to take a top-down approach to mitigate both functional and non-functional requirements. To achieve this DevOps demands a greater testing emphasis on test coverage and automation. Testing in DevOps also has to start early in the development process to enable the DevOps methodology of Continuous Integration and Continuous Delivery.
The Role of Testing in Continuous Delivery and Continuous Integration:
In order to deliver on the quality needs, DevOps demands that testing is integrated into the software development and delivery process and acts as a key driver of DevOps initiatives. Here, individual developers work to create code for features or for performance improvements and then have to integrate it with the unchanged team code. A unit test has to follow this exercise to ensure that the team code is functioning as desired. Once this process is complete, this consolidated code is delivered to the common integration area where all the working code components are assembled for Continuous Integration. Continuous Integration ensures that the code in production is well integrated at all levels and is functioning without error and is delivering on the desired functionalities.
Once this stage is complete, the code is delivered to the QA team along with the complete test data to start the Continuous Delivery stage. Here the QA runs its own suites of performance and functional tests on the complete application in its own production-like environment. DevOps demands that Continuous Integration should lead to Continuous Delivery in a steady and seamless manner so that the final code is always ready for testing. The need is to ensure that the application reaches the right environment continuously and can be tested continuously.
Using the staging environment, the Operations teams too have to run their own series of tests such as system stability tests, acceptance tests, and smoke tests, before the application is delivered to the production environment. All test data and scripts for previously conducted application and performance tests have to be provided to the operations teams so that ops can run its own tests comprehensively and conveniently. Only when this process is complete, the application is delivered to production. In Production, the operations team has to monitor that the application performance is optimal and the environment is stable by employing tools that enable end-to-end Continuous Monitoring.
If we look at the DevOps process closely we can see that while the aim is faster code delivery, the focus is even more on developing error free, ready for integration and delivery code by ensuring that the code is presented in the right state and to the right environment every time. DevOps identifies that the only way to achieve this is by having a laser sharp focus on testing along with making it an integrated part of the development methodology. In a DevOps environment, testing early, fast and often becomes the enabler of fast releases. This means that any failure in the development process is identified immediately and prompt corrective action can be taken by the invested stakeholders. Teams can fail fast and also recover quickly – and that is how to ensure Quality in DevOps.