<?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>Modern QA</title>
	<atom:link href="http://blog.spritecloud.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.spritecloud.com</link>
	<description>QA in the modern AGILE web developers world</description>
	<lastBuildDate>Mon, 23 Apr 2012 12:44:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Detecting javascript errors using JSErrorCollector in firefox with cucumber and selenium or watir-webdriver</title>
		<link>http://blog.spritecloud.com/2012/04/detecting-javascript-errors-using-jserrorcollector-in-firefox-with-cucumber-and-selenium-or-watir-webdriver/</link>
		<comments>http://blog.spritecloud.com/2012/04/detecting-javascript-errors-using-jserrorcollector-in-firefox-with-cucumber-and-selenium-or-watir-webdriver/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 09:55:01 +0000</pubDate>
		<dc:creator>barzilay</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Cucumber]]></category>
		<category><![CDATA[Domain Expertise]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Watir]]></category>

		<guid isPermaLink="false">http://blog.spritecloud.com/?p=559</guid>
		<description><![CDATA[Introduction Hi All, In this post we explain how to detect Javascript Errors in firefox using selenium, watir webdriver and cucumber. If you are unfamiliar with these frameworks you can read up on our previous post about Web testing with cucumber. Get JSErrorCollector First, you need to get JSErrorCollector.xpi which you can get here. Then, [...]]]></description>
			<content:encoded><![CDATA[<h3>Introduction</h3>
<p></p>
<p>Hi All,</p>
<p>In this post we explain how to detect Javascript Errors in firefox using selenium, watir webdriver and cucumber. If you are unfamiliar with these frameworks you can read up on our previous post about <a href="http://blog.spritecloud.com/2010/03/web-testing-with-cucumber/" title="Web testing with Cucumber" target="_blank">Web testing with cucumber</a>.
</p>
<p></p>
<h3>Get JSErrorCollector</h3>
<p>First, you need to get JSErrorCollector.xpi which you can get <a href="https://github.com/mguillem/JSErrorCollector" title="JSErrorCollector" target="_blank">here</a>. Then, store it under features/support/extensions in your cucumber project location.</p>
<p></p>
<h3>Add JSErrorCollector.xpi to your browser profile</h3>
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'selenium-webdriver'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'watir-webdriver'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'logger'</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#Start the logger</span>
<span style="color:#ff6633; font-weight:bold;">$log</span> = <span style="color:#CC00FF; font-weight:bold;">Logger</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'log/selenium.log'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#008000; font-style:italic;">#Create a profile</span>
profile = <span style="color:#6666ff; font-weight:bold;">Selenium::WebDriver::Firefox::Profile</span>.<span style="color:#9900CC;">new</span>
&nbsp;
<span style="color:#008000; font-style:italic;">#Add JS error detection to the profile!</span>
profile.<span style="color:#9900CC;">add_extension</span> <span style="color:#996600;">&quot;features/support/extensions/JSErrorCollector.xpi&quot;</span> <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#CC0066; font-weight:bold;">p</span> <span style="color:#996600;">&quot;Cannot add JSErrorCollector.xpi to profile&quot;</span></pre></div></div>

<p></p>
<h3>Launch a browser using the profile you created</h3>
<p>Now you can launch a new browser instance using:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#ff6633; font-weight:bold;">$BROWSER</span> = <span style="color:#6666ff; font-weight:bold;">Watir::Browser</span>.<span style="color:#9900CC;">new</span> <span style="color:#996600;">'firefox'</span>, <span style="color:#ff3333; font-weight:bold;">:profile</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff6633; font-weight:bold;">$profile</span>
<span style="color:#ff6633; font-weight:bold;">$BROWSER</span>.<span style="color:#9900CC;">goto</span> <span style="color:#996600;">&quot;http://www.spritecloud.com&quot;</span></pre></div></div>

<p></p>
<p>When the JSErrorCollector is installed successfully, you will see the error collector counter in the bottom right of the launched browser as displayed in the image below.</p>
<p><a href="http://blog.spritecloud.com/wp-content/uploads/2012/04/JSErrorCollector1.png"><img src="http://blog.spritecloud.com/wp-content/uploads/2012/04/JSErrorCollector1.png" alt="" title="JSErrorCollector" width="595" height="87" class="alignnone size-full wp-image-571" /></a><br />
</p>
<h3>Collect the JS errors</h3>
<p>First off, we create a separate method to get the JS errors formatted how you want to display them when one or more JS errors are detected.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#008000; font-style:italic;">#Function that returns a string that presents the details of the occurred JS errors</span>
<span style="color:#9966CC; font-weight:bold;">def</span> get_js_error_feedback<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  jserror_descriptions = <span style="color:#996600;">&quot;&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">begin</span>
    jserrors = <span style="color:#ff6633; font-weight:bold;">$BROWSER</span>.<span style="color:#9900CC;">execute_script</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;return window.JSErrorCollector_errors.pump()&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    jserrors.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>jserror<span style="color:#006600; font-weight:bold;">|</span>
      <span style="color:#ff6633; font-weight:bold;">$log</span>.<span style="color:#9900CC;">debug</span> <span style="color:#996600;">&quot;ERROR: JS error detected:<span style="color:#000099;">\n</span>#{jserror[&quot;</span>errorMessage<span style="color:#996600;">&quot;]} (#{jserror[&quot;</span>sourceName<span style="color:#996600;">&quot;]}:#{jserror[&quot;</span>lineNumber<span style="color:#996600;">&quot;]})&quot;</span>
&nbsp;
      jserror_descriptions <span style="color:#006600; font-weight:bold;">+</span>= <span style="color:#996600;">&quot;JS error detected:
   #{jserror[&quot;</span>errorMessage<span style="color:#996600;">&quot;]} (#{jserror[&quot;</span>sourceName<span style="color:#996600;">&quot;]}:#{jserror[&quot;</span>lineNumber<span style="color:#996600;">&quot;]})
&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#CC00FF; font-weight:bold;">Exception</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> e
    <span style="color:#ff6633; font-weight:bold;">$log</span>.<span style="color:#9900CC;">debug</span> <span style="color:#996600;">&quot;Checking for JS errors failed with: #{e.message}&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  jserror_descriptions
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p></p>
<h3>Raise exception when JS error is detected</h3>
<p>When using cucumber, you can create a hook after every teststep. In this hook we raise an exception when one or more JS errors are detected.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">AfterStep <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>scenario<span style="color:#006600; font-weight:bold;">|</span>
  <span style="color:#CC0066; font-weight:bold;">raise</span> get_js_error_feedback<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">unless</span> get_js_error_feedback<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">empty</span>?
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Note that this is a <em>Collector</em>, so at the end of each execution, the JS errors of all the visited pages are collected. For speeding up the tests, you can do the check after the end of each scenario (use hook AfterScenario) and cleanup the list after that.</p>
<p>Good Luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spritecloud.com/2012/04/detecting-javascript-errors-using-jserrorcollector-in-firefox-with-cucumber-and-selenium-or-watir-webdriver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>spriteCloud UK is born</title>
		<link>http://blog.spritecloud.com/2012/02/spritecloud-uk-is-born/</link>
		<comments>http://blog.spritecloud.com/2012/02/spritecloud-uk-is-born/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 17:34:56 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Publicity]]></category>

		<guid isPermaLink="false">http://blog.spritecloud.com/?p=550</guid>
		<description><![CDATA[I&#8217;m incredibly chuffed to announce that as of today, we&#8217;ve opened a subsidiary company Cambridge, UK. This has been a while in the making, and is a huge step for us. We consider this step to be the optimal solution to the growing and changing demands on our business: Our customer base in the UK [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m incredibly chuffed to announce that as of today, we&#8217;ve opened a subsidiary company Cambridge, UK. This has been a while in the making, and is a huge step for us. We consider this step to be the optimal solution to the growing and changing demands on our business:</p>
<ul>
<li><b>Our customer base in the UK is growing.</b> We&#8217;ve always operated internationally, but after the Netherlands, the UK has been the place we have been most active in. By opening an office here, we will be able to serve local demands much, much better.</li>
<li><b>Requests for development consultancy have been growing.</b> While we primarily offer quality assurance services, our skillset includes specialization in mobile software development, high scalability server architecture and process consulting, and increasingly customers have asked for our help in these areas. By starting a new business unit dedicated to these services, we&#8217;re improving our focus, and will be able to pursue these activities with the dedication they deserve.</li>
<li><b>Synergy is not just a buzzword.</b> When we previously spoke to customers about QA or development services, we did so in isolation, because we were thinking of ourselves as &#8220;a QA company that can do development&#8221;. Ironically, by giving full credit to each part separately, we&#8217;re in a much better position to offer the combined package to our customers.</li>
</ul>
<p>You can reach the Cambridge office straight away on +44 (0) 1223 853863, or send an email to development@spritecloud.com. Our office/postal address is:</p>
<p>spriteCloud Ltd.<br />
ideaSpace/Entrepreneurship Centre<br />
3 Charles Babbage Road<br />
Cambridge<br />
CB3 0GT<br />
United Kingdom</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spritecloud.com/2012/02/spritecloud-uk-is-born/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FOSDEM 2012 Contest</title>
		<link>http://blog.spritecloud.com/2012/02/fosdem-2012-contest/</link>
		<comments>http://blog.spritecloud.com/2012/02/fosdem-2012-contest/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 14:18:29 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Publicity]]></category>

		<guid isPermaLink="false">http://blog.spritecloud.com/?p=530</guid>
		<description><![CDATA[Some of us will be at this year&#8217;s FOSDEM conference, and we figured that&#8217;d be a great moment to run a witch hunt^W^Wcontest. The rules are simple: Spot any of us at FOSDEM, and take a picture as proof. For the purposes of this competition, the whole of Brussels counts as &#8220;at FOSDEM&#8221;, at least [...]]]></description>
			<content:encoded><![CDATA[<p>Some of us will be at this year&#8217;s <a href="http://fosdem.org/2012">FOSDEM</a> conference, and we figured that&#8217;d be a great moment to run a witch hunt<code>^W^W</code>contest.</p>
<p>The rules are simple:</p>
<ol>
<li>Spot any of us at FOSDEM, and take a picture as proof. For the purposes of this competition, the whole of Brussels counts as &#8220;at FOSDEM&#8221;, at least from 02/02/2012 to 05/02/2012 (CET timezone).</li>
<li>Send the image to <a href="mailto:fosdem@spritecloud.com">fosdem@spritecloud.com</a>. No entries arriving past the 29th of February 2012 will be accepted (CET timezone). Please include your name, email address, and whether or not you want either of them published. We reserve the right to publish your image submission anonymously, though.</li>
<li>We&#8217;ll judge which pictures are best. Bonus points if you include yourself, make it funny, or manage to connect it to a particular FOSS project, etc. Offensive submissions will be disqualified. We&#8217;re impervious to bribery, but we may take whatever freebies you offer anyway.</li>
<li>The three best entries get a guest blog post here, on any subject related to FOSS and/or testing or writing software. It goes without saying, really, but offensive content will be rejected even if it&#8217;s relevant.</li>
<li>The best entry also gets a free T-shirt.</li>
</ol>
<p>We&#8217;d love to give away more swag, but we&#8217;re unprepared &#8211; this whole thing has been somewhat spontaneous. If it&#8217;s a success, we&#8217;ll do it again next year, but bigger. So be sure to participate!</p>
<p>P.S.: Here&#8217;s the boring legalese:</p>
<ol style="font-size: 75%;">
<li>The contest is open to anyone except employees and the families of employees of spriteCloud B.V. By entering this contest, contestants agree that spriteCloud B.V. may use all images created for the contest for promotional purposes.</li>
<li>All entries and all rights relating there become property of spriteCloud B.V.</li>
<li>By entering, all entrants agree to release spriteCloud B.V. and their employees from all liability and claims relating to participation in the contest. No substitutions or transfer of prizes or cash redemptions permitted by winners.</li>
<li>spriteCloud B.V. reserves the right, in its sole discretion, to cancel, suspend or alter the rules &#038; parameters of the contest. spriteCloud B.V. also reserves the right to substitute a prize or prizes as it deems suitable in the event that the prize is unavailable for any reason whatsoever.</li>
<li>Winners under the age of 18 (as of win announcement) must have their parents&#8217; and/or legal guardians&#8217; consent to accept prizes. Winners, by acceptance of prizes, agree to release spriteCloud B.V. from any and all liability claims or actions of any kind whatsoever for damages.</li>
<li>Offer void where prohibited, regulated or restricted by law in a manner inconsistent with the purposes and rules hereof.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://blog.spritecloud.com/2012/02/fosdem-2012-contest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>spriteCloud @ p0wer0f1 Event</title>
		<link>http://blog.spritecloud.com/2011/11/spritecloud-p0wer0f1-event/</link>
		<comments>http://blog.spritecloud.com/2011/11/spritecloud-p0wer0f1-event/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 18:21:37 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Publicity]]></category>
		<category><![CDATA[p0wer0f1]]></category>
		<category><![CDATA[p1event]]></category>

		<guid isPermaLink="false">http://blog.spritecloud.com/?p=523</guid>
		<description><![CDATA[Interviews at The Power of One (1 of 2) from BlueVia on Vimeo. Jump to ca. 1:45 if you want to see my ugly mug. Unfortunately they didn&#8217;t show the main bits when I was talking about QA, and got my name wrong. But it&#8217;s all good in the end!]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://player.vimeo.com/video/32521404?title=0&amp;byline=0&amp;portrait=0" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
<p><a href="http://vimeo.com/32521404">Interviews at The Power of One (1 of 2)</a> from <a href="http://vimeo.com/bluevia">BlueVia</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>Jump to ca. 1:45 if you want to see my ugly mug. Unfortunately they didn&#8217;t show the main bits when I was talking about QA, and got my name wrong. But it&#8217;s all good in the end!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spritecloud.com/2011/11/spritecloud-p0wer0f1-event/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Results Website of the Year Awards 2011</title>
		<link>http://blog.spritecloud.com/2011/11/results-website-of-the-year-awards-2011/</link>
		<comments>http://blog.spritecloud.com/2011/11/results-website-of-the-year-awards-2011/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 09:35:53 +0000</pubDate>
		<dc:creator>barzilay</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[Presentation]]></category>
		<category><![CDATA[Publicity]]></category>

		<guid isPermaLink="false">http://blog.spritecloud.com/?p=503</guid>
		<description><![CDATA[spriteCloud was participating at the Website of the Year Awards 2011, and quite an event it was. Here you can find the pictures of the event. The winner of the one and only &#8216;Website of the Year 2011&#8242; Award was Tweakers.net. Below you will find the results of all the sub categories: Populairste site Beste [...]]]></description>
			<content:encoded><![CDATA[<p>spriteCloud was participating at the Website of the Year Awards 2011, and quite an event it was.</p>
<p>Here you can find the <a href="http://www.websitevanhetjaarawardnight.nl/terugblik" title="Pictures of the Awards Evening" target="_blank">pictures of the event</a>. The winner of the one and only &#8216;Website of the Year 2011&#8242; Award was <a href="http://tweakers.net/" title="Tweakers.net" target="_blank">Tweakers.net</a>.</p>
<p>Below you will find the results of all the sub categories:</p>
<table width="437" style="border: 1px solid #000000;padding:3px;">
<tbody style="border: 1px solid #000000;padding:3px;">
<tr style="border: 1px solid #000000;padding:3px;">
<th></th>
<th>Populairste site</th>
<th>Beste site</th>
</tr>
<tr style="border: 1px solid #000000;padding:3px;">
<td>Automotive</td>
<td>Marktplaats Auto&#8217;s</td>
<td>Renault</td>
</tr>
<tr style="border: 1px solid #000000;padding:3px;">
<td>Carrière</td>
<td>Nationale Vacaturebank</td>
<td>Unique Uitzendbureau</td>
</tr>
<tr>
<td>Communities</td>
<td>Facebook</td>
<td>Gathering of Tweakers</td>
</tr>
<tr>
<td>Daten</td>
<td>Relatieplanet</td>
<td>Paiq</td>
</tr>
<tr>
<td>Educatie</td>
<td>Kennisnet</td>
<td>NHA</td>
</tr>
<tr>
<td>Entertainment</td>
<td>YouTube.nl</td>
<td>De Speld</td>
</tr>
<tr>
<td>Financieel</td>
<td>ING</td>
<td>ASN Bank</td>
</tr>
<tr>
<td>Games</td>
<td>Zylom</td>
<td>Zylom</td>
</tr>
<tr>
<td>Gezondheid &amp; Welzijn</td>
<td>Receptenweb</td>
<td>Receptenweb</td>
</tr>
<tr>
<td>Goede Doelen</td>
<td>CliniClowns</td>
<td>KWF Kankerbestrijding</td>
</tr>
<tr>
<td>Huisvesting &amp; Interieur</td>
<td>Funda</td>
<td>IKEA</td>
</tr>
<tr>
<td>Nieuws &amp; Informatie</td>
<td>Nu.nl</td>
<td>Tweakers.net</td>
</tr>
<tr>
<td>Overheid</td>
<td>Belastingdienst</td>
<td>Consuwijzer</td>
</tr>
<tr>
<td>Vrije tijd &amp; Reizen</td>
<td>Vakantieveilingen</td>
<td>Wintersporters</td>
</tr>
<tr>
<td>E-commerce</td>
<td>iBood</td>
<td>iBood</td>
</tr>
<tr>
<td>Sport</td>
<td>PSV.nl</td>
<td>PSV.nl</td>
</tr>
<tr>
<td>Telecom</td>
<td>Ziggo</td>
<td>ZeelandNet</td>
</tr>
<tr>
<td>TV &amp; Radio</td>
<td>UitzendingGemist</td>
<td>Radio 3FM</td>
</tr>
<tr>
<td>Vergelijking</td>
<td>Tweakers.net Pricewatch</td>
<td>Tweakers.net Pricewatch</td>
</tr>
<tr>
<td>Weer &amp; Verkeer</td>
<td>Buienradar</td>
<td>Google Maps</td>
</tr>
<tr>
<td>Zoeken en Vinden</td>
<td>Google</td>
<td>Google</td>
</tr>
<tr>
<td>Mobiele Website</td>
<td>Buienradar Mobiel</td>
<td>Nu.nl Mobiel</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://blog.spritecloud.com/2011/11/results-website-of-the-year-awards-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cross browser testing &#8211; The truth is in the numbers</title>
		<link>http://blog.spritecloud.com/2011/09/cross-browser-testing-the-truth-is-in-the-numbers/</link>
		<comments>http://blog.spritecloud.com/2011/09/cross-browser-testing-the-truth-is-in-the-numbers/#comments</comments>
		<pubDate>Thu, 08 Sep 2011 11:15:53 +0000</pubDate>
		<dc:creator>barzilay</dc:creator>
				<category><![CDATA[Domain Expertise]]></category>

		<guid isPermaLink="false">http://blog.spritecloud.com/?p=463</guid>
		<description><![CDATA[Viral Wouldn’t this almost be a great viral campaign? This new campaign of one of the world&#8217;s leading companies only works properly in Internet Explorer 9.0. In other browsers this is what the Wallmart Video Download service looked like right after launch. Even though errors like this don’t occur that much anymore most Chrome and [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Viral</strong><br />
Wouldn’t this almost be a great viral campaign? This new campaign of one of the world&#8217;s leading companies only works properly in Internet Explorer 9.0. In other browsers this is what the Wallmart Video Download service looked like right after launch.</p>
<p><a href="http://blog.spritecloud.com/wp-content/uploads/2011/09/error.jpg"><img class="alignnone size-medium wp-image-464" title="error" src="http://blog.spritecloud.com/wp-content/uploads/2011/09/error-300x166.jpg" alt="" width="300" height="166" /></a></p>
<p>Even though errors like this don’t occur that much anymore most Chrome and Safari users know that there are still quite some annoying bugs when surfing the internet.</p>
<p><strong>The truth is in the numbers</strong><br />
Does this means that developers still can’t be bothered to do cross browser testing? Does it means that companies don’t demand that their web applications work on all browsers? The truth is in the numbers;</p>
<div id="browser-eu-monthly-201008-201108" width="600" height="400" style="width:600px; height: 400px;"></div>
<p><!-- You may change the values of width and height above to resize the chart -->
<p>Source: <a href="http://gs.statcounter.com/#browser-eu-monthly-201008-201108">StatCounter Global Stats &#8211; Browser Market Share</a></p>
<p><script type="text/javascript" src="http://www.statcounter.com/js/FusionCharts.js"></script><script type="text/javascript" src="http://gs.statcounter.com/chart.php?browser-eu-monthly-201008-201108"></script></p>
<p>IE 6.0, 7.0, 8.0, 9.0, Firefox 3.6, 4.0, 3.5, 5.0, Chrome 12.0, 8.0, 10.0, Safari 5.0 and so on. What works great in IE 9.0 doesn’t automatically work in IE7. Ok. That shouldn’t be hard to find out.</p>
<div id="browser_version-eu-monthly-201109-201109-bar" width="600" height="400" style="width:600px; height: 400px;"></div>
<p><!-- You may change the values of width and height above to resize the chart -->
<p>Source: <a href="http://gs.statcounter.com/#browser_version-eu-monthly-201109-201109-bar">StatCounter Global Stats &#8211; Browser Version Market Share</a></p>
<p><script type="text/javascript" src="http://www.statcounter.com/js/FusionCharts.js"></script><script type="text/javascript" src="http://gs.statcounter.com/chart.php?browser_version-eu-monthly-201109-201109-bar"></script></p>
<p>The top 4 is: Chrome 13, IE 8.0, Firefox 6, IE9. Only thing is, they add up to about 70%.</p>
<p><strong>One hundred percent</strong><br />
In testing 100% is impossible. For cross browser testing this is no different. Let’s say you want to test on the browsers used by at least 85% of all people. This means you’d have to have at least 12 dedicated systems running, and being maintained. Not everyone wants this, which is why we have it. As well as a hosted test environment. We have everything running here in our test lab. Almost everything. From IE x.x, Chrome x, Mozilla, and up</p>
<p><strong>Mobile</strong><br />
When testing mobile web applications you need to be able to test on mobile handsets. We have a wide coverage of handsets for the big mobile operating systems popular today.</p>
<p><strong>Pleased</strong><br />
Having all the handsets; hosted test environments; a test lab based on an official Microsoft Developers Network (MSDN) subscription are just some of the reasons why our customer base, including high profile Digital Agencies, are very pleased with the testing we currently perform for them.</p>
<p>At spriteCloud we are domain experts in AGILE software Quality Assurance and software testing, particularly for web consumer service companies and digital agencies.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spritecloud.com/2011/09/cross-browser-testing-the-truth-is-in-the-numbers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>spriteCloud @ gamescom 2011</title>
		<link>http://blog.spritecloud.com/2011/08/spritecloud-gamescom-2011/</link>
		<comments>http://blog.spritecloud.com/2011/08/spritecloud-gamescom-2011/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 15:40:08 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[QA Culture]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[gamescom]]></category>
		<category><![CDATA[latency]]></category>
		<category><![CDATA[load testing]]></category>
		<category><![CDATA[MMOG]]></category>
		<category><![CDATA[MMORPG]]></category>
		<category><![CDATA[performance testing]]></category>
		<category><![CDATA[scalability]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://blog.spritecloud.com/?p=459</guid>
		<description><![CDATA[More or less by chance I had an opportunity to attend the first day of gamescom this year, Europe&#8217;s biggest video game related trade show. The entertainment area where consumers get a glimpse of new games was a blast, as expected. But the business area open only to trade visitors was particularly interesting to me, [...]]]></description>
			<content:encoded><![CDATA[<p>More or less by chance I had an opportunity to attend the first day of <a href="http://www.gamescom-cologne.com/en/gamescom/home/index.php">gamescom</a> this year, Europe&#8217;s biggest video game related trade show. The entertainment area where consumers get a glimpse of new games was a blast, as expected. But the business area open only to trade visitors was particularly interesting to me, because there were a fair amount of test companies present.</p>
<p>It seems as if the games industry on the whole takes their testing a lot more seriously than many other sectors of the software world. That shouldn&#8217;t be particular surprising, given that games are probably the most abundantly distributed shrink-wrap software still in existence. When you cannot rely on online updates being available to your customers, testing becomes a crucial part of your business &#8212; and <a href="http://arstechnica.com/gaming/news/2007/08/gaming-to-surge-50-percent-in-four-years-possibly.ars">the stakes are high in video gaming</a>.</p>
<p><span id="more-459"></span></p>
<p>What&#8217;s all the more interesting, then, is that so many of the testing companies I&#8217;ve seen don&#8217;t seem to have all <em>that</em> much of an expertise with testing networking related things. Few if any advertise test labs for massively multiplayer online games. I suppose this is only surprising to industry outsiders such as ourselves&#8230;</p>
<p>&#8230; however, it means we shouldn&#8217;t be industry outsiders. Normal web-related functional, performance and load testing aside, our founders are people who have helped build and test on-demand and live video streaming code at <a href="http://en.wikipedia.org/wiki/Joost">Joost</a>. Online gaming has different demands on network performance than video streaming, granted, but in terms of the two major test variables in networking &#8212; bandwidth and latency &#8212; video streaming places some of the toughest demands on systems.</p>
<p>Chances are, if you&#8217;re an online game company caring about the performance of your servers, you&#8217;ll find few testing services providers better suited to your needs than us. So <a href="http://www.spritecloud.com/contact">contact us</a>, by all means!</p>
<p>(Also, when we find the time, we&#8217;re partial to some instance runs in <a href="http://www.lotro.com/">LotRO</a>. You can ping us just for that, too.)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spritecloud.com/2011/08/spritecloud-gamescom-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Welcome to the Real World, Microsoft</title>
		<link>http://blog.spritecloud.com/2011/07/welcome-to-the-real-world-microsoft/</link>
		<comments>http://blog.spritecloud.com/2011/07/welcome-to-the-real-world-microsoft/#comments</comments>
		<pubDate>Fri, 22 Jul 2011 13:40:42 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[QA Culture]]></category>
		<category><![CDATA[QA Value]]></category>
		<category><![CDATA[Test Process]]></category>

		<guid isPermaLink="false">http://blog.spritecloud.com/?p=453</guid>
		<description><![CDATA[Alright, that&#8217;s a provocative title right there, I admit it. I couldn&#8217;t resist. A short while ago, I was perusing the July 2011 issue of the Communications of the ACM, when I came across an interview article with some of the people behind a massive retro-documentation project at Microsoft. Microsoft had to document much of [...]]]></description>
			<content:encoded><![CDATA[<p>Alright, that&#8217;s a provocative title right there, I admit it. I couldn&#8217;t resist.</p>
<p>A short while ago, I was perusing the <a href="http://cacm.acm.org/magazines/2011/7">July 2011 issue of the Communications of the ACM</a>, when I came across an interview article with some of the people behind a massive retro-documentation project at Microsoft. Microsoft had to document much of the client-server communications of their existing software to allow third parties to implement interoperable software. The article is succinctly called &#8220;Microsoft&#8217;s Protocol Documentation Program: Interoperability Testing at Scale&#8221;. Definitely worth a read.</p>
<p>The sentence that struck me, and that is repeated in sentiment in the remainder of the article is this: &#8220;First and foremost, a team would be required to test documentation, not software, which is the inversion of the normal QA process; (&#8230;)&#8221;.</p>
<p>I&#8217;m not sure I agree with that statement. And to be fair, that statement isn&#8217;t the point of the CACM article, either. But it presents a good launch pad for something that concerns me a little.</p>
<p><span id="more-453"></span></p>
<p>What the Microsoft guy is effectively saying is that the normal QA process is to take some documentation and some software, test the software, and if it doesn&#8217;t match up with the documentation, then reject it. While that sounds like a good description of the QA process as it exists in many people&#8217;s mind, the implication of it must be that the software is an implementation of some strictly documented specification, and <em>that</em> in turn strikes me as unrealistic.</p>
<p>My experience is primarily as a software engineer, and while I have occasionally had to implement some <a href="http://www.ietf.org/rfc.html">RFC</a> or similar specification, in the vast majority of cases, that&#8217;s not happening.  In the rare cases that software <em>is</em> implemented from a specification, it almost invariably deviates from the specification, too &#8212; and often intentionally so. Think of how browsers deviate in how they render documents as an example; some of these deviations are due to the way specs are interpreted by different parties, but some are deliberate.</p>
<p>What happens instead is that software is vaguely specced out, written, unit tested (if you&#8217;re lucky), and if developers have a good enough incentive, documentation of what the software de-facto does is done last. Now whether or not that&#8217;s a good thing is up for debate, but in this post I don&#8217;t want to focus on passing judgement on existing software engineering practices.</p>
<p>Based on such experience, I think it&#8217;s a slightly dangerous misunderstanding of the QA process to assume that it treats documentation as the standard against which to test software. A more realistic and valuable understanding would be that the QA process attempts to detect where documentation and software behaviour are in conflict.</p>
<p>The rationale is centered around what in the scientific method is called <a href="http://en.wikipedia.org/wiki/Confirmation_bias">confirmation bias</a>; it describes the tendency of people to find evidence to support their hypothesis.</p>
<p>In terms of testing, confirmation bias is most easily evident when tests are written to only test <em>known good</em> parameters instead of also testing <em>known bad</em> combinations. If you take the example of testing a login form that require you to enter an email address and a password, the truly interesting tests are those that test without the email, or without the password, or with a string in the email field that doesn&#8217;t conform to email address syntax. It&#8217;s more obvious to confirm the hypothesis that the login form should work than to disprove it.</p>
<p>Testing a login form is a relatively simple example, though. Confirmation bias in testing can occur in more subtle forms. If you&#8217;re testing a network protocol, for example, a lot of the goings on on the wire will be defined as requests and responses of some sort. It is usually implied &#8212; and most likely documented &#8212; that each request to a machine should result in a response being sent back from that machine. What if the machine sends multiple responses? What if it sends a response packet without a request being made? What if a different machine responds than the one the request was sent to?</p>
<p>In many protocols, such behaviour is so outlandish that it&#8217;s not even documented that, for example, such extra responses should be discarded (as one may somewhat reasonably assume). Yet it&#8217;s the existence of such responses that can throw off server software quite badly. The problem here isn&#8217;t that documentation describes behaviour that deviates from what the software does, it&#8217;s that the documentation omits behaviour entirely. It&#8217;s entirely reasonable to assume that even seasoned QA engineers will therefore also omit testing this crucial aspect of the software and/or documentation.</p>
<p>Given all the above, I do agree strongly with the Microsoft team that a change of perspective on QA may be required and useful. Where they speak about a specific goal, however, I think the change in perspective should be more general. In order to avoid all of the consequences of confirmation bias, QA should not be viewed as testing whether software conforms to specification. Instead, that should be viewed as a rare case that applies only in the special circumstances when software is also implemented from such specification.</p>
<p>In the real world (to get back to the title), QA tests documentation, software, and the ability of engineers to fill the gaps left between the two alike.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spritecloud.com/2011/07/welcome-to-the-real-world-microsoft/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Lifecycle Consultancy</title>
		<link>http://blog.spritecloud.com/2011/06/software-lifecycle-consultancy/</link>
		<comments>http://blog.spritecloud.com/2011/06/software-lifecycle-consultancy/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 22:11:07 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[QA Value]]></category>
		<category><![CDATA[Team Work]]></category>
		<category><![CDATA[Test Process]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[release management]]></category>
		<category><![CDATA[software lifecycle]]></category>
		<category><![CDATA[test management]]></category>

		<guid isPermaLink="false">http://blog.spritecloud.com/?p=433</guid>
		<description><![CDATA[It feels like ages that I blogged about the place of QA in software development. Granted, in internet years, it has been a while. But the topic never seems to quite go away. Since I wrote that other blog post, a lot of things have happened here at spriteCloud. In the meantime, we&#8217;ve been involved [...]]]></description>
			<content:encoded><![CDATA[<p>It feels like ages that I blogged about <a href="/2010/08/put-software-quality-assurance-in-its-place/">the place of QA in software development</a>. Granted, in internet years, it has been a while. But the topic never seems to quite go away.</p>
<p>Since I wrote that other blog post, a lot of things have happened here at spriteCloud. In the meantime, we&#8217;ve been involved in the testing process with quite a few more customers (yay!). One thing that emerged over time is that many companies don&#8217;t exactly come to us for testing alone, but also for answering the question of how to fit testing into the development and release process.</p>
<p>When you try to answer that question, it quite often happens that you discover that the reason these companies didn&#8217;t know how to fit testing into their process is that there is not much of a process in place to fit testing into. To us QA-minded people, that may come as a surprise, but it really shouldn&#8217;t be.</p>
<p>As one young developer at one of our clients put it to me (slightly paraphrased): &#8220;They should really teach release management in university. Programming is easy enough to pick up, but this stuff is hard to figure out on your own.&#8221; I sympathize with that, as it mirrors my own experience from some ten years or so ago when I started out on my development career.</p>
<p>Before you can teach anything about development processes, though, it is essential that one understands the <em>software lifecycle</em>.</p>
<p><span id="more-433"></span></p>
<p>Let&#8217;s start with the basics: it used to be taught (usually as a bad example) that the software lifecycle works a bit like a <a href="http://en.wikipedia.org/wiki/Waterfall_model">waterfall</a>: Software is completely specified, before it is completely implemented, before it is completely tested, before it is released.</p>
<p><a href="http://blog.spritecloud.com/wp-content/uploads/2011/06/waterfall.png"><img src="http://blog.spritecloud.com/wp-content/uploads/2011/06/waterfall-300x145.png" alt="Waterfall Model of Software Development" title="Waterfall Model of Software Development" width="300" height="145" class="alignleft size-medium wp-image-437" /></a></p>
<p>The model deliberately simplifies things to the point of being fantastically incorrect in describing the real world. It does, however, describe accurately that some tasks within the development process by necessity depend upon the completion of other tasks. Where it fails is that it assumes these tasks can be grouped into five completely separate stages. In this model, testing falls solely into the fourth stage, that of verification. (You can click on the images to enlarge them).</p>
<p>When agile development methodologies sprung up, they usually started by pointing out the flawed assumptions behind the waterfall model. The most glaring flaw to many is that software rarely goes into maintenance mode &#8212; usually it is developed further, and newer versions simply supersede older versions. That last stage of the waterfall model, then, should really be got rid of.</p>
<p>What happens instead is that a whole new design-build-release cycle gets started that works out bugs in the previous release and adds new features, all depending of course on the overall product plan. The best model of describing things, then, should circle back into itself, as any good lifecycle would.</p>
<p><a href="http://blog.spritecloud.com/wp-content/uploads/2011/06/agile.png"><img src="http://blog.spritecloud.com/wp-content/uploads/2011/06/agile-300x128.png" alt="" title="Agile Software Development Model" width="300" height="128" class="alignright size-medium wp-image-435" /></a></p>
<p>One thing that&#8217;s slightly alarming to quality-minded people is that a &#8220;verification&#8221; stage is usually dropped from this model. Depending on which flavour of agile proponent you ask about this, they&#8217;ll either state that <a href="http://en.wikipedia.org/wiki/Test-driven_development">testing should drive development</a>, or that <a href="http://www.unwesen.de/2011/04/13/i-dont-always-test-my-code/">testing is done in production by end-users</a>. The latter group usually legitimize their stance by also demanding very short iterations on this circular model, such that end-users would not be inconvenienced by spurious bugs for a long time anyway.</p>
<p>There is an argument to be made for both, of course, but both miss critical points about testing:</p>
<ol>
<li>Test-driven development misses the fact that testing isn&#8217;t just about testing code. <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development">Behaviour driven development</a> is a much saner approach, as it focuses more on the end-user experience than anything else. As such, it implies that whoever thinks up what a piece of software should do should be involved in defining what behaviour needs to be tested for, which in larger teams means there&#8217;s now a dependency between several people&#8217;s deliverables.</li>
<li>On the other hand, production testing misses the fact that end-users aren&#8217;t necessarily product designers. Of course it&#8217;s important to take their feedback into account, but different users have different acceptance criteria. It requires careful design to figure out how to best serve the majority of users, and it&#8217;s <em>that</em> design that needs to be fulfilled, not the user&#8217;s expectations.</li>
</ol>
<p>Put differently, you now need a separate stage in the process again at which acceptance test criteria are verified.</p>
<p>If you&#8217;ve followed my line of argumentation closely, you may have noticed that I&#8217;m edging towards a statement about testing that is often slightly misunderstood: <em>of course</em> testing serves to eliminate bugs, but when bugs come in the form of undesirable software behaviour rather than crashes or spurious errors, someone really needs to sit down and describe what the desired software behaviour should be. In other words, there is no testing without a plan. And plans, at least traditionally, happen close to the start of any project (or iteration).</p>
<p>Once you&#8217;ve internalized that, it becomes quite clear that putting a neat &#8220;verification&#8221; box into either the waterfall or agile model cannot really reflect the reality of the software lifecycle. So let&#8217;s draw a picture that&#8217;s closer to reality.</p>
<p><a href="http://blog.spritecloud.com/wp-content/uploads/2011/06/complete.png"><img src="http://blog.spritecloud.com/wp-content/uploads/2011/06/complete-300x164.png" alt="Software Lifecycle" title="Software Lifecycle" width="300" height="164" class="aligncenter size-medium wp-image-436" /></a></p>
<p>That looks a bit more daunting, doesn&#8217;t it? It should, because it gives up on the whole &#8220;stages&#8221; thing and breaks down the lifecycle into roles and the things these roles produce (lined arrows). Dotted arrows describe which artefacts serve as input into which other artefacts.</p>
<p>Once we started describing these roles and their interactions within the lifecycle to customers, things tended to become a lot clearer for them &#8212; they started seeing how some form of test planning needs to happen even before development starts properly.</p>
<p>But surprisingly, things became clearer to us, too. You see, the green blobs in the image cover spriteCloud&#8217;s core competencies. We&#8217;re a QA company, sure&#8230; but by being able to explain and conduct processes and best practices, we cover the release manager and (to an extent) lead developer roles as well, whether we plan to do so or not.</p>
<p>Put into numbers, we provide expertise for four out of eight distinct roles (50%) and produce six out of ten artefacts (60%). That&#8217;s over half of the stuff that happens in software development!</p>
<p>If we tried to push it a little, we could go even further: we all have, to a lesser or greater degree, software development experience. Writing test code is not at all the same as writing functional code, but it&#8217;s more experience than many newbie developers sport. We all have, to a lesser or greater degree, operations experience. Setting up test environments does that to you.</p>
<p>By contrast, many young companies out there have great product managers, UX designers and developers, but not much of the green glue that holds them together. No wonder do we often start talking about things other than testing!</p>
<p>There&#8217;s only one sensible conclusion from all this: we&#8217;ve decided that we&#8217;re &#8220;officially&#8221; shifting our company focus away from pure testing services, and now offer consultancy along the whole software lifecycle.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.spritecloud.com/2011/06/software-lifecycle-consultancy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presentation on Cucumber and Webdriver with spriteCloud&#8217;s Portal Framework</title>
		<link>http://blog.spritecloud.com/2011/06/presentation-on-cucumber-and-webdriver-with-spriteclouds-portal-framework/</link>
		<comments>http://blog.spritecloud.com/2011/06/presentation-on-cucumber-and-webdriver-with-spriteclouds-portal-framework/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 09:48:19 +0000</pubDate>
		<dc:creator>barzilay</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.spritecloud.com/?p=423</guid>
		<description><![CDATA[Presentation on the history of spriteCloud and the advantages of our Test Automation Services]]></description>
			<content:encoded><![CDATA[<div class="prezi-player">
<p><!-- .prezi-player { width: 600px; } .prezi-player-links { text-align: center; } --></p>
<p><object id="prezi_slaveizcxj0z" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="400" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="name" value="prezi_slaveizcxj0z" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="prezi_id=slaveizcxj0z&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no&amp;autohide_ctrls=0" /><param name="src" value="http://prezi.com/bin/preziloader.swf" /><embed id="prezi_slaveizcxj0z" type="application/x-shockwave-flash" width="600" height="400" src="http://prezi.com/bin/preziloader.swf" flashvars="prezi_id=slaveizcxj0z&amp;lock_to_path=0&amp;color=ffffff&amp;autoplay=no&amp;autohide_ctrls=0" bgcolor="#ffffff" allowscriptaccess="always" allowfullscreen="true" name="prezi_slaveizcxj0z"></embed></object></p>
<div class="prezi-player-links">
<p><a title="Presentation on the history of spriteCloud and the advantages of our Test Automation Services" href="http://prezi.com/slaveizcxj0z/roc-presentation-test-automation/">Presentation on the history of spriteCloud and the advantages of our Test Automation Services</a></p>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.spritecloud.com/2011/06/presentation-on-cucumber-and-webdriver-with-spriteclouds-portal-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

