<?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>testjutsu &#187; Everything</title>
	<atom:link href="http://www.testjutsu.com/category/all-posts/feed" rel="self" type="application/rss+xml" />
	<link>http://www.testjutsu.com</link>
	<description></description>
	<lastBuildDate>Thu, 15 Jul 2010 23:07:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>One for the puzzle nerds</title>
		<link>http://www.testjutsu.com/one-for-the-puzzle-nerds</link>
		<comments>http://www.testjutsu.com/one-for-the-puzzle-nerds#comments</comments>
		<pubDate>Wed, 23 Jun 2010 10:20:29 +0000</pubDate>
		<dc:creator>Ben Kelly</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Software Testing]]></category>

		<guid isPermaLink="false">http://www.testjutsu.com/?p=217</guid>
		<description><![CDATA[In the spirit of recent puzzles/challenges, I thought I might throw in one of my own. In high school, my class was given an exercise to come up with a coded message that the rest of the class would have to work out the cipher to.
I didn&#8217;t take it that seriously at the time and [...]]]></description>
			<content:encoded><![CDATA[<p>In the spirit of recent <a title="Selena Delesie - the tombstone puzzle" href="http://selenadelesie.com/2010/06/20/the-tombstone-puzzle/">puzzles</a>/<a title="Lanette Creamer - Beam Me Up Challenge" href="http://blog.testyredhead.com/2010/05/18/beam-me-uphypothetical-question.aspx">challenges</a>, I thought I might throw in one of my own. In high school, my class was given an exercise to come up with a coded message that the rest of the class would have to work out the cipher to.</p>
<p>I didn&#8217;t take it that seriously at the time and put in some sort of lame effort at home that afforded me the most time in front of the Commodore-64 instead. Most other kids did the same. Clearly the teacher had been hoping that someone in the class was a secret genius and would put together something brilliant. His disappointment when this did not occur was palpable.</p>
<p>I got thinking afterward that it was a wasted opportunity. I quite like puzzles, I like being creative, but I&#8217;d never put the two together. I spent a little bit of time coming up with something that might have been worthy of the assignment. I never did anything with it, or showed it to anyone, but I was reasonably sure that no one in that class at least would be able to figure it out. I should have put my money where my mouth was then. I might have been able to turn a profit betting people they couldn&#8217;t solve it in a given time limit. Ah well, hindsight is 20/20 as they say.</p>
<p>Instead, I present my code and the message it contains and invite you to work out the key. <strong>If you do figure it out, please don&#8217;t post the solution</strong>, but  I&#8217;d be really interested to hear about how you went about attacking the  problem, so by all means leave a comment.</p>
<p style="padding-left: 30px;">The message: the quick brown fox jumps over the lazy dog</p>
<p><strong>IMPORTANT EDIT:</strong> In a moment of paranoia I double-checked my key and noted that there is a small change to the decoded message. In the coded text, <strong>&#8216;jumps&#8217;</strong> is actually <strong>&#8216;jumped&#8217;</strong>. To those of you who have started, I apologise profusely. This means that there is an extra letter to the message than you thought you were dealing with, and rather than an &#8217;s&#8217;, you have a &#8216;d&#8217; and an &#8216;e&#8217;.</p>
<p>The revised decoded message is:</p>
<p style="padding-left: 30px;">The message: the quick brown fox jumped over the lazy dog</p>
<p style="padding-left: 30px;">The coded message:<span style="font-family: courier;"><br />
n g o c w u o y j &nbsp;  r<br />
&nbsp; f l l l q m v &nbsp; e k<br />
&nbsp; o i y k b v &nbsp;  r x a<br />
&nbsp; k s e a t &nbsp;  d i b o<br />
&nbsp; v h a v &nbsp;  e u i p l</span></p>
<p><strong>edit:</strong> James Bach has rightly pointed out that I could have worded my challenge a little more clearly. </p>
<p style="padding-left: 30px;">There are an infinite number of keys that can associate your output with your input. For instance, the key might be simply to look at the first letter in the top left, and &#8220;n&#8221; means &#8220;quick brown fox&#8230;&#8221;</p>
<p>My intention is that people would attack this problem as though they did not know what the message was in an attempt to resolve the letters presented into the answer provided. I had a particular key in mind when I put it together, so the letters do resolve into the message given.</p>
<p>Enjoy.</p>
<p><strong>Update</strong><br />
Okay, so a few people have asked for hints.<br />
Here&#8217;s the deal &#8211; I&#8217;ll post a few hints, but I&#8217;m curious to know what you&#8217;ve tried and what you thought. I&#8217;ve posted one hint below. I will post more, but I&#8217;d like to know &#8211; How did you approach the problem? What strategies did you employ? What effect did the hint(s) have?</p>
<p>Hint 1</p>
<table bgcolor="black">
<tr>
<td>
<font color="black">There are red herrings</font></span>
</td>
</tr>
</table>
<p>Hint 2</p>
<table bgcolor="black">
<tr>
<td>
<font color="black">There is a hint in the layout</font></span>
</td>
</tr>
</table>
<p>Hint 3</p>
<table bgcolor="black">
<tr>
<td>
<font color="black">Some letters are overloaded (have more than 1 meaning)</font></span>
</td>
</tr>
</table>
<p>Congratulations to Rushmila Islam, who has at least worked out the message component, if not the complete cipher (which is trivial once the message is in-hand). Here&#8217;s another pangram (one with all the letters this time).</p>
<p style="padding-left: 30px;">The coded message:<span style="font-family: courier;"><br />
k e i f v a l p q u w<br />
&nbsp;  b m a g n z i e c e<br />
<br />
&nbsp;  m g d r w o o t a h<br />
&nbsp;  y j a w u x a g e s<br />
</span><br />
I kinda wish I&#8217;d put this one up first now. It looks trickier <img src='http://www.testjutsu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Rushmila (or anyone else) &#8211; care to post the decoded message?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testjutsu.com/one-for-the-puzzle-nerds/feed</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Adieu to QTP. Now for a closer look at Selenium</title>
		<link>http://www.testjutsu.com/adieu-to-qtp-now-for-a-closer-look-at-selenium</link>
		<comments>http://www.testjutsu.com/adieu-to-qtp-now-for-a-closer-look-at-selenium#comments</comments>
		<pubDate>Mon, 21 Jun 2010 15:40:06 +0000</pubDate>
		<dc:creator>Ben Kelly</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[adam goucher]]></category>
		<category><![CDATA[automated testing]]></category>
		<category><![CDATA[automation framework]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[junit]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[Software Testing]]></category>

		<guid isPermaLink="false">http://www.testjutsu.com/?p=214</guid>
		<description><![CDATA[To borrow from Groucho Marx &#8211; QTP, I&#8217;ve had a wonderful time, but  this wasn&#8217;t it.
So thankfully I&#8217;ve been able to step away from QTP for the moment. Given that QTP doesn&#8217;t recognise Firefox so well after v3.6, and since we use a firefox plugin for most of our mobile testing (FireMobileSimulator), yours truly gets [...]]]></description>
			<content:encoded><![CDATA[<p>To borrow from Groucho Marx &#8211; QTP, I&#8217;ve had a wonderful time, but  this wasn&#8217;t it.</p>
<p>So thankfully I&#8217;ve been able to step away from QTP for the moment. Given that QTP doesn&#8217;t recognise Firefox so well after v3.6, and since we use a firefox plugin for most of our mobile testing (FireMobileSimulator), yours truly gets to switch to Selenium instead. I&#8217;m thankful for having had the opportunity to work on QTP, mostly so I have a better understanding of its limitations and shortcomings. I can argue more coherently against what seems to be in most cases, a ridiculous waste of money.</p>
<p>I view QTP a bit like one of those unfortunate bears in a <a title="WSPA - Bear farming" href="http://www.wspa.org.uk/wspaswork/bears/bearfarming/default.aspx">Chinese bile farm</a>. You can see how at birth it had the potential to be something majestic and powerful, but instead it languishes in a cage, irreparably twisted and deformed by years of abuse by the ignorant.</p>
<p>In comparison, Selenium while not without challenges of its own, has been by and large a real joy to use. For starters, having any number of fully fledged languages to work in is almost unbelievable after having toiled in VBScript land for far too long. In fact, the first problem I faced was which language do I go with?</p>
<p>I ended up choosing Java and JUnit, mostly because it&#8217;s what the current dev team codes with, and I simply cannot be arsed copping the flak I would get from management for introducing another language into the picture (as wonderful as jruby and jython are, I&#8217;m sure).</p>
<p>I didn&#8217;t realise quite how much thinking in VBS had stunted my thinking in other languages. I do a bit of coding in my spare time, but as far as automation coding goes, it took me a good few days to get comfortable again remembering the power that a real language gives you. I was all set to start importing test data from excel when a timely tweet (and <a title="Adam Goucher - advice for using selenium in Java" href="http://element34.ca/blog/if-you-really-must-write-your-selenium-framework-in-java">subsequent blog post</a>) from Adam Goucher reminded me that Java has these nifty things called Properties that you can import. (This is why tools like twitter should be allowed in the workplace btw &#8211; okay my RSS reader would have picked it up, but not before I&#8217;d wasted a lot of time).</p>
<p>It&#8217;s been a bit over 3 years since I last looked at Selenium. It doesn&#8217;t &#8216;feel&#8217; all that different, but it does seem a lot easier to work with than I remember it being. Within a couple of days I&#8217;d whipped together a script to cut down some checks that took 4 hours manually to a little under 2 minutes. W00t.</p>
<p>I added loggingSelenium to my test setup and now have some pretty colours that light up for people who are impressed by that sort of thing. I&#8217;m now in the process of putting together a few more tests and a framework that will support them and their inevitable expansion.</p>
<p>There are a bunch of setup how-to&#8217;s out there, so I won&#8217;t be doing that, but I will drag together some of the more useful links that I&#8217;ve found. Stay tuned <img src='http://www.testjutsu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.testjutsu.com/adieu-to-qtp-now-for-a-closer-look-at-selenium/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Adventures in GUI Automation &#8211; Basic Hierarchy</title>
		<link>http://www.testjutsu.com/adventures-in-gui-automation-basic-hierarchy</link>
		<comments>http://www.testjutsu.com/adventures-in-gui-automation-basic-hierarchy#comments</comments>
		<pubDate>Thu, 06 May 2010 10:24:07 +0000</pubDate>
		<dc:creator>Ben Kelly</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[automated testing]]></category>
		<category><![CDATA[automation framework]]></category>
		<category><![CDATA[gui automation]]></category>
		<category><![CDATA[gui testing]]></category>
		<category><![CDATA[logical functional model]]></category>
		<category><![CDATA[michael hunter]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[test automation]]></category>

		<guid isPermaLink="false">http://www.testjutsu.com/?p=209</guid>
		<description><![CDATA[On the suspicion that my last post amounted to a bunch of word salad for a few, let me see if I can add some clarity by describing the basic hierarchy I&#8217;m using for my framework.
At the top level, I have a suite control script that looks like this:
doSetup   &#8216;Calls to set up data and [...]]]></description>
			<content:encoded><![CDATA[<p>On the suspicion that my last post amounted to a bunch of word salad for a few, let me see if I can add some clarity by describing the basic hierarchy I&#8217;m using for my framework.</p>
<p>At the top level, I have a suite control script that looks like this:</p>
<p style="padding-left: 30px;">doSetup   &#8216;Calls to set up data and environmental variables and such like</p>
<p style="padding-left: 30px;">Call Script1<br />
Call Script2<br />
&#8230;<br />
Call Script n</p>
<p>Each script that is called is some sort of major transaction that an end-user would recognise.</p>
<p>If you missed the update I made to my last post, I&#8217;ve moved a number of function libraries to classes to lessen the amount of coupling required between the ValidationManager and the scripts. There is a small overhead involved in that the relevant class has to be instantiated at the start of the script. For debugging purposes, I have also added a commented-out debug section that calls the setup function that the suite control script does. Each script looks a bit like this:</p>
<p style="padding-left: 30px;">&#8216;#begin debug<br />
&#8216;doSetup    &#8216;uncomment this if debugging this script<br />
&#8216;#end debug</p>
<p style="padding-left: 30px;">Transaction = loadTransaction    &#8216;This is the instantiation of the class that holds the Transaction&#8217;s functions</p>
<p style="padding-left: 30px;">Transaction.function1<br />
Transaction.function2<br />
SharedFunction<br />
Transaction.function3<br />
&#8230;<br />
Transaction.function n</p>
<p>For functions that are shared across multiple transactions, I have left them as a standard function library. On the plus side, the Transaction namespace aids clarity and lets you know where your functions live. On the downside, you can no longer access them by using the right-click-&gt;go to function definition option. No biggie imho.</p>
<p>The transaction classes aren&#8217;t that much different from your standard function library other than the fact that they&#8217;re wrapped in a class definition and there&#8217;s a bit of setup stuff at the start.</p>
<p style="padding-left: 30px;">Class Transaction</p>
<p style="padding-left: 30px;">Dim VerificationManager</p>
<p style="padding-left: 30px;">Private Sub Class_Initialize()<br />
VerificationManager = loadVerificationManager   &#8216;Here&#8217;s where the verification manager is instantiated<br />
EndSub</p>
<p style="padding-left: 30px;">Public Sub Function1<br />
do.something<br />
VerificationManager.CalculateExpectedState(&#8221;someAction&#8221;)<br />
do.someAction<br />
VerificationManager.Verify(&#8221;someAction&#8221;)<br />
do.somethingElse</p>
<p style="padding-left: 30px;">End Sub</p>
<p style="padding-left: 30px;">&#8230;</p>
<p style="padding-left: 30px;">End Class</p>
<p>I&#8217;ve still not gotten the all-clear to post the verification manager code, but as mentioned previously, it is a class also. There are 4 methods; 1 for setup and 3 relating to verification.</p>
<p>CalculateExpectedState calls a file called &#8220;someAction&#8221;. someAction calls a setup routine that creates a new dataSheet, also called someAction and populates it with expected data.<br />
Back in the class method, the action takes place, at which point we return to the verification manager when Verify is called.</p>
<p>Verify calls the someAction file which calls a second routine that gathers data from the app and does any calculations required and stores the results in the someAction dataSheet. Verify then calls a diff function that compares the expected and actual results and reports. Finally, verify calls UpdateMasterData, which compares the actual data with the master data sheet and replaces anything that was changed.</p>
<p>At this point, there is a new data sheet created for each different call to the verification manager. This has the potential to get out of hand as the number of verification points increases. I&#8217;m thinking of using a single sheet and dumping the results to a file at the end of each verification. I&#8217;ll see what else occurs to me as I go.</p>
<p>I promised to talk a bit about what I&#8217;m doing with data. I still need to cover that. I&#8217;ve been having fun trying to define heuristics to govern where the data should drive the scripts and where I should handle variance programatically. I think I have something that works. We shall see.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testjutsu.com/adventures-in-gui-automation-basic-hierarchy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adventures in GUI Automation &#8211; Verification Layer</title>
		<link>http://www.testjutsu.com/adventures-in-gui-automation-verification-layer</link>
		<comments>http://www.testjutsu.com/adventures-in-gui-automation-verification-layer#comments</comments>
		<pubDate>Wed, 28 Apr 2010 09:14:44 +0000</pubDate>
		<dc:creator>Ben Kelly</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[automated testing]]></category>
		<category><![CDATA[automation framework]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[gui automation]]></category>
		<category><![CDATA[gui testing]]></category>
		<category><![CDATA[logical functional model]]></category>
		<category><![CDATA[QTP]]></category>

		<guid isPermaLink="false">http://www.testjutsu.com/?p=204</guid>
		<description><![CDATA[One of the things I really like about the Logical Functional Model is the concept of removing verification code from the execution code. Another is updating verification data on the fly to reduce the likelihood of false positives.
These concepts are especially appealing since QTP&#8217;s in-built verification method is not worth using. Verification points are script-specific. [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things I really like about the Logical Functional Model is the concept of removing verification code from the execution code. Another is updating verification data on the fly to reduce the likelihood of false positives.</p>
<p>These concepts are especially appealing since QTP&#8217;s in-built verification method is not worth using. Verification points are script-specific. You can&#8217;t update and re-use them multiple times within a script or share them across multiple scripts. Maintenance nightmare.</p>
<p>Instead, what I have done is to write a custom verification layer. Here&#8217;s how it works. At the start of my control script, I instantiate the VerificationManager, which is a class I have written to take care of verification code.</p>
<p>If a function that I am executing needs to do any verification, <span style="text-decoration: line-through;">I pass the class to it by reference </span>UPDATE: I&#8217;ve switched how I call this now. I&#8217;ve turned function libraries into classes. Each class instantiates the VerificationManager as part of its own setup and the functions can then call the VerificationManager without having to handle it as a parameter. There are several reasons for this &#8211; I&#8217;ll go into these in an upcoming post.</p>
<p>Within the function (now class method), there are 2 calls to the VerificationManager, one to set up the expected data and another to retrieve the actual data.</p>
<p>Where you call these depends on what setup you need to do beforehand. If you&#8217;re getting expected values from the application under test, you&#8217;ll want to do so before you execute the code you want to verify. If you&#8217;re grabbing your expected data from the data table, then you can do it just before you call the code to retrieve the actual data.</p>
<p>That probably looks like word salad on first read through. If you haven&#8217;t already, I strongly suggest you take a look at the verification chapter in Michael Hunter&#8217;s description of the LFM. It took me a couple of read-throughs to really get it, but once I did, I was impressed.</p>
<p>How does the VerificationManager work?<br />
It&#8217;s as generic as I can make it. It has 4 methods.</p>
<ul>
<li>CalculateExpectedState(someAction)</li>
<li>Verify(someAction)</li>
<li>Diff</li>
<li>UpdateMasterData</li>
</ul>
<p>CalculateExpectedData and Verify both make calls to files called StateGenerators. It is the role of the StateGenerators to hold the logic and fetch the data required to do the verification. In simple terms, they are function libraries that are loaded at runtime by the VerificationManager.</p>
<p>You&#8217;ll notice that the parameter for each of these methods is the same. They call the same StateGenerator and this parameter tells them what name to look for. The VerificationManager loads the StateGenerator specified and executes one of two functions &#8211; either a &#8217;setExpectedState&#8217; or &#8216;getActualState&#8217; function.</p>
<p>Each call to the verification manager will use a different name. There will be one StateGenerator for each call. The StateGenerators all have 2 functions, all of them identically named. What they contain differs based on what they need to verify. There might be a series of calls to the global data table to grab data that needs to be checked, or there could be logic to calculate an expected value from a set of other values.</p>
<p>The setExpectedState function creates a new data sheet to hold expected data. If any of this data comes from the GlobalDataTable, then the new data sheet has an identically named column. Likewise if there are any new columns that need to be added to the Global data table for future reference, then this happens here too.</p>
<p>Once the code to be verified has executed, the call to Verify happens. Verify grabs expected values from the application under test and adds them to the second line of the expected data column. It then calls Diff, which (as the name suggests), compares each value of row 1 with the values in row 2.</p>
<p>The diff method logs both successful comparisons and failures by making a call to the standard QTP reporter. Right now, I&#8217;m going for simplicity; there&#8217;s a lot more you could do with this if you wanted. You could add weights to each verification item and log a severity message based on the weight of the failed item. You could call a custom reporter (which is a good idea, given that any time you tell QTP of a failure, it treats the entire script as failed). You get the idea.</p>
<p>Lastly, the Diff method calls UpdateMasterData. This routine simply loops over any difference and checks the global data table for columns of the same name. If they exist, the global data table is updated with the new value, so that if any comparison is made against it later in the script, it will be made against what we see in the system during this run.</p>
<p>I&#8217;ve asked my current employer for permission to post the code, as it&#8217;s completely abstract and contains no proprietary data. No word on whether they&#8217;ll go for that yet, but if so, I&#8217;ll update that here. Hopefully there&#8217;s enough here already to be useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testjutsu.com/adventures-in-gui-automation-verification-layer/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adventures in GUI Automation &#8211; getting my bearings</title>
		<link>http://www.testjutsu.com/adventures-in-gui-automation-getting-my-bearings</link>
		<comments>http://www.testjutsu.com/adventures-in-gui-automation-getting-my-bearings#comments</comments>
		<pubDate>Wed, 17 Mar 2010 10:05:49 +0000</pubDate>
		<dc:creator>Ben Kelly</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[automated testing]]></category>
		<category><![CDATA[gui automation]]></category>
		<category><![CDATA[gui testing]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[test automation]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.testjutsu.com/?p=197</guid>
		<description><![CDATA[So I mentioned some of the inherent issues that I dislike about QTP 10. One of those appears to be that reusable actions intermittently fail. An action in QTP is a tool-defined item that collects a number of GUI manipulations (or function calls) into a named action. It sounds handy. It probably would be if [...]]]></description>
			<content:encoded><![CDATA[<p>So I mentioned some of the inherent issues that I dislike about QTP 10. One of those appears to be that reusable actions intermittently fail. An action in QTP is a tool-defined item that collects a number of GUI manipulations (or function calls) into a named action. It sounds handy. It probably would be if it worked reliably, but it doesn&#8217;t &#8211; at least not for me. The other thing is that if you have reusable actions (let&#8217;s say for instance that you keep your common ones in a single file and call them from other files), you cannot modify those actions without first closing your current test file and opening the one where the action is defined.</p>
<p>Instead, I have organised my scripts into a series of user-centric actions, which I have defined as functions in function libraries. To be clearer, each function executes a series of steps in the gui that an end-user would recognise as an action. e.g. log in, navigateToQuotationScreen and so on. This seems to work pretty well. I end up with a QTP screen that looks like a high-level checklist of how to execute a particular workflow. You do not have the editing restrictions that you do with reusable actions, as you can have as many function libs open as you like.</p>
<p>Neato. So I&#8217;ve been using the record tool to get something that works. Mostly because I dislike VBScript. I think it&#8217;s the Orcish of programming languages (Maybe not even that. Maybe it&#8217;s Kobold &lt;/nerd&gt;). The recording tool creates a bunch of objects and sticks them in the object repository. That&#8217;s fine, saves me having to do it myself. Drawbacks to this are that for dynamically created objects, you may end up with a bunch of identical objects with different names. Not too hard to figure out, given that you should be naming your objects something sensible anyway. You can weed out the dupes when you do this and update your script accordingly. I&#8217;m definately going to check out <a title="Albert Gareev's blog" href="http://automation-beyond.com/" target="_blank">Albert Gareev</a>&#8217;s suggestion of <a title="QTP - dynamically loaded object repositories" href="http://www.testjutsu.com/adventures-in-gui-automation#comment-275" target="_blank">dynamically loaded object repositories</a>. That sounds quite handy. I will say though that at the moment I&#8217;m being assisted by some not-so-technical testers who I am weaning away from the keyword view and the active screen.</p>
<p>The recording tool doesn&#8217;t always use the best code for the job. It&#8217;s the same old story &#8211; want the job done right? Gotta do it yourself. After the initial script is in place, I&#8217;ve been reading through the code and separating it into user-centric actions. At the same time, I look for:</p>
<ul>
<li> places where the code can be optimised</li>
<li> places where data should be dynamic</li>
<li> any fluff commands that QTP put in</li>
<li>potential duplicates in the OR</li>
</ul>
<p>At this point, what I&#8217;ve ended up with is having a series of user-centric &#8216;tests&#8217; &#8211; I&#8217;ll call them transactions. Each one is an action (as every QTP test has 1 action by default), but consists of a series of calls to function libraries.  Each function is named for a step that a user might consider part of the transaction. For example, if we were talking about a program that provides a quote for car maintenance, the list of function calls might look like this:</p>
<ul>
<li>enterVehicleDetails</li>
<li>selectServiceTypeAndLocation</li>
<li>selectPreferredDates</li>
<li>completeQuotation</li>
</ul>
<p>Each of these functions lives in an associated function library. These functions may in turn call helper functions (such as date/time functions to enter date ranges in the future). Each transaction hides the ugly details of what is going on under the hood and while you don&#8217;t get to use the &#8216;keyword view&#8217; anymore, you do have a clearly labeled set of steps.</p>
<p>So at this point, I have some scripts. They work. They&#8217;re not robust and they don&#8217;t do any data verification to speak of, but it is a beginning. Next up &#8211; parameterization and making use of the data table.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testjutsu.com/adventures-in-gui-automation-getting-my-bearings/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Adventures in GUI automation</title>
		<link>http://www.testjutsu.com/adventures-in-gui-automation</link>
		<comments>http://www.testjutsu.com/adventures-in-gui-automation#comments</comments>
		<pubDate>Fri, 05 Mar 2010 09:50:39 +0000</pubDate>
		<dc:creator>Ben Kelly</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[automated testing]]></category>
		<category><![CDATA[gui automation]]></category>
		<category><![CDATA[gui testing]]></category>
		<category><![CDATA[QTP]]></category>
		<category><![CDATA[test automation]]></category>

		<guid isPermaLink="false">http://www.testjutsu.com/?p=182</guid>
		<description><![CDATA[So I&#8217;ve been hacking away at QTP for the last couple of weeks (no, I didn&#8217;t make the decision to purchase it, yes I have to use it as the political consequences of not doing so are more painful).
I&#8217;m not a massive fan of QTP, mostly because I think that it&#8217;s really bloody cheeky for [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been hacking away at QTP for the last couple of weeks (no, I didn&#8217;t make the decision to purchase it, yes I have to use it as the political consequences of not doing so are more painful).</p>
<p>I&#8217;m not a massive fan of QTP, mostly because I think that it&#8217;s really bloody cheeky for a company to charge six figures for a product because of its feature richness, then charge 5 figures for training because it&#8217;s so complex that no one can use the damn thing, not to mention that all the official written how-to information is safely tucked away behind a walled off site, available for those who pay their support fees.  For the same price HP charge for basic QTP training, I could fly any world-class tester out here for a week to hang out with me and my team. I know which option I&#8217;d get more value from.</p>
<p>Luckily there are plenty of useful sites out there maintained by QTP users, which is handy because if your support fees are not paid up, you get bugger all from the source.</p>
<p>QTP 10 has some inherent bugs that annoy me and I&#8217;m still dubious about how well the shared object library will work for me in the long run, but leaving the ranting and bitching aside, I should say that it does seem to be doing what I tell it to most of the time.</p>
<p>I&#8217;m attempting to implement <a title="Michael Hunter - Automation Stack (The logical functional model)" href="http://www.thebraidytester.com/stack.html" target="_blank">Michael Hunter&#8217;s Logical Functional Model</a> (which I think is really bloody clever, btw) as best I&#8217;m able. It&#8217;s still early days yet, but we&#8217;ll get there. I do run into problems a lot, largely because if my inexperience with the tool, but perhaps some good will come of it if I share my pain with you <img src='http://www.testjutsu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I&#8217;m going to post bits and pieces that I discover, just in case they&#8217;re useful to others. I don&#8217;t know how well QTP will fit the LFM, but I&#8217;ll see what I can do about documenting my progress with that as well.</p>
<p>For the moment, here are a few links that I have found useful:</p>
<ul>
<li><a title="SQA Forums QTP FAQ" href="http://www.sqaforums.com/showflat.php?Cat=0&amp;Number=402552" target="_self">The SQA forums QTP FAQ</a></li>
<li><a title="Codewanker" href="http://www.codewanker.com/codearticle6.htm" target="_self">CodeWanker</a> (love the name)</li>
<li><a title="Sachin Dhall's blog" href="http://qtp.blogspot.com/" target="_self">Sachin Dhall&#8217;s QTP blog</a></li>
<li><a title="Dmitry Motevich's blog" href="http://motevich.blip.tv/" target="_blank">Dmitry Motevich&#8217;s blog</a> (vlog?) QTP How-to movies</li>
</ul>
<p>There are a few others out there, but they&#8217;re full of ISTQB ads, so I don&#8217;t really feel like linking to them. <a href="http://testertested.blogspot.com/2009/05/testing-experience-magazine-voice-of.html" target="_self">I&#8217;m sure you understand</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testjutsu.com/adventures-in-gui-automation/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>How not to start a discussion</title>
		<link>http://www.testjutsu.com/how-not-to-start-a-discussion</link>
		<comments>http://www.testjutsu.com/how-not-to-start-a-discussion#comments</comments>
		<pubDate>Wed, 27 Jan 2010 00:07:35 +0000</pubDate>
		<dc:creator>Ben Kelly</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[exploratory testing]]></category>
		<category><![CDATA[misconceptions about testing]]></category>
		<category><![CDATA[poor software testing]]></category>

		<guid isPermaLink="false">http://www.testjutsu.com/?p=189</guid>
		<description><![CDATA[I gues I must be feeling punchy lately. No new content here for a little while, but I felt the need to respond to someone who linked to one of my posts. What I probably should have done was commented here and sent a pingback, but does anyone click on those anymore?
I digress.
Marcin Zręda has [...]]]></description>
			<content:encoded><![CDATA[<p>I gues I must be feeling punchy lately. No new content here for a little while, but I felt the need to respond to<a title="Fallacious article about exploratory testing" href="http://www.testandtry.com/2010/01/26/exploratory-testing-good-and-bad-sides/comment-page-1/#comment-732" target="_blank"> someone who linked to one of my posts</a>. What I probably should have done was commented here and sent a pingback, but does anyone click on those anymore?</p>
<p>I digress.<br />
<span id="commentauthor-730">Marcin Zręda has written an article that describes his conclusions from his experience with ET. The problem is, these conclusions are not presented as conclusions of his experience, they are listed as things that are good and bad about ET (with a line about them being drawn from his experience buried in the first paragraph).</span></p>
<p>I wrote a lengthy reply which I think should serve to counter most of the the errors he has made in describing ET.  Marcin has mentioned in the comments that the article was to serve as a jumping off point for discussion. In my opinion, this will likely have the desired effect, but misrepresenting experience as fact is one way to get people off on the wrong foot when having dialogue with you.</p>
<p>In this case, rather than wanting to know more about Marcin&#8217;s experiences, I wanted to correct what I saw as horribly misleading statements about ET. Now that I see he was trying to engender conversation, I am disinclined to continue.</p>
<p>&#8216;I have these experiences with ET &#8211; what do you think? How does your experence compare?&#8217; &#8211; sets a much different tone than &#8216;here are some good and bad things about ET&#8217; (followed by a list of flame bait)&#8217;. I think that as testers we have a duty to be better than that. If you want to have a discussion about testing, or even an argument about it, there are plenty of people out there to have those kinds of discussions with, but be up-front about it. Be open about it and you will likely find that you will both learn more and keep your credibility intact.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testjutsu.com/how-not-to-start-a-discussion/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>There are such things as stupid questions</title>
		<link>http://www.testjutsu.com/there-are-such-things-as-stupid-questions</link>
		<comments>http://www.testjutsu.com/there-are-such-things-as-stupid-questions#comments</comments>
		<pubDate>Mon, 11 Jan 2010 06:47:40 +0000</pubDate>
		<dc:creator>Ben Kelly</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Bach]]></category>
		<category><![CDATA[johanthan kohl]]></category>
		<category><![CDATA[michael bolton]]></category>
		<category><![CDATA[Weinberg]]></category>

		<guid isPermaLink="false">http://www.testjutsu.com/?p=183</guid>
		<description><![CDATA[I am making an appeal to those out there who are managing testers, or are in a position where their decisions influence testers.
I loosely follow several testing groups to see what interesting conversations are going on. I don&#8217;t often participate, mostly because I can&#8217;t commit to having the time to finish a conversation. If I [...]]]></description>
			<content:encoded><![CDATA[<p>I am making an appeal to those out there who are managing testers, or are in a position where their decisions influence testers.</p>
<p>I loosely follow several testing groups to see what interesting conversations are going on. I don&#8217;t often participate, mostly because I can&#8217;t commit to having the time to finish a conversation. If I can drop a comment I think will be helpful, then I will.</p>
<p>Then there are questions or statements that make me a little upset. I try not to respond because I tend to say things that are unkind. There are some people out there that need help and seem to be unaware of it. If you manage a testing team and you don&#8217;t have a lot of experience as a tester, you may be one of them.</p>
<p>The questions that get me irritated are mostly stupid questions asked by people that (according to their listed job title) should know better. Maybe stupid is not the right word. Lazy, ill-informed, ignorant &#8211; these are probably better adjectives.</p>
<p>Recently I saw the following questions asked:</p>
<p>How can testing be monitored? How can we measure the performance of testing?</p>
<p>That was it. No context, no qualification, no further explanation. I assert that becasuse of this, they are stupid questions. I suspect what this person meant is &#8216;how do I gauge the efficiency and effectiveness of the work that my testers are doing?&#8217;, but that&#8217;s one of many different possible interpretations of the original questions.</p>
<p>Not to mention the fact that I suspect that what this person actually wants is a bunch of numbers they can use to reassure themselves that all is well, or possibly to threaten perceived underperformers with.</p>
<p>I don&#8217;t really want to get into a rant on metrics. It&#8217;s been done to death by <a title="Michael Bolton - meaningful metrics" href="http://www.developsense.com/resources.shtml" target="_blank">far more qualified people than I</a> (see &#8216;meaningful metrics&#8217;). What I do want to say is that if you are managing software testers and you are asking questions like this, you really should know better. Stop being lazy and educate yourself. I feel sorry for the people working for you.</p>
<p>For people who are managing testers &#8211; especially if you do not have experience in software testing, let me pose the following questions to you.</p>
<p>How do you measure the effectiveness of a systems administrator? a business analyst? How do you know when you have someone who is ineffective in these roles?</p>
<p>Both of these roles require quite specific knowledge. There is also a massive amount of variation within the definition of these roles. A sysadmin that works on webservers is likely to have different strengths than one that specialises in SMTP admin. Of course there will be overlap in their skills, but they are different animals. Applying any sort of blanket measurement to them because they share the same title is stupid.</p>
<p>One thing these jobs do have in common (and in common with testing) is that they are knowledge and service related. If the people they are providing a service to are not satisfied, then you have an issue. You don&#8217;t go setting up metrics to count how many shell scripts and admin has written. You don&#8217;t judge a BA on how many use cases they write. You gauge their effectiveness by how their work is received by their peers and their clients.</p>
<p>Why would it be any different with testing? Testing requires specialised knowledge. How do you gauge the effectiveness of the people doing it? Look at the information they produce. Consult the people they produce it for. Speak with the testers themselves. Is the information useful, or not? Why/Why not? There you go. That&#8217;s how you measure the effectiveness of your testing.</p>
<p>Without the qualitative information these people can convey, you can collect all the metrics and numbers you like. You can draw all the conclusions from them you like, but those numbers alone are not enough to make any meaningful distinctions.</p>
<p>Worse still, if you&#8217;re judging the effectiveness of a testing effort during a project by things like bug counts and test case coverage, you&#8217;re potentially ignoring important information. A simple example &#8211; we have X open bugs. So what? What does that mean? So you&#8217;ve covered 100% of test cases &#8211; what does that mean? What other testing have you done? What did that find? What does that mean?</p>
<p>If you are using numbers as a barbiturate so that you can feel reassured about how the project is going &#8211; if you look at the numbers and and nothing else, and you accept them at face value, then you are being lazy. If you don&#8217;t have time to dig deeper then that&#8217;s a bigger problem, not an excuse.</p>
<p>If I sound a bit defensive, it&#8217;s because I am. I&#8217;m sick of seeing lazy people give testers a bad name because they don&#8217;t understand testing, aren&#8217;t interested in learning about testing and yet want to have some way to control testing because that&#8217;s how they think it works.</p>
<p>If you manage testers but you don&#8217;t trust them to be able to do their job, and if you aren&#8217;t willing to learn about the difference between effective testing and ineffective testing then have the stones to step aside from someone that is. You are worse than useless in your current role.You are a hindrance and are in all likelihood making people deeply unhappy.</p>
<p>If you are willing to learn, do try and think it through. What is it you are trying to achieve? Are you doing it because it&#8217;s genuinely useful, or because that&#8217;s what everyone else seems to be doing? Do some research. Plenty has been written down about it. At least that way when you ask a question, it will be an informed one. When I read questions like the above, here&#8217;s how it comes across:  &#8216;o hai, I ar new manager. Plz hope me teh metriks with xamplez kthxbai&#8217;.</p>
<p>I think that as managers of testers, it his high time we raised the bar. We have a duty of care to understand what they do and the challenges they face. To support their work and to maximise the effectiveness of their efforts.If you are not constantly seeking sources to help you do this, then you are doing them a disservice.</p>
<p>If you have your heart set on measurement, then please, at the very least learn the difference between <a title="Quality Software Management: First-Order Measurement " href="http://www.amazon.com/Quality-Software-Management-First-Order-Measurement/dp/0932633242" target="_blank">first, second and third order measurement</a> and <a title="Three Kinds of Measurement and Two Ways to Use Them" href="http://www.stickyminds.com/measurementandreporting.asp?ObjectId=15136&amp;Function=FEATUREDETAIL" target="_blank">how to apply them</a>.</p>
<p>Additionally, it&#8217;d be a bonus if you understood more about <a title="Perfect Software: And Other Illusions about Testing " href="http://www.amazon.com/Perfect-Software-Other-Illusions-Testing/dp/0932633692/ref=pd_sim_b_4" target="_blank">testing and how testing fits into software development</a> (please do your testers a favour and read this book).</p>
<p>Hopefully for you this is the tip of a very large iceberg. If you do these things, you will look back at questions like the ones posed above and wonder how you could ever have been that naieve. If you can cultivate a habit of curiosity and the desire to learn then you stand good chance of becoming the sort of manager your testers need you to be.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.testjutsu.com/there-are-such-things-as-stupid-questions/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Lessons Learned in Translation 3</title>
		<link>http://www.testjutsu.com/lessons-learned-in-translation-3</link>
		<comments>http://www.testjutsu.com/lessons-learned-in-translation-3#comments</comments>
		<pubDate>Mon, 23 Nov 2009 12:41:53 +0000</pubDate>
		<dc:creator>Ben Kelly</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Japanese]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Bach]]></category>
		<category><![CDATA[exploratory testing]]></category>
		<category><![CDATA[lessons learned in software testing]]></category>
		<category><![CDATA[Pettichord]]></category>
		<category><![CDATA[testing in japanese]]></category>
		<category><![CDATA[translation]]></category>

		<guid isPermaLink="false">http://www.testjutsu.com/?p=176</guid>
		<description><![CDATA[I wanted to tackle something a little heftier than the last post to see if content that was less straightforward to explain was also challenging to translate. I went with lesson 28 &#8211; Exploring requires a lot of thinking.
The translation had a few things that were interesting, including the title. I&#8217;ll put up the translation, [...]]]></description>
			<content:encoded><![CDATA[<p>I wanted to tackle something a little heftier than the last post to see if content that was less straightforward to explain was also challenging to translate. I went with lesson 28 &#8211; Exploring requires a lot of thinking.</p>
<p>The translation had a few things that were interesting, including the title. I&#8217;ll put up the translation, let you formulate your own opinions (and give Japanese readers the chance to tell me that I&#8217;ve got it all wrong), then explain what I took form it.</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p>Lesson 28</p>
<p>探求のためには三つの思考法がある。<br />
When it comes to exploration, there are 3 ways of thinking</p>
<p>探求は探偵と同じだ。調査の結果、何が出てくるか全く想像も出来ない。探求は空間内の移動だと思えるとよい。思考法には前向き、後向き、水平がある。<br />
Exploration is the same as investigation. What comes out of the results of investigation is impossible to imagine. You can think of searching as movement through space. Ways of thinking are forward, backward and laterally.</p>
<p>前方思考：既知から未知へ、目の前の事実からまだ見ぬものを探索する思考法である。既知の行為による結果や影響を探索するのだ。<br />
例）　プリントを見る。クリックしたら、何が起こるのだろう？<br />
Forward thinking: From the known to the unknown, from the immediate facts search for the things you have not seen before. Seek out the results or effects of known actions.<br />
e.g.) Look at the print menu. If you click it, what do you think happens?</p>
<p>後方思考：問題や想像から既知へとたどり、推測の正否を確認する思考法である。<br />
例）　文書を印刷する方法があるだろうか。メニューに印刷の項目があるか確かめよう (Solow 1990)。<br />
Backward thinking: from questions or conjecture get to a place that is known. Check the correctness of your guess.<br />
e.g.) document print functionality probably exists. Make sure there is a printing option in the menu.</p>
<p>水平思考：思考の寄り道をしてみよう。思いつきで脇道を探索し、また本筋に戻る (de Bono 1970)。<br />
例）　おもしろいグラフィックだな。よし、何か複雑なグラフィックを印刷してどうなるか見てみよう。<br />
Lateral thinking: Try taking detours in your thinking. Thinking of an idea, investigate side-roads and return to the main thread.<br />
e.g.) That&#8217;s an interesting graphic. Right, let&#8217;s try printing complex graphics and see what happens.</p>
<p>テストする製品なくても探求プロセス使える。こうした思考プロセスで、一連の文書を探求したり、プログラマにインタビューしたりすればよい。より豊かにより観念化されたモデルを創り上げることによって進歩するのだ。また、モデルを使えば効果的なテストを設計することができる。<br />
Even if you don&#8217;t have a product to test, you can still use an exploratory process. Using this thought process is good for exploring a series of documents, or interviewing a programmer. By creating enriched conceptual models we make progress. Also, if you create a model, you can design more effective tests.</p>
<p>Original text</p>
<p style="padding-left: 30px;"><strong>Exploring involves a lot of thinking.</strong></p>
<p style="padding-left: 30px;">Exploring is detective work. It&#8217;s an open-ended search. Think of exploration as moving through a space. It involves forward, backward and lateral thinking.</p>
<p style="padding-left: 30px;">Forward thinking. Work from what you know to what you don&#8217;t know; what you see toward what you haven&#8217;t yet seen. Seek ramifications and side effects. Example: I see a print menu item. I&#8217;ll click on it and see what happens.</p>
<p style="padding-left: 30px;">Backward thinking. Work from what you suspect or imagine back toward what you know, trying ti confirm or refute your conjectures. Example: I wonder if there&#8217;s a way to print this document? I&#8217;ll look through the menus and see whether there&#8217;s a print item. (Solow 1990)</p>
<p style="padding-left: 30px;">Lateral thinking. Let your work be distracted by ideas that pop into your head, exploring tangents and then returning to the main thread (de Bono 1970). Example: That&#8217;s an interesting graphic. Hey, I think I&#8217;ll print some complex graphics and see what happens.</p>
<p style="padding-left: 30px;">The exploratory process works even if you don&#8217;t have a product to test. You can explore a set of documents or interview a programmer, using the same thought processes. You make progress by building richer, better mental models of the product. These models then allow you to design effective tests.</p>
<p>I got the feeling that the tanslators wanted to make this a little more &#8216;concrete&#8217; than the original. Not saying they editorialised, but there do seem to be some liberties taken.</p>
<p>My own take is that the original lesson describes one possible way to organise your thinking but isn&#8217;t necessarily looking to lock the reader into 3 distinct ways of thinking. There are other ways you could choose to organise your thinking. This translation has echoes of the book title &#8216;lessons learned&#8217; vs. &#8216;immutable laws&#8217; &#8211; one feels like a coversation (or an argument), the other a decree.</p>
<p>Okay, so I&#8217;m projecting a little bit, but I do think the renamed title takes something important away from the lesson. The words are there, the same structure is there, but the meaning I take from the Japanese version is different from the one I take from English.</p>
<p>As an aside, the word they chose for &#8216;exploration&#8217; was 探求 (tankyuu). The two dictionaries I consulted listed this as &#8216;quest, search, pursuit&#8217;. When I looked for &#8216;explore&#8217; I got 探検 (tanken). They share the same first character (tan), which means to search for or look for. 求 (kyu) means &#8216;want, demand, require&#8217;. 検 means &#8216;investigate or examine&#8217;. Based on the characters, I&#8217;d have thought 探検 was a more fitting choice for &#8216;exploration&#8217;, but perhaps the general usage of the word has connotations of an outdoors expedition. I&#8217;m not sure (I&#8217;ll ask around).</p>
<p>I think I&#8217;ll see what else I can find, maybe try a few lesson titles and see what the differences are there.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 86px; width: 1px; height: 1px;"><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="ja-JP"><span style="font-family: Times New Roman,serif;">When it comes to searching(exploration), there are 3 ways of thinking</span></p>
<p style="margin-bottom: 0cm;" lang="ja-JP">
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.testjutsu.com/lessons-learned-in-translation-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lessons Learned in Translation 2</title>
		<link>http://www.testjutsu.com/lessons-learned-in-translation-2</link>
		<comments>http://www.testjutsu.com/lessons-learned-in-translation-2#comments</comments>
		<pubDate>Fri, 13 Nov 2009 16:15:38 +0000</pubDate>
		<dc:creator>Ben Kelly</dc:creator>
				<category><![CDATA[Everything]]></category>
		<category><![CDATA[Japanese]]></category>
		<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[Bach]]></category>
		<category><![CDATA[Kaner]]></category>
		<category><![CDATA[learning japanese]]></category>
		<category><![CDATA[lessons learned in software testing]]></category>
		<category><![CDATA[Pettichord]]></category>
		<category><![CDATA[translation]]></category>

		<guid isPermaLink="false">http://www.testjutsu.com/?p=168</guid>
		<description><![CDATA[Here&#8217;s my latest foray into re-translation. Actually, this seems to be a pretty good translation of the original text. I suspect what I need to do is find some of the more difficult passages and see what I can find around those. I&#8217;ve been looking at the shorter entries to this point because hey &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p style="margin-bottom: 0cm;" lang="ja-JP">Here&#8217;s my latest foray into re-translation. Actually, this seems to be a pretty good translation of the original text. I suspect what I need to do is find some of the more difficult passages and see what I can find around those. I&#8217;ve been looking at the shorter entries to this point because hey &#8211; they&#8217;re short and my kanji reading is still really slow.</p>
<p>I&#8217;ll look to get something a little meatier in my next post on the topic.</p>
<p>Lesson 35</p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="ja-JP">結局、テスト結果は製品に対する「印象」に過ぎない。<br />
<span style="font-family: Times New Roman,serif;"><strong>After all, test results are only an impression of the product</strong></span></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="ja-JP">製品の品質について知っていることは、すべて製品に対する推測に過ぎない。<br />
<span style="font-family: Times New Roman,serif;">With respect to quality, what you know about the entire product is just conjecture.</span></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="ja-JP">どんなに支持されても正しいとは言い切れない。<br />
<span style="font-family: Times New Roman,serif;">However much support  is available, you cannot simply declare it correct.</span></p>
<p><!-- 		@page { margin: 2cm } 		P { margin-bottom: 0.21cm } --></p>
<p style="margin-bottom: 0cm;" lang="ja-JP">だから製品の品質状況を報告するときは、どんなテストしたか、テストプロセスから考えてどんな限界があったかといった条件を必ずレポートに付けるべきなのである。<br />
<span style="font-family: Times New Roman,serif;">Because of this, when reporting the condition of quality, you should add to the report qualifications such as the kind of testing that was done and any limits to the test process.</span></p>
<p style="margin-bottom: 0cm;" lang="ja-JP">
<p style="margin-bottom: 0cm;" lang="ja-JP"><span style="font-family: Times New Roman,serif;">Original text:</span></p>
<p style="margin-bottom: 0cm; padding-left: 30px;" lang="ja-JP"><strong><span style="font-family: Times New Roman,serif;">In the end, all you have is an impression of the product. </span></strong></p>
<p style="margin-bottom: 0cm; padding-left: 30px;" lang="ja-JP"><span style="font-family: Times New Roman,serif;">Whatever you know about the quality of the product, it&#8217;s conjecture. No matter how well supported, you can&#8217;t be sure you&#8217;re right. Therefore any time you report the status of the product quality, you should qualify that report with information about how you tested and the known limitations of your test process.</span></p>
<p style="margin-bottom: 0cm;" lang="ja-JP">
]]></content:encoded>
			<wfw:commentRss>http://www.testjutsu.com/lessons-learned-in-translation-2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
