On 28 May 2009, at 06:32, Ben Mabey wrote:

Stephen Eley wrote:
On Wed, May 27, 2009 at 8:19 PM, Matt Wynne <m...@mattwynne.net> wrote:

http://robertlally.com/post/bdd-not-so-much


*shrug*


I'll add a *sigh* as well...

Robert says his "problem is with the definition of BDD itself". He points out that no one can really agree on what BDD is exactly, which is true to a certain extent. However, he then makes arguments against BDD using his poor understanding of it.

*snip*
For that matter, I've never found that the semantic argument about
"What is BDD?" vs. "What is TDD?" has ever made any practical
difference to my code.  ...


I think Robert makes valid observations. If you ask anyone on this list what BDD is you will get different answers even though we are a very homogeneous bunch when it comes to the tools we use. ( I think Steve just illustrated this point. :) ) Now, if you ask people on the BDD Google Groups list you will get far different answers and people will have a hard time agreeing on terminology. I think this, more than anything, is what Robert is frustrated about. BDD has changed and evolved over the years and people are at different stages of understanding it. It is hard to pin down what an idea is when it is evolving and being fine tuned. Additionally, like Steve pointed out, it can mean different things in different contexts. Despite this being a valid observation he makes the wrong conclusion that this confusion over what IS BDD is a bad thing and therefore means "BDD isn't AN answer." I think this line points out his flawed logic the best:

"So what is the output of BDD: User Acceptance Tests? Functional Tests? Unit Tests? System Tests? A system design? The design of individual units? It depends on who you talk to."

Well.. guess what, this exact things applies to TDD:

"So what is the output of TDD: User Acceptance Tests? Functional Tests? Unit Tests? System Tests? A system design? The design of individual units? It depends on who you talk to."

You can ask people on the TDD list what TDD is and guess what- you will get different answers!! So, by Robert's logic TDD isn't AN answer either. This reminds me of the recent TDD tests are not unit tests debacle. I think Michael Feathers summed up the controversy pretty well[1]. In the end you have to realize, and accept, that people will have different ideas and terminology about the same practice. That doesn't invalidate the practice though.
I also don't understand his apparent assumption that using a
"structured textual format" for functional specs means it's the *only*
thing one uses.  Sometimes I make diagrams to understand my design
thoughts better.  Sometimes I do mind maps.  Sometimes I write long
rambling blog posts (http://tinyurl.com/d6w4t8).  And I still use
RSpec and Cucumber. They're not exclusive of each other. They're all
useful.  They all shine different lights on the same cave wall.


I picked up on this as well, and this goes back to my statement about him making arguments against BDD with a poor definition of it. Robert seems to have the misconception that as BDD has evolved different ways of writing tests that these ways are mutually exclusive. From what I can gather he seems to think that one must phrase all of your tests as customer facing tests when using Cucumber, and you are not allowed to use RSpec or Test::Unit at all. From his post:

"TDD, as a design methodology, forces you to write code that is used by two different clients: the tests and the final application. This is one of the ways that it helps promote flexibility. It gives you an early look at ‘how exactly am I going to use this class/object’. BDD frameworks don’t look or work like the code that will be calling the final code, so there really is no benefit here. Take easyb as an example, it doesn’t even use the same language as the code you’re writing (assuming the common use case of using easyb as a BDD framework for Java development).

TDD highlights pain points when writing tests, if it is hard to write a test for, your code probably needs a little work. BDD frameworks such as Cucumber, can quite happily support specs written in terms of ‘the system’ or ‘the application’ and you have to write grotesque code to make it work under the covers. This doesn’t make Cucumber a bad tool, just the wrong tool for the job of designing code."


He has very good points about how TDD is a design methodology, but he is misinformed about the use of BDD tools in this regard. I view RSpec as my design tool to be used in the exact way he as described. Why do you think we are calling them "code examples"?!? I agree with him about Cucumber not being fit for a design tool on that kind of level. I don't see Cucumber providing me the same type of detailed design cues that I get from RSpec. However, Cucumber helps me make sure that I am only designing (with RSpec) code that actually needs to be designed. It helps me write software, not code or as Dan North likes to say "software that matters". Can you do the same thing with an xUnit framework with high level acceptance tests? Sure you can, but those tests won't be nearly as nice of a communication tool to the customers or, IMO, provide as good of application level documentation.

Anyways.. that is my take on it. I would also recommend reading this post from Dan North on this list about his frustrations over misconceptions of what BDD is: http://rubyforge.org/pipermail/rspec-users/2008-February/005696.html

I'm hoping that the publication of _The RSpec Book_ will help with these types of misconceptions. It has in it, IMO, the culmination of a lot of thinking behind what BDD is and will be a great reference to point people to who are grappling with understanding BDD regardless of programming language. Maybe we should send Robert a free copy to help educate him? :p

-Ben

This is brilliant, Ben. Please blog it for posterity.

My response was a bit more practical:
http://blog.mattwynne.net/2009/05/28/bdd-joy-in-10-easy-steps/

1. http://blog.objectmentor.com/articles/2009/04/13/x-tests-are-not-x-tests

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Matt Wynne
http://beta.songkick.com
http://blog.mattwynne.net



_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to