On a DevOps team, everyone does what’s needed to get the build to the customer with a defined level of quality. Imagine a team of developers, testers, designers, and operations personnel working collaboratively on each iteration to release a new application version. Now, remove the role definitions and “lines” of who does what work and when. Imagine a team where everyone performs all job functions. DevOps teams must eliminate role bias and hierarchy to succeed.
The short answer is yes — a DevOps team’s primary focus is on continuously delivering working application code. Testing exists, but in a different way. Testing on a DevOps team is different from traditional or Agile QA testing teams. To fully understand how DevOps teams work, release all preconceptions of working roles in a software development team, then include the operations team or those in charge of customer implementations.
This guide describes what DevOps means, how DevOps teams function, and how testing remains essential to delivering quality application code to customers.
DevOps refers to the merging of development and operation tasks into a software development team responsible for delivering quality application code. It is a distinct cultural shift from traditional software development. Roles and duties are shared and processes are automated to improve productivity.
Continuous integration and continuous delivery (CI/CD) are the heart of DevOps. CI/CD and continuous testing enable the delivery of quality application code with every release. QA testing remains an essential function, as does coding, designing, and managing the production server. Collaboration is key, as is automating manual processes.
The five main principles of DevOps
In traditional and Agile software development, work tasks begin with design, move to coding, then testing, and then to creating and releasing code builds. The operations team picks up the release build and deploys it to the production server. Once deployed, the operations team makes any configuration changes, ensures connected entities are up and running, and monitors the production server for issues.
Oftentimes it’s the operations team that’s left to manage problems if the build doesn’t deploy properly on release day, or there’s an issue with server settings or backend systems like a database. Developers and testers have already moved on. The operations personnel end up holding the bag, so to speak, when deployments malfunction and releases fail. By working as a cohesive DevOps team, everyone shares full responsibility for the release and its success or failure.
In DevOps, there are no handoffs from development to testing to operations. The work is all handled by the team members. Every team member codes, tests, or deploys as needed. Teams save significant time by simply working together rather than handing off and solving issues in silos. Processes are automated and include testing, code builds, and deployment. Each is stored, versioned, secured, and maintained. Configuring and managing the production server is also performed within the team.
Although testing is not the primary goal of DevOps, it remains critically important. Testing happens in DevOps, but its approach is different from typical QA functional and non-functional testing processes. Testers need to embrace the thought of testing during coding and after and also need to have flexible skills so they can test, code, deploy, troubleshoot production server issues, and monitor production performance.
Testing begins with coding and includes practicing TDD (test-driven development). It involves developing automated unit and integrated unit tests. Many teams also practice pair testing. Pair testing is similar to pair programming, where two or more team members work together on a single workstation — one person tests while the other analyzes results. Pair testing works well when scenarios cannot be effectively automated.
DevOps teams use continuous, or “shift-left” testing, which means testing early while code is being developed or during the entire development cycle. Many DevOps teams may also use exploratory testing for UI-level tests before a release or in production post-release.
Keep in mind however, that testing in production requires careful planning to avoid creating junk data that may impact customer use or trigger invalid alerts or messages. Experienced testers understand different ways to test in production without impacting data. For example, many use Kubernetes containers. Containers provide easy accessibility that genuinely mimic a production instance without actually impacting the live environment.
DevOps teams test as part of the development and delivery process. How and when testing occurs differs from most Agile or traditional forms of software development. In DevOps, testing, development, and deployment are interrelated and performed by all team members. Even though DevOps teams focus on continuous delivery, testing is involved in ensuring application quality for every release.