Continuous Testing and Deployment: Two Key Ingredients in Accelerating Software Delivery

[article]
Summary:

Continuous testing along with continuous deployment enables the rapid delivery of higher quality applications due to additional testing activities. Together, integrating these practices can help organizations achieve a DevOps approach to software delivery, seize market opportunities, and reduce time to customer feedback.

You are all probably tired of hearing the phrase “better, cheaper, faster,” yet it has stood the test of time and continues to be very applicable, even in today’s world of software development and delivery. Consider, for example, the exploding world of mobile devices and applications. We, as the consumer, want products—software and hardware—which are better (delivering the functionality we want with a high level of quality) at a lower cost (for little of our money) when we want them (for everyone, on everything, from anywhere). What we expect of the software we use in our daily lives is not really different than what those who employ us want for their software offerings. Remember them—the people who hired us to build, test, and deploy the software products they plan to take to market. So, how can we, the development and operation team members, help make this a reality for our employers and accelerate software delivery—releasing smaller increments of new functionality, software fixes, and enhanced functionality quickly—to meet customer demands in today’s ever-changing world of technology?

Let’s face it, developing and deploying software is not easy. The technology we rely on is changing at an incredible rate, which is putting additional pressure on teams focused on delivering higher quality software faster and at a lower cost. Today’s software development and operations teams need to become lean— eliminating work which adds no value, automating what can be automated, and increasing team agility—to meet the demands of today’s customer. However, coding the software faster is only one component of what is really required to bring innovation to market. Development and operations teams also need to continuously test what has been developed and be able to continuously deploy that code across all stages of development and into production quickly, accurately, and repeatedly.

The New DevOps: Continuous Innovation, Feedback, and Improvements
DevOps was originally intended to fix this challenge by bridging the gap between two organizational silos—development and operations—each with a different culture and area of concern or set of responsibilities, technologies, and processes. Development is focused on creating useable quality software and operations is focused on providing a stable and scalable environment for that software to run on. Organizations that can eliminate their development and operations bottlenecks by integrating process and tooling while improving collaboration to get these two groups on the same page experience a higher level of employee and customer satisfaction. Unfortunately, for many organizations, the bottlenecks get in the way where only about 25 percent are able to deliver their software to market effectively [1].

Bottlenecks, simply put, are any delays in the process that hamper one’s ability to get software from ideation to implementation in production and provide continuous feedback on the -ilities—quality, usability, stability, reliability, etc…—of the software from cradle to grave. Internally and externally, many organizations are already employing collaborative solutions to help everyone—customers, business leaders and project managers, and development and operations—communicate more efficiently, continuously share and gather feedback, and concentrate on the task at hand. Internally, teams have adopted agile practices to speed up development of the code itself, but when agility stops at testing, the entire organization hits the wall.

In 2009, Lisa Crispin wrote, “If there's no CI process running a safety net of unit tests, testers will likely spend all their time finding and reporting unit-level bugs and have no time for the most important exploratory testing, functional and non-functional testing.” To deliver code at the speed customer’s demand, testing now needs to be continuous putting the testers in sync with developers. A lack of test environment availability and/or unavailable yet dependent software components can present delays to any testing organization driving up costs and negatively impacting quality. The solution to eliminating testing bottlenecks and be the enabler of continuous testing is service virtualization.

Continuous Testing
Service virtualization puts control in the hands of the tester enabling teams to simulate the behavior—functionality and performance—of select components within an application and enable earlier and continuous end-to-end testing of the entire application. There is no need to defer testing until later or de-scope certain tests entirely. The virtual services can be made available on-demand as part of an automated- and continuous-deployment process, making that missing piece of functionality available to test or simulate entire systems for the purpose of testing. This new capability shifts testing to the left and puts the development and testing effort more in sync. As more complete end-to-end automated testing is being executed earlier and continuously in the process, a business will save more time and money. For the development team member, it means higher job satisfaction. This results in testers being able to spend less time working on environment setup activities or executing repetitive manual tests and instead being able to do what they love—performing activities that add value, like exploratory testing and contributing to a higher quality deliverable. However, as code is deployed across all the staging environments in development and into production, a repeatable process is required to ensure these testing bottlenecks are gone for good.

Continuous Deployment
As a starting point to continuous deployment, teams may have embraced an automated solution to achieve what is known as continuous integration. As source code becomes available, the automated builds are performed and the unit tests executed; this provides initial feedback on the quality of the code they have developed. This is a good starting point or building block for what we mean by continuous deployment. While automating unit tests does provide some feedback on the quality of the code and will free up testers time, there is the potential for so much more.

Today’s applications are more integrated than ever before with dependencies on services, software, and systems, which may not be developed or modified by the development team at hand. They may not even live within the same infrastructure. This external component is not part of their build process or automated unit tests because the development team does not have access to the source code. However, the composite application they are working to deploy is dependent on the quality of many external components or middleware implementations. So, how does one achieve feedback on the quality of a composite application end-to-end and all of its integration by merely automating unit tests?

This is where continuous deployment really resonates and enables teams to continuously deploy build packages across all stages, including production, using a consistent, repeatable automated process complete with execution of automated tests—integration, functional, and performance. Each step along the way to production requires that the integrations are automatically configured and the application is fully functional and working as one holistic entity. If one of the dependent components is not available, service virtualization can be used to simulate that functionality until it is.

Being able to automate this level of testing at one of the testing stages only delivers part of the complete solution. This ability needs to be replicated from the unit test environment to the integration test environment as well as each step along the way to production. Netting it out, deployment needs to be automated reducing error prone manual processes as the build packages move across all the stages and eventually arrive into production. Along the way, the automated deployment process remains the same and is repeatable so organizations are not only validating the software they are working to deliver, but also the process by which they are going to deliver it. Teams continuously get feedback and make corrections to improve the capability and quality of the deliverable.

Wrapping It Up
Combined, continuous testing and continuous deployment are two key ingredients for organizations wanting to realize the potential of a leaner software delivery process and achieve a higher level of quality in the software they release. Automating continuous testing, enabled by service virtualization, and eliminating error prone manual deployment processes results in time savings, delivers higher quality software, and contributes to better overall team agility. “Better, cheaper, faster” will continue to be the mantra shouted out loud by our executives, consumers, and vendors alike. However, to be successful, it is imperative for organizations, development teams within the organizations, and individual members of these teams to ensure that the consumer gets what they want—better and more affordable software delivered at the speed they demand. After all, it is the consumer who determines who will win in the market.

[1] “The Software Edge:How effective software development drives competitive advantage,” IBM Institute of Business Value, March 2013

About the author

CMCrossroads is a TechWell community.

Through conferences, training, consulting, and online resources, TechWell helps you develop and deliver great software every day.