Agile approaches to software development, along with continuous integration and delivery, has changed the speed of the software life cycle. More and more companies have adopted shorter sprint cycles and have been deploying to production as frequently as several times a day.
The question that comes to my mind is what about quality? Does continuous delivery compromise the quality that is delivered?
You Want it When?
According to Merriam-Webster, the definition of continuous is “uninterrupted extension in space, time or sequence.” Continuous delivery implies an uninterrupted flow, continuing without stopping. Teams deliver tested code changes so that it can be released at any time into production.
When development teams are operating in a constant feedback loop with customers, deliverables are kept in a release-ready state. This drives the cost of delivery down and provides significant business value.
For What It’s Worth
Decreasing the time required for implementing a new feature and bringing it into production is just one of the benefits of continuous delivery. For project teams that are following an Agile methodology, incorporating a Kanban delivery model fits well with continuous delivery. It focuses on bringing a single feature through the different phases into production. This allows faster feedback and lends itself to shorter cycles.
Better, Faster, Stronger
As the lyrics of the Daft Punk dance single imply, faster is also synonymous with better and stronger. To be faster, we must be better at repeating processes. Performing processes such as building and deploying in lower environments before the actual production deployment can reveal issues which can be resolved.
The Pace of Testing
What has the adoption of this continuous integration and delivery model done to the pace of testing?
Speeding up the development of software through continuous testing and delivery means we must speed up the testing as well. Manual testing takes a lot of time and can bottleneck even the most aggressive timelines. Automation testing is a requirement if we are to have confidence in the quality of the code.
If you’ve read any of my previous posts, you will know that I’m a firm believer in manual testing of all types. The value of a QA analyst to apply critical thinking during exploratory testing cannot be replaced. However, I do not believe that manual testing alone can keep up with the increasing demands of getting software to market. We have to change the way we think about testing, incorporate testing coverage at each step of the delivery pipeline.
Commit and Test. Unit testing needs to be a part of the process. Developing a unit test should go hand in hand with the development of a feature. Testing is the responsibility of developer and tester.
Accepting the feature. Test against the acceptance criteria. Create automated tests for the new feature during the sprint rather than after, for faster defect detection and resolution. Incorporate these into the automated regression test suite to be run again during the exploratory testing step prior to deploying to production.
How does it perform? Automated load, performance, scalability and security testing on the integrated test environment will identify issues that affect users in production.
Exploratory testing, coupled with automated tests, provide broad test coverage. Since testing has occurred at each of the previous steps, QA can confidently explore the software, without the need of huge and laborious test cases which can take too much time to execute.
Deploying into production is merely installing into another environment and is low risk. Work towards automating deployments so that continuous integration + continuous deployment = continuous delivery.
But isn’t this mini waterfall?
No wait times is the significant difference between this delivery model and waterfall. Constant movement of code, simultaneous testing in the environment, defect prevention rather than defect detection follow the agile way of delivery. Automate so that each step in the pipeline can be seamless and trouble free.
Continuous delivery is one of the best options for project success. Optimizing the process of putting software into production can meet the business needs of getting the product to market in an efficient and effective way. This approach to software delivery minimizes risk because it means that change is controlled, tested and can be ready to be delivered on demand.