<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>The Software Inquisition</title>
	
	<link>http://www.softwareinquisition.com</link>
	<description />
	<pubDate>Tue, 16 Sep 2008 15:22:42 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/softwareinquisition/nfIt" type="application/rss+xml" /><item>
		<title>A Soft Hack</title>
		<link>http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~3/394287376/a-soft-hack</link>
		<comments>http://www.softwareinquisition.com/2008/09/a-soft-hack#comments</comments>
		<pubDate>Tue, 16 Sep 2008 15:22:42 +0000</pubDate>
		<dc:creator>Marcus Merrell</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[appscan]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[pen testing]]></category>

		<category><![CDATA[penetration testing]]></category>

		<category><![CDATA[security testing]]></category>

		<category><![CDATA[web app security]]></category>

		<category><![CDATA[webinspect]]></category>

		<guid isPermaLink="false">http://www.softwareinquisition.com/?p=110</guid>
		<description><![CDATA[When is a hack not a hack?
We all get raises at the same time of year. The buzz is big around the time it happens&#8230; whispers of flat 2% or 1% across the board, rumors that &#8220;we&#8217;re all getting screwed&#8221;&#8230; you know, standard stuff. They are entered into our payroll software before they&#8217;re communicated to [...]]]></description>
			<content:encoded><![CDATA[<p>When is a hack not a hack?</p>
<p>We all get raises at the same time of year. The buzz is big around the time it happens&#8230; whispers of flat 2% or 1% across the board, rumors that &#8220;we&#8217;re all getting screwed&#8221;&#8230; you know, standard stuff. They are entered into our payroll software before they&#8217;re communicated to us, but we don&#8217;t have access, and there&#8217;s always a 7-10 day period between the decision and the communication. What, do we have to wait until we get the check to see what it&#8217;s going to be?</p>
<p>Well, in fact, no we don&#8217;t. </p>
<p><span id="more-110"></span></p>
<p>I found what I would like to call a &#8220;soft hack&#8221;&#8230; no injection or script-insertion, no session hijacking or privilege escalation. I didn&#8217;t even need a proxy to manipulate the parameters. I just poked around the site that stores our benefits information. See, the benefits information interfaces with the payroll information, which means the numbers I need are already in there. I know that because I&#8217;m a manager and I already saw my employees&#8217; increases, but comp numbers are hidden from individuals. So mine is in there somewhere&#8230; <strong>somewhere</strong>.</p>
<p>I look at withholding - if I see how much they&#8217;re taking out of the check for taxes of social security, I&#8217;m home free. I can do that kind of math. No luck&#8211;that&#8217;s hidden too. Medical insurance? No luck&#8211;it&#8217;s a flat rate. Flex spending? Nope&#8211;another flat rate.</p>
<p>401(k) contributions? That would do it, right? If I&#8217;m withholding 6% and they print the dollar amount, the amount will represent 6% of the new number, right? Of course not&#8211;they just print the percentage.</p>
<p>Finally I look at our Life Insurance coverage amounts. My company is awesome&#8211;just for working here we get automatic life insurance, <em>gratis</em>, equal to TWO TIMES OUR ANNUAL SALARY.</p>
<p>So, the number listed there&#8211;I divide it in half, and there it is, my new salary. Thanks, boss!</p>
<p>Because I&#8217;m a software tester first and foremost, I want to verify my methodology: I&#8217;m able to look at my benefits &#8220;as of&#8221; arbitrary dates, so I set the date back a month or so, divided the life insurance in half, and boom&#8230; the old salary. We have a soft hack.</p>
<p>And that&#8217;s what worries me: even when they don&#8217;t give you the information, they give you the information. The thing about this hack, in light of my recent acquisition of the web app penetration testing unit, is that no tool, not <a href="http://www-01.ibm.com/software/awdtools/appscan/">AppScan</a> or <a href="https://h10078.www1.hp.com/cda/hpms/display/main/hpms_content.jsp?zn=bto&#038;cp=1-11-201-200%5E9570_4000_100__">WebInspect</a>, not <a href="http://portswigger.net/suite/">burp suite</a> or <a href="http://portswigger.net/suite/">paros</a> or <a href="http://net-square.com/httprint/">httprint</a> or <a href="http://www.nessus.org/">nessus</a> or <a href="http://www.cirt.net/">nikto</a> or <a href="http://www.iewatch.com/">IEWatch</a> <a href="http://www.httpwatch.com/">HTTPWatch</a>. What is my AUT trying to tell the world, that I don&#8217;t want to tell them? Some little nugget sitting out there in plain site, waiting for the right person to come along and do some second-grade math?</p>
<p>It looks like the best security testing tool you possess is your own mad desire to get the data. Conjuring this motivation is difficult: I&#8217;m definitely more interested in my new paycheck numbers than I am in whether some theoretical user can escalate his permissions to perform admin tasks. It&#8217;s almost like I need to have a <a href="http://en.wikipedia.org/wiki/Konstantin_Stanislavski">Stanislavski moment</a> before I start this hack-testing: imagine I&#8217;m sitting in a dark room <a href="http://news.bbc.co.uk/1/hi/world/americas/3657170.stm">somewhere</a>, logged into the target site using &#8220;rsmith/password&#8221;, and I&#8217;m not about to let rsmith&#8217;s meager permissions get in my way. I know that information is on that server, and they&#8217;ve opened up port 80 for me to get to it. There&#8217;s only a thin layer of imperfection sitting between me and the database. It&#8217;s only a matter of time.</p>
<p>Should I coin a new term? &#8220;Method testing&#8221;? Those words are all over these Internets, but they mean something quite different from what I&#8217;m spelling out here.</p>
<p>You heard it here first.</p>

<p><a href="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?a=UqF7ZS"><img src="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?i=UqF7ZS" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?a=6E99L"><img src="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?i=6E99L" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~4/394287376" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softwareinquisition.com/2008/09/a-soft-hack/feed</wfw:commentRss>
		<feedburner:origLink>http://www.softwareinquisition.com/2008/09/a-soft-hack</feedburner:origLink></item>
		<item>
		<title>Monitoring Test Site Status–the “Heartbeat”</title>
		<link>http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~3/393274851/monitoring-test-site-status-the-heartbeat</link>
		<comments>http://www.softwareinquisition.com/2008/09/monitoring-test-site-status-the-heartbeat#comments</comments>
		<pubDate>Mon, 15 Sep 2008 15:04:11 +0000</pubDate>
		<dc:creator>Marcus Merrell</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[functional testing]]></category>

		<category><![CDATA[site management]]></category>

		<category><![CDATA[site status]]></category>

		<category><![CDATA[test site management]]></category>

		<category><![CDATA[test site status]]></category>

		<guid isPermaLink="false">http://www.softwareinquisition.com/?p=95</guid>
		<description><![CDATA[Our "heartbeat" page pings all test servers every minute, letting you know which ones are up and running and which are dead. This allows us to check the server's availability before we execute automated tests. It's a Perl script, which reads a text file containing the names and URLs, etc. of all the servers we [...]]]></description>
			<content:encoded><![CDATA[<p>Our "heartbeat" page pings all test servers every minute, letting you know which ones are up and running and which are dead. This allows us to check the server's availability before we execute automated tests. It's a Perl script, which reads a text file containing the names and URLs, etc. of all the servers we care about, and puts the results into an XML file.</p>
<p><span id="more-95"></span></p>
<p>This XML file is then copied to a directory, accessible either via HTTP by the queueing system or a web browser. Anyone in the engineering department can go to this page and, using IE/Firefox's built-in XSLT processor, view it as a nice little HTML table. It shows a happy face if the site is up, or a <a href="http://en.wikipedia.org/wiki/Jolly_Roger">Jolly Roger</a> if the site is down.</p>
<p>But the queue server only cares about the data--and it's <strong>awesome</strong> having the same tool performing multiple jobs.</p>
<p>If you look at it with a browser, you get this:</p>
<p><a href="http://www.softwareinquisition.com/wp-content/uploads/2008/09/heartbeat.jpg"><img class="aligncenter size-full wp-image-112" title="heartbeat" src="http://www.softwareinquisition.com/wp-content/uploads/2008/09/heartbeat.jpg" alt="" width="500" height="351" /></a></p>
<p><a href="http://www.softwareinquisition.com/wp-content/uploads/2008/06/heartbeat.jpg"><br />
</a></p>
<p>If the queue is looking at it, it sees this:</p>
<div class="igBar"><span id="lxml-2"><a href="#" onclick="javascript:showPlainTxt('xml-2'); return false;">View as plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">XML:</span>
<div id="xml-2">
<div class="xml">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">name=&quot;Nightly&quot;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">recruiting=&quot;1&quot;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">salary=&quot;0&quot;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">module_version=&quot;10.6&quot;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">last_checked=&quot;06-23-2008 09:37:35&quot;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">build_number=&quot;trunk-22123&quot;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">url=&quot;http://xyz.com:8080/nightlytrunk-Suite/&quot; performance=&quot;1&quot;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">smoketest_url=&quot;http://xyz.com/qtp/heartbeat/smoketests-Nightly.xml&quot;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">activated_applications=&quot;3&quot;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">build_stamp=&quot;2008-06-21 03:29:56 &quot;/<span style="color: #ddbb00;">&amp;gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">... </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>The data file that drives the heartbeat script also contains a list of usernames and passwords by role. If you need to test something manually, you go to this site, find the URL you want, then hover over the name of the site. A JavaScript popup appears, listing the roles, usernames, and passwords for the site. This allows you to login as, say, an Employee, or as a Super Administrator, to any site on the list:</p>
<p><a href="http://www.softwareinquisition.com/wp-content/uploads/2008/09/logins.jpg"><img class="alignnone size-full wp-image-111" title="logins" src="http://www.softwareinquisition.com/wp-content/uploads/2008/09/logins.jpg" alt="Logins by role and site" width="500" height="325" /></a></p>
<p>This information is also made available to the queue system. It allows us to use a line of code like this:</p>
<p><code>LoginProfile "SUPER"</code></p>
<p>or</p>
<p><code>LoginProfile "RECRUITER"</code></p>
<p>Either line of code will log you in to the site via a Profile or Alias as defined in the data file--allowing you to reuse your test script against any site for which you have provided login information by role. We <strong>never</strong> hard-code usernames or passwords into our scripts. Further, our engineering dept has a set of default sample data that we use for most test sites. If you just throw together a site using the default database, and want to execute our tests against it, you simply have to pass the URL to the test queueing script. This script will look for a match on the heartbeat page, and not finding one, it will take these defaults (and still check this site for availability before executing the tests).</p>
<p>Our AUT contains a flat text file, accessible to anyone, which gives the build number, the time/date of the build, several non-critical global options. If you notice from the screen shot, the build number is there (useful for writing up or verifying defects, the time of the last build, the product version, and which applications have been activated.</p>
<p>Lastly, and possibly most importantly (since our product is actually a suite of products), this status page also includes a list of which sub-products has been "activated" or "licensed" for this deployment. These are indicated by the checkboxes on the right, and as "1" or "0" in the xml. Users can go to this page any time to see "what site can I use to test this Recruiting feature against?"</p>
<p>It also allows us, when asked to execute a test suite, to execute or skip a test case if the target product isn't activated. The script that adds jobs to our test queue looks at these attributes for the requested test site, then performs an "eligibility check" on each test. If the test case is within the "Recruiting.Administration" package (in <a href="http://www.rallydev.com">Rally</a>), but the test site does not have the Recruiting app available, this test case will be declared ineligible, and will be skipped. This results in very few false positives, since the test case will never be run against a site that can't handle it.</p>
<p>A lot of information, but this little set of perl/xml/xslt scripts has become the backbone of our little operation. If I can pretty up the code and document it better I'll post it some day. You know how things go around here.</p>

<p><a href="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?a=5LyeDJ"><img src="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?i=5LyeDJ" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?a=BtwIL"><img src="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?i=BtwIL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~4/393274851" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softwareinquisition.com/2008/09/monitoring-test-site-status-the-heartbeat/feed</wfw:commentRss>
		<feedburner:origLink>http://www.softwareinquisition.com/2008/09/monitoring-test-site-status-the-heartbeat</feedburner:origLink></item>
		<item>
		<title>Our New Approach to Performance Testing</title>
		<link>http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~3/388882937/our-new-approach-to-performance-testing</link>
		<comments>http://www.softwareinquisition.com/2008/09/our-new-approach-to-performance-testing#comments</comments>
		<pubDate>Wed, 10 Sep 2008 18:10:24 +0000</pubDate>
		<dc:creator>Marcus Merrell</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[eload]]></category>

		<category><![CDATA[empirix]]></category>

		<category><![CDATA[Functions]]></category>

		<category><![CDATA[jmeter]]></category>

		<category><![CDATA[perf test]]></category>

		<category><![CDATA[performance testing]]></category>

		<category><![CDATA[qtp]]></category>

		<category><![CDATA[QuickTest Pro]]></category>

		<category><![CDATA[quicktest professional]]></category>

		<guid isPermaLink="false">http://www.softwareinquisition.com/?p=38</guid>
		<description><![CDATA[My team has recently taken on the challenge of conducting performance testing for our product. Performance and web-app security testing have been both been put under the same umbrella. That's great--lots of efficiencies to be gained from our different skills, but at the same time, I'm no expert in either field. I have a perf [...]]]></description>
			<content:encoded><![CDATA[<p>My team has recently taken on the challenge of conducting performance testing for our product. Performance and web-app security testing have been both been put under the same umbrella. That's great--lots of efficiencies to be gained from our different skills, but at the same time, I'm no expert in either field. I have a perf test engineer who is good with Empirix e-Load, and he's teaching me how we do things. We have a couple of books (including <a href="http://www.amazon.com/gp/product/0735625700?ie=UTF8&amp;tag=perftestplus-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0735625700">this one</a>), and we've received some tool-specific training, but none of it has been enough as yet to convince me that we're doing everything we can to test page load times accurately.</p>
<p>This is also one of the reasons we haven't been posting much. With new responsibility comes new drains on time.<span id="more-38"></span></p>
<p>The issue we’re struggling with now—and think we’ve solved—is about how to satisfy management that our numbers are accurate, and how to provide numbers that not only talk about server response times under stress, but also reflect the real end-user experience times. For years, we've used e-Load to run a bunch of tests every week, then reported that “all pages return in under 2.7 seconds”. Every user in the field, every manual tester, every single person who ever used our software knew that was BS—because the pages themselves take up to 9 seconds to render, with no other load on the server.</p>
<p>Here's the problem: AJAX and client-heavy JavaScript make the server response time numbers less useful than they used to be. Empirix has no ability (that we know of) to measure the amount of time between when the page is done being downloaded to the client machine, and when all the HTML, JavaScript, and images actually finish rendering. Therefore, my directive is to produce numbers the executives could a) believe, b) have confidence in, and c) present to customers as "writ in stone"--including this new kind of stat.</p>
<p>I <strong>think</strong> we’ve solved it, but now we need to put down our pencils and look around... we need now to ask the question: are we on the right track, or are we full of it? Does anyone out there have a solution for testing server capacity and response time under load <strong>and</strong> the ability to measure comprehensive client page load times simultaneously?</p>
<p>My background, as you would gather from this site, is all in functional testing. We’ve created a unique solution for automated functional testing, but it doesn't help us one bit in determining how our AUT performs under stress. That's where we had to get creative, and to get educated.</p>
<p>We needed a way to execute a few tests by hand while we simulate 1000 users hammering the site with requests. That brought us back to our core strengths: our functional tests are executed on a real web browser, not just through a proxy or through multi-threaded HTTP processes… so, it occurred to us that they could give us our client-side execution numbers, if only we had a way to guarantee that our numbers are accurate.</p>
<p>Once again, the flexibility and generosity of our engineering department has saved us. Our AUT developers injected several timing AJAX calls into every page load served to the user. When the page is finished downloading, an event fires that says "Page Download Complete", complete with a count of the number of milliseconds it took. When all the objects on the page, HTML, JavaScript, images, are finished loading, the "please wait while page loads" DIV fires off another event, "Page Rendering Complete", with the timing included. These numbers are stored in our AUT database, by page name, and exportable to csv format.</p>
<p>What we are left with is a set of data that tells us the following:</p>
<p>myDashboardPage: 247 ms to download, 3893 ms to render</p>
<p>Huh, so before, when we were just using the proxy playback method of perf testing with Empirix, it told us that this page took only 247 ms to download. Meanwhile, our users were seeing 3.8 seconds. We were off in our report by approximately 1576%. Can you see why nobody believed us?</p>
<p>What we do now is, we fire up 1,000 VUs with Empirix, all running tests and hammering the server. At the same time, we use our queuing system to launch our ~500 automated functional tests (4-5 at a time), and have the real-time client-side rendering numbers reported in Excel on a page-by-page basis.</p>
<p>We believe this is the right approach to take, but we still have some concerns:</p>
<ul>
<li>Not having employed or interacted with any experts in performance testing on any level, I don’t know if this is brilliant or just something that sounds-good-but-doesn’t-work-like-I-think-it-should</li>
<li>Crunching the numbers I get into a report palatable to the VP-level and above</li>
<li>Ensuring that the Empirix (soon to be JMeter) scripts we develop are doing what we want them to do</li>
<li>Ensuring that these scripts are the right scripts to run</li>
<li>Using the Empirix numbers in concert with the Client-side numbers to extrapolate information about server (and cluster) capacity, browser compatibility, implications of various configuration changes, bottlenecks, and about a hundred other things—I think this data is trying to tell us what we need to know, I’m just not a good enough statistician to know how to get it out</li>
<li>How do we know when we’re “done” with a given release? We’ve found the bottlenecks, we’ve told the VPs what they wanted to hear… my instinct is to keep pushing, even though we think we’ll meet all SLAs, but maybe the SLAs only meet the minimum and we want to do more. (This would be a good problem to have, of course)</li>
</ul>
<p>Anyway, these are my preliminary thoughts on the subject. We're making the transition from Empirix to jmeter, which is pretty exciting. As Scott Barber says, "the craft isn't about the tool". We're just starting out on this task, but I think we're off to a good start.</p>
<p>Thoughts? Ideas?</p>

<p><a href="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?a=bPij23"><img src="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?i=bPij23" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?a=KL8oL"><img src="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?i=KL8oL" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~4/388882937" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softwareinquisition.com/2008/09/our-new-approach-to-performance-testing/feed</wfw:commentRss>
		<feedburner:origLink>http://www.softwareinquisition.com/2008/09/our-new-approach-to-performance-testing</feedburner:origLink></item>
		<item>
		<title>WebExt Performance Demo</title>
		<link>http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~3/322805490/webext-performance-demo</link>
		<comments>http://www.softwareinquisition.com/2008/06/webext-performance-demo#comments</comments>
		<pubDate>Sun, 29 Jun 2008 21:58:44 +0000</pubDate>
		<dc:creator>Will Roden</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[qtp]]></category>

		<category><![CDATA[QTP-9.5]]></category>

		<category><![CDATA[QuickTest-Pro-9.5]]></category>

		<category><![CDATA[Web-Extensibility]]></category>

		<category><![CDATA[WebExt]]></category>

		<guid isPermaLink="false">http://www.softwareinquisition.com/?p=107</guid>
		<description><![CDATA[One of the benefits of using Web Extensibility Add-ins is that you get a performance gain in running tests vs using the old WebElement method.  For a demonstration, I wrote a basic WebExt add-in that only has one class defined: Div.  Div is any object whose tagName is "DIV", so it is the [...]]]></description>
			<content:encoded><![CDATA[<p>One of the benefits of using Web Extensibility Add-ins is that you get a performance gain in running tests vs using the old WebElement method.  For a demonstration, I wrote a basic WebExt add-in that only has one class defined: Div.  Div is any object whose tagName is "DIV", so it is the equivalent of WebElement("tagName:=DIV").  You can download it <a href="http://www.softwareinquisition.com/wp-content/uploads/2008/06/rawelements.zip">here</a>.  All you have to do to use it in your QTP 9.5 environment is extract that zip file into "C:\progfiles\hp\QuickTest Professional\dat\Extensibility\Web" and restart QTP.  Make sure to check the "rawElements" add-in on QTP's splash screen.<br />
<span id="more-107"></span><br />
Create a new test that uses the rawelements add-in and run this script:</p>
<div class="igBar"><span id="lvb-4"><a href="#" onclick="javascript:showPlainTxt('vb-4'); return false;">View as plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">Visual Basic:</span>
<div id="vb-4">
<div class="vb">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #b1b100;">Set</span> oBrowser = openNewBrowser <span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">"http://news.google.com"</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">oBrowser.<span style="color: #66cc66;">WaitProperty</span> <span style="color: #ff0000;">"attribute/readyState"</span>, <span style="color: #ff0000;">"complete"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #808080;">'oBrowser.sync</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">timeThis <span style="color: #ff0000;">"oBrowser.Div("</span><span style="color: #ff0000;">"className:=lh"</span><span style="color: #ff0000;">", "</span><span style="color: #ff0000;">"index:=0"</span><span style="color: #ff0000;">").exist"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">timeThis <span style="color: #ff0000;">"oBrowser.Div("</span><span style="color: #ff0000;">"className:=lh"</span><span style="color: #ff0000;">", "</span><span style="color: #ff0000;">"index:=1"</span><span style="color: #ff0000;">").exist"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">timeThis <span style="color: #ff0000;">"oBrowser.WebElement("</span><span style="color: #ff0000;">"tagName:=DIV"</span><span style="color: #ff0000;">", "</span><span style="color: #ff0000;">"className:=lh"</span><span style="color: #ff0000;">", "</span><span style="color: #ff0000;">"index:=0"</span><span style="color: #ff0000;">").exist"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">timeThis <span style="color: #ff0000;">"oBrowser.WebElement("</span><span style="color: #ff0000;">"tagName:=DIV"</span><span style="color: #ff0000;">", "</span><span style="color: #ff0000;">"className:=lh"</span><span style="color: #ff0000;">", "</span><span style="color: #ff0000;">"index:=1"</span><span style="color: #ff0000;">").exist"</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #b1b100;">function</span> timeThis <span style="color:#006600; font-weight:bold;">&#40;</span>sEval<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #b1b100;">Set</span> oTimer = MercuryTimers.<span style="color: #b1b100;">Timer</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color: #ff0000;">"timer1"</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; oTimer.<span style="color: #66cc66;">Start</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; sReturn = eval<span style="color:#006600; font-weight:bold;">&#40;</span>sEval<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; oTimer.<span style="color: #66cc66;">Stop</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #b1b100;">print</span> <span style="color: #ff0000;">"executed: "</span> &amp; sEval</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #b1b100;">print</span> <span style="color: #ff0000;">"returned: "</span> &amp; sReturn</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #b1b100;">print</span> <span style="color: #ff0000;">"took: "</span> &amp; oTimer.<span style="color: #66cc66;">ElapsedTime</span> / <span style="color: #cc66cc;color:#800000;">1000</span> &amp; <span style="color: #ff0000;">" seconds"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; timeThis = sReturn</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #b1b100;">end</span> <span style="color: #b1b100;">function</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>If you aren't using <a href="http://www.softwareinquisition.com/software-inquisition-foundation-library">SIFL</a>, change the first line to your preferred means of opening a browser and navigating to news.google.com.</p>
<p>This will open news.google.com and get the first two headline divs using the Div add-in and WebElement and show you how long it takes to execute.  For me, the first two times using the Div method took 2.12 and 0.86 seconds.  The second two checks using the WebElement method took 4.08 and 4.05 seconds.</p>
<p>The reason the first time using the WebExt takes longer is it has to attach the javascript for the Div class to IE.  After it does that, future executions are much speedier.</p>
<p>In conclusion, this is the long, boring way to say that WebElement is slow and Web Extensibility objects can be much faster.</p>

<p><a href="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?a=E8N1Dv"><img src="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?i=E8N1Dv" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?a=S5GzcI"><img src="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?i=S5GzcI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~4/322805490" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softwareinquisition.com/2008/06/webext-performance-demo/feed</wfw:commentRss>
		<feedburner:origLink>http://www.softwareinquisition.com/2008/06/webext-performance-demo</feedburner:origLink></item>
		<item>
		<title>childNodeByID function for Web Extensibility</title>
		<link>http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~3/321514774/childnodebyid-function-for-web-extensibility</link>
		<comments>http://www.softwareinquisition.com/2008/06/childnodebyid-function-for-web-extensibility#comments</comments>
		<pubDate>Fri, 27 Jun 2008 18:43:29 +0000</pubDate>
		<dc:creator>Will Roden</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[qtp]]></category>

		<category><![CDATA[QTP-9.5]]></category>

		<category><![CDATA[QuickTest Pro]]></category>

		<category><![CDATA[QuickTest-Pro-9.5]]></category>

		<category><![CDATA[Web-Extensibility]]></category>

		<category><![CDATA[WebExt]]></category>

		<guid isPermaLink="false">http://www.softwareinquisition.com/?p=104</guid>
		<description><![CDATA[During the Web Extensibility talk at HP Software Universe, somebody asked me to post the code for childNodeByID.  This is a javascript function that is useful in Web Extensibility projects.  It lets you find the child of a DOM object that has a specific id attribute.
At the time, I said this function was [...]]]></description>
			<content:encoded><![CDATA[<p>During the Web Extensibility talk at HP Software Universe, somebody asked me to post the code for childNodeByID.  This is a javascript function that is useful in Web Extensibility projects.  It lets you find the child of a DOM object that has a specific id attribute.</p>
<p>At the time, I said this function was only a few lines long.  I was wrong.  Somebody with more javascript experience could probably golf this down to a few lines, but my version is pretty long.<br />
<span id="more-104"></span></p>
<div class="igBar"><span id="ljavascript-6"><a href="#" onclick="javascript:showPlainTxt('javascript-6'); return false;">View as plain text</a></span></div>
<div class="syntax_hilite"><span class="langName">JavaScript:</span>
<div id="javascript-6">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/// &lt;summary&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/// Find a DOM element's child node that matches a given string.</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/// &lt;/summary&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/// &lt;param name=&quot;currentElement&quot; type=&quot;HTMLHtmlElement&quot;&gt;DOM Element to traverse&lt;/param&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/// &lt;param name=&quot;sID&quot; type=&quot;String&quot;&gt;html id we're looking for&lt;/param&gt;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #009900; font-style: italic;">/// &lt;returns type=&quot;HTMLHtmlElement&quot;&gt;The matching html element&lt;/returns&gt;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #003366; font-weight: bold;">function</span> childNodeByID<span style="color: #66cc66;">&#40;</span>currentElement, sID<span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>currentElement<span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #003366; font-weight: bold;">var</span> result = <span style="color: #003366; font-weight: bold;">null</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>currentElement.<span style="color: #006600;">id</span> == sID<span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; result = currentElement;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span> </div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">else</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span style="color: #009900; font-style: italic;">// Traverse the tree</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span style="color: #003366; font-weight: bold;">var</span> i=<span style="color: #CC0000;color:#800000;">0</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span style="color: #003366; font-weight: bold;">var</span> currentElementChild=currentElement.<span style="color: #006600;">childNodes</span><span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">while</span> <span style="color: #66cc66;">&#40;</span>currentElementChild<span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#123;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #009900; font-style: italic;">// Recursively traverse the tree structure of the child node</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;result = childNodeByID<span style="color: #66cc66;">&#40;</span>currentElementChild, sID<span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #66cc66;">&#40;</span>result<span style="color: #66cc66;">&#41;</span> <span style="color: #000066; font-weight: bold;">break</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;i++;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp;currentElementChild=currentElement.<span style="color: #006600;">childNodes</span><span style="color: #66cc66;">&#91;</span>i<span style="color: #66cc66;">&#93;</span>;</div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp;&nbsp; &nbsp; &nbsp;<span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">return</span> result;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color: #66cc66;">&#125;</span></div>
</li>
<li style="font-weight: bold;color:#26536A;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #66cc66;">&#125;</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>I found the meat of this function at <a href="http://www.permadi.com/tutorial/domTree/index.html">permadi.com</a> and modified it for my own use.</p>

<p><a href="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?a=nfOIYo"><img src="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?i=nfOIYo" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?a=qV9xuI"><img src="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?i=qV9xuI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~4/321514774" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softwareinquisition.com/2008/06/childnodebyid-function-for-web-extensibility/feed</wfw:commentRss>
		<feedburner:origLink>http://www.softwareinquisition.com/2008/06/childnodebyid-function-for-web-extensibility</feedburner:origLink></item>
		<item>
		<title>The future of QuickTest Pro</title>
		<link>http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~3/315030211/the-future-of-quicktest-pro</link>
		<comments>http://www.softwareinquisition.com/2008/06/the-future-of-quicktest-pro#comments</comments>
		<pubDate>Thu, 19 Jun 2008 00:49:18 +0000</pubDate>
		<dc:creator>Will Roden</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[HP-Software-Universe-2008]]></category>

		<category><![CDATA[qtp]]></category>

		<category><![CDATA[QTP Atlantis]]></category>

		<category><![CDATA[QTP-10]]></category>

		<category><![CDATA[QTP-9.5]]></category>

		<category><![CDATA[Quality Center]]></category>

		<category><![CDATA[Quality Center 10.0]]></category>

		<category><![CDATA[QuickTest Pro]]></category>

		<category><![CDATA[QuickTest Pro 10.0]]></category>

		<category><![CDATA[QuickTest Pro Atlantis]]></category>

		<guid isPermaLink="false">http://www.softwareinquisition.com/?p=100</guid>
		<description><![CDATA[HP just gave a revealing presentation about the next version of QuickTest Pro.  It is codenamed Atlantis, and it will probably be called QuickTest Pro 10.0.  QTP 10 is targeted to be released in the beginning of 2009.
I'll break down some of the features that were discussed.

IDE Improvements

Adding a TODO pane populated by [...]]]></description>
			<content:encoded><![CDATA[<p>HP just gave a revealing presentation about the next version of QuickTest Pro.  It is codenamed Atlantis, and it will probably be called QuickTest Pro 10.0.  QTP 10 is targeted to be released in the beginning of 2009.</p>
<p>I'll break down some of the features that were discussed.<br />
<span id="more-100"></span></p>
<h2>IDE Improvements</h2>
<ul>
<li>Adding a TODO pane populated by comments prefixed with TODO: .  This is similar to what Test Design Studio and many other IDEs do.</li>
<li>Dynamic Surrounding - I'm unsure about this feature, as I haven't heard the term Dynamic Surrounding before.  The presenter indicated that it basically meant auto indenting code within If statements and loops, but QTP's IDE already does that, so I must have misunderstood.  Maybe this is something like the surround snippets in Test Design Studio.  HP would do well to include something like that in QTP.</li>
<li>IntelliSense Improvements - three areas where IntelliSense will be improved
<ul>
<li>Adding second-level IntelliSense -- example given was if an objects property is also an object, then IntelliSense will be provided for that object as well.</li>
<li>Inner Object IntelliSense.  So you won't lose IntelliSense after you type WebEdit().Object</li>
<li>Com object IntelliSense.  IntelliSense will be provided for any COM object defined with createobject()</li>
</ul>
</li>
<li>Toolbar Customization - You will be able to customize the toolbar to include buttons for launching various other applications.  I think this may be something along the lines of Test Design Studio's external functions.</li>
</ul>
<h2>Report Improvements</h2>
<ul>
<li>Export reports to PDF and Doc files</li>
<li>Define standard report formats</li>
<li>Embed your own images and screenshots in reports</li>
<li>Jump to a script line in QTP from a report</li>
</ul>
<h2>Quality Center</h2>
<p>I'm not a Quality Center user, so I don't know what some of these features mean.  I'm just transcribing them for those of you who do.</p>
<p>The presenter said that Quality Center Integration is the main area of focus for Atlantis.  QC Atlantis will release at the same time as QTP Atlantis.</p>
<ul>
<li>External Resources Module in QC.  Allows you to manage QC integrations.<br />
QC will understand what the assets of QTP tests are and how to manage them</li>
<li>Use QC’s internal versioning to version tests and assets</li>
<li>Comparison tool, compare QTP tests and assets to choose which one to use</li>
<li>Add sharing of assets between projects</li>
<li>Manage QC from within QTP</li>
<li>From with QTP, open a specific QC asset, including specifying the revision from QCs version control</li>
<li>When you open an asset in QTP, it will automatically be checked out from QC</li>
</ul>

<p><a href="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?a=47kS05"><img src="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?i=47kS05" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?a=xbbJCI"><img src="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?i=xbbJCI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~4/315030211" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softwareinquisition.com/2008/06/the-future-of-quicktest-pro/feed</wfw:commentRss>
		<feedburner:origLink>http://www.softwareinquisition.com/2008/06/the-future-of-quicktest-pro</feedburner:origLink></item>
		<item>
		<title>Let’s talk QTP</title>
		<link>http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~3/314778976/lets-talk-qtp</link>
		<comments>http://www.softwareinquisition.com/2008/06/lets-talk-qtp#comments</comments>
		<pubDate>Wed, 18 Jun 2008 17:45:15 +0000</pubDate>
		<dc:creator>Will Roden</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.softwareinquisition.com/?p=99</guid>
		<description><![CDATA[I've already met a couple of you at HP Software Universe, and I'm interested in meeting as many Inquisition readers as possible.  If you happen to see me, please come introduce yourself.
I look just like this, except I'm not wearing glasses.


]]></description>
			<content:encoded><![CDATA[<p>I've already met a couple of you at HP Software Universe, and I'm interested in meeting as many Inquisition readers as possible.  If you happen to see me, please come introduce yourself.</p>
<p>I look just like this, except I'm not wearing glasses.</p>
<p><a href="http://www.flickr.com/photos/paperhat/8939063/" title="DSC04516 by paperhat, on Flickr"><img src="http://farm1.static.flickr.com/7/8939063_198bd52d07.jpg" width="500" height="332" alt="DSC04516" /></a></p>
<p><span id="more-99"></span></p>

<p><a href="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?a=9xjUL4"><img src="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?i=9xjUL4" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?a=sBJG3I"><img src="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?i=sBJG3I" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~4/314778976" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softwareinquisition.com/2008/06/lets-talk-qtp/feed</wfw:commentRss>
		<feedburner:origLink>http://www.softwareinquisition.com/2008/06/lets-talk-qtp</feedburner:origLink></item>
		<item>
		<title>HP iz haX0rz</title>
		<link>http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~3/314746741/hp-iz-hax0rz</link>
		<comments>http://www.softwareinquisition.com/2008/06/hp-iz-hax0rz#comments</comments>
		<pubDate>Wed, 18 Jun 2008 16:49:45 +0000</pubDate>
		<dc:creator>Will Roden</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[HP-Software-Universe-2008]]></category>

		<category><![CDATA[qtp]]></category>

		<category><![CDATA[QuickTest-Pro-9.5]]></category>

		<category><![CDATA[Security]]></category>

		<category><![CDATA[SQL Injection]]></category>

		<guid isPermaLink="false">http://www.softwareinquisition.com/?p=98</guid>
		<description><![CDATA[Caleb Sima from SPI dynamics is presenting on the main stage.  Demoing SQL injection.  This is pretty common stuff, but his presentation is making it much more accessible than others I've seen.
He showed SPI's SQL Injector tool, and I could feel the fear coming from part of the audience.  I suspect he [...]]]></description>
			<content:encoded><![CDATA[<p>Caleb Sima from SPI dynamics is presenting on the main stage.  Demoing SQL injection.  This is pretty common stuff, but his presentation is making it much more accessible than others I've seen.</p>
<p>He showed SPI's SQL Injector tool, and I could feel the fear coming from part of the audience.  I suspect he is going to ease their fear by telling them how they can buy his product.</p>

<p><a href="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?a=yOvsE3"><img src="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?i=yOvsE3" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?a=2C7VaI"><img src="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?i=2C7VaI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~4/314746741" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softwareinquisition.com/2008/06/hp-iz-hax0rz/feed</wfw:commentRss>
		<feedburner:origLink>http://www.softwareinquisition.com/2008/06/hp-iz-hax0rz</feedburner:origLink></item>
		<item>
		<title>Zombies are taking over</title>
		<link>http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~3/314052735/zombies-are-taking-over</link>
		<comments>http://www.softwareinquisition.com/2008/06/zombies-are-taking-over#comments</comments>
		<pubDate>Tue, 17 Jun 2008 20:00:07 +0000</pubDate>
		<dc:creator>Will Roden</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.softwareinquisition.com/?p=97</guid>
		<description><![CDATA[I'm waiting for the first HPSU keynote to start.  They are playing some pop music and actors dressed as zombies are roaming through the audience.  I don't know who is talking at this session yet.
1:12p - Now a blindfolded tightrope walker is going over the stage while the zombies below try to get [...]]]></description>
			<content:encoded><![CDATA[<p>I'm waiting for the first HPSU keynote to start.  They are playing some pop music and actors dressed as zombies are roaming through the audience.  I don't know who is talking at this session yet.</p>
<p>1:12p - Now a blindfolded tightrope walker is going over the stage while the zombies below try to get high enough to get at him.  Presumably to make him part of their zombie army.<br />
<span id="more-97"></span><br />
1:14p - Oh no, he slipped...but he seems to have grabbed on to the tight rope with his hands.  That was a close call.</p>
<p>1:16p - A bunch of preppy types in orange shirts and khakis are dispatching the zombies, and somehow our tightrope walker has shed his blindfold.</p>
<p>1:17p - David Gee just took the stage.  He says that whole thing was some sort of metaphor.</p>
<p>1:20p - David Gee says this is going to be the biggest and best HPSU ever, and he seems very thankful to a bunch of sponsors.</p>
<p>1:21p - The first speaker is Tom Hogan, senior vp of software at HP.</p>
<p>1:24p - I'm drifting away...too much marketing speak...</p>
<p>1:26p - Moving on to statistics now.  All the statistics seem to spell doom for every business ever.</p>
<p>1:28p - Kids these days...they don't use email...they use text messaging</p>
<p>1:29p - battery is running low and i left my power cord in the hotel room.</p>
<p>1:49p - I got the power cord.  Now that I'm back, they've moved on to Q&#038;A.  One question on the board, that I want to hear the answer to is why their support site sucks.  I bet he doesn't answer that one.</p>
<p>1:51p - Addressing support:<br />
 - They are trying to replace a bunch of people they lost in the transition.  I wonder why they lost people.  Do they not know how to hang on to their talent?<br />
 - They are throwing money at the support site.<br />
 - Getting some new helpdesk software.<br />
Sounds like a non-answer to me.</p>
<p>2:02 - This part is wrapping up and none too soon.  This hour has been largely free of actual content.</p>

<p><a href="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?a=f1MjdL"><img src="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?i=f1MjdL" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?a=g4ymRI"><img src="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?i=g4ymRI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~4/314052735" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softwareinquisition.com/2008/06/zombies-are-taking-over/feed</wfw:commentRss>
		<feedburner:origLink>http://www.softwareinquisition.com/2008/06/zombies-are-taking-over</feedburner:origLink></item>
		<item>
		<title>Live from Las Vegas</title>
		<link>http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~3/313357244/live-from-las-vegas</link>
		<comments>http://www.softwareinquisition.com/2008/06/live-from-las-vegas#comments</comments>
		<pubDate>Mon, 16 Jun 2008 22:54:21 +0000</pubDate>
		<dc:creator>Will Roden</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[HP-Software-Universe-2008]]></category>

		<category><![CDATA[qtp]]></category>

		<guid isPermaLink="false">http://www.softwareinquisition.com/?p=96</guid>
		<description><![CDATA[I've just checked in to the swank Palazzo hotel in Las Vegas for HP Software Universe.
I don't know if it qualifies as live blogging, but I will be posting a few updates throughout the week about goings on here.
UPDATE:
You can also read coverage of HPSU 2008 on loadtester.com.  They also have a HPSU bingo [...]]]></description>
			<content:encoded><![CDATA[<p>I've just checked in to the swank Palazzo hotel in Las Vegas for HP Software Universe.</p>
<p>I don't know if it qualifies as live blogging, but I will be posting a few updates throughout the week about goings on here.</p>
<p>UPDATE:</p>
<p>You can also read coverage of <a href="http://www.loadtester.com/hpu2008/">HPSU 2008</a> on loadtester.com.  They also have a HPSU bingo card for those attending.  One of the squares on the card is in the title of my presentation:  Web 2.0.</p>

<p><a href="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?a=ZOiBdj"><img src="http://feeds.feedburner.com/~a/softwareinquisition/nfIt?i=ZOiBdj" border="0"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?a=UfqXqI"><img src="http://feeds.feedburner.com/~f/softwareinquisition/nfIt?i=UfqXqI" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/softwareinquisition/nfIt/~4/313357244" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.softwareinquisition.com/2008/06/live-from-las-vegas/feed</wfw:commentRss>
		<feedburner:origLink>http://www.softwareinquisition.com/2008/06/live-from-las-vegas</feedburner:origLink></item>
	</channel>
</rss>
