Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert a software shop to TDD?

Tags:

tdd

I would really love to push for TDD development inside the shop I'm working in. Lots of the seniors over there didn't work with unit testing or did unit testing that was hitting the database.

I would love to bring some good arguments, books for training, possible coach to ease the transition.

like image 330
Maxime Rouiller Avatar asked Oct 24 '08 18:10

Maxime Rouiller


4 Answers

I have found that it is often very hard to push TDD from the developer up. What I tend to do is talk about the benefits of TDD as much as possible and wherever possible, introduce elements of TDD myself bit by bit.

If they don't mind, start a new project with unit tests in it (managers seldom mind more test coverage) and start developing that way yourself. Slowly show the rest of your team the benefits and try to win some converts. Once you have a few other developers on your side, start pushing management for some training.

You could also offer to run some lunch-n-learns about it for the other developers. Teaching is the best way of learning and your will hopefully gain allies. If you are lucky, you can talk your boss into buying the pizza for the lunch-n-learn and everyone benefits.

like image 93
Rob Prouse Avatar answered Oct 14 '22 08:10

Rob Prouse


Like Rob P said - I also found that preaching ended me with a hoarse voice and no one listening. I got results faster and more widespread by doing it and keeping that part visible. Be open to questioning and don't force it. Encourage and praise but don't preach.

Combine it with publishing the results of your testing- and have that automated - you can send out an email perhaps. You want many subtle reminders to show people how good your method is.

like image 41
Tim Avatar answered Oct 14 '22 10:10

Tim


I think a good way to sneak in TDD principals into an existing product is to start writing unit tests for bugs. This way you slowly start to build up a set of unit tests for regression testing which become an integral part of the project, especially if you can get them run as part of your build process.

The only hurdle will be the existing code might be resistant to testing, but that's just another excuse to do some refactoring.

Once people start to realise the benefits the momentum will grow, but you need to pioneer the way.

like image 21
jonnii Avatar answered Oct 14 '22 09:10

jonnii


While I can't tell you what will work, I can tell you some things that definitely will not work and should be avoided:

I'll write the code, you write the test

This always comes up at first. People assume that since you're so gung-ho about testing, you should be the one writing the tests. This doesn't work at all and misses the whole point.

You wrote the test that's breaking, so you have to fix it.

If you start writing tests for your code, inevitably someone else will break those tests. Then, if you ask them to fix it, they'll often say it's your responsibility. This isn't necessarily them being a jerk, it could just be that they don't understand the process. This is where you'll need management backup.

I'll just start, and everyone will follow.

Like others have said, TDD without management support is very hard. If there are any devs who don't "drink the Cool-Aid" then they will constantly be breaking your tests and not caring. If you can't make them believe, then you need management telling them it's their job.

What finally brought me around was watching a project collapse due to too many bugs. It convinced me that I was doing something fundamentally wrong. A little research brought me to automated testing, and with a little determination I taught myself the basics. Perhaps talking to your fellow devs about similar projects (we all have at least one...) will help them realize that they might want to try something new.

like image 23
Micah Avatar answered Oct 14 '22 09:10

Micah