<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Hemal, Developer in Test</title>
	<atom:link href="http://testerhemal.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://testerhemal.wordpress.com</link>
	<description>Bake that quality in.</description>
	<lastBuildDate>Mon, 05 Sep 2011 14:58:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='testerhemal.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Hemal, Developer in Test</title>
		<link>http://testerhemal.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://testerhemal.wordpress.com/osd.xml" title="Hemal, Developer in Test" />
	<atom:link rel='hub' href='http://testerhemal.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Summing it all up</title>
		<link>http://testerhemal.wordpress.com/2010/11/06/summing-it-all-up/</link>
		<comments>http://testerhemal.wordpress.com/2010/11/06/summing-it-all-up/#comments</comments>
		<pubDate>Sat, 06 Nov 2010 13:38:31 +0000</pubDate>
		<dc:creator>Hemal</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://testerhemal.wordpress.com/?p=325</guid>
		<description><![CDATA[I was fortunate enough to be invited to talk about the evolution of our development process at Agile Testing Days in Berlin and the Next Generation Testing Conference in London recently. The slides from those talks are online on slideshare (although it&#8217;s nothing new&#8230; merely this and this; just me being a broken record, in [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=325&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I was fortunate enough to be invited to talk about the evolution of our development process at Agile Testing Days in Berlin and the Next Generation Testing Conference in London recently. The slides from those talks are <a href="http://www.slideshare.net/hemalkuntawala/from-bug-detection-to-bug-prevention" target="_blank">online on slideshare</a> (although it&#8217;s nothing new&#8230; merely <a href="http://testerhemal.wordpress.com/2009/08/15/how-we-build-quality-software/" target="_blank">this</a> and <a href="http://testerhemal.wordpress.com/2010/01/27/from-bug-hunting-to-bug-prevention/" target="_blank">this</a>; just me being a broken record, in fact).</p>
<p>Both conferences were aimed at and attended by testers, and on some reflection I think I focused on the benefits of our evolved process rather than portraying the part the tester played in the evolution. So testers, to summarise, <strong>if you have a &#8216;QA&#8217; column </strong>on your task wall<strong>, you&#8217;re doing it wrong</strong>. Go pair with a developer, <strong>now</strong>. Don&#8217;t just wait to bat back a list of bugs to them, <strong>go help them avoid having to work on the same thing twice</strong>. Give your devs those test cases you have in your head, <strong>you&#8217;re good at coming up with those</strong>. <strong>Teach your team how to come up with them too</strong>, <a href="http://www.slideshare.net/hemalkuntawala/from-bug-detection-to-bug-prevention/123" target="_blank">make a cheat sheet</a>. Discuss them with the team, learn about the business&#8217; appetite for risk and <strong>surface those assumptions that everyone on the team is making but not sharing</strong>. Help everyone nail the domain. <strong>Ask which scenarios are important</strong> and forget about the ridiculous edge cases for now. Now <strong>build it and get real feedback</strong>. Start by writing your developer a failing test*. <strong>Remove yourself from your comfort zone</strong> one step at a time by doing this stuff; <strong>your team will thank you for it</strong>.</p>
<p>*I appreciate this is probably where some folks draw the line. Fair play, although I think your days are numbered..</p>
<p>During this whole phase I&#8217;ve gone from <em>quality police</em> tester, to <em>back-seat developer</em> tester, to <em>integrated and valuable member of team helping bake quality in</em> tester to&#8230; well, developer. It involved throwing myself out of my comfort zone; however, everyone else on the team had to too. It meant we can focus on delivering to our customers, the people that use our applications, rather than faffing around ping-ponging work between split dev and test teams.</p>
<p>We pulled off what we did because of everyone on the team. I&#8217;ve learnt an incredible amount from an incredible group of people, all of whom were willing to muck in: <a href="http://twitter.com/jasonneylon" target="_blank">Jason Neylon</a>, <a href="http://twitter.com/mikewagg" target="_blank">Mike Wagg</a>, <a href="http://twitter.com/jon_neale" target="_blank">Jon Neale</a>, <a href="http://twitter.com/zkhan" target="_blank">Zubair Khan</a>, <a href="http://twitter.com/tonyto85" target="_blank">Tony To</a>, <a href="http://twitter.com/markholdsworth" target="_blank">Mark Holdsworth</a>, <a href="http://twitter.com/damonmorgan" target="_blank">Damon Morgan</a>, <a href="https://twitter.com/BarisBalic" target="_blank">Baris Balic</a>, Mark Barrett, <a href="http://twitter.com/timrossinfo" target="_blank">Tim Ross</a>, <a href="http://twitter.com/nkostelnik1" target="_blank">Nick Kostelik</a>, <a href="http://twitter.com/mbaldry" target="_blank">Michael Baldry</a>, <a href="http://twitter.com/jwilliamson83" target="_blank">James Williamson</a>, <a href="http://twitter.com/wareisjustin" target="_blank">Justin Ware</a>, <a href="http://twitter.com/elliotritchie" target="_blank">Elliot Ritchie</a>, <a href="http://twitter.com/Stephen_lloyd" target="_blank">Stephen Lloyd</a>, <a href="http://twitter.com/paulsharrington" target="_blank">Paul Harrington</a>, <a href="http://twitter.com/markdurrand" target="_blank">Mark Durrand</a>, and <a href="http://twitter.com/DrewMacqu" target="_blank">Andrew MacQuarrie</a>.</p>
<p>I work in an organisation that provides us, as developers, trust and autonomy, and I&#8217;m alongside some very, very smart people. As such, I shall stop banging on about this testing role stuff, and hone my skills as a dev. Cheers <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/testerhemal.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/testerhemal.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/testerhemal.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/testerhemal.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/testerhemal.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/testerhemal.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/testerhemal.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/testerhemal.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/testerhemal.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/testerhemal.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/testerhemal.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/testerhemal.wordpress.com/325/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/testerhemal.wordpress.com/325/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/testerhemal.wordpress.com/325/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=325&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://testerhemal.wordpress.com/2010/11/06/summing-it-all-up/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76dd14256b9bc9cc23efa65a4ebc6a1f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">testerhemal</media:title>
		</media:content>
	</item>
		<item>
		<title>Specifying the what rather than the how with Cucumber</title>
		<link>http://testerhemal.wordpress.com/2010/02/08/specifying-the-what-rather-than-the-how-with-cucumber/</link>
		<comments>http://testerhemal.wordpress.com/2010/02/08/specifying-the-what-rather-than-the-how-with-cucumber/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 20:29:00 +0000</pubDate>
		<dc:creator>Hemal</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://testerhemal.wordpress.com/?p=312</guid>
		<description><![CDATA[Recently Gojko Adzic held the latest London Agile Testing Group at Skillmatter in Farringdon and talked about Cucumber. I couldn’t make it but caught the video online (http://skillsmatter.com/podcast/agile-testing/using-cucumber-for-bdd-and-agile-acceptance-testing). Gojko comments on how Cucumber allows us to concentrate on the what rather than the how, when compared to other acceptance testing tools. The same day I [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=312&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Recently Gojko Adzic held the latest London Agile Testing Group at Skillmatter in Farringdon and talked about Cucumber. I couldn’t make it but caught the video online (<a href="http://skillsmatter.com/podcast/agile-testing/using-cucumber-for-bdd-and-agile-acceptance-testing" target="_blank">http://skillsmatter.com/podcast/agile-testing/using-cucumber-for-bdd-and-agile-acceptance-testing</a>).</p>
<p>Gojko comments on how Cucumber allows us to concentrate on the <em>what</em> rather than the <em>how</em>, when compared to other acceptance testing tools. The same day I had a conversation with a former colleague<a href="http://twitter.com/zkhan" target="_blank"></a>…</p>
<p><strong>Describing the how</strong></p>
<p>He was telling me about a tester on his project that was writing a Cucumber spec but failing to portray any business/customer value. I wasn’t sure what he meant so he sent over the feature file and I had a look. Here’s an example below (with the domain changed).</p>
<blockquote><p><span style="color:#333333;">Feature: Customers can purchase products in their basket.<br />
So that I can purchase the products I accumulate in my basket<br />
As the customer<br />
I want to be able to pay for them at a checkout.</span></p>
<p><span style="color:#333333;">Scenario: Filling out valid details at the checkout.<br />
Given I am on the checkout page<br />
When I fill in &#8220;Mr&#8221; for &#8220;Title&#8221;<br />
And I fill in &#8220;Another&#8221; for &#8220;Firstname&#8221;<br />
And I fill in &#8220;Tester&#8221; for &#8220;Surname&#8221;<br />
And I fill in &#8220;111&#8243; for &#8220;House Number&#8221;<br />
And I fill in &#8220;Buckingham Palace Road&#8221; for &#8220;Street Name&#8221;<br />
…<br />
…<br />
You can see where this is going…</span></p></blockquote>
<p>The <em>Given</em>, <em>When</em> and <em>Then</em> statements are being used to describe <em>how</em> he wants to <em>test</em> the feature and not <em>what</em> he wants it to <em>do </em>(or <em>behave</em>).</p>
<p>Seeing this notation reminded me of my QTP days, where I was on a ‘QA’ team writing automated tests that no one else apart from us would use or even understand. These tests would never describe the business rule that was being verified and were usually made up of long scripts of basic web-page interactions, e.g:</p>
<blockquote><p><span style="color:#333333;">Browser(“Some website”).Page(“Some page”).WebEdit(“Some box”).Set “Some value”<br />
Browser(“Some website”).Page(“Some page”).Link(“This is bringing back painful memories”).Click<br />
…<br />
…<br />
Same story.</span></p></blockquote>
<p><strong>Describing the what</strong></p>
<p>His tester friend could better reflect the business rules and behaviour of the feature by being more expressive; e.g:</p>
<blockquote><p><span style="color:#333333;">Scenario: Filling out valid details at the checkout.<br />
Given I have a product in my basket<br />
When I go through the checkout with valid details<br />
Then I should be thanked<br />
And I should receive a confirmation e-mail</span></p></blockquote>
<p><strong>And onto different scenarios</strong></p>
<blockquote><p><span style="color:#333333;">Scenario: Filling out <strong>invalid</strong> details at the checkout.<br />
…<br />
…<br />
More descriptions about behaviour…</span></p></blockquote>
<p><span style="color:#333333;">I</span>magine that scenario failed if it were part of your regression effort&#8230; Not only would you know what was wrong but you&#8217;d immediately know the impact it has because the business value is expressed in plain English.</p>
<p>As Gojko mentions in his talk, Cucumber is “one of the rare tools that goes a long way to stay out of your way, (it) lets you do your work and not have to worry about the tool itself”. Spot on.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/testerhemal.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/testerhemal.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/testerhemal.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/testerhemal.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/testerhemal.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/testerhemal.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/testerhemal.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/testerhemal.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/testerhemal.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/testerhemal.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/testerhemal.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/testerhemal.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/testerhemal.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/testerhemal.wordpress.com/312/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=312&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://testerhemal.wordpress.com/2010/02/08/specifying-the-what-rather-than-the-how-with-cucumber/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76dd14256b9bc9cc23efa65a4ebc6a1f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">testerhemal</media:title>
		</media:content>
	</item>
		<item>
		<title>From bug hunting to bug prevention</title>
		<link>http://testerhemal.wordpress.com/2010/01/27/from-bug-hunting-to-bug-prevention/</link>
		<comments>http://testerhemal.wordpress.com/2010/01/27/from-bug-hunting-to-bug-prevention/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 09:37:56 +0000</pubDate>
		<dc:creator>Hemal</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://testerhemal.wordpress.com/?p=217</guid>
		<description><![CDATA[I realise I&#8217;ve done nothing to document the evolution of my role of tester on this blog; instead I skipped to the end and wrote about what we get up to at the moment. As such, here are a few pointers that, looking back, aided my transition from an end-of-cycle bug-hunter to someone supporting the team [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=217&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I realise I&#8217;ve done nothing to document the evolution of my role of tester on this blog; instead I skipped to the end and wrote about <a href="http://testerhemal.wordpress.com/2009/08/15/how-we-build-quality-software/" target="_blank">what we get up to at the moment</a>. As such, here are a few pointers that, looking back, aided my transition from an end-of-cycle bug-hunter to someone supporting the team to prevent bugs and deliver correct, quality, working software. These pointers aren&#8217;t in the order that I realised, was given, or understood them as I took the long way round. They are, however, now presented semi-ordered with the power of hindsight, and in present-tense for authenticity. I hope they provide some assistance to you if you&#8217;re a tester on an agile team looking to better establish your role, offering, and the assurance that you provide in delivering a quality product to your customers.</p>
<p><strong>Some context on the team</strong></p>
<p>As the tester within a team of four developers I am relied on to perform all the testing for the stories that are developed. The team is developing and releasing in three week iterations with <a href="http://en.wikipedia.org/wiki/Scrum_%28development%29" target="_blank">Scrum</a>; we plan and point-estimate upfront, develop the stories, test and then release them. The developers are practising <a href="http://en.wikipedia.org/wiki/Extreme_Programming" target="_blank">XP</a> with <a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank">test-driven development</a>. This <a href="http://www.slideshare.net/hemalkuntawala/how-we-build-quality-software-at-uswitchcom/20" target="_blank">diagram represents an iteration</a>; the wall between development and test highlights the current segregation between these activities, similar to a phased approach to development.</p>
<p><strong>Planning</strong></p>
<p>During planning I provide an estimation on the required testing-effort and help formulate some acceptance criteria for each task that makes up a story. Some tasks are quite techy and implementation specific, so it&#8217;s often difficult to come up with constructive criteria that will help judge when we&#8217;re done, e.g. Task: &#8220;Create database for so and so&#8221;; Acceptance criteria: &#8220;Um, database for so and so is created with relevant fields&#8221;. I also don&#8217;t question <em>why </em>we&#8217;re developing what we are; my understanding is that some busines-sy person has asked for it so it&#8217;ll get developed and I&#8217;ll test it to make sure it does what they want. As such, I make sure I have an understanding of what the business person wants so I can do my best to assure it meets these expectations after it&#8217;s developed. I <em>assume </em>that the developers on the team will have the same understanding, but I don&#8217;t make an effort to ensure they do so.</p>
<p><strong>Testing</strong></p>
<p>I test the output from developers as it hits the &#8216;QA&#8217; column on our board. I check it meets the expectations and requirements that the business folk have asked of it, and provide information to project managers and developers on the state of it. I use a context-driven approach to exploration in order to learn about what was built and to find defects. I have my toolset that helps me inspect, as well automate tests that I&#8217;ve performed in order to run them again in future.</p>
<p><strong>TDD and me</strong></p>
<p>Development and testing, in our team, are two separate disciplines and phases. As such, I currently have no notion of what the developers get up to; this includes test-driven development. I haven&#8217;t embraced unit tests; I don&#8217;t know what they look like, nor do I know what their coverage is. I am aware they help guide design and provide a safety net when refactoring.  I don&#8217;t know if there&#8217;s an overlap between the unit testing done by developers and my testing. I&#8217;m only ever exposed to the user-interface, as such, all the testing and automation I do occurs on this level. I treat the user-interface as the be-all and end-all of the application; I test business rules through the UI.</p>
<p><em>* Unit tests in the loosest sense. Behaviour checks are a better name, as <a href="http://dannorth.net/introducing-bdd" target="_blank">Dan North</a> suggests.</em></p>
<p><strong>So what&#8217;s wrong with that?</strong></p>
<p>If I was to compare the testing part of our software development process to manufacturing*, I&#8217;d be the one standing at the end of the production line checking and testing the product to see if what is churned out is good enough for the customer. I test things after they&#8217;ve been made, or after any damage is possibly done. But that&#8217;s my job, right? I am in my testing comfort zone, and I&#8217;m not really exposed to any other means of helping achieve the overall goal of assuring quality. The process is what it is and I do my small information gathering, bug finding part.</p>
<p>While I may be in my comfort zone, to me, developing and testing software in this manner doesn&#8217;t feel right. It never has on any of the projects I&#8217;ve worked, whether they were in an agile environment or not. I&#8217;ve always asked: &#8220;What&#8217;s stopping us developing this correctly without these bugs in the first place?” As a tester I take pride in seeing a good quality product roll out the doors to our customers. As a tester I understand the complex compromise and risk that relates quality, time, budget, and context. As a tester I&#8217;ve learnt to just make do with buggy, mis-developed software heading my way, and concentrate on doing my job the best I can: finding bugs, gathering information on quality, and stopping bad software reach the customer. From my perspective there will always be bugs, they will need to be found, and they will need to be managed.</p>
<p><em>* I am by no means saying that software development is like manufacturing, I&#8217;m only using the analogy.</em></p>
<p><strong>Shouldn&#8217;t agility do more?</strong></p>
<p>Agile-adoption has liberated teams from the typical stereotypes related to &#8220;traditional&#8221; project delivery. We talk to each other, we collaborate with business folk, and we embrace change. But, there is still an &#8220;us versus them&#8221; mentality between developers and testers, and even between testers and the business. In fact, late testing, bug management, and bug fixing are tedious fire-fighting activities that still linger. Perhaps, amongst the momentum of embracing change, we testers now have an opportunity to fix the development process itself once and for all, rather than just the broken software it yields&#8230;</p>
<p><strong>So, what&#8217;s the alternative? First clue: Quality Control</strong></p>
<p>During the testing phase I spend time exploring the software and exercising it in ways that cause deviations from my understanding of the expected behaviour to generate information for management and bugs for developers. I know what bugs look like, where to look for them and how to find them. By collaborating with the business and having an understanding of the customer, I help prioritise the defects I find and ensure the bad ones are fixed, and the &#8220;OK&#8221; ones go live.</p>
<p>Taking a step back and looking at my role in the whole development process, I think this is Quality Control. The <em>root causes</em> of these defects occur either during development or earlier, and I&#8217;m doing what I can to control the impact of the defects <em>after</em> they&#8217;ve manifested. In contrast, Quality Assurance would involve applying some sort of effort from the very start of development to <em>prevent</em> these defects from occurring in the first place. Therefore, I can assure what is developed is what the business expected.</p>
<p>So, am I really performing &#8220;QA&#8221;?</p>
<p><strong>Onto some queuing theory</strong></p>
<p><a href="http://www.jbrains.ca/permalink/285" target="_blank">Joe Rainsberger&#8217;s post on TDD and queuing theory</a> demonstrates the Quality Control point well. Let&#8217;s take a look at our current process, which loosely resembles this:</p>
<p>Plan what to develop (everyone) &#8211;&gt; Develop (developer) &#8211;&gt; Test (finds information on quality + bugs) (tester) &#8211;&gt; Bug fix (developer) &#8211;&gt; Test (tester) &#8211;&gt; Bug fix (developer) &#8211;&gt; Test (tester) &#8211;&gt; Sign off (tester) &#8211;&gt; Deploy (ops)</p>
<p>You can see we have repetition and wasteful re-work. We ping-pong between someone in development and myself until bugs are fixed and the software is considered shippable. I test what&#8217;s delivered after the damage is done and bat back a list of things that need fixing. The list of defects I create during testing is pretty much a<em> &#8220;</em>to-do&#8221; list of fixes for the developer. Not exactly the slickest of processes.</p>
<p><strong>How did we fall into this trap if developers are doing TDD?</strong></p>
<p>Test-driven development will help ensure that we&#8217;re developing something correctly. If we&#8217;re finding bugs afterwards, then what we need is a way of ensuring we&#8217;re developing the correct thing in the first place; a way of being sure the developers, as well as everyone else on the team, has an understanding of what the business needs. We need a way of creating that &#8220;to-do&#8221; list of bug-fixes <em>upfront</em>, as well as making sure everyone involved with developing the story has a clear understanding of it, rather than letting ourselves assume they do, as I used to do.</p>
<p>I can in fact apply the epistemological and cognitive effort that goes into normal after-it&#8217;s-built UI-level testing earlier and come up with examples and scenarios that I can discuss with the business and developers. A simple start would be providing the team with the test cases I come up with, but before they start developing, so they know what I&#8217;m looking for.</p>
<p><strong>How can I test at the beginning when there is nothing to test?</strong></p>
<p>Firstly, as a tester I don&#8217;t need developed software with a UI to start testing; I can test a requirement and test the proposed solution. I can scope out scenarios, provide examples and edge cases. As Jerry Weinberg puts it, I can ask &#8220;does it do what I want it to do, and does it not do what I don&#8217;t want it to do?” I can look for bugs upfront in a proposed solution the same way I currently look for bugs afterwards in a built solution.</p>
<p>Airing these scenarios and edge cases with everyone upfront means we all share an understanding of what to expect, everyone knows the <em>potential </em>problems and bugs, and altogether there&#8217;s less chance for assumptions to creep in. These scenarios and edge cases form prioritise-able criteria that the business can provide feedback on and use to explicitly tell us what we should develop. Once we&#8217;ve developed something we can validate it against these criteria to check if it is acceptable.</p>
<p><strong>Prevention with specification workshops before we start developing</strong></p>
<p>Most of the defects I see sprout from different team-members making different assumptions about the expected behaviour of what we&#8217;re developing. A chunky piece of work vaguely worded on a post-it note can be interpreted in many different ways. That&#8217;s not to say that we should create vast documentation, but rather break the work down into even smaller manageable and understandable chunks, and format them as <a href="http://testerhemal.wordpress.com/2009/04/23/another-post-on-the-web-about-user-stories/" target="_blank">stories, examples and acceptance criteria</a>.</p>
<p>With specification by example and acceptance criteria (in <a href="http://gojko.net/tag/specification-by-example/" target="_blank">Gojko Adzic</a>&#8216;s own words) we &#8220;ensure that all project participants speak the same language, and build a shared and consistent understanding of the domain. This leads to better specifications, flushes out incorrect assumptions and ensures that functional gaps are discovered before the development starts.&#8221; (His book <a href="http://www.acceptancetesting.info/the-book/" target="_blank">Bridging the Communication Gap</a> is a must-read on the topic).</p>
<p>I use the same cognitive and exploratory testing effort within these workshops that I would do testing an application, except the benefits are greater. I help eradicate assumption by specifying the expected quality of what we&#8217;re building upfront, which reduces the rework and waste that occurs from finding and fixing defects at the end. I&#8217;ve learnt about the business domains in which I work from the testing I perform end-of-cycle and the bugs I&#8217;ve found, but, I&#8217;ve learnt considerably more about these domains performing these upfront exercises alongside the whole team.</p>
<p>All testers possess the open, exploratory mindset and big-picture perspective needed to extrapolate a requirement, help share an understanding, and remove uncertainty within the team.</p>
<p><strong>How can we know everything upfront?</strong></p>
<p>Pretending to know <em>everything </em>upfront is epistemic arrogance (<a href="http://en.wikipedia.org/wiki/Nassim_Nicholas_Taleb" target="_blank">Nassim Nicholas Taleb</a>, via <a href="http://www.developsense.com/aboutDevelopsense.shtml" target="_blank">Michael Bolton</a>). There will be unknown factors, scenarios we simply forgot, and stakeholders we didn&#8217;t realise we needed to think about; things that late testing would uncover, at a cost. However, Dan North refers to &#8220;deliberate discovery&#8221; in the context of estimation. I believe this can help us be aware of our ignorance of a missed stakeholder or requirement, allowing us to better prepare ourselves for its impact.</p>
<p>By scoping out work and breaking it down into smaller stories and small scenarios we can develop them individually, get feedback from them sooner, and learn from and improve them.</p>
<p><strong>Developing<br />
</strong></p>
<p>After manifesting a shared understanding of a story and extrapolating acceptance criteria that tells us what it should do, I can pair with a developer and we can start developing it. We use the outside-in approach of Behaviour Driven Development to drive the design and development of the code from our acceptance tests down to our &#8220;unit tests&#8221;/behaviour checks. During development everyone on the team is also constantly exploring the feature in order to improve their understanding of it.</p>
<p>Working closely with developers like this not only exposes me to the testing activity that occurs on a code level (stubbing, mocking, etc.) but also the factors that affect the quality of the code itself (design patterns, object modelling, etc.). These are activities that I am never involved with at the end of the production line and that further aid my goal of assuring quality throughout the development cycle.</p>
<p><strong>Fast feedback</strong></p>
<p>Having a small slice of work developed to pass our behaviour checks, which in turn pass our acceptance tests, we are able to get it in front of the business person faster, which means we can get feedback on it quicker than we would have before. A demo of the implemented story provides the team and stakeholders with an opportunity to determine if there are any scenarios of other stakeholders that were missed. Based on a shared understanding of the context of what is being developed, and of the business&#8217; appetite for risk, we can establish if anything that was missed forms part of the acceptance for this story or can be put off until later as part of a separate story.</p>
<p><strong>Providing Quality Assurance</strong></p>
<p>Having attempting to apply true quality assurance rather than quality control, some defect prevention rather than late detection, and make sure we&#8217;re developing the correct thing upfront rather than developing the wrong thing correctly, we ended up with a process loosely like:</p>
<p>Decide what to develop (everyone) &#8211;&gt; &#8220;Specification workshop&#8221;: Figure out what we&#8217;re developing and how it&#8217;ll work (everyone, especially testers) &#8211;&gt; Behaviour Driven Development (developers and testers) &#8211;&gt; Demo and learn (everyone) &#8211;&gt; Deploy (ops).</p>
<p><a href="http://testerhemal.wordpress.com/2009/08/15/how-we-build-quality-software/" target="_blank">I&#8217;ve written about this process</a> in action as I mentioned above. I&#8217;ll delve into more detail in later posts (I seem to say this in every post) about automating execution of acceptance tests and even about why my job title is now &#8216;developer&#8217; (which, I know, contradicts the URL of this blog).</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/testerhemal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/testerhemal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/testerhemal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/testerhemal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/testerhemal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/testerhemal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/testerhemal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/testerhemal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/testerhemal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/testerhemal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/testerhemal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/testerhemal.wordpress.com/217/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/testerhemal.wordpress.com/217/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/testerhemal.wordpress.com/217/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=217&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://testerhemal.wordpress.com/2010/01/27/from-bug-hunting-to-bug-prevention/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76dd14256b9bc9cc23efa65a4ebc6a1f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">testerhemal</media:title>
		</media:content>
	</item>
		<item>
		<title>Slides from &#8220;How we build quality software at uSwitch.com&#8221;</title>
		<link>http://testerhemal.wordpress.com/2009/10/30/slides-from-how-we-build-quality-software-at-uswitch-com/</link>
		<comments>http://testerhemal.wordpress.com/2009/10/30/slides-from-how-we-build-quality-software-at-uswitch-com/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 13:30:13 +0000</pubDate>
		<dc:creator>Hemal</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://testerhemal.wordpress.com/?p=215</guid>
		<description><![CDATA[I&#8217;d like to thank everyone that came to Skills Matter for the talk this week. As Gojko mentioned, it was good to see another full house at a London Agile Testing event. The full house didn&#8217;t help the nerves, though the few chuckles at my bad jokes help settle those. I owe a beer to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=215&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;d like to thank everyone that came to Skills Matter for the talk this week. As Gojko mentioned, it was good to see another full house at a London Agile Testing event. The full house didn&#8217;t help the nerves, though the few chuckles at my bad jokes help settle those. I owe  a beer to those who laughed.</p>
<p><strong>Slides and links</strong></p>
<p>The slides are available to <a href="http://www.slideshare.net/hemalkuntawala/how-we-build-quality-software-at-uswitchcom" target="_blank">view on slideshare</a> and as promised, I&#8217;ve put a list of resources (videos, podcasts etc) below:</p>
<ul>
<li>James Whittaker&#8217;s podcast with <a href="http://www.dotnetrocks.com/default.aspx?showNum=408" target="_blank">.Net Rocks</a></li>
<li>Jerry Weinberg&#8217;s book &#8216;Perfect Software&#8217; (@ <a href="http://www.amazon.co.uk/gp/product/0932633692?ie=UTF8&amp;tag=testerhemalwo-21&amp;linkCode=as2&amp;camp=1634&amp;creative=6738&amp;creativeASIN=0932633692" target="_blank">Amazon</a>)</li>
<li>Gojko Adzic&#8217;s book &#8216;Bridging the Communication Gap&#8217; (@ <a href="http://www.amazon.co.uk/gp/product/0955683610?ie=UTF8&amp;tag=testerhemalwo-21&amp;linkCode=as2&amp;camp=1634&amp;creative=6738&amp;creativeASIN=0955683610" target="_blank">Amazon</a>)</li>
<li>Lisa Cripsin &amp; Janet Gregory&#8217;s book &#8216;Agile Testing: A Practical Guide For Testers and Agile Teams&#8217; (@ <a href="http://www.amazon.co.uk/gp/product/0321534468?ie=UTF8&amp;tag=testerhemalwo-21&amp;linkCode=as2&amp;camp=1634&amp;creative=6738&amp;creativeASIN=0321534468" target="_blank">Amazon</a>)</li>
<li>Mary Poppendieck&#8217;s Google Tech Talk &#8216;<a href="http://video.google.com/videoplay?docid=-5105910452864283694#" target="_blank">Competing on the Basis of Speed</a>&#8216;</li>
<li>James Whittaker&#8217;s Google Test Automation Conference 2008 keynote address &#8216;<a href="http://www.youtube.com/watch?v=Pug_5Tl2UxQ" target="_blank">The Future of Testing</a>&#8216;</li>
<li>J. B. (Joe) Rainsberger&#8217;s Agile 2009 talk &#8216;<a href="http://www.infoq.com/presentations/integration-tests-scam" target="_blank">Integration Tests are a Scam</a>&#8216;</li>
<li>J. B. Rainsberger&#8217;s blog post &#8216;<a href="http://www.jbrains.ca/permalink/285" target="_blank">How Test-driven Development Works, and more!</a>&#8216; &#8211; A great summary, with an insight on queuing theory, on why we should test first.</li>
<li><a href="http://cukes.info/" target="_blank">Cucumber</a>, <a href="http://watir.com/" target="_blank">WatiR</a>, <a href="http://fitnesse.org/" target="_blank">Fitnesse</a>, <a href="http://www.tealeaf.com/" target="_blank">Tealeaf</a>.</li>
</ul>
<p>I will also put the cheat sheet we use for gathering acceptance criteria online for download; I usually ping links through my <a href="http://twitter.com/hemalkuntawala" target="_blank">Twitter</a> account.</p>
<p><strong>Contributing to the community</strong></p>
<p><a href="http://gojko.net/" target="_blank">Gojko Adzic</a>, the leader of the <a href="http://londonagiletesting.ning.com/" target="_blank">London Agile Testing</a> group also posted <a href="http://gojko.net/2009/10/29/upgrading-agile-development-at-uswitch-com-from-concept-to-production-in-four-days/" target="_blank">a great write-up of the talk</a>, many thanks to him.</p>
<p>I was asked if I would return in 12 months to provide another insight into how we develop after continuously evolving our process. I happily agreed, however with hindsight I would have agreed to do so only if others provide an insight for the community into their agile testing effort and experience. Peer-reviews are invaluable and we should utilise the community we have to help us all improve and learn from each other. Please <a href="http://gojko.net/contact/" target="_blank">get in touch with Gojko</a> to get involved.</p>
<p><strong>Awesome team</strong></p>
<p>My talk was a reflection of the process that we&#8217;ve evolved as a team. Everyone in the department contributes to the evolution and continuous improvement, not only of the process, but the environment we work in. Without these people there wouldn&#8217;t have been much for me to talk about! The fifth slide from the end of the presentation contains all the team members on Twitter, it&#8217;s well worth following them all.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/testerhemal.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/testerhemal.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/testerhemal.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/testerhemal.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/testerhemal.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/testerhemal.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/testerhemal.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/testerhemal.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/testerhemal.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/testerhemal.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/testerhemal.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/testerhemal.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/testerhemal.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/testerhemal.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=215&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://testerhemal.wordpress.com/2009/10/30/slides-from-how-we-build-quality-software-at-uswitch-com/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76dd14256b9bc9cc23efa65a4ebc6a1f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">testerhemal</media:title>
		</media:content>
	</item>
		<item>
		<title>A talk about how we build quality software</title>
		<link>http://testerhemal.wordpress.com/2009/10/13/a-talk-about-how-we-build-quality-software/</link>
		<comments>http://testerhemal.wordpress.com/2009/10/13/a-talk-about-how-we-build-quality-software/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 12:10:58 +0000</pubDate>
		<dc:creator>Hemal</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://testerhemal.wordpress.com/?p=213</guid>
		<description><![CDATA[I&#8217;m delighted to be able to provide an experience report at the next London Agile Testing event hosted by SkillsMatter, London about how we build quality software at uSwitch.com. As well as supplying great training courses, SkillsMatter do a lot to nurture communities lead by helpful people like Gojko Adzic. Gojko has kindly let me [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=213&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m delighted to be able to provide an experience report at the next London Agile Testing event hosted by <a href="http://skillsmatter.com/" target="_blank">SkillsMatter</a>, London about <a href="http://skillsmatter.com/event/agile-testing/how-we-build-quality-software-at-uswitch-com" target="_blank">how we build quality software at uSwitch.com</a>.</p>
<p>As well as supplying great training courses, SkillsMatter do a lot to nurture communities lead by helpful people like <a href="http://gojko.net/" target="_blank">Gojko Adzic</a>. Gojko has kindly let me talk at this month&#8217;s event.</p>
<p>My aim is to provide a practical insight into our agile testing effort, talk about how we evolved our process and teams to get where we are today (no QA team, &#8216;baking&#8217; in quality) and also speculate what the future might hold for us and agile testing.</p>
<p>The event is free to attend and takes place at SkillsMatter&#8217;s London office on Wednesday 28th October from 6.30pm. More information and registration is available on their website: <a href="http://skillsmatter.com/event/agile-testing/how-we-build-quality-software-at-uswitch-com" target="_blank">http://skillsmatter.com/event/agile-testing/how-we-build-quality-software-at-uswitch-com</a>.</p>
<p>I hope you can come along to peer-review our agile testing effort and join us for a beer after.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/testerhemal.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/testerhemal.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/testerhemal.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/testerhemal.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/testerhemal.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/testerhemal.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/testerhemal.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/testerhemal.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/testerhemal.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/testerhemal.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/testerhemal.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/testerhemal.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/testerhemal.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/testerhemal.wordpress.com/213/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=213&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://testerhemal.wordpress.com/2009/10/13/a-talk-about-how-we-build-quality-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76dd14256b9bc9cc23efa65a4ebc6a1f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">testerhemal</media:title>
		</media:content>
	</item>
		<item>
		<title>How we build quality software</title>
		<link>http://testerhemal.wordpress.com/2009/08/15/how-we-build-quality-software/</link>
		<comments>http://testerhemal.wordpress.com/2009/08/15/how-we-build-quality-software/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 13:34:03 +0000</pubDate>
		<dc:creator>Hemal</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://testerhemal.wordpress.com/?p=158</guid>
		<description><![CDATA[I realised after looking at what I&#8217;ve blogged so far that I haven&#8217;t written much about actual testing, my first discipline. So, today I&#8217;ll provide an insight into how we develop and test software in our department. We have adopted the stance that having a role to find defects is wasteful and effort should be [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=158&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I realised after looking at what I&#8217;ve blogged so far that I haven&#8217;t written much about actual testing, my first discipline. So, today I&#8217;ll provide an insight into how we develop and test software in our department. We have adopted the stance that having a role to find defects is wasteful and effort should be made to ensure such defects are not written (more on this soon). Thus, we do not have testers. However, our developers know how to test; developing with a focus on quality throughout underpins our process.</p>
<p>I&#8217;ve mentioned previously about <a href="http://testerhemal.wordpress.com/2009/02/04/baking-in-quality/" target="_blank">baking-in quality</a> and not having developers throw code over a wall to testers. I also mentioned <a href="http://testerhemal.wordpress.com/2009/04/23/another-post-on-the-web-about-user-stories/" target="_blank">automating the execution of acceptance criteria</a>, written to define features, in order to aid development today and form regression tests tomorrow. Today I’ll give a very brief overview of each stage (most of which may sound obvious to anyone practicing agile); I’ll go over each stage in greater detail in later posts (my promise to you).</p>
<p>Naturally, the following outline is within the context of our team but there are variations to practices and toolsets that we use. These depend on what we&#8217;re working on (web/desktop) to appetite for risk (safety critical/profit).</p>
<p><strong>Overall: Baking quality in with XP, scrum and lean principles</strong></p>
<p>My team consists of 3 developers and myself (I am considered a developer, albeit not as good as the others, but with a better fault model). Everyone on the team is concerned with not only assuring quality in what we deliver, but making it visible to ourselves and the business.</p>
<p>We work in an agile manner, iterating through development with <a href="http://en.wikipedia.org/wiki/Extreme_Programming" target="_blank">extreme programming</a> practices and <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development" target="_blank">Behaviour Driven Development</a>. Facilitating our relationship with the business is <a href="http://en.wikipedia.org/wiki/Scrum_%28development%29" target="_blank">Scrum </a>and we utilise <a href="http://en.wikipedia.org/wiki/Kanban" target="_blank">kanban</a> principles and systems thinking to maintain a speedy throughput of high-quality work. This mixture allows us to communicate effectively, develop the correct features properly and continuously deploy our work when it is complete, thus maximising business value. I should also mention that we are fortunate enough to have our business people/customer sat across from us.</p>
<p><strong>From start to end: Starting with a User Story &amp; Acceptance Criteria</strong></p>
<p><a href="http://testerhemal.wordpress.com/2009/04/23/another-post-on-the-web-about-user-stories/" target="_blank">I have written about user stories, acceptance criteria</a> and how we improved the clarity of them in the teams within our department. Our stories describe a small, releasable piece of functionality and are supported with thorough acceptance criteria, (the level of thoroughness depends on the context and risk attached). The cognitive effort put into traditional end-of-cycle testing is used upfront to obtain these criteria. By anticipating and exploring what we should deliver before we start coding, we have a development goal to aim towards and know we are done once these are met.</p>
<p><strong>Automating Acceptance Criteria<br />
</strong></p>
<p>Our acceptance criteria are our acceptance tests, (like a <a href="http://portal.acm.org/citation.cfm?id=1340069" target="_blank">Möbius strip</a>). We automate our acceptance tests in one of the following two ways.</p>
<p>If the feature relates to user interaction through the front end, e.g. pages on a website, we write the acceptance criteria in <a href="http://cukes.info/" target="_blank">Cucumber</a>. These are in plain text files in a given-when-then format. At the top level, Cucumber runs <a href="http://wtr.rubyforge.org/" target="_blank">Watir</a>, which manipulates the browser. We  develop with BDD to make the Cucumber acceptance tests turn green as they execute.</p>
<p>If the feature relates to more data-driven/domain logic then we represent the acceptance tests in <a href="http://fitnesse.org/" target="_blank">Fitnesse</a>. Fitnesse uses fixtures to interact directly with domain objects. In their simplest form, tests are written in Excel-like tables within a wiki, (which helps when collaborating with business people) and turn green when the system under test returns the expected output.</p>
<p><strong>BDD and Pairing With Awesome Developers.</strong></p>
<p>Practicing BDD allows us to deliver correctly working, tested software. Firstly, a failing acceptance test scenario drives development. Dropping down into the code, red-green-refactor cycles with <a href="http://www.nunit.org/index.php" target="_blank">nUnit</a> specs help design, document and test internal domain objects. These unit test cycles are repeated until the inital failing acceptance test that we set out to pass is doing so.</p>
<p>When coding we <a href="http://en.wikipedia.org/wiki/Pair_programming" target="_blank">pair-programme</a> (using the <a href="http://www.pomodorotechnique.com/" target="_blank">pomodoro technique</a>). Alistair Cockburn and Laurie Williams&#8217; paper &#8220;<a href="http://collaboration.csc.ncsu.edu/laurie/Papers/XPSardinia.PDF" target="_blank">The Costs and Benefits of Pair Programming</a>&#8221; describes the many advantages to pair programming.</p>
<p><strong>No Testers, Testing or Inspection (being lean).</strong></p>
<p>Huh, no testers?! Without testers or a QA team there is no wall over which work can be thrown and the responsibility for quality absolved. We as developers are responsible for delivering quality, therefore we focus on quality. This department-wide stance is achieved by solid direction from department heads, like our <a href="http://twitter.com/damonmorgan" target="_blank">Development Manager</a>.</p>
<p>The inspection typically carried out end-of-cycle only yields bugs that were low severity and of no real impact to the end user. The <a href="http://www.amazon.co.uk/Perfect-Software-Other-Illusions-Testing/dp/0932633692" target="_blank">fallacies of testing</a> hold true, not everything can be tested and not all bugs will be found (that is, if you want to get to market), so we put the right bugs live. Following point 3 from <a href="http://en.wikipedia.org/wiki/W._Edwards_Deming#Dr._W._Edward_Deming.27s_14_points" target="_blank">Deming&#8217;s 14 Points</a>: by doing more upfront (in the form of acceptance) and focussing on and building in quality, we eliminate the need for &#8220;mass inspection&#8221;.</p>
<p>Error logging and Customer Experience tracking tools, like <a href="http://www.tealeaf.com/" target="_blank">TeaLeaf</a>, provide instant feedback on any issues that do happen to creep into production.</p>
<p><strong>Continuous Integration and Continuous Test Runs<br />
</strong></p>
<p>An agile testing must-have, we use <a href="http://www.jetbrains.com/teamcity/" target="_blank">TeamCity</a> to continuously run our unit tests on each check-in. We also execute our Cucumber acceptance tests on scheduled runs. The status of the builds are visible on dedicated monitors around the office as well as a nice 6&#8242; projected screen.</p>
<p><strong>Altogether</strong></p>
<p>The most radical part of our process is probably the lack of traditional testers. We do not, however, lack testing. We focus on and assure quality in what we develop as we develop it. As a result we have seen the quality of output improve, the rate of throughput increase and our developers thrive as we constantly deliver correct, tested software.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/testerhemal.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/testerhemal.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/testerhemal.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/testerhemal.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/testerhemal.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/testerhemal.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/testerhemal.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/testerhemal.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/testerhemal.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/testerhemal.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/testerhemal.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/testerhemal.wordpress.com/158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/testerhemal.wordpress.com/158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/testerhemal.wordpress.com/158/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=158&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://testerhemal.wordpress.com/2009/08/15/how-we-build-quality-software/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76dd14256b9bc9cc23efa65a4ebc6a1f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">testerhemal</media:title>
		</media:content>
	</item>
		<item>
		<title>Futurespectives</title>
		<link>http://testerhemal.wordpress.com/2009/06/29/futurespectives/</link>
		<comments>http://testerhemal.wordpress.com/2009/06/29/futurespectives/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 20:14:19 +0000</pubDate>
		<dc:creator>Hemal</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://testerhemal.wordpress.com/?p=138</guid>
		<description><![CDATA[Over the last few months (whilst I&#8217;ve spent nearly no time blogging) I&#8217;ve been paying a lot of attention to practices and principles contributing to leaner software development. With principles taken from the Toyota Production System, this encompasses continually delivering  value-ful, quality software to your customer through a refined process that advocates continuous improvement and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=138&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Over the last few months (whilst I&#8217;ve spent nearly no time blogging) I&#8217;ve been paying a lot of attention to practices and principles contributing to <a href="http://en.wikipedia.org/wiki/Lean_software_development" target="_blank">leaner software development</a>. With principles taken from the <a href="http://en.wikipedia.org/wiki/Toyota_Production_System" target="_blank">Toyota Production System</a>, this encompasses continually delivering  value-ful, quality software to your customer through a refined process that advocates continuous improvement and elimination of waste; reducing the concept-to-cash lead time.</p>
<p>A lot about lean and the principles that kanban introduces interests me a lot, the inventory, limiting work in progress and of course, quality, but I&#8217;ll save all that for another day. For now, under the realm of continuous improvement (something we should all be doing, lean or not), I&#8217;d like to mention something I heard from <a href="https://twitter.com/Mikewagg" target="_blank">Mike Wagg</a> after his time at QCon, London back in March. <a href="http://mikewagg.blogspot.com/2009/03/moving-towards-leaner-software.html" target="_blank">In this post</a> Mike mentions what he picked up listening to <a href="http://www.energizedwork.com/" target="_blank">Energized Work</a> talk about their development practices. One thing I liked were &#8216;futurespectives&#8217; and I tried this with our team recently.</p>
<p>After a retrospective, with our developers, development manager, project manager and business person in attendance, we started talked about the next large block of functionality we were to deliver. While doing so I probed the conversation with the questions Energized Work recommend:</p>
<p>&#8220;<strong>Pretending we&#8217;ve delivered, what issues did we have to deal with and how did we deal with them?</strong>&#8220;</p>
<p>While this sounds like an exercise that would only state the obvious, having the whole team involved in discussion means that, subtly, everyone can air their assumptions.</p>
<p>The conversation that followed provided an insight into the risks we faced as a team, that we would probably only have talked about with hindsight at the next retrospective. We were able to anticipate possible problems and come up with goals to help mitigate them, such as addressing quicker feedback with on-demand demos, obstacles affecting testing complex parts of the application and how we can deploy completed work sooner.</p>
<p>Together with the goals from the retrospective itself, we ended up with a nice set of pointers to help us ensure we improved and delivered successfully, once again.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/testerhemal.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/testerhemal.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/testerhemal.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/testerhemal.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/testerhemal.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/testerhemal.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/testerhemal.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/testerhemal.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/testerhemal.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/testerhemal.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/testerhemal.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/testerhemal.wordpress.com/138/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/testerhemal.wordpress.com/138/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/testerhemal.wordpress.com/138/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=138&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://testerhemal.wordpress.com/2009/06/29/futurespectives/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76dd14256b9bc9cc23efa65a4ebc6a1f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">testerhemal</media:title>
		</media:content>
	</item>
		<item>
		<title>Too much pairing</title>
		<link>http://testerhemal.wordpress.com/2009/05/20/too-much-pairing/</link>
		<comments>http://testerhemal.wordpress.com/2009/05/20/too-much-pairing/#comments</comments>
		<pubDate>Wed, 20 May 2009 14:32:56 +0000</pubDate>
		<dc:creator>Hemal</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://testerhemal.wordpress.com/?p=100</guid>
		<description><![CDATA[At our most recent retrospective everyone in our newly formed team commented on how effective and productive the promiscuous pairing we were doing was, especially in neatly formatted pomodoro sessions. There was, however, and to our surprise, one comment from a project manager about there being &#8216;too much pairing&#8217;. After a little probing it turns [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=100&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>At our most recent retrospective everyone in our newly formed team commented on how effective and productive the promiscuous pairing we were doing was, especially in neatly formatted <a href="http://www.pomodorotechnique.com/" target="_blank">pomodoro</a> sessions. There was, however, and to our surprise, one comment from a project manager about there being &#8216;too much pairing&#8217;.</p>
<p>After a little probing it turns out there were concerns from business people not familiar with <a href="http://en.wikipedia.org/wiki/Pair_programming" target="_blank">pair programming</a> about pairing being unproductive and an expensive waste of developer resource.</p>
<p>I don&#8217;t post this intending to pimp pairing, but rather to remind ourselves that sometimes our methods, techy or not, can seem strange to the business and that we should, in an agile team anyway, be worried about what they think. Applying this to other things we do: Does our testing seem lacklustre? Are they confused about specification workshops?</p>
<p>In this case it is simply a matter of educating them, but worth doing so in order to maintain the trust and openness that makes our team effective.</p>
<p>Saying that, it could have just been the pomodoro timers annoying them.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/testerhemal.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/testerhemal.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/testerhemal.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/testerhemal.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/testerhemal.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/testerhemal.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/testerhemal.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/testerhemal.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/testerhemal.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/testerhemal.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/testerhemal.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/testerhemal.wordpress.com/100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/testerhemal.wordpress.com/100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/testerhemal.wordpress.com/100/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=100&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://testerhemal.wordpress.com/2009/05/20/too-much-pairing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76dd14256b9bc9cc23efa65a4ebc6a1f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">testerhemal</media:title>
		</media:content>
	</item>
		<item>
		<title>Establishing your team values</title>
		<link>http://testerhemal.wordpress.com/2009/05/17/establishing-your-team-values/</link>
		<comments>http://testerhemal.wordpress.com/2009/05/17/establishing-your-team-values/#comments</comments>
		<pubDate>Sun, 17 May 2009 16:19:02 +0000</pubDate>
		<dc:creator>Hemal</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://testerhemal.wordpress.com/?p=92</guid>
		<description><![CDATA[At the recent Progressive.Net exchange, Dave Laribee (blog/twitter) gave a great session on the role of architect in the age of lean software development. The talk focused on people, product and process and was filled with nuggets related to each. Establishing your team&#8217;s values was one of the exercises we performed around the people topic. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=92&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>At the recent <a href="http://skillsmatter.com/event/open-source-dot-net/progressive-dot-net-exchange" target="_blank">Progressive.Net exchange</a>, Dave Laribee (<a href="http://codebetter.com/blogs/david_laribee/" target="_blank">blog</a>/<a href="http://twitter.com/laribee/" target="_blank">twitter</a>) gave a great session on the role of architect in the age of <a href="http://en.wikipedia.org/wiki/Lean_software_development" target="_blank">lean software development</a>. The talk focused on <em>people</em>, <em>product</em> and <em>process</em> and was filled with nuggets related to each. Establishing your team&#8217;s values was one of the exercises we performed around the <em>people</em> topic.</p>
<p>I must admit I initially thought it would be a pointless task but it proved grounding and provided perspective and focus. I took it back to my team and during the last retrospective we spent thirty minutes going through the following process.</p>
<p><strong>Step 1: Shout out some values.</strong></p>
<p>With someone writing them on a whiteboard, the whole team should shout out values that are important to them. All members of the team should be present, testers, developers, project manager, business analysts and the business themselves.</p>
<p>Values can be hard to think of at first, but once the ball gets rolling they&#8217;ll flow. Think about what&#8217;s important to you from your perspective e.g. your codebase, your team, how your team is perceived by others, what you deliver, your process, etc. They should be words that describe things that are taken for granted but not always remembered, things that should be engrained in the way you work rather than things you aim to achieve. Examples for us included <em>quality</em>, <em>honesty</em>, <em>fun</em>, <em>energised</em> <em>work</em>, <em>communication</em> etc.</p>
<p>With everyone together you&#8217;ll get an understanding of what&#8217;s important to other members of your team and end up with about 15/20 values.</p>
<p><strong>Step 2: Vote for 3 killer values</strong></p>
<p>Each member of the team should now vote for three of the most important values with a dot next to each one on the whiteboard. The number of votes each person gets depends on the size of your team, but 3 votes each should whittle the list down to a few popular ones. Through voting you&#8217;ll also find that some values overlap, or one value encompasses two or three others; don&#8217;t worry if this happens, just go with the one that you feel is most important.</p>
<p><strong>Step 3: Explain the values with the most votes</strong></p>
<p>There should now be three to five values on the board with the most votes. If not and the votes are spread, go through this step anyway as it&#8217;ll help surface any assumptions people made and you can re-vote.</p>
<p>The person that suggested each of the three most popular values should now just rattle off a sentence explaining why they felt that value was important. Other team members should also add their own comment; the more perspectives the better. For example, a tester will value <em>quality</em> with regards to the product in general being bug-free and what the business required. A developer will value a <em>quality</em> code base written with SOLID principles in mind and a business owner will value <em>quality </em>as it will give their product a competitive edge in the marketplace.</p>
<p><strong>Step 4: Feel a bit more focused<br />
</strong></p>
<p>Having picked three values everyone agrees on you should get these up above your story board for all to see. They&#8217;ll be there to remind you about a way of working that you all agreed on; if anyone breaches one you can say &#8220;Ah, come on, man!&#8221;.</p>
<p>Like I mentioned before, at first I thought this was a pretty pointless excercise. But, whether your team&#8217;s in the forming to performing stage it&#8217;s definitely worth the 30 minutes. You&#8217;ll feel everyone&#8217;s on the same playing field, more enthused and has a little better focus.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/testerhemal.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/testerhemal.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/testerhemal.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/testerhemal.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/testerhemal.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/testerhemal.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/testerhemal.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/testerhemal.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/testerhemal.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/testerhemal.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/testerhemal.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/testerhemal.wordpress.com/92/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/testerhemal.wordpress.com/92/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/testerhemal.wordpress.com/92/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=92&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://testerhemal.wordpress.com/2009/05/17/establishing-your-team-values/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76dd14256b9bc9cc23efa65a4ebc6a1f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">testerhemal</media:title>
		</media:content>
	</item>
		<item>
		<title>Another post on the web about user stories</title>
		<link>http://testerhemal.wordpress.com/2009/04/23/another-post-on-the-web-about-user-stories/</link>
		<comments>http://testerhemal.wordpress.com/2009/04/23/another-post-on-the-web-about-user-stories/#comments</comments>
		<pubDate>Thu, 23 Apr 2009 08:24:50 +0000</pubDate>
		<dc:creator>Hemal</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://testerhemal.wordpress.com/?p=84</guid>
		<description><![CDATA[A few weeks ago we had a discussion about user stories, tasks and acceptance criteria. The aim was to discuss stories and acceptance criteria, how to format them and agree on a common language and understanding for these artefacts within our organisation. User stories (and tasks) At the moment we rely on stories written on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=84&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>A few weeks ago we had a discussion about user stories, tasks and acceptance criteria. The aim was to discuss stories and acceptance criteria, how to format them and agree on a common language and understanding for these artefacts within our organisation.</p>
<p><strong>User stories (and tasks)</strong></p>
<p>At the moment we rely on stories written on post its to manage our development iterations. The detail of these stories isn&#8217;t as high as most would desire, leaving us with ambiguous, one or two word descriptions of a more complex requirement. As such <em>tasks </em>exist which try to fill a gap from an implementation perspective.</p>
<p><a href="http://www.mountaingoatsoftware.com/article/27-advantages-of-user-stories-for-requirements">Mike Cohn</a> defines a story as one thing a customer wants the system to do; others have also added that it should be something that can be scoped, agreed on, estimated and tested against. While our current story writing isn&#8217;t impeding us, and one or two words may suffice to communicate a common understanding amongst teams, there are benefits to fleshing out a story in the right format.</p>
<p>A good story should include the user&#8217;s perspective, a description of the requirement and the business benefit:</p>
<blockquote><p><strong>Title</strong>: E-mail results page<br />
<strong>As a</strong> user looking to perform a comparison of different products<br />
<strong>I want</strong> to email myself the results of my comparison<br />
<strong>So that</strong> I can view my results offline (and speak to / argue with my missus about the best deal).</p></blockquote>
<p>This is just one variation of the format. Others include <strong>In order to</strong>.., <strong>As a</strong>.., <strong>I want to</strong>..</p>
<p><strong>And tasks?</strong></p>
<p>For us, <em>tasks </em>evolved from somewhere and refer to implementation, which for something that should be accessible to the business is bad. While it isn&#8217;t criminal to <em>think </em>about implementation, especially for estimating complexity, those details are best left on your notepad rather than your story/kanban wall. Just because you&#8217;ve created your website and got it talking to your database doesn&#8217;t mean your story of making a blog is complete. Tasks don&#8217;t let us measure progress or describe testability; stories demonstrating business value and use cases do.</p>
<p><strong>User stories? Check. Burnt all those tasks? Check. What next?</strong></p>
<p>Acceptance criteria, baby! Each story should have a number of acceptance criteria that describe a specific scenario or example. These will guide development, form the basis of your testing and ultimately indicate release-ability of the story. E.g. done, or done-done, or if youíre still kidding yourself, done-done-done-done (coded-testedhuh?tested?brokenfixed-retested-live).</p>
<p>Acceptance criteria look like:</p>
<blockquote><p><strong>Scenario 1</strong>: Clicking the link on the results page to enter my email address<br />
<strong>Given </strong>I am on the results page<br />
<strong>When </strong>I click on the link reading &#8216;E-mail yourself these results&#8217;<br />
<strong>Then </strong>I should see a pop-up box asking for my name and email address</p></blockquote>
<blockquote><p><strong>Secnario 2</strong>: Sending my results to a valid email address<br />
<strong>Given </strong>I am on the results page<strong></strong><br />
<strong>And </strong>I&#8217;ve clicked on the link to send the results to myself<br />
<strong>When </strong>I enter a valid name and email address and hit the send button<br />
<strong>Then </strong>The email should be sent<br />
<strong>And </strong>A message should appear telling me so</p></blockquote>
<p>The <strong>Given</strong> and the <strong>Then </strong>part can have extra <strong>And </strong>statements. The scenarios and examples covered in the criteria should include not only happy-paths but obscure, yet plausible routes through the system, e.g. what defines a valid name and email address?</p>
<p>From a development point of view, the behaviour described in well-written acceptance criteria will provide us with a starting point for BDD. Being an outside-in approach, you can drill down further and further to a unit level.</p>
<p>From a testing perspective, each acceptance criteria provides us with a minimum <em>baseline </em>to test for. Baseline because there&#8217;s all the other testing to do too, like integration (when you get more and more criteria and stories complete), browser compatibility, usability, exploratory etc. See <a href="http://whendoitest.com" target="_blank">http://whendoitest.com</a>.</p>
<p><strong>Further discussion:</strong></p>
<ul>
<li> How does this fit in with kanban? (Minimum Marketable Features&#8230;)</li>
<li> How do you write stories and criteria when thinking about slices?</li>
<li> Where should estimation fit in, per story?</li>
<li> When do we write the acceptance criteria, in spec workshops? On demand?</li>
<li> Can we make the acceptance criteria executable? Mmmmwwwwahaha now you&#8217;re talking!</li>
</ul>
<p>I&#8217;ll try discuss some of the above soon.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/testerhemal.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/testerhemal.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/testerhemal.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/testerhemal.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/testerhemal.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/testerhemal.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/testerhemal.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/testerhemal.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/testerhemal.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/testerhemal.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/testerhemal.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/testerhemal.wordpress.com/84/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/testerhemal.wordpress.com/84/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/testerhemal.wordpress.com/84/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=testerhemal.wordpress.com&amp;blog=6082354&amp;post=84&amp;subd=testerhemal&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://testerhemal.wordpress.com/2009/04/23/another-post-on-the-web-about-user-stories/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/76dd14256b9bc9cc23efa65a4ebc6a1f?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">testerhemal</media:title>
		</media:content>
	</item>
	</channel>
</rss>
