The 3 Big C's of Agile Development and Testing
Approaching Agile can seem difficult because of the apparent paradox of consistently and frequently releasing quality product.
Join the DZone community and get the full member experience.Join For Free
In the age of Agile and Digital Transformation strategies, every brand is looking to set themselves apart. In order to excel strategically in the implementation of your digital transformation you need to be offering services to end users on their terms, on their devices, at their convenience, streamlining and differentiating features. On top of that, end users expect everything to look great and work perfectly…quickly.
When choosing your digital transformation strategy, there are key tradeoffs to understand between what are seemingly conflicting agendas: getting features to market faster and increasing presence on users’ devices, while maintaining high application quality. What’s commonly known is that acceleration can come in the form of adopting an agile process: highly independent dev teams who are responsible for a feature or area of the code and delivering incremental functionality from design to production. What is less known is that a proper quality methodology can not only ensure high quality application at the end of each sprint, it can actually help the team accelerate.
When thinking about adoption of agile schemes, some of the common concepts that come to mind are Continuous Integration (CI), Continuous Delivery (CD) and Continuous Testing (CT). While serving slightly different objectives, these elements can actually integrate to assist the team to achieve the goals we mentioned: velocity and quality.
The most dominate player between these three is Continuous Integration and it is a necessary approach for any agile team. The image below depicts a team that has not implemented a CI process. You see a 60-day development period and then after all that, the team shares their code. The outcome of such a scenario is creating or extending the post-sprint stabilization phase, where developers need to test and redo integration points. For an organization trying to accelerate time to market, this is a very expansive practice. Naturally, this is also very frustrating to developers and testers.
Using CI, the team integrates increments from the main tree continuously. Using test automation, they are able to ensure the integration actually works. With the CI approach, as illustrated below, the conclusion of each sprint is on time and within the defined quality expectation. Not only would it be possible to shrink the stabilization phase, it might be possible to get rid of it altogether. In a CI process the ideal would be a working product at the end of each sprint, maybe even each day.
Continuous Testing, sometimes called Continuous Quality, is the practice of embedding and automating test activities into every “commit”. Teams are looking at CT because developers spend precious time fixing a bug for code that was written long ago. In order to fix the bug, they first need to remind themselves of which code it was, undo code that was written on top of it, and retest. It’s an extended effort. Testing that takes place every commit, every few hours, nightly and weekly, is the type of testing that not only increases confidence in the application quality, it drives team efficiency. In order to achieve CT, please use our checklist below:
- Assure stable test lab 24×7
- Allow variety of test and dev tools usage within the pipeline for high productivity
- Automate as much as possible but make sure you automate only the high value and stable tests
- Make sure you properly size the platform and test coverage for your projects
- Fast feedback with reporting and analytics
Continuous Delivery is the practice of streamlining/automating all the processes leading up to deployment. This includes many steps, such as validating the quality of the build in the previous environment (ex.: dev environment), promoting to staging, etc. These steps, done manually, can take significant effort and time. Using cloud technologies and proper orchestration, they can be automated.
As opposed to Continuous Delivery, Continuous Deployment takes agility to the next level: the working assumptions are that, first, the code is working at any point in time (for example, developers must check their code before they commit); and second, a significant amount of testing is done automatically, such that we have confidence the build is solid. That level of test and orchestration automation is difficult to find, but some agile SaaS organizations are certainly benefitting from this approach. To complete an efficient CD process you need to ensure you have a monitoring dashboard for your production environment in place in order to eliminate performance bottlenecks and respond fast to issues.
The biggest hang up or resistance we see when it comes to agile development and digital transformation is that teams feel like they can’t do it quickly with the same quality they are used to. This is simply not true. To ensure success in a rapidly transforming marketplace, brands need to accelerate their time to market, increase presence and ensure high quality. CI/CD/CT are methods that, above the agile development methodology, enable the velocity and quality needed. Combining the three into the right formula that fits your organization goals and culture is the recommended next step.
Published at DZone with permission of Amir Rozenberg, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.