<?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>Gojko Adzic &#187; agile testing</title>
	<atom:link href="http://gojko.net/tag/agile-testing/feed/" rel="self" type="application/rss+xml" />
	<link>http://gojko.net</link>
	<description>Building software that matters</description>
	<lastBuildDate>Tue, 22 May 2012 19:12:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>The principle of symmetric change</title>
		<link>http://gojko.net/2010/12/02/the-principle-of-symmetric-change/</link>
		<comments>http://gojko.net/2010/12/02/the-principle-of-symmetric-change/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 12:29:39 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[agile testing]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[specification by example]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2143</guid>
		<description><![CDATA[One of the most important lessons that I&#8217;ve learned as the result of the research conducted for my upcoming book Specification by Example is that many of the most common problems people have with implementing BDD or agile acceptance testing come from a misalignment of conceptual models. By changing our...]]></description>
			<content:encoded><![CDATA[<p>One of the most important lessons that I&#8217;ve learned as the result of the research conducted for my upcoming book <a href="http://specificationbyexample.com">Specification by Example</a> is that many of the most common problems people have with implementing BDD or agile acceptance testing come from a misalignment of conceptual models. By changing our view at the specifications/tests we can make most of those issues go away instantly.<span id="more-2143"></span></p>
<p>The most useful software models are the ones where the technical view of the world is aligned with the relevant business domain model. This ensures that one small change in the business domain (new requirements or changes to existing features) results in one small change in software. This is one of the key ideas of Domain Driven Design. The alignment of the technical and the business models ensures that software evolves nicely with the business and that we never get into a position where a small report change requires a rewrite of the entire system or six months to implement.</p>
<p>The same is true for the other artefacts produced for software &mdash; especially tests and documentation. When the conceptual model used in the tests is aligned with the business domain model, one small change in business will result in one small change in tests, making the tests easy to maintain. This applies to the language used in the tests, the abstractions used to describe features and the way that the tests are organised. So I propose the following principle to get good executable specifications/acceptance tests/bdd scenarios/feature files/fitnesse pages or whatever you call them:</p>
<blockquote><p><b>The principle of symmetric change</b><br />
One small change in a business model should require one small change to executable specifications.
</p></blockquote>
<p>To achieve this, ensure that:</p>
<ul>
<li>each specification should be focused on a single concept of the business domain model (which might be a business rule, step in a flow, or something higher such as the overall definition of a business process)</li>
<li>the concepts used in key examples in a specification are closely aligned with the business domain model and reflected in underlying software domain model. this includes naming (concepts are described in the business domain language) but also the relationships between them.</li>
<li>the (automated) validation procedure is clearly separated from the specification of key examples</li>
<li>the specifications are organised into a living documentation system according to the conceptual relationships that exist in the business domain model</li>
</ul>
<p>Thinking about aligning key examples and specifications with the business domain model instantly solves many of <a href="http://gojko.net/2009/09/24/top-10-reasons-why-teams-fail-with-acceptance-testing/">classic acceptance testing/bdd problems we identified during a CITCON workshop in Paris last year</a>.  For example, &#8220;Focusing on How, not What&#8221; is a sure way to write tests that are very hard to maintain but lots of teams still do it. By thinking about aligning the language and abstraction concepts in the specifications with the business domain model, we force ourselves to describe what the software should do, not how it does it. This separates the specification (what) from the validation procedure (how can we check it in software). The validation procedure can then be automated using a tool. This is a classic problem that Ward Cunningham and Rick Mugridge have identified in Fit For Developing Software nand advised readers not to automate flows. But that is an overly generalised statement &#8211; it confuses people who deal with genuine workflows,  for example in payment systems where business workflows are everything. David Peterson advised people to focus on specification over scripting, which is less generalised but still not directly to the point. Flows or scripts aren&#8217;t the real problem &#8211; it is mixing the business definition of a function with the validation procedure. </p>
<p>Thinking about specifications and tests in this way also prevents people from falling into the trap of <a href="http://gojko.net/2010/07/29/the-sine-of-death-by-ui-test-automation/">The Sine of Death by UI Test Automation</a>. Tests described with low level technical detail, in the language of technical UI interactions, are everything but aligned with a business model. If anything, they are aligned with the current design and layout of user interfaces. A small change in business requirements can have a huge impact on such tests, requiring hours of updates to tests after just a few minutes of changes to the code, which then fails the symmetric change principle. </p>
<p>Ensuring that the specifications are aligned with the business model and in the business language, organised according to the relationships the underlying concepts have in the business model solves all the reasons behind the &#8220;Tests unusable as live documentation&#8221; family of problems, and ensuring that the previous documents are still aligned with the new model resolves most of the issues we described as &#8220;Test code not maintained with love&#8221;.    </p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2010/12/02/the-principle-of-symmetric-change/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lowering the barrier to entry for agile testing</title>
		<link>http://gojko.net/2010/11/27/lowering-the-barrier-to-entry-for-agile-testing/</link>
		<comments>http://gojko.net/2010/11/27/lowering-the-barrier-to-entry-for-agile-testing/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 18:01:09 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[agile testing]]></category>
		<category><![CDATA[bcs]]></category>
		<category><![CDATA[sigist]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2111</guid>
		<description><![CDATA[My article on lowering the barrier to entry for agile testing was published in the December issue of The Tester, the newsletter of the special interest group for testing of the British Computer Society. I&#8217;ll also be speaking at the next BCS SIGIST conference on December 8th on winning big...]]></description>
			<content:encoded><![CDATA[<p>My article on lowering the barrier to entry for agile testing was published in <a href="http://www.bcs.org/upload/pdf/tester-dec10.pdf">the December issue of The Tester</a>, the newsletter of the special interest group for testing of the British Computer Society. </p>
<p>I&#8217;ll also be speaking at the <a href="http://www.bcs.org/upload/pdf/swt-081210-agenda.pdf">next BCS SIGIST conference on December 8th</a> on winning big with agile acceptance testing.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2010/11/27/lowering-the-barrier-to-entry-for-agile-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Secret Ninja Cucumber Scrolls</title>
		<link>http://gojko.net/2010/09/20/the-secret-ninja-cucumber-scrolls/</link>
		<comments>http://gojko.net/2010/09/20/the-secret-ninja-cucumber-scrolls/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 14:04:15 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[news]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[agile testing]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[cuke4ninja]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1996</guid>
		<description><![CDATA[It is my great pleasure to announce the immediate availability of The Secret Ninja Cucumber Scrolls, a free e-book and online step-by-step guide for Cucumber, a tool that is quickly becoming the weapon of choice for many agile teams when it comes to functional test automation, creating executable specifications and...]]></description>
			<content:encoded><![CDATA[<p>It is my great pleasure to announce the immediate availability of <a href="http://cuke4ninja.com">The Secret Ninja Cucumber Scrolls</a>, a free e-book and online step-by-step guide for Cucumber, a tool that is quickly becoming the weapon of choice for many agile teams when it comes to functional test automation, creating executable specifications and building a living documentation. </p>
<p>The main author of this e-book is my colleague <a href="http://deflorinier.blogspot.com/">David de Florinier</a>, and I&#8217;ve also contributed a bit. </p>
<p>The first version covers the basics of Cucumber, setting up for Ruby, Java and .NET projects, implementing basic features in all three languages, effective test design and managing complex features efficiently. We plan to develop this guide incrementally, and the  next version will include web browser automation topics.    </p>
<p>To download the PDF or read the e-Book online, point your browser to <a href="http://cuke4ninja.com">cuke4ninja.com</a>. For news and updates, follow <a href="http://twitter.com/cuke4ninja">cuke4ninja</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2010/09/20/the-secret-ninja-cucumber-scrolls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let&#8217;s change the tune</title>
		<link>http://gojko.net/2010/08/04/lets-change-the-tune/</link>
		<comments>http://gojko.net/2010/08/04/lets-change-the-tune/#comments</comments>
		<pubDate>Wed, 04 Aug 2010 11:13:21 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[acceptance testing]]></category>
		<category><![CDATA[agile testing]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1983</guid>
		<description><![CDATA[As a community, we&#8217;re very guilty of using technical terms and confusing business users. If we want to get them more involved, we have to use the right names for the right things and stop confusing people. This lesson is obvious in acceptance tests and we know that we need...]]></description>
			<content:encoded><![CDATA[<p>As a community, we&#8217;re very guilty of using technical terms and confusing business users. If we want to get them more involved, we have to use the right names for the right things and stop confusing people. This lesson is obvious in acceptance tests and we know that we need to keep the naming consistent and avoid misleading terms, but we don&#8217;t do this when we talk about the process. For example, when we say continuous integration in the context of agile acceptance testing, we don&#8217;t really mean running integration tests. So why use that term, and then have to explain how acceptance tests are different from integration tests? Until I started using Specification Workshops as the name for a collaborative meeting about acceptance tests, it was very hard to convince business users to participate. But a simple change in naming made the problem go away. <span id="more-1983"></span></p>
<p>By using better names, we can avoid a lot of completely meaningless discussions and get people started on the right path straight away. So here is what I propose:</p>
<p>One of the biggest issues teams have with acceptance testing is who should write what and when. So we need to come up with a good name for the start of the process that clearly says that everyone should be involved, and that this needs to happen before developers start developing and testers start testing, because we want to use acceptance tests as a target for development. Test first is a good technical name for it, but business users don&#8217;t get it. I propose we talk about <b>Specifying Collaboratively</b> instead of test first or writing acceptance tests.</p>
<p>It sounds quite normal to put every single numerical possibility into an automated functional test, why wouldn&#8217;t you do it if it is automated. But such complex tests are unusable as a communication tool. So instead of writing functional tests, let&#8217;s talk about <b>Illustrating with Examples</b> (thanks, Dave) and expect the output of that to be <b>Key Examples</b> to point out that we only want enough to explain the context properly.</p>
<p>Key examples are raw material, but if we just talk about acceptance testing then why not just dump all those complicated 50-column 100-row tables into an acceptance test without any explanation, it&#8217;s going to be tested by a machine anyway. But these tests are for humans as well for machines, so let&#8217;s talk about a whole new step after this, about the process of extracting the minimal set of attributes and examples to specify a business rule, and about adding a title, description and so on. I propose we call this <b>Distilling the specification</b>.</p>
<p>I just don&#8217;t want to spend any more arguing with people who already paid a license for QTP that it is completely unusable for acceptance tests. As long as we talk about test automation, there is always going to be a push to use whatever horrible contraption testers already use for automation, because it&#8217;s logical to use a single tool. Acceptance testing tools don&#8217;t compete with QTP or things like that, they address a completely different problem. Instead of talking about test automation, let&#8217;s talk about automating a specification without distorting any information &#8211; <b>Literal Automation</b>. Literal automation also avoids the whole scripting horror and using technical libraries directly in test specifications. If it&#8217;s literal, it should look as it looked on the whiteboard, it should not be translated to selenium commands.</p>
<p>After Literal Automation, we get a specification that can be checked against the code automatically, an <b>Executable Specification</b>.</p>
<p>We want to run all the acceptance tests frequently to make sure that the system still does what it is supposed to do (and equally more important to check that the specification still says what the system does). If we call this regression testing, it&#8217;s very hard to explain to testers why they should not go and add five million other test cases to a previously nice, small and focused specification. If we talk about continuous integration, then we get into the trouble of explaining why these tests should not always be end-to-end and run the whole system. On the top of that, for some legacy systems we need to run acceptance tests against a live, deployed environment. Technical integration tests run before deployment. So let&#8217;s not talk about regression testing or continuous integration, let&#8217;s talk about<br />
<b>Continuous Validation</b> (or even <b>Frequent Validation</b>). </p>
<p>The long term pay-off from agile acceptance testing is having a reference on what the system does that is as relevant as the code itself, but much easier to read. That makes development much more efficient long term, facilitates collaboration with business users, leads to an alignment of software design and business models and just makes everyone&#8217;s life much easier. But to do this, the reference really has to be relevant, it has to be maintained, it has to be consistent with itself and with code. we should not have silos of tests that use terms we had three years ago, and those we used a year ago, and so on. Going back and updating tests is a very hard thing to sell to teams who are busy, but going back to update documentation after a big change is expected. So let&#8217;s not talk about folders filled with hundreds of tests, let&#8217;s talk about a <b>Living Documentation</b> system. That makes it much easier to explain why things should be self-explanatory, why business users need access to this as well and why it has to be nicely organised so that things are easy to find.</p>
<p>What do you think about this? Does it make sense? Will it help? Do you have a better name for one of these concepts, that explains it more clearly?</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2010/08/04/lets-change-the-tune/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Clean Acceptance Tests, August 3rd, central London</title>
		<link>http://gojko.net/2010/07/26/clean-acceptance-tests-august-3rd-central-london/</link>
		<comments>http://gojko.net/2010/07/26/clean-acceptance-tests-august-3rd-central-london/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 19:04:51 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile testing]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1956</guid>
		<description><![CDATA[The next meeting of the UK agile testing user group is on the 3rd of August in central London. Here are the details of the talk: Dan Leong on Clean Acceptance Tests This presentation discusses how our agile team renewed our focus and understanding of our acceptance tests when the...]]></description>
			<content:encoded><![CDATA[<p>The next meeting of the UK agile testing user group is on the 3rd of August in central London. Here are the details of the talk:</p>
<h2>Dan Leong on Clean Acceptance Tests</h2>
<p>This presentation discusses how our agile team renewed our focus and understanding of our acceptance tests when the team members changed. Our group found some core shared values in the context of acceptance testing which we expressed in the style of the agile manifesto. We then looked at our existing tests to find bad test smells that we could learn from. The whole exercise was a good experience and we encourage you to try something similar in your teams.</p>
<p>Dan Leong is a team lead at Sky Network Services, where they have been using agile/XP techniques for over 4 years to deliver the company&#8217;s broadband and voice provisioning system. He has over 10+ experience working in companies ranging from small .com start-ups to global advertising and media companies. Like the rest of us, he&#8217;s trying to figure out how to do things better.</p>
<p>The event is free to attend, but up front registration is required. <b><a href="http://tinyurl.com/2w3hbhw">Register now</a></b></p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2010/07/26/clean-acceptance-tests-august-3rd-central-london/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

