<?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>blogstuff &#187; Automation</title>
	<atom:link href="http://www.testuff.com/blog/category/automation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.testuff.com/blog</link>
	<description>blogging the world of testing stuff</description>
	<lastBuildDate>Wed, 14 Jul 2010 12:46:09 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Selenium &#8211; Please do the dishes!</title>
		<link>http://www.testuff.com/blog/2010/04/selenium-please-do-the-dishes/</link>
		<comments>http://www.testuff.com/blog/2010/04/selenium-please-do-the-dishes/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 11:25:43 +0000</pubDate>
		<dc:creator>Yoav Aner</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.testuff.com/blog/?p=457</guid>
		<description><![CDATA[In the testing community, lots of companies use many different automation tools. It saves a lot of trouble going through repetitive tasks that the computer is quite capable of doing by itself. At Testuff, we don&#8217;t try to compete with those tools. They&#8217;ve been around for a while, they do a pretty good job, and [...]]]></description>
			<content:encoded><![CDATA[<p>In the testing community, lots of companies use many different automation tools. It saves a lot of trouble going through repetitive tasks that the computer is quite capable of doing by itself. At Testuff, we don&#8217;t try to compete with those tools. They&#8217;ve been around for a while, they do a pretty good job, and trying to beat them at their own game is not what we&#8217;re after. Nevertheless, we do our best to integrate with as many <a href="/help/automation-tools">automation tools</a> as we can (as we do with <a href="/help#tracker">bug trackers</a>). The only problem so far is that they can&#8217;t do your dishes (yet).</p>
<p><img src="http://farm3.static.flickr.com/2131/2503480337_d9083fee2b.jpg" alt="Dirty Dishes" /><br />
<br/><br />
I ended up playing with <a href="http://seleniumhq.org/">Selenium</a> recently, when we created a <a href="/help/automation-tools#selenium">Selenium Extension</a> which integrates with Testuff. It got me thinking: Wouldn&#8217;t it be useful (and cool) to use those test automation tools to help me keep up with stuff on my personal life as well? How about checking my bank balance, and sending an email with the latest transactions every day? What about the mobile or home phone bill? Track electricity usage? The possibilities are endless.</p>
<p>Many companies nowadays offer web-based access to your own information, from banks to utility companies, mobile phone operators and so on. However, logging in every time, just to check your balance can be tedious.</p>
<p>I&#8217;m sure many of our customers are more experienced Selenium users than we are, but I still wanted to give a few hints about making selenium a little more tedious-task-friendly. One of the main differences in running Selenium for testing and for automating those tasks, is that when you&#8217;re testing &#8211; if a step fails &#8211; the test fails and that&#8217;s good enough. All you need is to abort the script and report it back to Testuff via our <a href="/help/automation">Automation API</a>. However, for checking your online bank balance, you might want your selenium script to be a little, erm, more intelligent! It should keep trying a few times if a step fails. It should perhaps restart the whole process and try again. It could in fact ignore a few small issues and carry on. Maybe the web page didn&#8217;t load completely, but the link to the next page is available. Maybe if a link or text is not available, clicking on another link and then re-loading the page helps.</p>
<p>We&#8217;re using python primarily. It&#8217;s a simple and powerful language, very easy to read and write, and Selenium easily exports scripts to it. I&#8217;ll just list a couple of simple helper functions that I ended up using. They are fairly self-explanatory, but feel free to comment if you have a question.</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="kw1">def</span> wait_for_text<span class="br0">&#40;</span><span class="kw2">self</span>, text, wait=<span class="nu0">60</span><span class="br0">&#41;</span>:<br />
<span class="st0">&quot;&quot;&quot; &nbsp; &nbsp;Waits for text to appear on screen for a<br />
given number of seconds. It does not<br />
raise any exception if the text is<br />
not present, but rather returns False<br />
&quot;&quot;&quot;</span><br />
sel = <span class="kw2">self</span>.<span class="me1">selenium</span><br />
<span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>wait<span class="br0">&#41;</span>:<br />
<span class="kw1">try</span>:<br />
<span class="kw2">self</span>.<span class="me1">failUnless</span><span class="br0">&#40;</span>sel.<span class="me1">is_text_present</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="kw1">break</span><br />
<span class="kw1">except</span>: <span class="kw1">pass</span><br />
<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span><br />
<span class="kw1">else</span>: <span class="kw1">return</span> <span class="kw2">False</span></p>
<p><span class="kw1">def</span> wait_until_text_disappears<span class="br0">&#40;</span><span class="kw2">self</span>, text, wait=<span class="nu0">60</span><span class="br0">&#41;</span>:<br />
<span class="st0">&quot;&quot;&quot; &nbsp; &nbsp;Waits for text to disappear off screen for a given number<br />
of seconds. It does not raise any exception if the text<br />
is still present, but rather returns False.<br />
This is useful for some websites which put<br />
pages like &quot;processing your request&quot;<br />
&quot;&quot;&quot;</span><br />
sel = <span class="kw2">self</span>.<span class="me1">selenium</span><br />
<span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span>wait<span class="br0">&#41;</span>:<br />
<span class="kw1">try</span>:<br />
<span class="kw2">self</span>.<span class="me1">failIf</span><span class="br0">&#40;</span>sel.<span class="me1">is_text_present</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
<span class="kw1">break</span><br />
<span class="kw1">except</span>: <span class="kw1">pass</span><br />
<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span><br />
<span class="kw1">else</span>: <span class="kw1">return</span> <span class="kw2">False</span></p>
<p><span class="kw1">def</span> wait_for_page<span class="br0">&#40;</span><span class="kw2">self</span>, wait<span class="br0">&#41;</span>:<br />
<span class="st0">&quot;&quot;&quot; Replaces the wait_for_page_to_load built-in<br />
function, but catches any exception, so the<br />
script can carry on despite the page<br />
not being fully loaded.<br />
&quot;&quot;&quot;</span><br />
sel = <span class="kw2">self</span>.<span class="me1">selenium</span><br />
<span class="kw1">try</span>:<br />
sel.<span class="me1">wait_for_page_to_load</span><span class="br0">&#40;</span><span class="st0">&quot;%d&quot;</span> <span class="sy0">%</span> wait <span class="sy0">*</span> 1000<span class="br0">&#41;</span><br />
<span class="kw1">except</span> <span class="kw2">Exception</span>, e:<br />
<span class="kw1">print</span> <span class="st0">&quot;Exception caught: %s&quot;</span> <span class="sy0">%</span>e</div>
</div>
<p>A &#8216;typical&#8217; automation script will look something like (simplified slightly):</p>
<div class="codesnip-container" >
<div class="python codesnip" style="font-family:monospace;"><span class="kw1">def</span> get_mobile_balance<span class="br0">&#40;</span><span class="kw2">self</span><span class="br0">&#41;</span>:<br />
<span class="st0">&quot;&quot;&quot; retrieves the mobile phone and remaining Mb balance<br />
and emails it<br />
It retries several times, in case there&#8217;s a temporary issue with<br />
the website.<br />
&quot;&quot;&quot;</span><br />
sel = <span class="kw2">self</span>.<span class="me1">selenium</span><br />
retry_count = 0<br />
MAX_TRIES = 5<br />
<span class="kw1">while</span> retry_count <span class="sy0">&amp;</span>lt<span class="sy0">;</span>= MAX_TRIES: &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">try</span>: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; balance = <span class="kw2">self</span>._get_balance<span class="br0">&#40;</span>sel<span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">self</span>._email<span class="br0">&#40;</span><span class="st0">&quot;me@address.com&quot;</span>, <span class="st0">&quot;Mobile Phone Balance&quot;</span>, <span class="st0">&quot;Here&#8217;s your balance for today: %s&quot;</span> <span class="sy0">%</span> balance<span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">except</span>: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; retry_count = retry_count + 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> retry_count <span class="sy0">&amp;</span>gt<span class="sy0">;</span>= MAX_TRIES:<br />
<span class="kw1">raise</span><br />
<span class="kw3">time</span>.<span class="me1">sleep</span><span class="br0">&#40;</span>15<span class="br0">&#41;</span></p>
<p><span class="kw1">def</span> _get_balance<span class="br0">&#40;</span><span class="kw2">self</span>, sel<span class="br0">&#41;</span>:<br />
sel.<span class="kw2">open</span><span class="br0">&#40;</span>sel.<span class="me1">browserURL</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;//div[@id='check_balance']/div[1]/div/a/h2&quot;</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;link=mobile phone&quot;</span><span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_page</span><span class="br0">&#40;</span>30<span class="br0">&#41;</span><br />
sel.<span class="kw2">type</span><span class="br0">&#40;</span><span class="st0">&quot;txtMobileNo&quot;</span>, <span class="st0">&quot;12345678&quot;</span><span class="br0">&#41;</span><br />
sel.<span class="kw2">type</span><span class="br0">&#40;</span><span class="st0">&quot;txtPassword&quot;</span>, <span class="st0">&quot;my_password&quot;</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;continue&quot;</span><span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_page</span><span class="br0">&#40;</span>30<span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_text</span><span class="br0">&#40;</span><span class="st0">&quot;Account is ready.&quot;</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;//input[@type='image']&quot;</span><span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_text</span><span class="br0">&#40;</span><span class="st0">&quot;Your Package&quot;</span>, <span class="nu0">60</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;link=view your current usage&quot;</span><span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_page</span><span class="br0">&#40;</span>30<span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_until_text_disappears</span><span class="br0">&#40;</span><span class="st0">&quot;processing&#8230; please wait&quot;</span>, 60<span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_text</span><span class="br0">&#40;</span><span class="st0">&quot;view package balance&quot;</span>, <span class="nu0">60</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;link=view package balance&quot;</span><span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_page</span><span class="br0">&#40;</span>30<span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_until_text_disappears</span><span class="br0">&#40;</span><span class="st0">&quot;processing&#8230; please wait&quot;</span>, 60<span class="br0">&#41;</span><br />
<span class="kw2">self</span>.<span class="me1">wait_for_text</span><span class="br0">&#40;</span><span class="st0">&quot;minutes available&quot;</span>, <span class="nu0">60</span><span class="br0">&#41;</span><br />
remaining_minutes = sel.<span class="me1">get_text</span><span class="br0">&#40;</span><span class="st0">&quot;//div[1]/span[2]&quot;</span><span class="br0">&#41;</span><br />
remaining_mb = sel.<span class="me1">get_text</span><span class="br0">&#40;</span><span class="st0">&quot;//div[4]/div[1]/span[2]&quot;</span><span class="br0">&#41;</span><br />
sel.<span class="me1">click</span><span class="br0">&#40;</span><span class="st0">&quot;link=log out&quot;</span><span class="br0">&#41;</span><br />
<span class="kw1">return</span> <span class="st0">&quot;%s<span class="es0">\n</span>%s&quot;</span> <span class="sy0">%</span> <span class="br0">&#40;</span>remaining_minutes, remaining_mb<span class="br0">&#41;</span></p>
<p><span class="kw1">def</span> _email<span class="br0">&#40;</span><span class="kw2">self</span>, email_address, subject, bodyText<span class="br0">&#41;</span>:<br />
&#8230;</div>
</div>
<p>Feel free to share any other cool ideas for using Selenium, or any other automation tool.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testuff.com/blog/2010/04/selenium-please-do-the-dishes/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The humans are dead, part 4 and final</title>
		<link>http://www.testuff.com/blog/2008/09/the-humans-are-dead-part-4-and-final/</link>
		<comments>http://www.testuff.com/blog/2008/09/the-humans-are-dead-part-4-and-final/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 15:32:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.testuff.com/blog/?p=107</guid>
		<description><![CDATA[Even though I am ultra busy testing Testuff 1.0, that&#8217;s coming out very very soon, I decided to take some time out and to conclude this crazy series of posts.
We&#8217;ve seen why automated testing rocks. As I&#8217;ve stated before, it&#8217;s more accurate, work faster, harder, for a longer period of time, for less money, with [...]]]></description>
			<content:encoded><![CDATA[<p>Even though I am ultra busy testing Testuff 1.0, that&#8217;s coming out very very soon, I decided to take some time out and to conclude this crazy series of posts.</p>
<p>We&#8217;ve seen <a href="http://www.testuff.com/blog/2008/08/the-humans-are-dead-part-2/">why automated testing rocks</a>. As I&#8217;ve stated before, it&#8217;s more accurate, work faster, harder, for a longer period of time, for less money, with no complaints and no quitting. We&#8217;ve also seen <a href="http://www.testuff.com/blog/2008/08/the-humans-are-dead-part-3/">why human manual testing rocks</a>. Humans are self maintaining, adaptive to the environment, creative, recognize objects better than machines, have built-in natural language processing, and also excellent learning abilities.</p>
<p>So what is the summary of it all? Fire all humans and replace them with automated testing machines? Throw all automation out the window and hire some testers for cheap from India? No!</p>
<p>The world doesn&#8217;t actually divide into black and white, but we quite often mistakenly think it does (a bug in our brains? The misguiding of Western society? Both? None? who knows). We don&#8217;t have to be crazy like that Israeli company who fired all testers in favor of automation, though who knows, maybe for their needs of completely repetitive well-known testing it was the right move. We also don&#8217;t have to reject any kind of automated testing at our company and stick to flesh and blood testers only. The answer is that we can enjoy both worlds, the shades of gray in between the black and the white.</p>
<p><img class="alignnone" src="http://i217.photobucket.com/albums/cc253/toontownjuggalo/Brain%20Stew/Robocop.jpg" alt="" width="400" height="284" /></p>
<p><strong>Be a <a href="http://en.wikipedia.org/wiki/Cyborg" target="_blank">cyborg</a>.</strong> Part man, part machine, it has all the advantages that humans do, but some off the hook technological enhancements that allow it to have beyond human capabilities. To take the analogy back, this means that we enjoy the best of both worlds &#8211; the automated testing world and the manual testing world and use them both to our advantage:</p>
<ol>
<li><strong>Automate boring, repetitive, high accuracy tests.</strong> Humans don&#8217;t like to do them and don&#8217;t do them as well as the automation does. By automating these kind of tests your QA will be happier since you will lift the annoying load off of their shoulders and you will get better testing results via the automation.</li>
<li><strong>Give humans creative testing tasks.</strong> As a complimentary item to the previous one, challenge the human testers, use their natural learning skills, adaptivity and creativity to find bugs way outside the scripted tests. Don&#8217;t let them spend their time only on pre-scripted scenarios. Let them do some <a href="http://www.satisfice.com/articles/what_is_et.shtml" target="_blank">Exploratory Testing</a>, new test designs, maybe even learn some programing so that they could write some useful utilities.</li>
<li><strong>Work the automation overtime, not the humans.</strong> Having people do overtime for too long under pressure increases work stress and basically drains all the motivational juice out of them. This is why high-pressure testing, such as sanity, might be better put on the automation. However, watch out not to pressure the humans who execute the automation!</li>
<li><strong>Use low maintenance automation.</strong> It&#8217;s a real pain in the ass when the automation requires too much maintenance in terms of time and effort. Don&#8217;t be afraid to go back to the drawing board and design your automated testing from scratch. Check why it takes such high maintenance and either solve those issues or move tests to manual execution if necessary.</li>
<li><strong>Humans test some things better than automation.</strong> Given the current technology, computers don&#8217;t know how to do many things as well as the humans. In the testing world this is especially true about GUI. Sure, there are solutions for web testing and functional testing for simple GUIs, but if your app is more complicated than the average software Joe you will quickly see that the automation doesn&#8217;t do. If these automated tasks suck for your testers, maybe even consider off-shoring them to some Indian testers who wouldn&#8217;t mind doing some repetitive tasks for good cash.</li>
</ol>
<p>If you still don&#8217;t believe me that you should become a cyborg, watch the trailer for <em>Robocop </em>and see how cyborgs improve law enforcement in crime filled future Detroit. No man and no machine would do to clean Detriot of its thugs, but only a man machine combination that is Robocop:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="src" value="http://www.youtube.com/v/clqK5OC3BWE&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/clqK5OC3BWE&amp;hl=en&amp;fs=1" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.testuff.com/blog/2008/09/the-humans-are-dead-part-4-and-final/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The humans are dead, part 3</title>
		<link>http://www.testuff.com/blog/2008/08/the-humans-are-dead-part-3/</link>
		<comments>http://www.testuff.com/blog/2008/08/the-humans-are-dead-part-3/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 09:53:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.testuff.com/blog/?p=78</guid>
		<description><![CDATA[The machines have made their move in the previous episode. To sum it up, they are more accurate, work faster, harder, for a longer period of time, for less money, with no complaints and no quitting. Sounds just about perfect doesn&#8217;t it?
But wait! It is time for the humans to fight back, to show why [...]]]></description>
			<content:encoded><![CDATA[<p>The machines have made their move <a href="http://www.testuff.com/blog/2008/08/the-humans-are-dead-part-2/">in the previous episode</a>. To sum it up, they are more accurate, work faster, harder, for a longer period of time, for less money, with no complaints and no quitting. Sounds just about perfect doesn&#8217;t it?</p>
<p>But wait! It is time for the humans to fight back, to show why in certain aspects their manual testing is way better than any testing automation can be. Let&#8217;s see what they got going for them that the silicon based life forms cannot beat.</p>
<p><img class="alignnone" src="http://i32.tinypic.com/2s78301.jpg" alt="" width="320" height="239" /></p>
<p><strong>Human Testing Pros</strong></p>
<ol>
<li><strong>Self maintenance. </strong>Humans are (usually) capable of taking care of themselves. If there is some sort of system malfunction like an illness, hunger, sadness, or whatever, humans can at least attempt to solve it by themselves. The automation cannot do so. It needs someone to maintain it. If some sort of malfunction happens, human intervention must take place. Be it a network cable gone loose, a fallen web service, an air-con malfunction, the machine cannot go about taking care of itself.</li>
<li><strong>Adaptivity.</strong> Testing automation lacks any kind of intelligence. If, for example, a connection failed to open, it won&#8217;t go about investigating what happened. A whole series of tests could fail because a network cable went loose, thus rendering hours of testing automation useless. A human on the other hand can use her wits to investigate what happened, find that loose cable, and go on with the proper testing. Also, if some change in the AUT was made the automation will probably fail. The human on the other hand will easily determine if the change is acceptable and act accordingly.</li>
<li><strong>Creativity.</strong> Whereas the computer follows the scripted scenario religiously, people look in between the scripted lines and outside of the test altogether. They will find bugs even in things they weren&#8217;t supposed to test and be able to come up with new tests for the future. Of course, let&#8217;s remember it was the humans who programmed the testing automation to begin with, it isn&#8217;t able to design tests on its own.</li>
<li><strong>Object recognition.</strong> Even a five year old could easily beat any computer running any algorithm when it comes to recognizing objects. Thus, and despite so many efforts made, testing automation has problems testing GUIs. A human on the other hand doesn&#8217;t really care how a UI was implemented. She can easily recognize buttons, windows, scrollbars, or anything else and get testing with it. She can see if the colors are OK, if images are displayed properly, videos are streamed in good quality, etc., things that the testing automation has big trouble doing.</li>
<li><strong>Natural language skills.</strong> Humans may give and receive abstract instructions in natural language and act. A human tester receiving an instruction such as &#8220;test the site also works with IE7&#8243; can easily go about doing so. The testing automation must be programmed with exact instructions in a programming language. It takes much more time to give instructions to machines and involves testing and debugging, once again by humans, to make sure the automation &#8220;understands&#8221; the instructions properly. Not to mention that automation cannot test something like a help file, that it contains good help with correct grammar. It just doesn&#8217;t understand the human talk, not out loud, and not even if we hand it in a text file.</li>
<li><strong>Learning.</strong> Humans can learn new features, new technologies, different ways of doing things, and append new knowledge to their hard disks. Testing automation cannot do so. It needs the programmer to step in and give it exact instructions what to do. Otherwise it will never expand its knowledge base and just keep doing the same things that it knows forever, not doing anything new at all.</li>
</ol>
<p>Once again, feel free to respond if there is something missing in the human onslaught against the testing automation. Do join me once again for a summary of the fight between human and automated QA!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testuff.com/blog/2008/08/the-humans-are-dead-part-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The humans are dead, part 2</title>
		<link>http://www.testuff.com/blog/2008/08/the-humans-are-dead-part-2/</link>
		<comments>http://www.testuff.com/blog/2008/08/the-humans-are-dead-part-2/#comments</comments>
		<pubDate>Wed, 20 Aug 2008 22:34:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.testuff.com/blog/?p=58</guid>
		<description><![CDATA[Continuing where the previous introductory post left off, we continue to discuss the epic battle between the ruthless testing automation machines and the brave manual testing of the human QA army. To make it fair on both sides and let them wage their battles, let&#8217;s see what makes each of them so great and vice [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing where the <a href="http://www.testuff.com/blog/2008/08/the-humans-are-dead/">previous introductory post</a> left off, we continue to discuss the epic battle between the ruthless testing automation machines and the brave manual testing of the human QA army. To make it fair on both sides and let them wage their battles, let&#8217;s see what makes each of them so great and vice versa not that great. Automation goes first.</p>
<p><img class="alignnone" title="The Machines" src="http://streetknowledge.files.wordpress.com/2007/12/terminator4.jpg" alt="" width="400" height="300" /></p>
<p><strong>Testing Automation Pros</strong></p>
<ol>
<li><strong>Accuracy and rigorousness.</strong> Testing automation is extremely accurate and rigorous. Be it counting (try to count to 20,000 out loud and see how far you get without making mistakes or getting tired), mathematical calculations, even the computer&#8217;s memory seems much more accurate than our human memory. While a human may skip a detail here and there in a manual test, the automation doesn&#8217;t accept any funny business. An FTP connection wasn&#8217;t established? Fail the test! The exact test message didn&#8217;t appear? Fail the test! Of course as long as the test was written properly, automation is always on full concentration, never gets lazy, and doesn&#8217;t miss a thing.<strong><br />
</strong></li>
<li><strong>Speed</strong>. The automation performs tests faster than a human. It just runs through the tests without caring about any interrupted emails or Facebook messages, easily shuffling between whatever tasks it has to do with a flick of the command line.</li>
<li><strong>Testing 24/7.</strong> Theoretically at least, putting aside malfunctions. OK, so maybe it&#8217;s more like 20/6, but still, automation can work many more hours than humans can and at times where most humans don&#8217;t like to work, like nights, weekends and holidays. It doesn&#8217;t need any rest, no lunch breaks since it gets a constant supply of delicious electrons right from the power plug, no paid vacations. It just works as long as it doesn&#8217;t break down.</li>
<li><strong>Cheap cheap.</strong> An automation and maybe one person to operate and maintain it is cheaper than paying for a small team of testers who would have otherwise had to do the get the same testing done manually. Not much doubt about it. Spend a few thousand bucks for some machines, feed it aircon and electricity, get it maintained by a pro, and that&#8217;s it really. So you need more machines and more people to operate the automation? That&#8217;s OK, how many testers would you have needed otherwise and how much would they have costed? A whole lot more.</li>
<li><strong>No complaints.</strong> It doesn&#8217;t matter how dirty, repetative, boring, or time consuming the testing is. Machines &#8216;gladly&#8217; go at it (even though they don&#8217;t seem to have emotions), without any need for challenges or promotions or conditions or a raise.</li>
<li><strong>No quitting.</strong> Your star tester may leave the team in favor of a better paying job at another company. Automation won&#8217;t quit on you, at least not by choice, at least not as far as we know. While people come and go, the automation is there to stay and continue doing its job loyally. It may malfunction, then again so do people when they get ill, angry, fall in love, or whatever obstructs them from doing their job.</li>
</ol>
<p>Did I miss something? Disagree with one of the points? Make sure to comment about it, or forever hold your silence. Do join me next week when the humans strike back after the machines&#8217; emotionless attack as we take a look where manual testing of human QA exceeds automated QA.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testuff.com/blog/2008/08/the-humans-are-dead-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The humans are dead</title>
		<link>http://www.testuff.com/blog/2008/08/the-humans-are-dead/</link>
		<comments>http://www.testuff.com/blog/2008/08/the-humans-are-dead/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 14:15:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[QA]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.testuff.com/blog/?p=39</guid>
		<description><![CDATA[One of the songs by New Zealand&#8217;s Flight of the Chonchords, which is by the way an amazing show that music and Borat fans must watch, is about how in the distant future, the year 2000, the humans are dead. Robots used poisonous gasses to poison our a$$es. Robotic beings rule the world and the [...]]]></description>
			<content:encoded><![CDATA[<p>One of the songs by New Zealand&#8217;s <a href="http://en.wikipedia.org/wiki/Flight_of_the_Conchords" target="_blank">Flight of the Chonchords</a>, which is by the way an amazing show that music and Borat fans must watch, is about how in the distant future, the year 2000, the humans are dead. Robots used poisonous gasses to poison our a$$es. Robotic beings rule the world and the only dances left are <em>the robot</em> and the <em>roboboogie</em>:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="src" value="http://www.youtube.com/v/B1BdQcJ2ZYY&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/B1BdQcJ2ZYY&amp;hl=en&amp;fs=1" allowfullscreen="true"></embed></object></p>
<p>Humor aside, some winds in the QA world are blowing this way, bringing forward the machine uprising, or <a href="http://en.wikipedia.org/wiki/Terminator_2:_Judgment_Day" target="_blank">Judgement Day</a> if you will. I&#8217;ve recently been informed that a major company in my country fired an entire team of software testers because the automation can do their job!</p>
<p>I can imagine their linear line of thought. Testing automation is cheap. We don&#8217;t need to weed out thousands of dollars for monkey manual tester salaries. Instead we would only need to pay for the electricity the machine and the aircon take up, plus one person to operate it. It does the same job, maybe even better since the machine can run tests 24/7. The results could even be more accurate since the automation doesn&#8217;t miss a thing.</p>
<p>So what do you think about such a line of thought? There is an ongoing hype pro automation, that automation is here to replace <em>all </em>the manual testing that we do. Whatever repetitive action a person does when testing manually, the automation can do. Do you agree?</p>
<p>Having had some automation running and programming experience myself, I&#8217;m going to dive into this issue in a short series of posts. I hope you won&#8217;t be shy, and leave some good comments what you think about the whole man vs. machine issue in regards to testing, and in general if you wish as well. Stay tuned for more!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testuff.com/blog/2008/08/the-humans-are-dead/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
