One of the core responsibilities of a DevOps organization is to ensure a high level of software quality. And like any other term in the software development industry, “software quality” has evolved. For a long period of time, software quality was a phrase used to designate an application’s capacity to perform its core function—that is, to answer the question: Does the application work?
This is no longer the case. Software quality is now evaluated against an array of more complex expectations. Today, an application is expected to function properly, be visually appealing and provide an excellent user experience. So the question remains—What led to these increased expectations?
Below we take a look at the changing expectations for software quality and some of the reasons the landscape has transformed.
Waterfall to Agile: Changing the Landscape
One of the major contributors to the evolution of software quality is the movement from a Waterfall development methodology to an Agile development process that makes continuous delivery (CD) possible. With Waterfall development, each phase of the life cycle is completed before the next phase is begun.
So, for instance, when the requirements for the application were completed, they were considered virtually immutable prior to the start of design and development. As you can see, this inflexible model wouldn’t allow for much evolution in the design of the application as it relates to user experience. The user would essentially get what had been designed at the very start of the process, without changes to be made based on discoveries later found during the design and development phases. Due to this, software quality at the time could only be defined against the original requirements and how the application stacked up against the very first design. And, as we all know, that is rarely the best design from a UI/UX perspective.
In today’s world, Waterfall development is considered a thing of the past. In its place is an iterative approach to software development popularly known as Agile. The Agile development methodology innately lends itself to more flexibility in design and a higher level of quality due to its iterative nature and the opportunities for continuous integration and continuous delivery that are afforded throughout the process. Using Agile, a feature may take several iterations (usually of around two weeks) to be completed. But with each iteration, the feature can be tested as part of acceptance testing and delivered to test environments to help ensure a high level of quality to that point in the development lifecycle. This process of continuously delivering the application increases visibility into the project for the rest of the DevOps organization. In Waterfall development, utilizing the application and testing that application in a test environment would come at the end of the process—when all development had been completed. With Agile and CD, those on the team responsible for testing and accepting the final product are able to view a working application incrementally. This allows for more input regarding user experience as well as an increased probability that bugs will be sorted out earlier in the development process.
Working iteratively can also have the effect of allowing your organization to deliver changes to production in a more efficient manner. If a feature is ready to be deployed at the end of a sprint, then it may justify a production deployment. This can also raise the expectations of the user. Maybe your organization has received negative feedback regarding a change to a popular feature of a web application you work on. Within a sprint or two, you could have the feature fully adjusted to work in a manner that would please users.
Upon finishing development of the feature and it passing all necessary testing, it may make sense to simply deploy the application to production and provide users with the updated feature, thus raising the quality of your application from a UX perspective. At times, this turnaround can happen so quickly that the expectation becomes that buggy or inconvenient features should be fixed hastily and pushed to production. And this is just one way in which the software quality landscape has changed.
Continuous Testing: End-to-end Automated Testing
Another concept critical to the evolution of software quality is continuous testing. Continuous testing can be defined as the usage of automated testing at all possible points in the development lifecycle—the end goal of which is to achieve a state of end-to-end automated testing that furthers the effort for greater software quality through the discovery of bugs in the application at the earliest possible stage in the development process.
The idea is that the earlier a bug is found in the process, the easier it is to fix. When bugs are found late in the development process, it is likely that it will take more time for the developer to unravel the code around the bug to fix it. Continuous testing helps avoid this by providing a greater level of assurance that serious bugs do not live on late into the lifecycle, therefore providing less risk of a disruption in the delivery schedule.
The Effects of Continuous Testing on Software Quality Expectations
As a side effect of this increased efficiency in finding/resolving issues, the expectation of greater software quality rises. It is no longer acceptable to just get the application into a working state and ship it to a production environment in order to stick to the delivery timeline. Instead, the expectation is that many issues in the code are now fixed earlier in the development process, and so there is also time to fine tune the user experience to a level that delights the customer. The application must be intuitive and easy to use in addition to being bug-free.
Continuously testing throughout the development pipeline limits the risk posed by bugs within the codebase. So in addition to providing the DevOps team with more time to fine-tune the application, it also increases the speed of delivery. Much like how Agile practices allow us to get to production faster, so does continuous testing. And with that increased speed of delivery comes a lower level of patience from users when an application is failing to function properly or they simply don’t like how a feature is designed. Users come to expect modifications to be deployed rapidly to mitigate any issues with functionality or user experience.
The term “software quality” used to refer to whether or not the application functioned as required. However, with the innovation and evolution of development methodologies over the years, this is no longer the case. As organizations have made the move from Waterfall to Agile, the efficiency of the development life cycle has increased. And through the use of continuous testing, application testing is being completed in a more efficient manner. These advancements have led to expectations from the user that not only should the application work as desired, but it should also provide a positive user experience. In addition, by utilizing concepts that allow for features to be developed and tested quickly, any negative user experiences should be rectified quickly by the DevOps team contributing to the overall quality of the application.