First of all let’s define what ‘software testing’ mean. It will help to better understand the issue.
Software testing is the process of analyzing in orrder to identify possible defects and improve product quality. For decades the issues of testing and quality assurance in software development were treated differently. There were several basic “testing periods”.
In the 50-60-ies of the last century, testing process has been extremely formalized, it was separated from the process of software development and then “mathematized”. In fact, testing was more like a program debugging.
There appeared the concept of a so-called “exhaustive testing”, which is the testing of all possible code execution paths with their input data. However, it soon became clear that an exhaustive testing is impossible, since the number of possible execution paths and the input data is very large.
In such a way it is really difficult to find a problem in the documentation.
In the 70’s there were two fundamental concepts of testing:
- The testing process was seen as a proof of program operability under certain specified conditions (positive testing).
- An absolutely contrary concept – when the testing process was seen as a proof of program inoperability under certain specified conditions (negative testing).
This internal conflict did not disappear with time, moreover these days many authors consider these concepts to be mutually supportive. Note that the “process of proving program inoperability” is appreciated a bit more, because it does not overlook error checking.
The most important changes of this period:
- QA outsourcing allows making sure that the program meets the requirements;
- Testing allows to determine the conditions under which the program works incorrectly.
In the 80’s there was a key change in software development testing area: testing started to be used throughout the whole software lifecycle instead of being applied only on one of its final stages. In many cases this allowed to quickly identify and resolve problems, as well as predict them and avoid their appearance.
During the same period there was the rapid development and formalization of testing methodologies. The first attempts to automate the elementary test were made.
In the 90s there was a shift from testing itself to a more comprehensive process known as “quality assurance”.
It includes the entire software lifecycle and touches the processes of planning, designing, creating and executing test cases, supporting of already existing test cases and test environments. Testing has moved to a new level, which naturally led to further development of methodologies, to debuting of powerful management tools of process testing and test automation tools, which were nearly the same as their current descendants.
Early this century offshore software testing development was driven by searching of new ways, approaches, methodologies,and techniques to quality assurance.
The appearance of flexible methodologies and such approaches known as “Test-driven Development” (TDD) had a significant impact on the understanding of software testing strategy. Automation of testing in software QA company has been already perceived as an integral part of most projects.
Also it became popular to think that software testing should enable the user with the ability to effectively carry out their tasks instead of focusing on program’s compliance with the requirements.