The purpose of independent testing is to provide different testing perspectives, consequently, different tests; moreover, to conduct these tests in more efficient test environment (and therefore more complex and expensive) than the one the developer uses to run test cases. The purpose of the self-test is to eliminate the errors that can be discovered with low cost approach in the simplest deterministic environment by conducting module / component testing or low-level system testing.
“All software development activities are error-prone. A formal (namely, mathematical) proof of the correctness of an algorithm is just as vulnerable to errors as any other process performed by a person. It is easy to verify this by recalling the number of articles in mathematical journals entitled: “A counterexample to the theorem …”.
Ukrainian partners provide beta testing services to test all kinds of apps. Send us your program for real-world exposure and real users will perform turnkey, performance, functional, security or automated testing of beta version of your app to provide feedback and suss out bugs.
Instruments. We, experienced and skilled Ukrainian testers, think that it is foolish to make syntax errors in the source code, since there are tools (compilers) that find such errors easier and faster than people. We have these tools at our disposal. Our programming languages and compilers, until now, have offered perfect opportunities for automatic error detection – once upon a time it was an exceptionally difficult task for humans. If the error can be detected (and / or corrected) automatically, then this should be done.
Do not try to disable automation and tools that detect errors. It is necessary to eliminate just the error-prone manual processing of code, when automation is available. There is an ever-increasing difference between the tools that programmers and testers actually use, and the tools that researchers develop for them. Eliminate this gap! It’s worth it. It will pay off.
We, testers, should always strive to be able to do without testing at all.
This is our unattainable goal. Testing is often referred to as quality control. Quality assurance means preventing errors. It is always more profitable to prevent errors than to correct them later as it may cost you dearly. But this goal is unattainable, since history shows that automating the process and preventing previous errors are prerequisites for facing the increasingly complex problems that the users’ needs pose for us.
P.S. Independent repetition of software tests can be a useful practice only if the developer is incompetent or deliberately makes mistakes. And this contradicts the competent programmer hypothesis.