Evolution of Software Testing
We all want quality in everything that we use. Quality is the standard of something measured against things of similar kind. It is the measure of the excellence of a product, process, service or experience.
Quality in the Olden Days
From ancient times, societies have made significant efforts to achieve quality in various strides of life. In the hunter-gatherer and agricultural economy, humans did not have much choice. During the middle ages, people started specializing in their own fields and became experts in them. The sheer sophistication of Greek construction and Egyptian architecture point to the standards that were established during those times.
In the pre-industrial era, markets were monopolized mainly by the Guilds, which were a union of craftsmen formed during the 13th century. The Guilds were responsible for maintaining or verifying the quality of goods and services provided by the members. The guild masters inspected the goods to make sure that the necessary standards were maintained.
Quality was person dependent during this era. Individual skill was the driving factor for quality. People took pride in their products and worked hard to maintain quality. This lasted until the late 19th century when industrialization gained a rapid foothold. Mass production broke the manufacture of goods into simple steps.
The division of work led to specialization and quality started becoming more process-oriented than people oriented. There was a reduction in labor costs as the unskilled workers could be trained to perform specific tasks. But, people lacked motivation and got weary with the monotonous and repetitive work. Moreover, as the jobs were split into different levels such as lower level tasks, the workers found it difficult to relate with and be proud of the final product.
They were general discontent among the laborers with the work they were doing and as a result, the quality of products started going down significantly. Mass production also led to manipulation and exploitation of unskilled laborers. Moreover, the process made workers dispensable and increased the power vested on the foreman and managers, which often led to misuse and exploitation.
Frederick Winslow Taylor improved the industrial efficiency by using the Scientific Management concept, which consisted of training the employees, implementing documentation, dispersing work equally among workers and limiting quality control to few specific individuals. This management theory focused on improving the workflows by analyzing and integrating them, which sought to enhance economic efficiency and labor productivity.
Henry Ford emphasized implementing standard designs and components. Quality control was the responsibility of machine inspectors who covered quality checks at frequent intervals so that no faulty operations proceeded to longer intervals.
Walter Shewhart further improved the scientific management method and came up with the concept Plan-Do-Study-Act (PDSA), which is, plan the action, do the work as plan, study the output and take corrective action if needed. This concept gives focus to efficiency and quality. Using this method, General MacArthur along with W. Edwards Deming rebuilt Japan after the defeat in WWII.
In the early 50’s, Joseph M. Juran who is considered as the father of quality management defined quality as fitness for use. Software development also became a field in its own right, during this period. Ensuring the quality of software became an important need. It progressed simultaneously with the developments in computing spearheaded by pioneers in the field during the final decades of the twentieth century.
From the first software to several high-level programming languages like Fortran, it ratcheted the personal computing era with the development of microcomputers. A notable impact on software development was made with the release of the Apple II, which was followed by numerous advancements.
Software Quality via Testing
Software quality is defined as the degree to which a system meets specified requirements or user needs and expectations. It includes a measurement of the quality of design used in the software and how it corresponds to the design. Software quality is mainly determined by analyzing several key variables, which are both internal and external.
The user experience constitutes the major part of external quality whereas the code forms the internal quality. Testing has become an important segment in the software development process to ensure its quality. Previously, the software developer and user were the same people usually a scientist. It was quite easy and quick to do the quality check on their own.
Software quality assurance was very efficient, user-centric, focused and had the fastest feedback cycle. It dealt with ensuring quality for the entire phase of software development by detecting and resolving weaknesses. Software testing has undergone an evolutionary process, which resulted in its advancement from its preliminary forms to the end-to-end framework based testing used today.
David Gelperin and Bill Hetzel in their study, ‘The growth of software testing’ asserts that software testing has undergone an evolution with noticeable changes in the testing process model. A similar proposition is mentioned in the white paper, ‘The continuing evolution of software testing’ by the authors Hung Q. Nguyen and Robert Pirozzi. The former discusses the evolution of software testing based on time while the later is based on processes, methodologies and tool usage.
Evolution of Software Testing – based on time
Software testing has undergone tremendous changes during the evolution process it went through. We can divide the evolution of software testing into various phases based on time.
Debugging Oriented Phase
This phase is the initial period of testing. The term checkout was used for testing and it focused on getting the system to run. Programmers usually performed this themselves as a part of software development until they made sure the program was running fine. There was no clear distinction between software development, testing and debugging.
Demonstration Oriented Phase
The term debugging continues in this phase. Charles Baker pointed out that the purpose of checkout is not only to run the software but also to demonstrate the correctness according to the mentioned requirements. Thus, in this phase, the scope of checkout increased from program runs to program correctness. Moreover, there was a misconception in this phase that software could be tested exhaustively.
During this phase, the testing effort includes the detection, location, identification, and correction of faults. The first test team was formed by Gerald M. Weinberg in 1958 as a part of Project Mercury, the first human spaceflight program of the United States.
Waterfall model, a sequential development model for managing large software programs was also introduced during this time.
Destruction Oriented Phase
G.J. Myers changed the view of testing from ‘testing to show the absence of errors’ to ‘testing to find more and more errors’. He separated testing from debugging and stressed on the importance of test cases to detect more bugs. This phase gave more importance to effective testing in comparison to exhaustive testing. The importance of early testing was also realized in this phase.
Evaluation Oriented Phase
Gradually people realized that it was cheaper to debug if the bugs were identified during the early stages of development, which involved the requirements gathering and design phases. This phase stresses the quality of software products such that it can be evaluated at every stage of development. The early testing concept was established in the form of verification and validation activities, which helps in producing better quality software.
Prevention Oriented Phase
By detecting the defects early and correcting them, we can prevent bugs in further development phases. Beyond this, bugs can also be prevented in future projects with the experience gained from similar projects. The prevention model utilized includes test planning and analysis. The test design activities play a major role here, unlike in the evaluation model where analysis and reviewing techniques are important.
Process Oriented Phase
In this phase, testing was established as a complete process rather than a stage in the software development lifecycle (SDLC). The testing process starts as soon as the requirements for the projects are specified and it runs in parallel to SDLC. The emphasis is also on the quantification of various parameters, which decide the performance of the testing process.
Evolution of Software Testing – based on processes and tools
Software testing is divided into three different phases based on this classification.
Software Testing 1.0
In this phase, software testing is considered a single phase after the software is coded in the development lifecycle. No test organization was there. A few testing tools were present, but their usage was limited due to the excessive cost. Management was not concerned about testing as there was no quality goal.
Software Testing 2.0
In this phase, software testing gained importance in software development life cycle and the concept of early testing also started. Testing evolved in the direction of planning the test resources. Many testing tools were also available in this phase.
Software Testing 3.0
In this phase, software testing evolved as a process, which gives a roadmap of the overall testing process. Moreover, it is driven by quality goals so that monitoring and controlling can be performed by managers. Thus, managers are actively involved in this phase.
Future of Software Testing
Today, testing constitutes one of the core processes in software development that involves several technical and nontechnical aspects including specification, design and implementation, maintenance, process, and management. Software testing is mainly done under limited resources in terms of time, budget or personnel. Hence, the test process should always be adjusted to fit within these limitations. These limitations highlight the importance of automation tools in the process.
Despite the significant changes that automation has created, manual testing still remains an integral part of the development lifecycle. Depending on the application, some tests can be automated, while some others still need to be done manually. And without a doubt, some types of software testing require total manual effort in the process.
For this, knowledge of tools will be a great asset to the testers as it will help them complete the tasks quicker and with precision. There are countless opportunities waiting for testers in the future who are ready to change their profile.
With software testing progressing rapidly with each year, testers can adopt these new trends by becoming more skillful and well versed in all the latest developments. The skills of a human tester are indispensable and automation is still far away leaving countless possibilities for the testers.
- The Growth of Software testing by David Gelperin and Bill Hetzel
- The Continuing Evolution of Software testing by Hung Q Nyugen and Robert Pirozzi
- Software testing – Principles and Practises by Naresh Chauhan