What is software testing?
Software testing is any activity aimed to detect errors in software. Testing is conducted to find errors in some programs and thus improve their reliability and enhance their quality. When we test a program, we need to recoup the costs of testing, which certainly increases this program’s cost. This can be done only by improving the 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 a system’s correctness.
Every error should be carefully examined 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 an error (or a bug) to clarify 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 it detects it and takes appropriate action if you enter incorrect data on the system. 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, survives itself.
So, testing is a creative process aimed to detect errors. Testing software products does not mean just checking some programs. 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.’