This past weekend I attended the Continuous Improvement in Software Development Conference in Austin, Texas. This conference brought together many brilliant minds in the .NET community for the expressed purpose of continuous improvement. The conference was very good, but some of the best chances for learning happened outside the conference sessions at dinner or sitting around a table at the hotel bar. One such discussion seemed to point out one problem we have in our community, minutiae.
I will preface the remainder of this post by saying I tend to be a purist at times and must always remind myself what the ultimate goal is. Acknowledging my tunnel vision, sometimes purists, can miss the point if we're not careful. One evening a few of us got on the discussion of test-driven development. Someone at the table used the phrase test-first development in the conversation. That person was quickly halted by others at the table because the terms, in their opinion are quite different and should not be used interchangeably. If I were to ask you define both, could you adequately define the difference? Should you be able to? Does it really matter?
I would say that for the development community out there that the differences, if in fact they do exist, don't matter. A quick and informal poll revealed that 8 of 10 developers I know aren't unit testing at all. I readily admit that my sampling is probably an inaccurate representation of the total developer population. I don't think though that my sample poll is off by an enormous amount. Think of the developers you know; are they testing at all? I'm not talking TDD, but plain old unit tests? Chances are good that you know a few that aren't testing at all. Are they served by the bantering back and forth about differences between TDD and TFD? Absolutely not.
The important thing to remember is that fundamentally the TDD and the TFD practitioner believe the same thing, that is, you need to be testing your code. They may disagree about small things, but those small things should take a back seat to the fundamentals. We don't have to look far to see another example of this type of behavior. Think of two Christian denominations, both of which are trying to convert nonbelievers to Christianity, bickering among themselves about whether children should be baptized or not. The debate becomes so ardent, that neither camp accomplishes their original goal or converting nonbelievers because they're too focused on each other. I fear the same outcome will befall those of us preaching testing. We get so religious about the non-essential aspects of testing that we miss the people we intended to target, the people who aren't testing their code at all.
I think we could all take a page from St. Augustine who had it right over 1600 years ago: "In essentials, unity; in non-essentials, liberty; in all things, charity."
11-03-2008 10:42 PM