February 2009 Blog Posts
I'm currently evaluating mechanisms to invoke unit tests. The contenders: TestDriven.NET Advantages: Noticeably faster than other options Nifty IDE integration Integrates with Team Coverage Disadvantages: I need to pay for it I find the failed test reporting less readable Resharper with Gallio Advantages: Pretty GUI Nifty IDE integration (but not quite as good as TestDriven.NET) I already have it Disadvantages: ...
It was recently suggested to me that the code quality of unit tests is irrelevant as the tests are not part of what is delivered. I take this view to be based on an incorrect understanding of the purpose of unit tests. As I've previously discussed unit tests are not primarily about short term bug reduction. The value of unit tests is delivered over the lifetime of the project. This inevitably means that the tests will need to be modified over time to reflect the new desired behaviour of the application and to accommodate changes to its structure. Hence...
I'm a big fan of Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, now in second edition. It's virtually unique in my experience as being a book published by a software maker that actually includes multiple notes admitting that their product isn't perfect. It's incredibly confidence inspiring to know that the people on the other side of my library think about what they're doing and are willing to learn and improve. That said I don't fully agree with some of the recommendations the book contains. In particular the section on the use of abstract base classes...
Rhys Campbell has pointed me in the direction of this video by Ward Cunningham that explains the concept of technical debt and the debt metaphor. I consider this to be a key concept when making design and implementation decisions in professional software development. Highly recommended.
The H-series Madsen has responded at length to my post concerning living in a world with obsolete data. Naturally I disagree with his response as it's otherwise hard to have an argument ("You're right!", "Yes, and so are you, damn you!"). Let's consider his example. He states that he's relying on an RSS feed to give him news about a situation of concern (I consider the topic to be in somewhat poor taste, so I'm going to skip the specifics). He is worried that due to slow updates or caching further information of relevance may be ignored. He feels...
My previous post describes why you cannot rely on having the latest data. This relates primarily to external data. But what about data you create and control? How can we ensure that's applied correctly and consistently. Consider the example of a retailer with multiple locations. The items they sell will have assigned pricing that will be consistent across locations (in this example I'm considering only the case where a single set of pricing is used, but the principal can apply where pricing varies by region and other factors). They wish to update the price of a Widget X from...
My former colleague Brian H. Madsen, Esq. posted a lament that he couldn't find an RSS reader that would allow him to comment on the most recent version of a post. I responded that this limitation is fundamental to reality at large and that the alternative to accepting potentially obsolete data is paralysis. Brian disagrees with this assessment. Rather than comment again on his blog I've chosen to elaborate my point in greater detail on my own. It would seem to be a good thing in general to make decisions based on the latest information. Certainly we should try...
There's a referendum on Daylight Savings coming up in Western Australia. So far I'm entirely unconvinced by both sides of the debate. It doesn't really affect me either way so I'd like to make a choice based on what can be demonstrated to be the best overall outcome. Unfortunately neither side makes a compelling case. And at this point I'd settle for a slightly compelling case. I am therefore probably going to vote against whichever side has the dumbest argument in support of their position. This means I'm likely to vote for daylight savings because the arguments by people...
It's been my opinion for a while that anyone who can look at their own code from six months ago and not see any areas for improvement has begun to fossilise. Part of being a professional software developer is constant improvement (also known as a constant race to stay relevant). As a case study, my usage of Dependency Injection. My first significant use of DI was a couple of years ago using Spring.NET. This usage was characterised by a few properties: Exclusive use of setter injection No mocks and overly complex hand-coded...
I'm a big fan of development tools. By automating development tasks we save time and gain confidence that the tasks have been applied consistently without human error. It's important to realise that however fast and accurate a tool may be, when the task is inappropriate then the tool has just hindered you. Particularly insidious, if the tool makes doing the wrong thing easy there's an immediate (if invalid) incentive to do the wrong thing rather than take longer to perform the task correctly. I saw this recently on a discussion board in a thread on the utility of automatic...