With time progressing, technology is transforming at a lightning speed to make the software development process much simpler, faster, qualitative and convenient. Technologies like machine learning and AI are being utilised in several ways, not only to process qualitative and faster data but also to process predictive data. Having said that, the software development lifecycle has also evolved extensively since the last decade. Till date agile is the go to development process used by most of the development team, but since the introduction of DevOps, teams are either opting for Agile+DevOps or even implementing only the DevOps methodology. The basic difference between Agile and DevOps is that Agile refers to an iterative approach which focuses on collaboration, customer feedback and rapid releases while DevOps brings the development and the operations team together to manage the end to end engineering process. DevOps, especially in the area of testing products, brought a paradigm shift! In this blog, we will dig deeper into the DevOps testing strategies and understand how it contributes as the best testing strategy for Software Development Life Cycle.
What is DevOps ?
DevOps is such a term that doesn’t have a definitive definition, however, those that do attempt to define it seem to get it right because of its varied understanding. DevOps cannot be termed as a software development methodology, or a site of tools, etc, it is a philosophy to bring the development, testing, operations team together in order to meet the need for shorter and more frequent software deliveries. This helps the organizations to focus more and respond frequently on the changing business requirements. DevOps also focuses on regularly optimising the workflow, architecture, and infrastructure inorder to deliver high quality applications, this process majorly constitutes into DevOps Cultural Shift.
Setting the base by implementing Agile – DevOps approach
The goal of most DevOps projects is to automate as many manual processes as possible. These manual processes do offer roadblocks in speedy deployment. This is caused by the lack of shared ownership of the end product which is contrary to the basic agile process where the cross functional agile teams are equally responsible for the quality of the product or the success of the project. This causes the agile DevOps team to perform testing by the entire team, be it developers, testers or operations team. In the DevOps model, testing is done continuously, at the earlier stages of development lifecycle, often and even after the applications are in production.
The goal of every DevOps strategy is to build, test and release softwares faster and frequently. In an organisation you might get these two scenarios, where either you start fresh where the coding culture or development pipeline is not yet established or where the development or testing practices are already established.
Set Up a Continuous Delivery Pipeline
In the first case, where the coding practices are yet to be formulated, automating your software delivery pipeline would be the first step. If you are successful in creating a Continuous delivery pipeline then you would be ahead of your competitors as you would be the first one to deliver a higher quality software in the hands of the clients and users, faster than your competitors. Also, you would be able to respond to the clients demands and changes more rapidly.
Using Workflow Visualization tools
Now, in the case of adding a DevOps pipeline into an existing organisation having an already defined development pipeline, you might come across several bottlenecks in your software delivery process. These bottlenecks may range from the small faulty manual processes to big bang roll outs that fail during production, leading to unhappy users.
There are several ways to get a handle over the current state of your development process by using workflow visualization tools like business process maps and flow charts to break down and understand the current delivery process and extract its flaws and roadblocks. One Of the simplest visual process management tools is the Kanban Board.
Helps the team to improve workflows through performance indicators
The kanban board, as shown in the image above , is just like sticky notes that depicts the project status, progress, and other issues. The value that it adds in your DevOps pipeline is that it indicates the progress and the bottlenecks in your DevOps roadmap which encourages the team to improve the workflow. It highlights the bottlenecks in the workflow that cause the work to slow down or impact the performance indicators that the entire DevOps team (from testing to development to operations) had mutually agreed on.
Improves collaboration and encourages the Dev and Ops team to follow single workflow
It also helps the Development and Operations team to work in collaboration. It helps them to avoid duplicate work and optimise the company’s release management process, in the future you will likely see an evolution of the two teams merging into one single team with a single workflow that includes both the Development and the Operations activities.
Focus on Continuous Testing
Continuous testing is a key element of a successful Devops pipeline. Continuous testing is a shift left approach designed to test earlier, often with the goal of increasing the quality and making the test cycles shorter and reducing the possibility of software defects and making their way into the production code. It maintains a high level of quality as it validates the code for quality at each and every stage of the development life cycle. Continuous testing should be carried out in the following stages
- Continuous Development;
- Continuous Integration (CI);
- Continuous Delivery (CD); and
- Continuous Monitoring
Continuous development is the first stage for setting up a continuous delivery pipeline. In case your developers are following the Test driven development (TDD) then they will write unit tests for each piece of code, even before the development code is written. TDD helps the testers to think through each piece of code they are building, their behaviours in terms of input, output and error conditions. New features implemented by the developers are checked through a central code base prior to the software build, which compiles the software code into the binary code.
In Continuous Integration, small pieces of code are deployed into a centralized repository quite frequently. Each change (software code) is tested to prepare the build and also the integration errors are kept in check to avoid any errors. Hence testing is done early and often in continuous integration which inturn increases the speed of software development.
In Continuous Delivery, once the software code passes all the required tests, it is then released into the production environment. This ensures that very good quality builds are released to the customers. The advantage of continuous delivery is that it allows the delivery of the new functionality to the users within minutes and when needed, it is also responsible for giving instant feedback to the DevOps testing team, this allows them to respond quickly to the customer demands. The downside of Continuous Delivery is that, in case you happen to deliver softwares that has bugs in them, the probability of getting the clients irate and losing them is high. To avoid this risk in Continuous Delivery, many DevOps teams prefer testing post deployment in the production stage which is also called right shift testing. Here you can also take user feedback and incorporate it in the current build. This last phase is nothing but a part of continuous monitoring.
Best Practices for Continuous Testing
Automate as many tests as you can
In Continuous Testing, the testing is done early and validation of software code occurs at each and every stage of the development pipeline. Testing here becomes a challenge where the application is being constantly updated via Continuous Integration, where the code is integrated constantly into a shared repository. Automation testing is key here to get quick feedback about the application quality and pass the code to the next stage of deployment. The faster the testing of code happens, the faster the code is deployed and faster the product is released. Hence, pairing Continuous Integration with automation testing enables the team to test the code in every new iteration and reduces the chances of errors in the code.
As shown in the image above, you can use this figure as a Test Automation Pyramid for your DevOps testing strategy. The base or the first step is made up of Unit tests, this can be a strategy if the developers are integrating the code into a shared repository several times a day. This involves running unit tests or component tests and a variety of acceptance and integration test cases are executed on every check-in (application update).
Use Pair Testing on Tests you do not Automate
Knowledge transfer through pair testing is one of the best practices to increase the efficiency by allowing the senior members to train the junior ones. This will help maintain the DevOps pipeline velocity, this won’t break the workflow and instead make it more efficient. Pair testing is similar to pair programming where two programmers work together in the same project. In pair testing, two testers work on the same keyboard to test the application wherein one does the testing and the other analyses the test results. This can even be done between the tester and the developer. Pair testing is also instrumental in breaking the communication barrier between the testers, developers and application/platform operators and helps create interdependency between cross functional teams working in silos.
If we look back to the evolution of software development lifecycles, it has come a long way with the introduction of DevOps. Although it is no big secret that Agile is one of the best practices for software development which brought the clients and the development teams together, DevOps had something more to add. As the name suggests it brings the development and operations team together to deliver a software release, follows Continuous Integration and Continuous Delivery to accelerate the speed of testing and software delivery, these factors makes DevOps unique and more valuable. But as we say there is always room for improvement, we have to follow some strategies to make the most of the DevOps workflow. Hope the strategies shared in this blog will help you make your DevOps roadmap more clear and achievable.
Published on Java Code Geeks with permission by Balamurugan, partner at our JCG program. See the original article here: Unravelling the Best Practices for DevOps Testing Strategy
Opinions expressed by Java Code Geeks contributors are their own.