Other than writing unit tests, what kind of tests of the actual product do you do to ensure that you got the implementation and functionality right? And how extensively do you test before you hand it off to QA and how do you deal with unclear requirements/assumptions?