"Perfect Software and other illusions about testing" by Gerald Weinberg should be on your "to read" list.
Here's an interesting example that will give you a flavor of the book.
In chapter 3 "Why Not Just Test Everything?", Weinberg has a section called "There are an infinite number of possible tests." He talks about a backdoor placed into a highly secure program whereby the ordinary password protection could be bypassed by typing W followed by three spaces, then M followed by three spaces, then J followed by exactly 168 more keystrokes without once using the letter L. Then he writes:
"Do you get the point by now? If you
didn't guess that the number of tests
required to exhaustively test software
is infinite, or at least "a number
greater than I could run in my
lifetime", you didn't understand the
point of this chapter. Now you do."
If you are looking for a "how to" book, you should look elsewhere. If you are looking for a "why" (and sometimes "why not") book, this might be for you.
Another really good one is "How We Test Software at Microsoft" by Alan Page, Ken Johnston, and Bj Rollison.
The excellent explanations of Equivalence Class Partitioning and Boundary Value Analysis are among the best I have ever read.