I was a software engineer for many years before my retirement. Matt is absolutely correct; the best tester knows absolutely nothing about what he is testing. I was in an environment where it was expected that the engineer who coded something also was responsible for testing it. That's a recipe for disaster; the engineer is going to test what he/she knows the software does (called a "sunny day scenario"), but the end user will ALWAYS do something unexpected.

That said, it's axiomatic that any program, no matter how simple, from "Hello World" on up is impossible to test for all possible use cases. Consider as an extreme a complete set of tests for a program whose only purpose is to add two integers. A full regression test would test the result of adding all possible combinations of two integers - banging one infinite set against another. So you test what you decide is reasonable to test, edge cases and so on. But never every conceivable test.

Then some bright user decides to add infinity to infinity...