<?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>Liz Keogh&#039;s blog &#187; bdd</title>
	<atom:link href="http://lizkeogh.com/tag/bdd/feed/" rel="self" type="application/rss+xml" />
	<link>http://lizkeogh.com</link>
	<description>Software, Training, Coaching, Writing</description>
	<lastBuildDate>Thu, 17 May 2012 18:05:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tyburn 1.0 released</title>
		<link>http://lizkeogh.com/2008/09/04/tyburn-1-released/</link>
		<comments>http://lizkeogh.com/2008/09/04/tyburn-1-released/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 09:04:39 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[open source]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[Tyburn]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=378</guid>
		<description><![CDATA[It seems to be the season for releasing code!
Tyburn is a fast, minimal, extensible Java Swing harness that was originally part of JBehave 1.0. You can download it here and use it like this:

WindowControl control = new WindowControl("my.named.frame");
control.clickButton("a.button");
control.enterText("a.textfield", "Text1");

]]></description>
			<content:encoded><![CDATA[<p>It seems to be the season for releasing code!</p>
<p>Tyburn is a fast, minimal, extensible Java Swing harness that was originally part of JBehave 1.0. You can download it <a href="http://code.google.com/p/tyburn/">here</a> and use it like this:</p>
<p><code><br />
WindowControl control = new WindowControl("my.named.frame");<br />
control.clickButton("a.button");<br />
control.enterText("a.textfield", "Text1");<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2008/09/04/tyburn-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBehave 2.0 is released!</title>
		<link>http://lizkeogh.com/2008/09/03/jbehave-20-is-released/</link>
		<comments>http://lizkeogh.com/2008/09/03/jbehave-20-is-released/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 16:50:11 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[jbehave]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[JBehave2]]></category>

		<guid isPermaLink="false">http://lizkeogh.com/?p=376</guid>
		<description><![CDATA[We discovered some time ago that JBehave 1.0 wasn&#8217;t being used. When we found out that it took over an hour to write the scenarios for the Game of Life, we realised why.
Our goal with JBehave 2 was to make the process of collaboration, drawing up scenarios and getting started easy and simple. Feedback from [...]]]></description>
			<content:encoded><![CDATA[<p>We discovered some time ago that JBehave 1.0 wasn&#8217;t being used. When we found out that it took over an hour to write the scenarios for the Game of Life, we realised why.</p>
<p>Our goal with JBehave 2 was to make the process of collaboration, drawing up scenarios and getting started easy and simple. Feedback from enterprise users suggests that we may have succeeded!</p>
<p>Find out more about the new features, the ones we&#8217;ve discarded, and how to use it on the <a href="http://jbehave.org">JBehave site</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2008/09/03/jbehave-20-is-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBehave 2 is up on its usual svn</title>
		<link>http://lizkeogh.com/2008/05/29/jbehave-2-is-up-on-its-usual-svn/</link>
		<comments>http://lizkeogh.com/2008/05/29/jbehave-2-is-up-on-its-usual-svn/#comments</comments>
		<pubDate>Thu, 29 May 2008 07:48:39 +0000</pubDate>
		<dc:creator>liz</dc:creator>
				<category><![CDATA[jbehave]]></category>
		<category><![CDATA[bdd]]></category>

		<guid isPermaLink="false">http://lunivore.fbyneserv.com/?p=370</guid>
		<description><![CDATA[svn co http://svn.codehaus.org/jbehave/trunk
No &#8216;official releases&#8217; yet, but if you want to play, go ahead. Examples of examples are checked into trunk.
Features include:

 plain text scenarios
 steps defined using annotations that match the scenarios
 built on JUnit
 Ensure (which is just an extension of Assert, so you don&#8217;t have to use it)
 auto-conversion of string arguments [...]]]></description>
			<content:encoded><![CDATA[<p><em>svn co http://svn.codehaus.org/jbehave/trunk</em></p>
<p>No &#8216;official releases&#8217; yet, but if you want to play, go ahead. Examples of examples are checked into trunk.</p>
<p>Features include:</p>
<ul>
<li> plain text scenarios</li>
<li> steps defined using annotations that match the scenarios</li>
<li> built on JUnit</li>
<li> Ensure (which is just an extension of Assert, so you don&#8217;t have to use it)</li>
<li> auto-conversion of string arguments to numbers</li>
<li>pending steps generated for anything which hasn&#8217;t been defined yet (these don&#8217;t break the build)</li>
<li>errors from scenarios are rethrown after the full scenario has been described</li>
</ul>
<p>Our goal with JBehave 2 was to make a framework that was lightweight, easy to use and didn&#8217;t take as long to set up as JBehave 1. To that end, we&#8217;ve been driving this entirely from example code &#8211; no guessing, unless it&#8217;s obvious &#8211; and we&#8217;ve ended up with something that works quite a lot like RSpec&#8217;s story runner, but for Java.</p>
<ul>
<li>To use it, simply name your scenario file with underscores, eg: <code>i_can_toggle_a_cell </code>and define steps in it thus:
<pre>Given a 5 by 5 game
When I toggle the cell at (2, 3)
Then the grid should look like
.....
.....
.....
..X..
.....
When I toggle the cell at (2, 4)
Then the grid should look like
.....
.....
.....
..X..
..X..
When I toggle the cell at (2, 3)
Then the grid should look like
.....
.....
.....
.....
..X..</pre>
</li>
<li>Then extend the Scenario class with a similarly named Java class:<br />
<code>ICanToggleACell.java</code></li>
<li>Extend the Steps class &#8211; this is where your steps will be defined, and you can have as many as you want</li>
<li>Inject these into the Scenario:
<pre>public class ICanToggleACell extends Scenario {

	public ICanToggleACell() {
		super(new GridSteps()); // varargs, can have lots of steps
	}
}</pre>
</li>
<li>Annotate methods in your step class to match the ones in your plain text scenario.
<pre>public class GridSteps extends Steps {

	private Game game;
	private StringRenderer renderer;

	@Given("a $width by $height game")
	public void theGameIsRunning(int width, int height) {
		game = new Game(width, height);
		renderer = new StringRenderer();
		game.setObserver(renderer);
	}

	@When("I toggle the cell at ($ column, $row)")
	public void iToggleTheCellAt(int column, int row) {
		game.toggleCellAt(column, row);
	}

	@Then("the grid should look like $grid")
	public void theGridShouldLookLike(String grid) {
		ensureThat(renderer.asString(), equalTo(grid));
	}

}</pre>
</li>
<li>Run your new scenario!</li>
</ul>
<p>Future features we&#8217;re thinking of:</p>
<ul>
<li> having more than one scenario in a file</li>
<li> tagging scenarios</li>
<li> better tolerance of whitespace</li>
<li>an option for pending steps to break the build</li>
<li>decent documentation to show you how you can customise filename parsing, argument parsing, etc.</li>
<li> anything you persuade us you need.</li>
</ul>
<p>Give it a go and tell us what you think! Release 2.0 can&#8217;t be far away&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2008/05/29/jbehave-2-is-up-on-its-usual-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RIP As a&#8230; I want&#8230; So that&#8230;</title>
		<link>http://lizkeogh.com/2008/05/14/rip-as-a-i-want-so-that/</link>
		<comments>http://lizkeogh.com/2008/05/14/rip-as-a-i-want-so-that/#comments</comments>
		<pubDate>Wed, 14 May 2008 08:06:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[stories]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[feature injection]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[If you&#8217;re more interested in the results than the conversation, skip to the summary.
Recently, I&#8217;ve realised that a lot of BDD has been very dev-focused. There&#8217;s a reason for that. Dan&#8217;s a dev, I&#8217;m a dev and most of the people who helped to evolve BDD are devs.
BDD&#8217;s about the interaction between the business and [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re more interested in the results than the conversation, skip to <a href="#summary">the summary</a>.</p>
<p>Recently, I&#8217;ve realised that a lot of BDD has been very dev-focused. There&#8217;s a reason for that. Dan&#8217;s a dev, I&#8217;m a dev and most of the people who helped to evolve BDD are devs.</p>
<p>BDD&#8217;s about the interaction between the business and the technical people in software. I want to know how it&#8217;s working from the other side. So, I&#8217;ve been learning more about the customers, and particularly, more about BAs and their role. I had the recent fortune to run into Angela Martin at <a href="http://agileindia.org/agilemumbai08/index">Agile India</a>, where she taught me the art of grouping stories into coherent releases, while still keeping the stories granular enough that progress can be measured and delivery made regular and predictable.</p>
<p>Last night at <a href="http://www.xpdeveloper.net/xpdwiki/Wiki.jsp?page=XtC">XtC</a> I met up with Chris Matts (of <a href="http://www.infoq.com/articles/real-options-enhance-agility">Real Options</a> fame) who told me we&#8217;re doing it all wrong. &#8220;It&#8217;s not an art, it&#8217;s a process,&#8221; he said. &#8220;You&#8217;re focused on the stories; that&#8217;s why you think it&#8217;s an art form. The focus should be the value you&#8217;re releasing.&#8221;</p>
<p>&#8220;Right&#8221;, I say. &#8220;So, when we originally planned the stories that would deliver the value, we knew what would contribute to that value. But we&#8217;ve lost sight of that. Changes have been made. As devs, all we have are those narratives &#8211; the &#8216;As a &lt;role&gt;, I want &lt;a feature&gt;, so that &lt;some benefit is achieved&gt;&#8217;. So we need to work out which of the benefits add up to the value we&#8217;re aiming for. That helps us work out which stories we should try to complete for a release. The QAs are helping us work out what&#8217;s ready; the BAs are helping us work out what&#8217;s important.&#8221;</p>
<p>&#8220;That&#8217;s the problem,&#8221; says Chris. &#8220;You&#8217;re putting the role first. It&#8217;s the value that&#8217;s most important. Try this: In order to &lt;deliver some value&gt;, as a &lt;role&gt;, I want &lt;some feature&gt;. Instead of working out why people want a feature, and whether it contributes to the value, now we&#8217;re working out who needs a feature, then assigning the story. So our stories are much more focused. If all the stories that contribute to a value are ready, we release.&#8221;</p>
<p>I guess if we get to the point where we can release with only some of the stories ready, we didn&#8217;t break down our values into granular enough elements. And when we want to work out what goes in a release, it&#8217;s easy. The word &#8216;release&#8217; is more meaningful. There&#8217;s some untapped money out there &#8211; some market share, some cost saving, some battle against a competitor. All the features we produce go towards releasing that value for our customers to use &#8211; and it&#8217;s the <i>value</i> we&#8217;re releasing, not the features.</p>
<p>Thanks, Chris, for that.</p>
<p>I need to also thank Dave for giving me a better understanding of what a <a href="http://www.agilemanagement.net/Articles/Weblog/PrioritizingRequirements.html">value</a> is.</p>
<p><a name="summary">In summary</a>: my preferred narrative now reads:</p>
<p><b>In order to</b> &lt;achieve some value&gt;<br />
<b>As a</b> &lt;role&gt;<br />
<b>I want</b> &lt;some feature&gt;.</p>
<p>Because, in order for my work to have any meaning, as a dev, I want to know why you want it.</p>
<p><b>Edit:</b> Chris said he posted this to the <a href="http://finance.groups.yahoo.com/group/kanbandev">Kanban</a> group on Yahoo, but they aren&#8217;t responsible for it. Sorry, Chris, didn&#8217;t mean to misaappropriate! See you on there soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2008/05/14/rip-as-a-i-want-so-that/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bug Driven Development: a danger of delivering the pretty GUIs first</title>
		<link>http://lizkeogh.com/2007/11/19/bug-driven-development-a-danger-of-delivering-the-pretty-guis-first/</link>
		<comments>http://lizkeogh.com/2007/11/19/bug-driven-development-a-danger-of-delivering-the-pretty-guis-first/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 09:40:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[bdd]]></category>
		<category><![CDATA[Bug Driven Development]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[After my last post, Negin and I were quite pleased that we&#8217;d got as far as we had.
So was our Business Analyst. &#8220;So, this story that was estimated at 3 days,&#8221; she said. &#8220;Can I say it&#8217;s only taken one?&#8221;
&#8220;No! We&#8217;re not done yet!&#8221; I protested.
&#8220;Really? It looked like you were almost done on Friday&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>After <a href="http://sirenian.livejournal.com/42871.html">my last post</a>, Negin and I were quite pleased that we&#8217;d got as far as we had.</p>
<p>So was our Business Analyst. &#8220;So, this story that was estimated at 3 days,&#8221; she said. &#8220;Can I say it&#8217;s only taken one?&#8221;</p>
<p>&#8220;No! We&#8217;re not done yet!&#8221; I protested.</p>
<p>&#8220;Really? It <i>looked</i> like you were almost done on Friday&#8230; what happened?&#8221;</p>
<p>Oh, well. At least we know it <i>looks</i> good.</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2007/11/19/bug-driven-development-a-danger-of-delivering-the-pretty-guis-first/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BDD: Bug Driven Development</title>
		<link>http://lizkeogh.com/2007/11/16/bdd-bug-driven-development/</link>
		<comments>http://lizkeogh.com/2007/11/16/bdd-bug-driven-development/#comments</comments>
		<pubDate>Fri, 16 Nov 2007 09:18:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[bdd]]></category>
		<category><![CDATA[Bug Driven Development]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Today, Negin and I paired on a brand new piece of work.
&#8220;We&#8217;ll need to create this domain object,&#8221; she said, &#8220;and a database table.&#8221;
&#8220;I don&#8217;t want to do that,&#8221; I said. &#8220;I&#8217;d rather fix the stuff that&#8217;s broken.&#8221;
She looked puzzled. &#8220;What do you mean? We haven&#8217;t written any code yet.&#8221;
&#8220;Well, we know that if you [...]]]></description>
			<content:encoded><![CDATA[<p>Today, Negin and I paired on a brand new piece of work.</p>
<p>&#8220;We&#8217;ll need to create this domain object,&#8221; she said, &#8220;and a database table.&#8221;</p>
<p>&#8220;I don&#8217;t want to do that,&#8221; I said. &#8220;I&#8217;d rather fix the stuff that&#8217;s broken.&#8221;</p>
<p>She looked puzzled. &#8220;What do you mean? We haven&#8217;t written any code yet.&#8221;</p>
<p>&#8220;Well, we know that if you go to the URL, you should see the form. But when I go there I get a 404 error.&#8221;</p>
<p>&#8220;Well, yes. We haven&#8217;t written any code yet.&#8221;</p>
<p>&#8220;So, it&#8217;s broken. It doesn&#8217;t work yet. We should fix that.&#8221;</p>
<p>So we wired up the container and knocked out a controller. We restarted the server and refreshed the URL. Spring told us we had left out a couple of things. We fixed those.</p>
<p>Negin tapped something into the template and refreshed the URL again. &#8220;We have a page. It says HELLOOOOO! across the top. Now what?&#8221;</p>
<p>&#8220;Well, we got rid of the 404 error. But the page doesn&#8217;t look right.&#8221;</p>
<p>&#8220;Of course not. We haven&#8217;t written the form yet.&#8221;</p>
<p>&#8220;We should fix that.&#8221;</p>
<p>We wrote the form. It didn&#8217;t look right, so we added the styling. Our business analyst peered over our shoulders at what we were doing. &#8220;Looks like you&#8217;re doing well. Why doesn&#8217;t the drop-down have my data in?&#8221;</p>
<p>Negin said, &#8220;You&#8217;re right. We should fix that. This is fun!&#8221;</p>
<p>&#8220;It is,&#8221; I said. &#8220;Don&#8217;t you just love that we get <i>paid</i> for this?&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2007/11/16/bdd-bug-driven-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Crazy like a fox.</title>
		<link>http://lizkeogh.com/2007/11/14/crazy-like-a-fox/</link>
		<comments>http://lizkeogh.com/2007/11/14/crazy-like-a-fox/#comments</comments>
		<pubDate>Wed, 14 Nov 2007 05:43:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[bdd]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[At my current client, everyone loves BDD, and everyone starts their tests with the word &#8217;should&#8217;, describing the behaviour of the associated class. I&#8217;m currently looking at this code:
public class PrimaryMixingIteratorTest extends EasyMockObjectTestBase{
    public void testShouldIterateLikeAFox() throws Exception {
        //...
    }
}
public class [...]]]></description>
			<content:encoded><![CDATA[<p>At my current client, everyone loves BDD, and everyone starts their tests with the word &#8217;should&#8217;, describing the behaviour of the associated class. I&#8217;m currently looking at this code:</p>
<pre>public class PrimaryMixingIteratorTest extends EasyMockObjectTestBase{
    public void testShouldIterateLikeAFox() throws Exception {
        //...
    }
}</pre>
<pre>public class SecondaryMixingIteratorTest extends EasyMockObjectTestBase{
    public void testShouldIterateLikeABadger() throws Exception {
        //...
    }
}</pre>
<p>Once I&#8217;ve remembered how foxes and badgers iterate, this code might make more sense to me. Remind me to run that &#8216;<i>should</i> is not a silver bullet&#8217; brown bag soon&#8230;</p>
<p><b>Update:</b> If you tied a fox and a badger together and dropped them into the corner of a square pond, they&#8217;d make a splash. Imagine that splashes happened in squares instead of circles, and that the quarter of the concentric square formed by the fox and badger started at the top-right then went to the bottom-right then bottom-left. Now imagine that the fox shouts out which row the splash happens in, and the badger shouts out the columns.</p>
<p>It&#8217;s a way of combining the values of two infinitely-sized lists for an arbitrary number of combinations, without loading the lists into memory. Makes <i>so</i> much more sense. Hold on, I&#8217;m getting a phone call from the RSPCA&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://lizkeogh.com/2007/11/14/crazy-like-a-fox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

