How We Put Testing in the Middle of Software Development and IT Operations
Improvements in Information Technology’s (IT) software development have focused on shortening the software development life cycle to increase speed to market to meet business demands. Agile methods increased the velocity of software development processes, but bottlenecks occurred in moving new or changed software code from a development environment into test and production environments. DevOps, as the name implies, addresses the workflow between software development (Dev) and IT operations (Ops) to reduce the time between changing code and getting it to production.
DevTestOps is not official terminology in IT. Just try an Internet search! As a software testing evangelist, I like using the term DevTestOps to advocate that DevOps without testing is just moving potentially poor quality code to production faster. Similarly, application security experts like using the term DevSecOps to make the same point, but from a security perspective.
Achieve Goals, Reduce Risk
DevTestOps implies that there is a set of automated tests that are executed with each software code build to verify the quality of the software release. This verification occurs for each environment such as a QA, testing, staging or pre-deployment and production environment. Environments are composed of software (operating system and applications), hardware, network configurations, databases and data.
Developers should have automated unit tests to verify their code works before they merge their code from their local machines to the development environment. When the merged code is ready for promotion to the QA or testing environment, automated tests verify the functionality, integrations, data integrity, security, and performance of the software release. Similar tests can be run in the staging or pre-deployment environment. And lastly, there are tests to verify the software release after it is promoted to the production environment.
Continuous testing of a software release as it moves through its lifecycle environments helps detect quality issues early. This removal of quality issues helps DevOps team achieve their goals of reduced risk of project delays and avoidance of production problems.
Steps to Implementing a DevTestOps Mindset
DevOps teams and leaders play a critical role in software quality. Their DevOps process must include a testing component, in addition to the building, packaging, releasing, configuring and monitoring process components.
If DevOps processes are already in place, then switching to a DevTestOps mindset requires recognizing the value of tests as a measurement of deployment readiness. In some companies, this may be a cultural shift, if speed to market is the driver without quality considerations. Without senior leadership buy-in to quality and the value of testing, a DevTestOps approach will not happen. Without senior leadership buy-in to quality and the value of testing, a DevTestOps approach will not happen. Click To Tweet
- Define the strategy. To create a DevTestOps culture, DevOps leaders should work closely with Testing leaders to help define the strategy for incorporating tests within the DevOps process. This strategy contains the types of tests (API or UI), test coverage goals, best-fit test automation framework, test stability, test data management, test results feedback, etc.
- Test early and often. The DevOps process should enable the creation and maintenance of test environments that encourage development teams to frequently deploy builds, so software testers can test early and often. Processes for continuous integration and code deployment can be cumbersome and time consulting causing developers to only deploy code into test environments once or twice during a two-week Agile sprint instead of daily for continuous testing. Additionally, DevOps teams should support test data management (TDM) to populate environments with realistic production-like data while protecting sensitive live data.
- Embrace test automation. Although companies want test automation, currently only approximately 30% of all testing is automated. Furthermore, existing automated tests tend to be UI workflow based with long execution times and are not suitable for short DevOps process times. Whether it’s starting test automation or redesigning current automated tests, automation requires an investment in building or acquiring automation frameworks/tools and resources. Without this investment in automation, a DevTestOps approach will not happen.
- Test your application integrations. Today’s businesses are dependent on multiple applications inter-connected within a business transaction flow. These application integrations must be tested to ensure the integrity of the flow of data across applications. For DevTestOps this means that environments (software and data) for multiple applications must be kept in sync, so testing can occur both within and across applications. Without using approaches such as services virtualization to simulate application integrations for testing purposes, achieving DevTestOps for highly integrated software will be challenging.
No Matter What, Deliver Quality Software
Over the decades, there is continuous change in IT with new technologies, new programming languages, new software development methods, new tools, new roles, new ways to organize, and so on. However, the end goal has not changed – deliver quality software within the expected timeframe and cost to meet business demands. The goal is always to deliver quality software within the expected timeframe and cost to meet business demands. Click To TweetMany of the trends over the past few decades have focused on speed like Agile and DevOps. Agile transformed development activities but sometimes left testing waterfall-ish. DevOps moves code quicker from one environment to another but doesn’t require code to be tested.
We need to re-focus on software quality and the role that testing plays. Putting ‘Test’ between DevOps may help as a reminder of this key role.