Have you ever experienced a software project that ran out of budget or time? You probably did. Believe it or not, incorrect planning often isn’t the root cause of a project running out of time. The real problem lies in the way the project validates the code.
The “shift left” testing movement is about pushing testing toward the early stages of software development. By testing early and often, a project can reduce the number of bugs and increase the quality of the code. The goal is to not find any critical bugs during the deployment phase that require code patching. This article explains the concepts of shift left testing and how you can adopt the approach in your organization.
Did I get your attention? Let’s explore how we can achieve zero bugs during the deployment phase.
What Is the Idea of Shifting Left?
The shift left movement is about moving the testing phase earlier in the software development life cycle—shifting left. We want to avoid approaches where testing is only carried out at the end of the software development life cycle. With shifting left, we introduce testing in the early stages of software development.
Up until the late 1990s, a typical software development process is sequential. Here, stakeholders spend attention to detail and favor quality only at the latest phases of the software development lifecycle. More specifically, the testing and deployment phases.
Within this sequential model, testing happens towards the end of the project’s lifetime. The graph at the beginning of this post shows the differences in attention to quality between the shifting left model and the traditional software development model.
However, software developers or product owners often found problems that weren’t covered by tests. It’s very costly and time-consuming to fix such bugs at a late stage. Worst case, developers have to redesign the application. Here, the idea of shift left testing originated to involve the testing team as early as possible in the software development process.
So, what’s the synergy between shifting left and agile?
Shifting Left and Agile
Often, we find the term “shift left testing” in agile is all about small code increments. The agile methodology includes testing as an integral part of the shorter development cycle. Therefore, shift left testing fits nicely into the agile idea. The testing engineer has to perform testing after each code increment—often referred to as a two-week sprint.
Some organizations like to push shift left testing even further toward the coding phase. A good approach to adopt is test-driven development. Test-driven development requires you to first write the tests for the piece of code you want to develop. Therefore, you can immediately verify the validity of your code.
Another way of pushing testing further left includes the use of static analysis tools. A static analysis tool helps to identify problems with parameter types or incorrect usage of interfaces.
For example, ESLint is a very well known static code checker within the Node.js community that shows your mistakes while coding.
Furthermore, testing experts believe that behavior-driven development (BDD) can accelerate the shift left movement. BDD defines a common design language that can be understood by all stakeholders, such as product owners, testing engineers, and developers. Therefore, it enables all involved stakeholders to simultaneously work on the same product feature, accelerating the team’s agility.
In other words, BDD stimulates cross-team collaboration while improving feature-delivery time.
Next, let me show you why it’s so important to test early and frequently.
Importance of Early Testing
We often underestimate the effects of testing early on in the software development life cycle as the agile methodology describes. Regularly testing code with each code increment helps to guarantee the quality of the project but also saves you a lot of time and money.
It’s important to first understand when bugs enter the code.
When Are Most Bugs Introduced in the Code?
It’s hard to pinpoint exactly, but roughly 85% of the code defects are introduced during the coding phase. In case your organization believes testing comes after the coding phase, many defects will be found during the testing phase.
Therefore, this means a lot of bugs have to be fixed. With “fixed,” I’m referring to patching, as it’s almost impossible to properly solve all these bugs at once. With this statement, I want to show you the importance of introducing testing as early as possible in the software development cycle.
When an organization believes testing should only happen after the development phase, a lot of time—and money—will have to be invested in stabilizing the product. It’s a frustrating experience that often leaves your product full of patches. This isn’t an ideal boilerplate for future code expansions or service additions.
Added to that, the cost of finding a bug also varies at which stage of the software development cycle the bug pops up. Numbers may vary, but on average, the cost is five to 10 times higher when finding a bug during system testing or even higher during the actual release of a product. Besides the higher cost, you’ll likely find unhappy customers.
Let’s summarize the above points in the benefits section.
Benefits of Shift Left Testing
So, what are the benefits of shift left testing?
- Find bugs early on in the software development life cycle
- Reduce the cost of solving bugs by detecting them early on
- Gain a higher-quality product as the code contains fewer patches and code fixes
- Have fewer chances that the product overshoots the estimated timeline
- Provide higher customer satisfaction as the code is stable and delivered within the budget
- Maintain higher-quality codebase
Another great benefit of shift left testing is the ability to use test automation tools. As we want to test early and often, test automation helps you accomplish this goal. We don’t want to overload our testing team with manually testing every new feature the development team introduces. Therefore, a test automation tool can give quicker feedback regarding the stability of the new code. Furthermore, a test automation tool helps your team shift left. Your team can write tests faster and it becomes easier to maintain them using a test automation tool. For example, Testim offers a solution to codelessly record tests via UI interactions.
As you can see, these are some strong benefits related to shift left testing. It’s safe to say these benefits apply as well to the agile methodology.
How to Get Started With Shift Left Testing
Let’s find out what your organization can do to get started with shift left testing.
Step #1: Coding Standards
First of all, your development team needs to agree on the same coding standards. All developers must be on the same page. It helps them to review code quicker but also guarantees a higher quality of code.
In short, coding standards should decrease the number of bugs as the standards avoid bad or insecure code.
Step #2: Implement Testing in Early Stages of Development
As a team, find out which tools might be relevant for your codebase. I definitely recommend using a static code analyzer like ESLint, which helps to detect bad coding practices and bugs while you’re developing.
Besides that, the team should think about how they want to integrate testing in the early stages of the software development life cycle. A possible strategy is to adopt the agile methodology, which works with small code increments also called sprints. Next, each sprint includes a development and testing phase. This makes sure that every small feature gets covered with relevant tests.
For some organizations, it’s not possible to make a drastic switch toward the agile methodology. Therefore, the development team can agree on writing unit tests for each feature they develop. This allows them to have confidence in the business logic they write.
In later stages, the development team should write integration tests to make sure that all these units of code nicely integrate.
Step #3: Embrace Test Automation
As shift left testing involves frequent testing, the development team should embrace test automation tools. Besides automating the deployment of new builds, running tests for each code increment should be automated as well.
This will reduce the pressure on the testing team and provides quicker feedback about the stability of the code.
In general, test automation will speed up the development life cycle and allows you to reduce the time to market. Besides that, it ensures fewer bugs will be found later on in the software development life cycle.
If you’re still unsure about why you should invest in test automation, read this great guide created by Testim.
Is Shift Left Testing the Way Forward?
This entirely depends on your organization. In theory, every organization can move toward shift left testing. You can start small by introducing coding standards or embracing a static analysis tool.
However, the benefits of shift left testing are clear. By detecting and reducing the number of bugs early on in the software development life cycle, we can ensure a higher quality of code. Besides that, your development team will save time and money by embracing testing in the early stages of software development.
This post was written by Michiel Mulders. Michiel is a passionate blockchain developer who loves writing technical content. Besides that, he loves learning about marketing, UX psychology, and entrepreneurship. When he’s not writing, he’s probably enjoying a Belgian beer!