Lot has been written, discussed about topic. Time and again, when this question is raised, people typically answer in one or other variant of following ....
First - controversial or unreasonable (IMHO) ones -
1. To find bugs or to demonstrate that program does not work
2. To validate requirements, design and code
3. To stop the release if quality requirements are not met.
4. To ensure the quality
Rather acceptable ones ...
1. To help project team to access the risk and plan test to access the risk.
2. To check compliance to statutory and regulatory requirements ( like SOX)
3. . To help project manager to make GO-NOGO decisions.
Here comes mine (may be most of other's)
TO HELP DEVELOPMENT TEAM TO SHIP A QUALITY PRODUCT
Whatever test does should be aligned towards this goal. Developers having a job in hand of constructing our of stated (and implicit requirements) - tend to loose sight on or get busy in development. Test will help dev to in those "overlooked" things - like all possible uses and abuses, Non functional requirements like - usability, security, Performance etc. This is collaborative work. Let us not fight - collaborate.