Goal of software testing is not to prove that system works as per the requirements. Instead it's exactly opposite. Here is excerpts from 'the art of software testing' book that explains this point.
The Psychology of Testing
One of the primary causes of poor program testing is the fact that most programmers begin with a false definition of the term. They might say:
• “Testing is the process of demonstrating that errors are not present.”
• “The purpose of testing is to show that a program performs its intended functions correctly.”
• “Testing is the process of establishing confidence that a program does what it is supposed to do.”
These definitions are upside-down.
When you test a program, you want to add some value to it. Adding value through testing means raising the quality or reliability of the program.
Raising the reliability of the program means finding and removing errors.
Therefore, don’t test a program to show that it works; rather, you should start with the assumption that the program contains errors (a valid assumption for almost any program) and then test the program to find as many of the errors as possible.
Thus, a more appropriate definition is this:
Testing is the process of executing a program with the intent of finding errors.
Although this may sound like a game of subtle semantics, it’s really an important distinction. Understanding the true definition of software testing can make a profound difference in the success of your efforts.
Human beings tend to be highly goal-oriented, and establishing the proper goal has an important psychological effect. If our goal is to demonstrate that a program has no errors, then we will subconsciously be steered toward this goal; that is, we tend to select test data that have a low probability of causing the program to fail. On the other hand, if our goal is to demonstrate that a program has errors, our test data will have a higher probability of finding errors. The latter approach will add more value to the program than the former.