On Sun, 2006-08-06 at 13:41 +0100, Nicholas Clark wrote: > This is sort of off-topic because it's more a general question about testing, > rather than Perl specific, but the code in question happens to be written in > Perl... > > There is this big hairball of under-tested code. (Nothing new here) > So the question is, which to tackle first - unit tests, or functional tests. > > A colleague's view is that you can't have functional tests until you know > that the individual units work, hence start with unit tests. (I believe that > the assumption is that when they're mostly complete start on functional > tests, but that wasn't stated). This seems the logical approach if you want > to refactor things. > > My view is that because the actual output of the code isn't well specified > (sadly nothing that new there either), if we write functional tests to > verify that the behaviour we desire is present, then we're actually killing > two birds with one stone - we have tests for the spec, and the tests are > the spec. (Which isn't perfect as specs go, but it's a heck of a lot better > than the current spec). Also, right now we really don't care about the > specific output of the the individual units that make up the code - all > that matters to the client is the final behaviour. Hence writing unit tests > at fine detail for existing code could well be a (relative) waste of effort > in that it's quite possible that the units they test are thrown away soon > if the implementation is changed. Whereas functional requirements are much > less likely to change on a release-by-release basis, so writing them is > less likely to generate code that has a short lifetime. And having functional > tests is likely to give us better coverage up front, so we're more likely to > spot a change that unintentionally breaks behaviour, even if we can't use > them to efficiently nail down which change was the culprit. > > Why am I wrong?
No, I think you're absolutely right. I've also long held the view that functional tests provide a better cost:benefit return. Unit tests do have their advantages, but if I had to chose between writing unit & functional tests (say because of resource constraints) I'd definitely go for writing functional tests. -- Sagar Shah <[EMAIL PROTECTED]> Blog: http://sagsshah.livejournal.com/ Web: http://sagar.freeshell.org/