What is software testing ?
Software testing is any activity aimed to detect errors in software. Testing is conducted to find errors in some program and thus improve its reliability and enhance its quality. When we test a program, we need to recoup the costs of testing, which certainly increase the cost of this program. This can be done only by improving reliability of the program, for which testing is conducted. To improve reliability means that mistakes made in the development process will be corrected. After testing, you can’t guarantee the absence of errors, you can only talk about a certain level of confidence in the correctness of a system.
Every error should be carefully examined in order to understand why it has emerged and what should be done to prevent it or detect it earlier. A test is considered to be good when it detected some errors. If no errors were detected the test is considered to be unsuccessful.
What is an error (bug)?
Let’s now investigate what is an error (or a bug) to make clear what we should detect. A program has a bug when its behavior does not match its documentation. But I need to admit that programs are quite often written better than documented. And there are not less but even more errors in documentation than in programs. Also, documentation usually describes “standard” work. For example, on the documentation is written: ‘press attention and type’. The user presses a button twice by accident, and the system breaks down. Is it an error or not? Of course, it is.
It turns out that in any case when a user doesn’t get what he reasonably expects from some product, we believe that there is an error. It’s reasonable to expect that if you enter incorrect data on the system it detects it and take an appropriate action. And also it’s reasonable to expect for a user that in some unexpected situations’ system behaves with dignity, minimizes all unpleasant consequences, and, of course, survive itself.
So, testing is a creative process, aimed to detect errors. Testing software product does not mean just checking some program. Documentation is also tested – project documentation and ‘output’ one.
Testing of the program itself should be ‘top down’, when finding firstly major, global errors, and only then move on to ‘catching the fleas’.