<?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; testing</title>
	<atom:link href="http://gojko.net/tag/testing/feed/" rel="self" type="application/rss+xml" />
	<link>http://gojko.net</link>
	<description>Building software that matters</description>
	<lastBuildDate>Tue, 31 Jan 2012 09:07:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>5 key challenges for agile testers tomorrow &#8211; slides</title>
		<link>http://gojko.net/2011/11/28/5-key-challenges-for-agile-testers-tomorrow-slides/</link>
		<comments>http://gojko.net/2011/11/28/5-key-challenges-for-agile-testers-tomorrow-slides/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 22:20:21 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[presentations]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[visualising quality]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2671</guid>
		<description><![CDATA[Here are my slides from the agile testing days 2011 keynote &#8220;5 key challenges for agile testers tomorrow&#8221; And by popular demand, here is the agile testing donut separately:]]></description>
			<content:encoded><![CDATA[<p>Here are my slides from the agile testing days 2011 keynote &#8220;5 key challenges for agile testers tomorrow&#8221; </p>
<p><object id="__sse10373681" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=5keychallenges-111128161118-phpapp02&#038;stripped_title=5-key-challenges&#038;userName=gojkoadzic" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent"/><embed name="__sse10373681" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=5keychallenges-111128161118-phpapp02&#038;stripped_title=5-key-challenges&#038;userName=gojkoadzic" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"></embed></object></p>
<p>And by popular demand, here is the agile testing donut separately:</p>
<p><img src="http://gojko.net/wp-content/uploads/2011/11/agile_testing_dohnut.png" alt="" title="agile_testing_dohnut" width="389" height="348" class="alignleft size-full wp-image-2690" /></p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2011/11/28/5-key-challenges-for-agile-testers-tomorrow-slides/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Simulating your way out of regression testing</title>
		<link>http://gojko.net/2011/03/03/simulating-your-way-out-of-regression-testing/</link>
		<comments>http://gojko.net/2011/03/03/simulating-your-way-out-of-regression-testing/#comments</comments>
		<pubDate>Thu, 03 Mar 2011 13:07:04 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2304</guid>
		<description><![CDATA[Attending Belgium Testing Days last month got me thinking about a potentially radical approach to regression testing, mostly inspired by Julian Harty and Nathalie Roseboom de Vries van Delft. This might be an unpolished idea, so bear with me. Julian spoke about alternative testing – or better put alternatives to...]]></description>
			<content:encoded><![CDATA[<p>Attending Belgium Testing Days last month got me thinking about a potentially radical approach to regression testing, mostly inspired by <a href="http://blog.bettersoftwaretesting.com/" target="_blank">Julian Harty</a> and <a target="_blank" href="http://funtestic.blogspot.com/">Nathalie Roseboom de Vries van Delft</a>. This might be an unpolished idea, so bear with me.  <span id="more-2304"></span></p>
<p>Julian spoke about alternative testing – or better put alternatives to testing – arguing that time to market is a key competitive advantage for Internet businesses and that exhaustive testing damages that. He cited examples of Facebook, Flickr and Google as companies that do not perform exhaustive regression testing before releases but deal with problems effectively when they appear. &ldquo;Looking at production data is a much more effective way of discovering problems&rdquo;, said Harty, adding that &ldquo;We need to find ways to detect undesirable effects. Do root cause analysis and implement fast, robust mitigation&rdquo;. He suggested using software equivalents of canaries in a coal mine, such as partial deployments, monitoring server logs and implementing automated checks that detect problems quickly. </p>
<p>Exhaustive regression testing mitigates the risk of functional problems but it isn&#8217;t the only way to do so.  Several effective techniques for building quality into products from the start, combined with production monitoring and the ability to solve issues quickly, might cost a lot less and de-risk most expected problems cheaper than the time and effort required for regression testing, even if you write automated tests for other purposes. </p>
<p>This reminded me of one of the most puzzling findings from the survey of effective teams I conducted for <a href='http://specificationbyexample.com'>Specification by Example</a>. The team at uSwitch disable most tests after they pass initially. They use tests to guide development but (most of them) not for regression testing. It sounds counter-intuitive, but it works for them. They still maintain a great level of quality. When I spoke to them in May this year, they couldn&#8217;t remember when they caught the last serious issue was found in production. Instead of regresssion checks, they deliver small increments of functionality to increments of production environment and monitor user experience with automated tools. This derisks horrible problems significantly.</p>
<p>In <a href='http://www.amazon.com/gp/product/0071483004?ie=UTF8&#038;tag=swingwiki-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0071483004'>Estimating Software Costs: Bringing Realism to Estimating</a>, Capers Jones estimated that regression testing catches only 23% of the problems. Brian Marick <a href='http://www.testingcraft.com/regression-test-bugs.html'>wrote a long ago about a similar finding</a>: 30% problems caught while running regression tests repeatedly. If that is true, slow exhaustive testing might actually cost some businesses more in lost opportunity and slower time to market than the problem that it would prevent. I don&#8217;t think that this is a general case, for example in extremely high risk or heavily regulated environments, but for many Internet businesses this might actually be viable. </p>
<p>This of course leaves the problem of <a href="http://www.amazon.com/gp/product/1400063515?ie=UTF8&#038;tag=swingwiki-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=1400063515">Black Swans</a>, completely unexpected and unpredictable issues. (There is a valid argument that exhaustive regression testing can&#8217;t prevent such things anyway.) How about de-risking these things as well?</p>
<p>We don&#8217;t know what a potential Black Swan could be (or otherwise it wouldn&#8217;t be a Black Swan) but we can train the organisation to deal with such problems effectively. Nathalie Roseboom de Vries van Delft presented at Belgium Testing Days about her experiences in (quite bizarre) simulations of disasters. She participates in simulations of floods and re-enactments of airplane and maritime disasters to check how rescue and emergency services deal with such events. Government agencies organise those simulations to maintain readiness and ensure that such events will be dealt with effectively if they occur. These events help to identify issues such as communication problems. For example, one conclusion from a flood simulation was to avoid using acronyms as rescuers from different countries understand them differently. Simulations also give people a chance to experiment with various approaches – for example mixing international rescue teams or using teams of people from the same country to solve particular tasks. </p>
<p>Government agencies aren&#8217;t the only ones who need to handle disasters effectively. Businesses could benefit from this too. In the January-February issue of the Harvard Business Review, Farzad Rastegar wrote about his experiences with a Black Swan – when the news about an upcoming recall of his company&#8217;s baby pushchairs was leaked to New York Daily News and published one day before the planned press release. His company, Maclaren USA, was preparing for the recall for months with resellers and regulators, but the news leak caught them by surprise. Their mail servers went down, communication likes broke and the damage was hard to control.  It took a lot of time, effort and money to clean up the mess, although they spent months preparing. Rastegar concludes that they learned quite a lot about the company as a result of that and decided to change the reselling structure to be able to deal with such problems better in the future.  After hearing Natalie Roseboom, I can&#8217;t help but think that periodic disaster simulations could help much better. </p>
<p>Maybe all these ideas can be combined. Organisations can deal with smaller issues through production monitoring and “canaries”, at the same time ensuring that they can handle Black Swans effectively through training and simulations. An organisation could simulate injecting a problem and see how the copes with it, both from a technical and a business perspective, identify mistakes and make the processes more effective. The cost of such simulations would be high, but it would significantly derisk issues that are unpredictable and lower the cost of handling such problems. By definition, they happen very rarely, this could be a good strategy to justify dropping regression testing completely and getting much faster and cheaper deliveries. </p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2011/03/03/simulating-your-way-out-of-regression-testing/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Robot framework revisited</title>
		<link>http://gojko.net/2010/11/22/robot-framework-revisited/</link>
		<comments>http://gojko.net/2010/11/22/robot-framework-revisited/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 09:00:56 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile acceptance testing]]></category>
		<category><![CDATA[robot framework]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2130</guid>
		<description><![CDATA[I was very fortunate to attend a workshop on Robot Framework given by Pekka Klarck in London a few weeks ago. I&#8217;ve written about Robot basics already on this blog so I won&#8217;t repeat myself, but here are some new ideas I picked up at the workshop: The workshop left...]]></description>
			<content:encoded><![CDATA[<p>I was very fortunate to attend a workshop on <a href="http://code.google.com/p/robotframework/">Robot Framework</a> given by <a href="http://hereberobots.blogspot.com/">Pekka Klarck</a> in London a few weeks ago. <a href="http://gojko.net/2009/05/28/robot-framework-review/">I&#8217;ve written about Robot basics already</a> on this blog so I won&#8217;t repeat myself, but here are some new ideas I picked up at the workshop:<span id="more-2130"></span></p>
<p>The workshop left me with the feeling that the sweet-spot for Robot is automation in heterogeneous environments, because of its support for different languages and the host of ready-made libraries for user interface, network, operating systems and API testing (eg ssh, swing, swt, web, selenium, database, mobile, file management, process control). These libraries in particular allow people without much programming experience to efficiently script automated tests that talk to different elements of a system and organise them so that they are relatively easy to manage. </p>
<p>Another area where Robot seems to be better than the competition is managing huge sets of tests/executable specifications. Pekka said that Texas Instruments have a set of 2 million tests executing through Robot.  To help teams manage large sets of tests, Robot has taken the idea of test tags much further than any other tool I&#8217;ve seen. For example, Robot automatically collects execution statistics and sorts them by tags, presenting a very useful global summary. I haven&#8217;t seen this use of tags before but I love it and I hope that other tools will steal this idea soon. </p>
<p>The danger, as with all such systems, is that people will start programming in keywords and introducing overly complex structures that become unmanageable. That is why I hate the Scenario table feature in FitNesse. A nice feature of Robot, that I have not spotted before, is that there is no difference in how (script) keywords are used in higher level keywords from how library definitions (code keywords) are used. This allows developers to push an implementation of a keyword into code once it becomes complex enough, without changing any of the tests that use it. I haven&#8217;t done this myself on a commercial project so I can&#8217;t guarantee it, but my gut-feel is that this allows people to control the complexity of a keyword-script system effectively and keep it manageable.</p>
<p>The Robot IDE is where the growth will be in the near future. It already has some nice functions that make creation of Robot tests easier and the core team is now working mostly on adding features that will make searching, changing and maintaining easier. This includes extract-keyword refactoring. I don&#8217;t really expect this to ever become as fully featured as a programming IDE, but it should address the most common problems with managing layers of specifications built on layers of script keywords.</p>
<p>The test structure is getting a lot less technical. Pekka showed all examples in plain-text format which he now prefers over the HTML format. I always found the Robot HTML test format a bit too technical but the plain text one looks and feels much better. Robot now supports several ways of matching parameters, including a Gherkin-style language. </p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2010/11/22/robot-framework-revisited/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How Google does test engineering</title>
		<link>http://gojko.net/2010/10/15/how-google-does-test-engineering/</link>
		<comments>http://gojko.net/2010/10/15/how-google-does-test-engineering/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 10:09:50 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agilecam]]></category>
		<category><![CDATA[exploratory testing]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=2036</guid>
		<description><![CDATA[James Whittaker, test engineering director at Google, talked yesterday at the Agile Cambridge conference on how Google does ‘Test Engineering’. He likened software testing to healthcare – in particular patient care in hospitals. Whittaker started by saying that software development was like manufacturing 20 years ago, and that the cost...]]></description>
			<content:encoded><![CDATA[<p><a href="http://googletesting.blogspot.com">James Whittaker</a>, test engineering director at Google, talked yesterday at the <a href="http://www.agilecambridge.net/ac2010/index.php">Agile Cambridge</a> conference on how Google does ‘Test Engineering’. He likened software testing to healthcare – in particular patient care in hospitals.</p>
<p>Whittaker started by saying that software development was like manufacturing 20 years ago, and that the cost of fixing problems after a release was much higher than before software was released. “We don’t do software like this any more”, said Whittaker, adding that “You could be using Google docs and it will update under you and you won’t even know it”. Whittaker concluded that the amount of time it takes to fix a bug before and after shipping for their software is now absolutely the same (note “amount of time”, not cost).</p>
<p>Whittaker suggested looking at a software system as a patient in hospital care. “Testing is like healthcare, an ongoing process”, said he, adding that effective hospital care requires physicians to quickly assess the state of a patient. For that, they use patient charts, which give them a history of disease and treatment, and monitors, which give them visibility over key vital signs such as heart rate. </p>
<p>“I don’t have a clipboard to tell me where are the problems and the life support monitor”, said Whittaker. As a test engineering director, he said that this information was available to him but in several SQL databases which he had to query manually, so he set his team the task of making him run less SQL queries.</p>
<p>As a result, the development teams at Google have introduced several tools which provide the functionality of the patient charts and health monitors. (But have luckily avoided the “<a href="http://www.youtube.com/watch?v=arCITMfxvEc">get the most expensive machine, in case the administrator comes</a> problem”).</p>
<p><span id="more-2036"></span></p>
<h2>Attributes-Capabilities-Components</h2>
<p>The company policy is that anyone can look at any test cases regardless of whether they own the related product or not. They created a tool called Testify that makes statements about the health of their products based on test cases and execution results. It also assists them in providing a historical view of diagnostics. </p>
<p>In order to provide a statement about a software product, they realized that the information needs to be structured and organized. “Doctors have a huge advantage – all their patients look the same”, said Whittaker. To make a meaningful statement about software health, they started listing desired attributes of their products. For example, some of the desired attributes of Chrome OS is that it is stable and secure. “Any time a sales person uses an adverb or an adjective we create an attribute”, said Whittaker. These attributes are then compiled into a tag cloud to provide visibility of relative importance of different attributes.</p>
<p>For each attribute, they list relevant software components that can affect it. This took them about 20 minutes for the Chrome OS. After that, they listed capabilities, starting from verbs that people used to describe the functionality. For example, capabilities of Chrome OS are “connects to internet”, “renders a web page”. It took them about two hours to list 304 capabilities of Chrome OS. Being surprised that there are not more capabilities, they ran the list through a review process and ended up with 314 capabilities in total. </p>
<p>Capabilities, components and attributes “describe our patient”, said Whittaker. According to him, Google is very specific in that it has a very low ratio of testers to developers. “Rich” teams have one tester for four or six developers, the typical ratio is one to fourteen and some teams have one tester for twenty eight developers. He said: “If a developer wants something tested, they have to ask nicely and be prepared for No. The test team needs to understand what to test and you have to make sure that everything you code has to have a set of capabilities attached to a component attached to an attribute”. They assign risk on a capability/attribute matrix and the risk decides where test resources are involved. As a result, developers pay a lot of attention to the quality of their products. </p>
<h2>Using “Tours” as test strategy patterns</h2>
<p>Similar to the way doctors use classes of treatments (ie vitamin therapy or chemotherapy) to discuss a whole set of actions with their colleagues and patients, Whittaker advised using “tours” to describe test strategy patterns. He gave several examples of “tours” they use in Google, such as the Back-alley tour (visit places where very few people have been before), the All-night tour (run the software continuously overnight in a lab, without shutting down) and the Scottish pub run tour (take over the system completely for testing). These tours are a high level pattern language for both activities and diagnostics in a testing session, without going into the low level details. They allow the team to discuss meta issues and communicate more efficiently.</p>
<h2>Heads-up displays</h2>
<p>A monitor in a patient room tells visiting doctors everything they need to know about vital signs of a patient. They do not need to exit the room to find out the details.  Whittaker said that video games are great examples of how heads-up displays show complex statuses on a screen in a very usable form. “They [players] are not writing SQL queries during a game”, said Whittaker, arguing that testers should not be writing SQL queries to get vital software signs as well.  He then showed several examples of systems that they have developed at Google to show vital signs of their systems. </p>
<p>One visualisation screen shows the number of unit tests per module per developer, enabling him to see quickly who is writing unit tests and who is not. As a result of this visualisation, the testers started to reward good developers through a peer bonus system and stimulate them to be better in writing automated tests.</p>
<p>Another screen shows who fixes bugs and who doesn&#8217;t. They created a video-game like screen with developers&#8217; avatars at the top half and bug-like creatures at the bottom screen, representing logged bugs. As soon as a defect is assigned to a particular developer, the  related bug moves from the bottom part of the screen to the top half and starts attacking the avatar of the related developer. When the bug is fixed, the developer avatar kills the bug. This visualisation allowed them to quickly spot the developers that have lots of assigned open bugs. Putting this &#8220;game&#8221; on a screen where developers can see it caused the average time a bug stays open in their system to go down significantly.</p>
<h2>So is testing like healthcare?</h2>
<p>At the end,  Whittaker concluded that testing is a “continuous ongoing activity that mirrors the way physicians tour hospital wards”. </p>
<p>My main objection to this talk is using a metaphor for software development that can only be stretched so far. I don’t know why software development always has to be like something else and why people can’t just take it for a practice in its own right. The attitude that software is always sick and in patient care doesn’t really fit well with my experience. I’ve seen quite a few sick systems, but lots of very healthy ones as well – and they both required testing. I was building software for fun, not for money, 20 years ago, so I cannot really talk about what it was like in the industry from experience. However, my understanding of the situation then was that software development was never like manufacturing. </p>
<p>I do however see a lot of value in learning from other fields, including healthcare, and applying relevant lessons learned there to software.  Exposing system characteristics and providing more visibility is definitely a good idea.</p>
<p>Read a related post on <a href="http://gojko.net/2009/12/07/improving-testing-practices-at-google/">Improving test practices at Google</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2010/10/15/how-google-does-test-engineering/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Using FitNesse to test web services</title>
		<link>http://gojko.net/2010/05/05/using-fitnesse-to-test-web-services/</link>
		<comments>http://gojko.net/2010/05/05/using-fitnesse-to-test-web-services/#comments</comments>
		<pubDate>Wed, 05 May 2010 19:51:11 +0000</pubDate>
		<dc:creator>gojko</dc:creator>
				<category><![CDATA[articles]]></category>
		<category><![CDATA[agile testing]]></category>
		<category><![CDATA[fitnesse]]></category>
		<category><![CDATA[fitsharp]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://gojko.net/?p=1829</guid>
		<description><![CDATA[Just got this question from a blog reader: I am evaluating whether to use FitNesse with FitSharp for acceptance testing some web services. In reading your book and searching online, I could not find a template or recommended approach to doing this. The following is a working idea on the...]]></description>
			<content:encoded><![CDATA[<p>Just got this question from a blog reader:</p>
<blockquote><p>
I am evaluating whether to use FitNesse with FitSharp for acceptance testing some web services.</p>
<p>In reading your book and searching online, I could not find a template or recommended approach to doing this. The following is a working idea on the approach. I would like to hear your feedback if there is a better means of doing this!
</p></blockquote>
<p><span id="more-1829"></span></p>
<blockquote><p>
Template for writing web service acceptance tests:</p>
<ol>
<li>Generate proxy class using the SVCUTIL / WSDL tools in Visual Studio .NET</li>
<li>Wrap the proxy in a helper class that exposes properties for the requests/responses along with setting up the endpoint. This class also includes an Execute() method.</li>
<li>Compose a fixture class containing an instance of the helper class</li>
<li>From FitNesse, initialize the setup of a fixture object with endpoint data and instance variables for web service communication.</li>
<li>Execute()</li>
<li>Check data in assertions </li>
</ol>
</blockquote>
<p>This very much depends on who the stakeholders are for the tests &#8211; who is concerned about them and who is involved in writing them.</p>
<p>FitNesse magic works best on automating shared expectations about what the software should do before you start writing code &#8211; examples that you can agree on with your business customers and analysts, because you can automate these examples and still keep them in a human readable form.</p>
<p>You can still get some benefits using fitnesse in a legacy environment if you decide to write tests for existing software but need to have them in a form that is easily readable by business analysts. But in this case just wrapping a web service with a technical autogenerated fixture won&#8217;t do the trick &#8211; try to create a table format that makes sense for the business instead of basing it on a technical wsdl.</p>
<p>If you don&#8217;t need this, and if the only stakeholders for these tests are developers, then you won&#8217;t get any benefits from FitNesse over MBUnit and it will give you higher maintenance costs.</p>
<p>If you are testing web services after the fact &#8211; after they were written &#8211; you will probably get much better return on your investment in test in just using a technical test tool such as NUnit or MBunit.</p>
<p>Related post: <a href="http://gojko.net/2009/03/09/how-to-implement-loops-in-fitnesse-test-fixtures/">How to implement loops in FitNesse test fixtures</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gojko.net/2010/05/05/using-fitnesse-to-test-web-services/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

