Posts Tagged testing

Apprentice programmer

unlit olympic flame

Let’s talk about plumbing, and customer service, and an experience I had recently with a company I won’t name. Overall the experience was good, but I don’t want anyone to get into trouble because they’ve misinterpreted what I have said here. (and if you’re wondering about the picture : the Olympic flame isn’t lit either).

A couple of months ago, our gas combination boiler failed. It refused to start and complained that the flue was blocked. I sighed because we’d had the bearings on the fan replaced last year. So I called the service company to get it fixed.

A couple of days later, I was working from home to let the service technician in. He was fairly young but identified a problem. Unfortunately, a new part was required, so he had to come back the next day. He came back, replaced the part, fired up the boiler and all looked good. The next morning, no hot water and a flue warning :-( it was the weekend by this point so we got a senior employee, who identified an error in the replacement part (fitted the wrong way) and identified the original problem as a blocked inlet. 5 minutes to identify, 1 hour to dismantle the boiler to get to the blockage and put it back together.

He finished, switched the boiler off, and then made sure it fired when put back together. Problem solved.

So, what did I learn, and why am I posting this on a programming blog?

Firstly, a monthly fee means that I didn’t have to worry about callout or parts, which was great, and left me less annoyed than I might have been.

Secondly, your first fix might not be the right fix. It looked right and it passed the first test, but caused problems later on (at the next restart). Ever written the wrong test and thought the problem was solved? Threading has caught me out in that way before.

Thirdly, just because it passes the test, doesn’t mean the problem is fixed. The boiler fired easily when the case was open and there was more airflow, but didn’t fire when the case was closed. Ever had a bug that only appeared in production or in a system test?

Fourthly, experts will find problems quicker than rookies, but rookies still need to learn.

Fifth, sometimes the only way to fix a problem, even a small one, is to tear everything apart, blow on it, and put it back together again.

The second guy also said something that struck a chord, as I’ve been trying to do it myself : he was disappointed that the company didn’t send the junior out with him so he could pass on his experience so that he’d learn for next time. Apparently, the fault itself is rare, so it’s a good learning opportunity. For developers : fix your own bugs, as there are a lot of things apprentice developers will see in the first few years after they graduate that are rare enough not to come up in university but common enough to be real problems in the real world. For example,
trusting user input (and the related buffer overrun bugs).

So, what have you learned from other professionals?

Leave a Comment

TDD? I Don’t Have Time – Google Docs


TDD? I Don’t Have Time

Thanks to everyone for their feedback on my previous post. I’ve taken the next step and created a presentation that’s publicly available on Google Docs via the link shown below. I’ll be adding more ideas to it as I get them, and I may do a small coding demo if I’m feeling brave.

As before, add comments below, or send feedback to the twitter account or email address in my previous post.

TDD-I-dont-have-time – Google Docs

Blogged with the Flock Browser

Comments (1)

Test Driven Design : Developer Day Scotland 2

TDD? I don’t have time

I’ve had one of my talks accepted for Developer Day Scotland: talking about Test Driven Design. I’ve got a basic idea for a talk, but in the spirit of Alt.Net and open source development, I thought I’d throw this important subject out to the crowd. I’ve got a few ideas for the talk that I’ll outline below, but I’m looking for ideas and stories from others to help illustrate this point. Lest you think this is the easy way out, remember that I’ll be editing, compiling and delivering the talk, and I’ll get all the hecklers and tricky questions.

In return, I will release the presentation under a creative commons licence so that anyone else can take it, adapt it, and use it to help sell the principles of TDD to their colleagues. I’ll also make sure all contributors are included in the acknowledgments, provided they give me their name. If you want to give feedback, comments below are preferred as they’re public, but you can also send them to me via twitter ( @craignicol ) or via my gmail address (which I won’t give here to avoid spam harvesting, but it’s the same username as my twitter account)

The basic structure of the talk will be a series of slides titled with a reason not to to TDD, followed by a few suggestions why that reason is a myth, or is not as big a problem as you might think. Based on last year’s DDDS, I expect most of the audience will have come across unit testing, but I might need to add that to the sales pitch. I’ll list below the basic ideas I’ve got so far. Any arguments, expansions, examples or other feedback gratefully received.

I don’t have time

  • Do you have time to debug a live system?
  • Do you spend time adding new features?
  • Do you have the right tools?

I don’t need to test

  • Are you a perfect programmer?
  • Are you working alone?
  • Will you ever maintain your code?

I need to know about IoC, mocking, etc

  • Not when you start
  • Don’t let the terms scare you, it’s the principles that are important
  • The principles are worth learning

I love TDD, but I can’t get my team to adopt it

  • Don’t keep it to yourself. Show it off.
  • If you’re the lead, make it happen. CI is your friend.

I don’t know what tools to use

I need 100% code coverage

  • Have you been talking to Joel?
  • You don’t need 100%, but until you try and reach it, you don’t know what you don’t need.
  • You have to decide which of this, and many other aspects you feel comfortable with, and which you don’t.

Quality doesn’t matter

  • It matters to the customers who have to wait longer for a working product
  • It matters to the developers who have to maintain your code and will leave or stop caring
  • It matters to the accounting department who lose money for either of the above

You can’t test a UI

  • Make sure your logic can be tested without a UI
  • Test the right thing on your UI
  • There are frameworks (NUnitForms, WatiN)
Blogged with the Flock Browser

Comments (9)

Follow

Get every new post delivered to your Inbox.

Join 937 other followers