<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Michael Dowling&#039;s Whispers &#187; bdd</title>
	<atom:link href="http://blog.minderupt.com/tag/bdd/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.minderupt.com</link>
	<description>Agile development, technology, management, and other such musings</description>
	<lastBuildDate>Thu, 27 May 2010 03:02:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Where am I?</title>
		<link>http://blog.minderupt.com/2009/11/09/where-am-i/</link>
		<comments>http://blog.minderupt.com/2009/11/09/where-am-i/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 01:55:43 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Testing, TDD, ATDD]]></category>
		<category><![CDATA[Behavior Driven Development]]></category>
		<category><![CDATA[Personal]]></category>
		<category><![CDATA[spectacular]]></category>
		<category><![CDATA[acceptance testing]]></category>
		<category><![CDATA[atdd]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://blog.minderupt.com/?p=98</guid>
		<description><![CDATA[I haven&#8217;t updated my blog in a while&#8230;  sorry for that.  Besides my day job, I&#8217;ve been busily working on a new open-source project that has been in my head for quite a while now and I finally decided to just go for it.  I&#8217;m almost close to &#8220;announcing&#8221; it more publicly, but for right [...]


Related posts:<ol><li><a href='http://blog.minderupt.com/2009/12/28/announcing-spectacular-1-0-atddbdd-tool/' rel='bookmark' title='Permanent Link: Announcing:  Spectacular 1.0 ATDD/BDD Tool'>Announcing:  Spectacular 1.0 ATDD/BDD Tool</a></li>
<li><a href='http://blog.minderupt.com/2009/12/31/using-spectacular-selenese-in-an-executable-use-case/' rel='bookmark' title='Permanent Link: Using Spectacular:  Selenese in an Executable Use Case'>Using Spectacular:  Selenese in an Executable Use Case</a></li>
<li><a href='http://blog.minderupt.com/2009/05/05/oh-bdd-how-i-love-you-so/' rel='bookmark' title='Permanent Link: Oh, BDD.  How I love you so.'>Oh, BDD.  How I love you so.</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t updated my blog in a while&#8230;  sorry for that.  Besides my day job, I&#8217;ve been busily working on a new open-source project that has been in my head for quite a while now and I finally decided to just go for it.  I&#8217;m almost close to &#8220;announcing&#8221; it more publicly, but for right now I am gathering some feedback from colleagues before I unleash my horrifying code for the world to consume. <img src='http://blog.minderupt.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>More later&#8230;</p>


<p>Related posts:<ol><li><a href='http://blog.minderupt.com/2009/12/28/announcing-spectacular-1-0-atddbdd-tool/' rel='bookmark' title='Permanent Link: Announcing:  Spectacular 1.0 ATDD/BDD Tool'>Announcing:  Spectacular 1.0 ATDD/BDD Tool</a></li>
<li><a href='http://blog.minderupt.com/2009/12/31/using-spectacular-selenese-in-an-executable-use-case/' rel='bookmark' title='Permanent Link: Using Spectacular:  Selenese in an Executable Use Case'>Using Spectacular:  Selenese in an Executable Use Case</a></li>
<li><a href='http://blog.minderupt.com/2009/05/05/oh-bdd-how-i-love-you-so/' rel='bookmark' title='Permanent Link: Oh, BDD.  How I love you so.'>Oh, BDD.  How I love you so.</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.minderupt.com/2009/11/09/where-am-i/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oh, BDD.  How I love you so.</title>
		<link>http://blog.minderupt.com/2009/05/05/oh-bdd-how-i-love-you-so/</link>
		<comments>http://blog.minderupt.com/2009/05/05/oh-bdd-how-i-love-you-so/#comments</comments>
		<pubDate>Tue, 05 May 2009 17:14:41 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Agile Testing, TDD, ATDD]]></category>
		<category><![CDATA[Behavior Driven Development]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[atdd]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[compliance]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[dan north]]></category>
		<category><![CDATA[jbehave]]></category>
		<category><![CDATA[project]]></category>
		<category><![CDATA[spec]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://blog.minderupt.com/?p=50</guid>
		<description><![CDATA[Here I thought I was going to have to bite the bullet and learn more than a little bit of Ruby by way of Behavior Driven Development.  I thought I was going to have to actually put my head down and start active coding in Ruby in order to use the Cucumber BDD framework, specifically [...]


Related posts:<ol><li><a href='http://blog.minderupt.com/2009/12/28/announcing-spectacular-1-0-atddbdd-tool/' rel='bookmark' title='Permanent Link: Announcing:  Spectacular 1.0 ATDD/BDD Tool'>Announcing:  Spectacular 1.0 ATDD/BDD Tool</a></li>
<li><a href='http://blog.minderupt.com/2009/05/04/acceptance-test-driven-development-part-1/' rel='bookmark' title='Permanent Link: Acceptance Test Driven Development:  Part 1'>Acceptance Test Driven Development:  Part 1</a></li>
<li><a href='http://blog.minderupt.com/2009/11/09/where-am-i/' rel='bookmark' title='Permanent Link: Where am I?'>Where am I?</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Here I thought I was going to have to bite the bullet and learn <em>more than a little bit</em> of Ruby by way of <a href="http://behaviour-driven.org/" target="_blank">Behavior Driven Development</a>.  I thought I was going to have to actually put my head down and start active coding in Ruby in order to use the <a href="http://cukes.info/" target="_blank">Cucumber BDD framework</a>, specifically to parse the <a href="http://wiki.github.com/aslakhellesoy/cucumber/given-when-then" target="_blank">Given/When/Then</a> clauses.</p>
<p>I thought about writing my own framework to do just that in Java, and actually started to.  Then I went to the magical Google and &#8211; wouldn&#8217;t you know it? &#8211; I found <a href="http://jbehave.org/" target="_blank">JBehave</a>.  Of course!  I knew <a href="http://dannorth.net/" target="_blank">Dan </a>wouldn&#8217;t have let me down by making me go the way of Ruby <img src='http://blog.minderupt.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   (not that there&#8217;s anything wrong with Ruby, I just like to take my sweet time <a href="http://www.testearly.com/2006/07/26/have-you-drank-the-kool-aid/" target="_blank">drinking kool-aid</a> <img src='http://blog.minderupt.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p>I love how it is just as easy to write JBehave tests as it is to write Cucumber tests:</p>
<blockquote><p>
<strong>Given </strong>a user with the email address &#8220;someone@something.com&#8221; has not already registered with the system<strong><br />
When </strong>a user tries to register in the system with the email of &#8220;someone@something.com&#8221;<br />
And a name of &#8220;Michael Dowling&#8221;<br />
And a date of birth of &#8220;1/1/1985&#8243; (yeah right)<strong><br />
Then </strong>register the user with an access token of &#8220;Registered&#8221;</p></blockquote>
<p>In JBehave, being clearly well-designed in an <a href="http://martinfowler.com/articles/injection.html" target="_blank">IoC</a> manner, asks you write the Steps to execute the above spec:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">minderupt.scenarios.steps</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jbehave.scenario.annotations.Given</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jbehave.scenario.annotations.Then</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jbehave.scenario.annotations.When</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jbehave.scenario.steps.Steps</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> CreateUserSteps <span style="color: #000000; font-weight: bold;">extends</span> Steps <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399; font-weight: bold;">String</span> email<span style="color: #339933;">;</span>
&nbsp;
	@Given<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;a user with the email address <span style="color: #000099; font-weight: bold;">\&quot;</span>$email<span style="color: #000099; font-weight: bold;">\&quot;</span> has not already registered with the system&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> checkForRegisteredUser<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">String</span> email<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// code to check for pre-existing email</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@When<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;a user tries to register in the system with the email of <span style="color: #000099; font-weight: bold;">\&quot;</span>$email<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> registerUserWithEmail<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">String</span> email<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// code to register with email</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@When<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;a name of <span style="color: #000099; font-weight: bold;">\&quot;</span>$name<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> registerUserWithFullName<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">String</span> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// code to register with name</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@When<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;a date of birth of <span style="color: #000099; font-weight: bold;">\&quot;</span>$dob<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> registerUserWithDateOfBirth<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">String</span> dob<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// code to register with DOB</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	@Then<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;register the user with an access token of <span style="color: #000099; font-weight: bold;">\&quot;</span>$token<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #006600; font-weight: bold;">void</span> checkForCreatedUser<span style="color: #009900;">&#40;</span><span style="color: #003399; font-weight: bold;">String</span> tokenExpected<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #666666; font-style: italic;">// register user and confirm returned token, blah blah</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>&#8230;and then write the actual test case, specifying configuration options and the actual steps to execute during the test:</p>

<div class="wp_syntax"><div class="code"><pre class="java5" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">minderupt.scenarios</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jbehave.scenario.JUnitScenario</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">org.jbehave.scenario.Scenario</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">minderupt.scenarios.steps.CreateUserSteps</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> CreateUser <span style="color: #000000; font-weight: bold;">extends</span> Scenario <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> CreateUser<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> CreateUserSteps<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>I like this approach for multiple reasons, not the least because I can re-use the steps for different spec documents utilizing the same language, but also, I can change the test case configuration so that on my dev machine (local build) I can run all the tests and simply outputthe results to my console, but in my <a href="http://cruisecontrol.sourceforge.net/" target="_blank">CI system</a>, the output goes out to some kind of standard reporting system in pretty HTML.  Yay.</p>
<p>Like I mentioned in a previous post, one of the things I want to do is be able to fully spec out a requirement in a document (in Word, HTML, Wiki, etc) which will have a mix of business logic rules, <a href="http://fit.c2.com/" target="_blank">FIT tests</a>, and BDD tests.  Then as part of a build, split out the FIT tests and run FIT against those, parse out the BDD tests and run those, and then output a report back into the combined document for the entire team to see.  Can&#8217;t be too hard, just a matter of parsing Word/HTML, recognizing the type of tests, and running them.  Integration project, really.</p>
<p>But I think it would be immensely useful, especially for organizations that (still) communicate over such types of documentation;  a behavior that I feel isn&#8217;t going away anytime soon.  Might as well make the transition a little bit easier, I think.</p>


<p>Related posts:<ol><li><a href='http://blog.minderupt.com/2009/12/28/announcing-spectacular-1-0-atddbdd-tool/' rel='bookmark' title='Permanent Link: Announcing:  Spectacular 1.0 ATDD/BDD Tool'>Announcing:  Spectacular 1.0 ATDD/BDD Tool</a></li>
<li><a href='http://blog.minderupt.com/2009/05/04/acceptance-test-driven-development-part-1/' rel='bookmark' title='Permanent Link: Acceptance Test Driven Development:  Part 1'>Acceptance Test Driven Development:  Part 1</a></li>
<li><a href='http://blog.minderupt.com/2009/11/09/where-am-i/' rel='bookmark' title='Permanent Link: Where am I?'>Where am I?</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.minderupt.com/2009/05/05/oh-bdd-how-i-love-you-so/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acceptance Test Driven Development:  Part 1</title>
		<link>http://blog.minderupt.com/2009/05/04/acceptance-test-driven-development-part-1/</link>
		<comments>http://blog.minderupt.com/2009/05/04/acceptance-test-driven-development-part-1/#comments</comments>
		<pubDate>Mon, 04 May 2009 16:11:41 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[Agile Testing, TDD, ATDD]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[behavior driven development]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[cuke]]></category>
		<category><![CDATA[requirements]]></category>
		<category><![CDATA[scattered thoughts]]></category>

		<guid isPermaLink="false">http://blog.minderupt.com/?p=18</guid>
		<description><![CDATA[A couple weeks ago I attended a public class led by Elisabeth Hendrickson and Dale Emery (which, btw, was aboslutely AMAZING and if you have not taken their class before, I would highly recommend that you do so).  Two things stood out during that 3-day class:  Elisabeth&#8217;s simulation (where we all naturally migrated to a [...]


Related posts:<ol><li><a href='http://blog.minderupt.com/2009/05/05/oh-bdd-how-i-love-you-so/' rel='bookmark' title='Permanent Link: Oh, BDD.  How I love you so.'>Oh, BDD.  How I love you so.</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A couple weeks ago I attended a public class led by <a href="http://testobsessed.com/" target="_blank">Elisabeth Hendrickson</a> and <a href="http://dhemery.com/" target="_blank">Dale Emery</a> (which, btw, was aboslutely AMAZING and if you have not taken their class before, I would highly recommend that you do so).  Two things stood out during that 3-day class:  Elisabeth&#8217;s <a href="http://www.qualitytree.com/classes/wordcount/" target="_blank">simulation </a>(where we all naturally migrated to a more test-first process), and the discussion around ATDD using natural domain language.</p>
<p>For example:</p>
<blockquote><p><strong>Given </strong>a user with the email address &#8220;someone@something.com&#8221; has not already registered with the system</p>
<p><strong>When </strong>a user tries to register in the system with the email of &#8220;someone@something.com&#8221;</p>
<p>And a name of &#8220;Michael Dowling&#8221;</p>
<p>And a date of birth of &#8220;1/1/1985&#8243; (yeah right)</p>
<p><strong>Then </strong>register the user with an access token of &#8220;Registered&#8221;</p></blockquote>
<p>This executes the following <a href="http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html" target="_blank">Cucumber</a> code (in Ruby):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">Given <span style="color:#006600; font-weight:bold;">/</span>a user with the email address <span style="color:#996600;">&quot;(.*?)&quot;</span> has <span style="color:#9966CC; font-weight:bold;">not</span> already registered with the <span style="color:#CC0066; font-weight:bold;">system</span><span style="color:#006600; font-weight:bold;">/</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>email<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#0066ff; font-weight:bold;">@email</span> = email
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">When</span> <span style="color:#006600; font-weight:bold;">/</span>a user tries to register <span style="color:#9966CC; font-weight:bold;">in</span> the <span style="color:#CC0066; font-weight:bold;">system</span> with the email of <span style="color:#996600;">&quot;(.*?)&quot;</span><span style="color:#006600; font-weight:bold;">/</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>registerEmail<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#0066ff; font-weight:bold;">@registerEmail</span> = registerEmail
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">When</span> <span style="color:#006600; font-weight:bold;">/</span>a name of <span style="color:#996600;">&quot;(.*?)&quot;</span><span style="color:#006600; font-weight:bold;">/</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>name<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#0066ff; font-weight:bold;">@registerName</span> = name
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">When</span> <span style="color:#006600; font-weight:bold;">/</span>a date of birth of <span style="color:#996600;">&quot;(.*?)<span style="color:#000099;">\/</span>(.*?)<span style="color:#000099;">\/</span>(.*?)&quot;</span><span style="color:#006600; font-weight:bold;">/</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>dobMonth, dobDay, dobYear<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#0066ff; font-weight:bold;">@month</span> = dobMonth
  <span style="color:#0066ff; font-weight:bold;">@day</span> = dobDay
  <span style="color:#0066ff; font-weight:bold;">@year</span> = dobYear
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">Then</span> <span style="color:#006600; font-weight:bold;">/</span>register the user with an access token of <span style="color:#996600;">&quot;Registered&quot;</span><span style="color:#006600; font-weight:bold;">/</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  token = RegistrationService.<span style="color:#9900CC;">register</span> <span style="color:#0066ff; font-weight:bold;">@registerEmail</span> <span style="color:#0066ff; font-weight:bold;">@registerName</span> <span style="color:#0066ff; font-weight:bold;">@month</span> <span style="color:#0066ff; font-weight:bold;">@day</span> <span style="color:#0066ff; font-weight:bold;">@year</span>
  <span style="color:#9966CC; font-weight:bold;">if</span> token != <span style="color:#996600;">&quot;Registered&quot;</span>
    <span style="color:#CC0066; font-weight:bold;">raise</span> <span style="color:#996600;">&quot;Not registered&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>The neat part of this is that it is an executable document;  meaning, it is input to &#8220;test fixtures&#8221; written by development to test the software being developed from an acceptance point-of-view.  This is the essence of &#8220;<a href="http://behaviour-driven.org/" target="_blank">Behavior Driven Development</a>&#8221; or BDD, of which I am a total convert.</p>
<p>I want to write much more about this topic &#8211; and I will.  For now, though, the one though swirling through my head is the need to have documents be in formats large organizations (such as my employer) use to describe requirements (<a href="http://dannorth.net/introducing-bdd" target="_blank">behaviors</a>).  I doubt it will be possible for most teams to check-in plain text files and be comfortable with that.  Plus, these documents will need to be passed around, possibly stored in Wikis, or other document management systems (even though ideally, these documents would be in source control along with the ATDD code).</p>
<p>I think I found a new project for myself.  Hmmm&#8230;.</p>


<p>Related posts:<ol><li><a href='http://blog.minderupt.com/2009/05/05/oh-bdd-how-i-love-you-so/' rel='bookmark' title='Permanent Link: Oh, BDD.  How I love you so.'>Oh, BDD.  How I love you so.</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://blog.minderupt.com/2009/05/04/acceptance-test-driven-development-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
