What is the Motive behind Software Testing?
Testing is necessary due to the following reasons
1) Due to Technical Compulsions:
a) Competent developers are not infallible.
b) The implications of requirements are not always foreseeable.
c) The behavior of a system is not necessarily predictable from its components.
d) Languages, databases, user interfaces and operating systems have bugs that can cause application failures.
e) Reusable classes and objects must be trustworthy.
2) Due to Business Compulsions:
a) If you don’t find bugs, your customers or
users will.b) Post-release debugging is the most expensive form of development.
c) Buggy software hurts operations, sales and reputation.
d) Buggy software can be hazardous to life and property.
3) Due to Professional Compulsions:
a) Test case design is a challenging and rewarding task.
b) Good testing allows confidence in your work.
c) Systematic testing allows you to be most effective.
d) Increases your credibility, allows proud over your efforts.
4) Due to Economic Compulsions:
Economics normally plays a very significant role. It is both the driving force and the limiting factor as well. In software development life cycle (SDLC), the earlier the errors are discovered and removed, the lower is the cost of the removal. The cost to fix errors increases drastically from specification phase to test phase and finally to the maintenance phase. This is described in the following figure.
The above figure clearly indicates that if an error is detected and fixed during requirement analysis phase, it costs less. If we assume this to be “1 unit of cost” and if it is not rectified then it will propagate to design phase, which may cost 10 units, and if, further propagated to coding may cost 100 units. If not then it will propagate to testing phase which may cost further 1000 units. If still not rectified then we can imagine the cost. If it is life critical system’s software, we may not be able to calculate the cost. So, we cannot even think of releasing software without proper testing.
5) For Improving Quality: As computers and software are used in critical applications, the outcome of a bug can be severe. Bugs can cause huge losses. Bugs in critical systems have caused airplane crashes, allowed space shuttle systems to go away, halted trading on stock market. Bugs can kill. Bugs can cause disasters.
In a computerized embedded world, the quality and reliability of software is a matter of life and death. This can be achieved only if thorough testing is done.
6) For Verification and Validation (V&V): Testing can serve as metrics. It is heavily used as a tool in the V&V process. We can compare the quality among different products under the same specification, based on results from the same test.
Good testing can provide measures for all relevant quality factors.
7) For Estimating Reliability: Software reliability has important relations with many aspects of software, including the structure and the amount of testing it has been subjected to. Based on an operational profile (an estimate of the relative frequency of use) of various inputs to the program, testing can serve as a statistical sampling method to gain failure data for reliability estimation.
Software testing is not mature enough. It still remains an art, because we still cannot make it a science. We are still using the same testing techniques invented many years ago, some of which are crafted methods or heuristics rather than good engineering methods. Software testing can be costly, but not at stake of human lives. We can never be sure that a piece of software is correct. We can never be sure that the specifications are correct. No verification system can verify every correct program. We can never be certain that a verification system is correct either.