Regarding Test Data:
And it needn't be too big, just big enough to contain one or two examples of data that will exercise each path of your code.
This may be obvious, but I'd like to add that it is important that the test data includes data that is out of spec. I learnt this the hard way, on a project where the data we get from the client is always going wrong in some way or another. You must always assume that you will get badly behaved data as well as well behaved data. Bad things can happen if you don't. I now check all data fields with a specific regular expression for that field for sanity checking and dump any data that doesn't conform to a rejects file to send back to the client.