The different ways of thinking of testing bring to light some issues. For example, using testing to show the software works. As it is tested more the likeliness of it being reliable decreases because the likeliness of finding a bug increases. It's a conundrum for most people's minds because one would think that as you test all the possible cases, it would increase the confidence that the program is reliable.
Having a test that is unaware of the structure of the code is best because this person will not be biased. But if they do not have enough information about the objective of the code, they may make test that are superfluous. There is a balance between a tester having some knowledge and having too much bias. For certain small unit testing the programmer and tester are one in the same. The programmer must have freedom to code in the required functionality but they must also test as they go. This can lead to the programmer just coding and debugging.