Software testing process

I received an email from a first-year software student where she asked: “How many software tests are there in a software project? What should be included in a test plan? In which order these tests are conducted? Please help.”

Answer: The purpose of software testing is to evaluate the quality of work performed at each step of the software development process. Test manager must plan testing at the beginning of the project at the same time when project manager plans project activities. The test plan should include test procedures, test cases, defect information, test schedule, and performance data used to test software. Testers should NOT wait to test everything at the end of a development effort, after coding is done. They must work with developers throughout the development process to ensure that the software is developed as intended, and to improve software quality, reliability and maintainability.

Software testing usually begins at the component levels (Unit test, Function test) then move up to the software product (Integration test, Regression test, System test, Acceptance test etc.). In small project, developers usually do both coding and testing. In larger project, there should be an independent test group to do testing to avoid the bias of developers testing their own works. This does not mean developers do not test and testers must do all tests. Basically, both developers and testers must work together throughout the project to ensure that all tests are conducted properly. Developers must test their own code to remove defects, ensure proper execution, and information flow as well as examine data to ensure that integrity is maintained. (i.e., Module Test, Unit test) before testers start their testing activities.

Testers often start with “Functional Test” to uncover functional defect in the software then proceed to “Integration Test” to ensure all functions are working properly and the flow of execution is happening as intended. Tester should conduct “Information Content Test” to check for errors in local or global data structures. They must test for “Interface Integrity” to make sure both internal and external module interfaces are properly working, especially when new module is added to the software. When changes happen, they must conduct “Regression Test” to check for defects that may propagate from one to other modules and ensure the entire software product is working.

After verify that software product is working properly, testers can conduct “System Test” to make sure both hardware and software is working as planned. In this test, testers will run “Security test” to verify that the system protection is running properly to prevent improper penetration or data alteration. They conduct “Stress Test” to check to see how well it deals with abnormal resource demands (i.e., quantity, frequency, or volume) and “Performance Test” to check the run-time performance of software, especially real-time software. They may conduct “Recovery test” to check the system’s ability to recover from failures.

If all tests within “System Test” pass, testers can work with customers to prepare for “Acceptance test” where they make sure the software works correctly for intended users in their work environment. There are two major tests during this time: “Alpha test” is the test period during which the software product is ready to be used in a customer’s “test environment” but may have some minor defects. It is the final chance to get verification from customers that the software is working as intended. “Beta test” is the test period during which the software product is complete without defect and usable in a “production” environment. The purpose of the Beta test is to test the company’s ability to support the product. Beta test serves as a proof that the software product is ready for shipment to all customers.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University