One idea that I encountered and that I just didn't like right from the start is this one:

Why not let the developers test their own code? I mean they know how it's supposed to work and where it's weaknesses lie. So since they know their code like nobody else they should be qualified to be testers like nobody else, right? Plus it's cheap.

Well, no. If you wrote the code you probably aren't too keen on finding bugs in it. I guess it's a subconscious thing - you already had the work of creating it, and now your job is to find bugs in the code you just wrote. It's just no fun.

Furthermore it's not a good idea to let the same brain work on the same problem for too long, in my opinion. It's all about fresh ideas and stuff.