"Shifting left" in software testing means moving testing activities earlier in the SDLC, closer to the stage where requirement gathering is done and code is written. Meaning any stage where the possibility of a gap or defect exists.
The approach to implementing Shift-left can vary depending on the organisation and/or project need. The focus should be on the following aspects
● Define requirements clearly and communicate them to the entire team: The requirements should be clearly discussed with the client and documented. It is also important to communicate the requirements to the whole team. This results in improved quality as there is no gap between what was expected to be developed and what is actually developed. The focus is to prevent bugs because of gaps in the requirements or gaps in team communication.
● The entire team should own the quality of the product not just the QA team: Responsibility for the quality is on the whole team. Starting QA early helps to catch the defects early which helps to reduce the back and forth between the teams. The focus is to find defects early while the code is written. Unit and Component level testing should be promoted.
● Automate the repeated tasks: The tasks like build deployments, and test case execution helps to reduce the turnaround time as developers can also execute the automated tests on the test environment without the need to involve the testing team.
Traditional software testing methodologies focus on detecting defects after they have been introduced into the code. In contrast, shift left testing focuses on preventing defects from being introduced in the code.
How to shift left in the SDLC?
● Requirement gathering: In this phase, along with the Business analyst, the development and testing team should be involved to understand the requirements. The team should focus on understanding and analysing the requirements to avoid any gaps in future. The agreed requirement should be documented for development and testing purposes.
● Architecture and Design: In this phase the software architect and performance engineer should be involved and discuss software architecture and software design of the application considering factors like scalability, maintainability, and reliability. If regress discussions are done at this stage then scalability and performance issues will not bother at the time of production release
● Coding/Implementation: Defects introduced while writing the code. This is the point where the utmost attention is needed.
○ The use of tools like Sonarlint helps to keep the code quality in good health.
○ Promoting unit testing is a great way to find defects early. The team could implement TDD or BDD approach as well to ensure all the business cases are covered while doing the development
● Component Testing and Bug Fixing: Enable the testing team to test at the component level. For instance, set up the testing team to test the REST APIs before it gets integrated or consumed. It will help to fail fast and fail early. Helping to reduce the defects to percolate further.
● System Integration, Functional Testing and Bug Fixing, System Testing/ Acceptance and Release: If above mentioned activities are done then the effect of it will appear in these stages as there will be fewer defects and the overall system will be in good shape for production release.
The below graph is based on a hypothetical number of how to shift-left approach helps improve the quality of the software application
It's important to note that while the Shift Left approach is beneficial, it does not eliminate the need for testing and quality assurance activities throughout the entire development lifecycle. However, by shifting these activities earlier, organizations can proactively address potential issues, reduce rework, and ultimately deliver higher-quality software applications. Thus, it is beneficial to adopt a shift-left approach.