[rspec-users] When to use BDD/TDD w/ external libraries

Scott Taylor mailing_lists at railsnewbie.com
Fri Jun 8 13:22:55 EDT 2007

On Jun 8, 2007, at 1:15 PM, David Chelimsky wrote:

> On 6/8/07, Jonathan Linowes <jonathan at parkerhill.com> wrote:
>> most plugins come with their own rails tests
>> i've converted one by hand to rspec (restful_authentication) because
>> - its functionality is integral to my app
>> - its really a generator so the code ends up in my app
>> - there's a good chance i'll be making custom changes to it as my app
>> develops
>> perhaps a tool that automatically converts rails tests to rspecs
>> would be useful?
> We had one of those a while back. It was pretty good, but not perfect.
> It's very complex to get right and cover all the possibilities and
> it's something that we will likely not build as part of rspec. That
> said, if somebody else wanted to create such a thing, I'm sure you'd
> make a lot of people happy.

Wow.  That code must still be around somewhere in subversion (any  
hints as to it's last release?)


>> obviously thats not TDD but it would give you the code coverage
>> and provide a starting point if you make custom changes to the plugin
>> On Jun 8, 2007, at 9:48 AM, David Chelimsky wrote:
>>> On 6/8/07, aslak hellesoy <aslak.hellesoy at gmail.com> wrote:
>>>> On 6/8/07, Scott Taylor <mailing_lists at railsnewbie.com> wrote:
>>>>> Test First Development is great...But should you use it when  
>>>>> you are
>>>>> adding classes/methods on to external library that doesn't have an
>>>>> extensive test suite?  I noticed that the rspec plugin for  
>>>>> autotest
>>>>> has no specs.
>>>>> David Chemlinsky said something to the list a while back that has
>>>>> been stewing in my subconscious - that you develop software
>>>>> differently using Test First Development/BDD.  I noticed that it
>>>> David (Chelimsky is his last name) and Ryan Davis paired on the  
>>>> RSpec
>>>> plugin for Autotest at Railsconf, and I suspect that "they didn't
>>>> have
>>>> time" to write specs for it ;-)
>>>> Look at the number of bugs that have been reported (and fixed)
>>>> against
>>>> RSpec's Autotest plugin in the previous weeks.
>>>> Maybe there is a relationship between the number of bugs and the  
>>>> lack
>>>> of specs? ;-)
>>> Definitely.
>>>>> would be very hard to add a spec library to autotest (I once
>>>>> performed some code coverage on it and I believe it was at  
>>>>> something
>>>>> like 30 or 40 percent.).  So if one wanted to develop something  
>>>>> like
>>>>> the rspec plugin to autotest, would it be wise to develop it test
>>>>> first?
>>> Absolutely. TDD allows for the process that Ryan and I went through
>>> but I skipped an important step because I was excited to get it out
>>> the door. You're allowed to hack stuff together to figure out how it
>>> works. But you're then supposed to throw all of that code out and
>>> start over, test first. I failed to take this step :(
>>> That said, I think that most of the bugs that have been reported
>>> wouldn't have been tested against anyhow - they've mostly been  
>>> due to
>>> conflicts between varying versions of spec.opts and file loading
>>> issues that I never saw happen and therefore wouldn't have likely
>>> considered to describe.
>>> This is part of the nature of TDD. TDD didn't evolve in one or
>>> two-man, all-developer shops. It evolved on teams that included
>>> testers. The goal was never for the tests to serve as tests as  
>>> far as
>>> the customer was concerned. It was about design. It was about
>>> documentation. It was about making the job of the tester (the  
>>> official
>>> tester w/ the title and all) easier by reducing the number of bugs
>>> they had to deal with. This meant that they could focus more on the
>>> really important stuff instead of getting hung up on the trivial  
>>> stuff
>>> that *should* have been caught during development. This helped to
>>> reduce the thrashing that often occurred once you reached the  
>>> testing
>>> phase.
>>> That's part of why BDD came to be - to help put the focus back in  
>>> the
>>> right places: developers develop, testers test.
>>> In the end, even the most disciplined TDD'er is only going to write
>>> examples for the things he/she thinks of. You still should have a
>>> tester on your team. The person who lives and breathes breaking  
>>> code,
>>> rather than developing code. We don't have a person like that on the
>>> RSpec team. Well, actually, we DO have that. It's all of you! Which
>>> means, really, we shouldn't be making major releases without release
>>> candidates. I think RC is open source's informal means of  
>>> exploratory
>>> testing.
>>>> Any code that doesn't have automated tests works by accident as
>>>> far as
>>>> I'm concerned.
>>>> It makes no difference whether the code is using a third party
>>>> library
>>>> or code whether it's part of your own code.
>>>> However, some third party libraries (like J2EE) makes it so hard to
>>>> test any code using it that you essentially have to choose between
>>>> the
>>>> third party or the ability to test. Sometimes having both is too  
>>>> much
>>>> work.
>>> In terms of rspec and autotest, I think we're somewhere in the  
>>> middle
>>> here. Scott points out 30-40% coverage on autotest. There's a school
>>> of thought in TDD that says "test your own code," implying that you
>>> don't test 3rd party libraries. You test that your code interacts w/
>>> the 3rd party code per the published API, but you either trust that
>>> the 3rd party code works or you either accept the possibility of  
>>> bugs
>>> because the benefits are worth it or you don't use it.
>>> For me, autotest has been great. There have been some integration
>>> problems w/ rspec but while they've been annoying they haven't
>>> instilled fear in me that I'm getting the wrong feedback. So I  
>>> put up
>>> with it.
>>> But we could certainly get some tests around the existing  
>>> integration
>>> points: The test-to-file mappings, the command that gets generated,
>>> etc. Patches welcome!
>>> Cheers,
>>> David
>>>> Aslak
>>>>> I'm not sure if anyone else has had this difficulty, or if I'm  
>>>>> being
>>>>> clear.  Let me know if I should clarify with some examples.
>>>>> Best,
>>>>> Scott
>>>>> _______________________________________________
>>>>> rspec-users mailing list
>>>>> rspec-users at rubyforge.org
>>>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>>> _______________________________________________
>>>> rspec-users mailing list
>>>> rspec-users at rubyforge.org
>>>> http://rubyforge.org/mailman/listinfo/rspec-users
>>> _______________________________________________
>>> rspec-users mailing list
>>> rspec-users at rubyforge.org
>>> http://rubyforge.org/mailman/listinfo/rspec-users
>> _______________________________________________
>> rspec-users mailing list
>> rspec-users at rubyforge.org
>> http://rubyforge.org/mailman/listinfo/rspec-users
> _______________________________________________
> rspec-users mailing list
> rspec-users at rubyforge.org
> http://rubyforge.org/mailman/listinfo/rspec-users

More information about the rspec-users mailing list