Testing is very important in Software Development Life cycle(SDLC). Compromise on testing means compromise on quality of software, which results in a faulty product and loss of business and money. Over the time, experts have understood the importance of testing and have improvised the SDLC models to include more emphasis on testing. Along with right amount of testing, the time of testing matters too. Testing should be introduced in the early phases of SDLC. This topic here discusses the importance of testing in early phases.
Let’s try to understand the need of early testing in non-software terms.
Suppose, there are 3 car manufacturing companies, with each having a contract to manufacture cars from their respective clients.
Company A completed the product on time and delivered to the client. But the client was not satisfied as he was expecting the door handle to be chrome and not body colored.
Company B started the manufacturing process, but realized later that design is not feasible for equalized mileage and power and they will have to change the engine specifications.
Company C strictly followed the timelines and had a complete product before the testing phase. During testing, the volume of defect was so high that they had to push back the timeline. Their estimation of defect volume was wrong.
So, what went wrong? Let’s analyze
Company A did not have a clear picture of customer requirement. They wrongfully assumed the color of door handle.
Company B agreed on a design without checking its feasibility.
Company C estimated the wrong volume of defects. The no. of areas they predicted will be most problematic turned out to be more.
On analysis, we can list the problems and the results followed as following:
|Company||Problem||Result||Equivalent Phase of improvement in SDLC|
|A||1. Lack of clarity during discussion.
2. Ambiguous and/or missing requirements.
|Since, there was no documented requirement; both the sides came to a mutual agreement of dividing the loss in the process of rectifying the mistake. It was a loss of time and money for both firms and potential loss of customer too.||Requirement Gathering & Analysis Phase|
|B||Proposal of unfeasible designs.||They had to incur the losses since they already agreed on the design. It was a loss of money and time for the manufacturing company.||Design Phase|
|C||Incorrect estimation of time and defect volume.||They had to increase the man power and had to work extra time to cover all the defects, which was unplanned and cost money to them.||Implementation Phase|
Such problems are encountered while developing software too. They not only result in wastage of resources such as money and time, but sometimes the loss of client too. These situations can be avoided by implementing early testing. As pointed out in the last column of the table, the problems could have been identified during early phases of SDLC.
Early phase testing requires proactive behavior and collaborated action from different teams in all the phases of SDLC.
Requirement Gathering & Analysis Phase:
The intention of this phase is to frame the requirements for the project. Altering or adding new requirements in a later phase may be proven very costly and sometimes not possible at all, for ex, SDLC models like V Model does not allow the flexibility to move between phases.
Such issues can be avoided by involving Experts from Testing team and development team in this phase. With technical soundness in their respective fields, they can review the requirements and help identify any ambiguous or missing requirements. This will help framing the robust requirements which reduces the risk factor to SDLC.
If we see the problem mentioned for Company A, we can comprehend that, if an early testing had been performed on the requirements by experts, then there was a high probability that the missing requirement was identified and fixed in Requirement Gathering & Analysis phase.
During this phase, the system architecture is designed based on the final requirements. The feasibility of design is very important. As we saw in the problem with Company B, a non-measured plan can cause a huge setback. It may sometime cause to start the entire process from scratch.
The feasibility of plan should be tested before putting it in practice. This can be achieved by involving development team and testing the feasibility of the design. They can help identify the bottlenecks and complexity in the design so that client can be notified in advance and a workaround can be planned.
In this phase, the software is built based on the design and requirements. It is one of the longest phase and has a big scope of solidifying the quality of the software. The software design is generally divided into modules, which are coded separately.
A different approach can be used to ensure the quality of software such as:
- The modules can be tested separately. With a smaller target code, spotting the defects will be easier.
- Testing team can be involved during to run some of their high priority test case on the code before the actual testing starts, so that some of the critical defects can be eliminated right away rather than carrying forward.
As we saw in the problem faced by Company C, if some testing had been performed during implementation phase, it could have helped in giving some insight of the quality of the software which would have helped in estimating the time and volume of defects.
This phase is responsible for the formal testing of the software. It starts with unit testing which is performed by Development team. Later on, system testing, Integration testing, sanity testing are performed by Testing team.
Development team can collaborate with testing team during the planning of unit testing. Experts from Testing team can review the Test cases and help to make the testing more effective by giving advice in areas like addition of more test cases, adding validations etc. This will help building trust in software quality.
It is less likely to find any defects during User Acceptance Testing, if most of the defects are identified in earlier phases. It helps in building the trust with the client.
We can conclude from the discussion that the efforts and resources required to fix a defect increases as we advance through different phases of SDLC. So, practicing early testing not only helps in avoiding unnecessary obstacles but also helps saving the time and resources.
Also, all the solutions we discussed for early phase testing required collaboration from different teams. Involving different teams in SDLC in early phases also helps the team members to have a better understanding of the software which in turn helps in providing satisfactory and reliable deliverables.
If you are not regular reader of this website then highly recommends you to Sign up for our free email newsletter!! Sign up just providing your email address below: