views:

927

answers:

6

Lots of people talk about writing tests for their code before they start writing their code. This practice is generally known as Test Driven Development or TDD for short. What benefits do I gain from writing software this way? How do I get started with this practice?

+3  A: 

The benefits part has recently been covered, as for where to start....on a small enterprisey system where there aren't too many unknowns so the risks are low. If you don't already know a testing framework (like NUnit), start by learning that. Otherwise start by writing your first test :)

Karl Seguin
A: 

In my opinion, the single greatest thing is that it clearly allows you to see if your code does what it is supposed to. This may seem obvious, but it is super easy to run astray of your original goals, as I have found out in the past :p

Ed
+5  A: 

There are a lot of benefits:

  • You get immediate feedback on if your code is working, so you can find bugs faster
  • By seeing the test go from red to green, you know that you have both a working regression test, and working code
  • You gain confidence to refactor existing code, which means you can clean up code without worrying what it might break
  • At the end you have a suite of regression tests that can be run during automated builds to give you greater confidence that your codebase is solid

The best way to start is to just start. There is a great book by Kent Beck all about Test Driven Development. Just start with new code, don't worry about old code... whenever you feel you need to refactor some code, write a test for the existing functionality, then refactor it and make sure the tests stay green. Also, read this great article.

Mike Stone
@Mike: the link to the last article (Tips for Unit Testing) expired. Here is the link to the new article: http://devver.wordpress.com/2008/07/07/tips-for-unit-testing/
Igor Popov
A: 

Benefits

  1. You figure out how to compartmentalize your code
  2. You figure out exactly what you want your code to do
  3. You know how it supposed to act and, down the road, if refactoring breaks anything
  4. Gets you in the habit of making sure your code always knows what it is supposed to do

Getting Started

Just do it. Write a test case for what you want to do, and then write code that should pass the test. If you pass your test, great, you can move on to writing cases where your code will always fail (2+2 should not equal 5, for example).

Once all of your tests pass, write your actual business logic to do whatever you want to do.

If you are starting from scratch make sure you find a good testing suite that is easy to use. I like PHP so PHPUnit or SimpleTest work well. Almost all of the popular languages have some xUnit testing suite available to help build and automate testing.

dragonmantank
+1  A: 

Please see my answer to the same question already asked. A elaborated answer to this question

eroijen
A: 

Good starter: Getting Started with Tdd in Java using Eclipse by Brett L. Schuchert

Is a set of screencasts about TDD in Java and in C#. It is starting from the scratch and teaching basics of TDD.

Ula Karzelek