Shift-Left Testing is an approach to software testing whereby testing is performed closer to the start of the development lifecycle. This is best represented by the QA maxim, “Test early and often.”
Shift-left testing counters a more traditional approach to testing typically inherent to Waterfall methodology, whereby testing occurs near the end of the software development lifecycle: Requirement, Design, Implementation, Testing, Deployment, and Maintenance. However, as ultimately realized, the cost of testing at the end of the software lifecycle can be too high due to retroactive fixes, re-hauls, and pivots. If a critical issue is found too close to the product launch, release delay or reworking can result in huge losses.
Accordingly, the notion of shift-left testing has grown in popularity, where the testing phase is moved from right to left in the software lifecycle chronology. Testing is thus to be performed earlier in the cycle as well as more frequently throughout. This means testing takes place continuously, not just at the end of the cycle, offering an alternative approach to testing that keeps up with the increasingly-common methodology of continuous deployment.
Traditional – Traditional shift-left testing places testing priority a little higher up on the totem pole, where it focuses on unit and integration testing as opposed to acceptance and system-level testing.
Incremental – Incremental shift-left testing is involved when complex stages of development are broken down into smaller segments that build upon each other. This allows developers to make sure that each segment is working properly before another segment is added. This form of testing is most commonly used for complex systems, typically those involving hardware integrations.
Agile – Agile shift-left testing is similar to incremental testing, except it’s taken to a smaller and more agile incremental degree, whereby projects take the form of short “sprints” in lieu of larger (traditional) or broadly segmented (incremental) projects.
Model-Based – Model-based shift-left testing pushes the case even further by initiating testing immediately with executable requirements, architecture, and design. In this case, testing is introduced directly after implementation.
Ultimately, each type of shift-left testing requires testers to get involved in the development lifecycle earlier and remain involved throughout all stages. The above forms of testing encourage test-driven development, which helps to prevent the addition of nonfunctional software early on rather than finding it and fixing it further along in the cycle.