<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Adam Goucher</title>
	
	<link>http://adam.goucher.ca</link>
	<description>Quality through Innovation</description>
	<lastBuildDate>Mon, 09 Nov 2009 16:25:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/AdamGoucher" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Two items from this week’s Writing Excuses</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/VO6fFB8YgiM/</link>
		<comments>http://adam.goucher.ca/?p=1303#comments</comments>
		<pubDate>Mon, 09 Nov 2009 16:25:47 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1303</guid>
		<description><![CDATA[It&#8217;s Monday, which means it is Writing Excuses day! Two blurbs to bring to your attention.

One of the interesting things about comics is that there is no real, set format that everyone uses. Every writer uses their own format and style. There is a lot of books that will show scripts that different comic writers [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s Monday, which means it is <a href="http://www.writingexcuses.com/2009/11/08/writing-excuses-season-3-episode-24-writing-comics-with-jake-black/">Writing Excuses</a> day! Two blurbs to bring to your attention.<br />
<br />
<i>One of the interesting things about comics is that there is no real, set format that everyone uses. Every writer uses their own format and style. There is a lot of books that will show scripts that different comic writers use, their style. I&#8217;ve settled on a style that I like, but what it really comes down to is: as long as your stage direction and your dialog are clear enough that the rest of the creative team can figure out what is going on the page, that&#8217;s really what matters.</i><br />
<br />
Think about this while writing your Test Strategies, Test Plans or even Test Cases. There is no single way to do any of those. Each and every person will have variations that they evolve over the course of their career. The trick to to make that format work with the rest of your team. And that&#8217;s actually not that hard of a trick.<br />
<br />
<i>You can break the rules once you know them, and you are breaking them on purpose</i><br />
<br />
This one applies not only to a person&#8217;s entire career as a tester, but when you are changing organizations as well. Figure out the culture, <i>and the origins of that culture</i>, and then start breaking the rules.<br />
<br />
Mercilessly.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/VO6fFB8YgiM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1303</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1303</feedburner:origLink></item>
		<item>
		<title>A Smattering of Selenium #6</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/w7qRIrRymkc/</link>
		<comments>http://adam.goucher.ca/?p=1300#comments</comments>
		<pubDate>Sat, 07 Nov 2009 04:56:12 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1300</guid>
		<description><![CDATA[It would appear that I am on a weekly release schedule for this. I thought it was more random than that, but post timestamps disagree with that notion.


Sauce RC &#8211; Windows installer and launcher for Se-RC from Sauce Labs. (On here not just because I am doing some work for them, but this could be [...]]]></description>
			<content:encoded><![CDATA[<p>It would appear that I am on a weekly release schedule for this. I thought it was more random than that, but post timestamps disagree with that notion.<br />
</p>
<ul>
<li><a href="http://saucelabs.com/products/sauce-rc">Sauce RC</a> &#8211; Windows installer and launcher for Se-RC from Sauce Labs. (On here not just because I am doing some work for them, but this could be an important event in the Se timeline. Think along the lines of the launch of Ubuntu&#8217;s commercial offerings of Debian for example.)</li>
<li><a href="http://www.phpunit.de/manual/3.1/en/selenium.html">PHPUnit and Selenium</a> &#8211; Seems Se has official blessing of the PHPUnit folks since they have a dedicated chapter to in their official docs.</li>
<li>Though I cannot canonically claim to be the <a href="http://adam.goucher.ca?p=1017">first one who thought of it</a>, the idea of integrating YSlow and Se is getting a bit of traction.
<ul>
<li><a href="http://stdev.wordpress.com/2009/10/29/yslow-selenium/">Performance Feedback with YSlow &#038; Selenium</a></li>
<li><a href="http://tech.smartfocusdigital.com/2009/10/automated-performance-collection-and.html">Automated Performance Collection and Reporting</a> &#8211; from this year&#8217;s GTAC. (<a href="http://docs.google.com/a/gtac.biz/embed?docid=0AUf_Z3hmuohZZHhyNzRwNV8yMTFmZmp6cTRkZA">Slides</a> and <a href="http://www.youtube.com/watch?v=qQgDDAan4rM&#038;feature=player_embedded">video</a>)
</ul>
<li><a href="http://scottcsims.com/wordpress/?p=90">Run selenium ruby scripts in parallel from Team City</a> &#8211; Parallelism is the next wave of Se trickiness I think.</li>
<li><a href="http://demongin.org/blog/781">Batch Script to Start Selenium RC Server on Windows</a> &#8211; It&#8217;s appalling that kids these days don&#8217;t know how to write batch scripts; here is an Se focused howto</li>
<li><a href="http://blog.codecentric.de/en/2009/08/fitnesse-vs-robot-framework-%E2%80%93-agile-testing-tools/">FitNesse vs. Robot Framework – Agile Testing Tools</a> &#8211; A bit of a shootout between the two tools using Selenium tests</li>
<li><a href="http://blip.tv/file/2794176">How to test your web apps in the cloud with Selenium</a> from a recent JS.Chi()</li>
<li><a href="http://adhockery.blogspot.com/2009/11/talk-on-selenium-rc-testing-in-grails.html">Talk on Selenium RC Testing In Grails</a> &#8211; Robert Fletcher is showing off his Se Grails plugin in London November 20.</li>
<li><a href="http://www.chriscowan.us/2009/11/cucumber-selenium-machinist/">Cucumber + Selenium + Machinist</a> &#8211; like the title says</li>
<li><a href="http://www.trouble.net.au/blog/korny/2009/11/03/behaviour-driven-development-with-cucumber-and-selenium/">Behaviour Driven Development with Cucumber and Selenium<a/></li>
<li><a href="http://www.eventbrite.com/event/373589416/twitter">Web Application Testing With Selenium</a> &#8211; If you Glasgow on November 10, this might be fun</li>
<li><a href="http://www.g2ix.com/selenium-creating-firefox-profile">Creating Firefox Profile</a> &#8211; Sooner or later, most teams tend to want to do this</li>
<li><a href="http://raibledesigns.com/rd/entry/testing_gwt_libraries_with_selenium">Testing GWT Libraries With Selenium and Maven</a></li>
<li><a href="http://www.yuiblog.com/blog/2009/11/05/video-adams-yuiconf2009/">Automated Integration Testing with YUI Test, Selenium and Hudson</a></li>
<li><a href="http://professionalaspnet.com/archive/2009/11/05/Using-CSS-Selectors.aspx">Using CSS Selectors</a> &#8211; While not Se specific, CSS Selectors are important things to understand</li>
<li><a href="http://github.com/jatimo/cesTestSelenium">cesTestSelenium</a> &#8211; no idea wheat &#8216;objective symfony testing harness for selenium with lime integration&#8217; means, but&#8230;</li>
<li><a href="http://grails.org/plugin/selenium-rc">Grails Selenium RC Plugin</a> &#8211; Been mentioned before, but now it is released</li>
<li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/w7qRIrRymkc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1300</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1300</feedburner:origLink></item>
		<item>
		<title>Joy (and some Awesome)</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/TtFE9F1QKwk/</link>
		<comments>http://adam.goucher.ca/?p=1296#comments</comments>
		<pubDate>Mon, 02 Nov 2009 22:48:01 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1296</guid>
		<description><![CDATA[One of my core beliefs around work is that it shouldn&#8217;t suck. And when it does suck, you need to move somewhere else. Perhaps in the same field, perhaps to something completely different. I didn&#8217;t have a term for it until I read Brian Marick&#8217;s Ease and Joy.

Doing your job should be an act of [...]]]></description>
			<content:encoded><![CDATA[<p>One of my core beliefs around work is that it shouldn&#8217;t suck. And when it does suck, you need to move somewhere else. Perhaps in the same field, perhaps to something completely different. I didn&#8217;t have a term for it until I read Brian Marick&#8217;s <a href="http://www.exampler.com/ease-and-joy.html">Ease and Joy</a>.<br />
<br />
Doing your job should be an act of joy.<br />
<br />
Armed with a label for the concept I am starting to see it more and more. Like on the back page of today&#8217;s newspaper.<br />
<br />
BMW Canada (and maybe internationally) has a new ad campaign called simply &#8216;Joy&#8217;. Here is the copy from the ad.<br />
<br />
<i>JOY.<br />
On the back of this three-letter word, we build a company.<br />
Independent in spirit, philosophy, and practice.<br />
Accountable to no one but the driver.<br />
We do not build cars.<br />
We are the creators of emotions.<br />
We are the guardians of exhilaration, thrills, and chills.<br />
We are the Joy of Driving.<br />
No car company can rival our history.<br />
Replicate our passion.<br />
See our vision.<br />
Innovation is our backbone, but Joy is our heart.<br />
We will not stray from out three-letter purpose. We will nurture it.<br />
We will make Joy smarter. We will push it, test it, break it &#8211; then build it again.<br />
More efficient, more dynamic.<br />
We will give the world the keys to Joy and they will take it for a ride.<br />
And while others try to promise everything, we promise one thing.<br />
The most personal, cherished, and human of all emotions.<br />
This is the story of BMW.<br />
This is the story of Joy.</i><br />
<br />
AWESOME!<br />
<br />
BMW just laid claim to Joy! That&#8217;s pretty bold. Bigger, stronger, faster. Sure, they could have taken up those attributes, but no, they chose Joy which I think wins. And wins <u>big</u>.<br />
<br />
Could your company even begin to start saying it stood for Joy? Very few can. Too often it is a different three-letter word: MEH. Meh does not win. Meh doesn&#8217;t even get to the finish lie.<br />
<br />
Or how about LIE. Very often companies that build with that as a basic attribute look amazing in the warmups, but when it really counts they trip and skin their knees when leaving the starting blocks.<br />
<br />
Now I&#8217;m not naive enough to think that they have rebuilt the company around Joy. This is marketing after all and Joy is a fantastic idea for a campaign. That doesn&#8217;t mean you can&#8217;t <i>actually</i> build your company (or team) around it. You owe it to yourself, your employees and your customers.<br />
<br />
Now go watch this <a href="http://www.bmw.ca/ca/en/insights/technology/joy/bmw_joy.html">little video that introduces the campaign</a>. Here is the spoken bits.<br />
<br />
<i>We are a car company.<br />
But we don&#8217;t just make cars; we make time machines, build snowplows and works of art.<br />
We inspire fans and fan clubs.<br />
We realized a long time ago that what you make people feel is just as important was what you make.<br />
Joy is BMW.</i><br />
<br />
The second last line is the most important one.<br />
<br />
<b>We realized a long time ago that what you make people feel is just as important was what you make.</b><br />
<br />
I&#8217;m now thinking that Joy is directly tied to Awesome. See almost anything Kathy Sierra has been talking about for a couple years ago. Like this Ignite from here called <a href="http://radar.oreilly.com/2009/10/ignite-show-kathy-sierra-on-fe.html">Better Is Better</a><br />
<br />
<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/Str2K98JnMc&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Str2K98JnMc&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object><br />
<br />
Here&#8217;s your homework: </p>
<ul>
<li>How are you increasing Joy? For yourself? Your team? Your company? <i>For your customers?</i></li>
<li>How are you enabling Awesome?</li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/TtFE9F1QKwk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1296</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1296</feedburner:origLink></item>
		<item>
		<title>Vehement disagreement is desirable</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/z6sgIGlTvBQ/</link>
		<comments>http://adam.goucher.ca/?p=1295#comments</comments>
		<pubDate>Sun, 01 Nov 2009 15:37:29 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1295</guid>
		<description><![CDATA[The October 29, 2009 edition of Prime Time Sports had a segment with Keith Law about the Blue Jays&#8217; new General Manager. In specific, about whether or not he should hire someone with a tonne of baseball experience as a mentor; he is after all only 32. (Yes, younger than me and running a major [...]]]></description>
			<content:encoded><![CDATA[<p>The October 29, 2009 edition of <a href="http://www.fan590.com/onair/primetimesports/">Prime Time Sports</a> had a segment with <a href="http://en.wikipedia.org/wiki/Keith_Law">Keith Law</a> about the Blue Jays&#8217; new General Manager. In specific, about whether or not he should hire someone with a tonne of baseball experience as a mentor; he is after all only 32. (Yes, younger than me and running a major baseball franchise. No, I&#8217;m not feeling career failure. Not at all&#8230;). The general feeling is &#8216;Yes&#8217; and that regardless of age or experience you need a half dozen people you can respect to bounce ideas off.<br />
<br />
Here is an ish transcript of what Keith said during one critical part of the conversation. I&#8217;ve cleaned it up a bit for clarity and added annotations for people not up to speed on the Jays.<br />
<br />
<i>What I&#8217;ve heard about those [Pat] Gillick (former GM for Jays when they won their back-to-back World Series) years is that their biggest problem was actually making a decision. Gillick was very big on &#8216;everyone in the room has to be on-board&#8217;. And that works fine if the room is small, but their rooms were really packed. Now if [Alex] Anthopoulos (the new GM of the Jays) is willing to just say &#8216;You know what? Two thirds of us are pointing in the same direction and I like it; that&#8217;s how were are going.&#8217; You have to be willing to have advisors below you who vehemently disagree with you and still go in the other direction. And then everyone needs to walk out of the room and be fine with it. It was a huge problem with [J.P.] Ricciardi (the most recent former GM) that his advisors could not disagree with him. You were just not allowed. If he had already decided what to do you, couldn&#8217;t point in another direction. You couldn&#8217;t walk out of the room feeling like we are doing the wrong thing. That was unacceptable.</i><br />
<br />
This comes back to the Devil&#8217;s Advocate idea and its lack could explain why second-time entrepreneurs have a harder time at things than they did the first time. On the flip side, you could use who the leaders of an organization surround themselves as a barometer of future success: ex-consultants and yes-men, not so good; people willing to say call out the boss&#8217; idiot ideas is much better. The boss still has to be the one who makes the decision, but if they are not cultivating a culture where they can be disagreed with, then they are leading a sick company.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/z6sgIGlTvBQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1295</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1295</feedburner:origLink></item>
		<item>
		<title>Devil’s Advocate</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/RELOad1hwC8/</link>
		<comments>http://adam.goucher.ca/?p=1294#comments</comments>
		<pubDate>Sun, 01 Nov 2009 02:58:16 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1294</guid>
		<description><![CDATA[The book Billion Dollar Lessons is making the business press rounds this month. I don&#8217;t have a copy, but that has never stopped me from writing about a book. Especially when a review in Canadian Business does a nice job of summarizing things.

It’s this often-demonstrated absence of sober second thought in the boardroom that has [...]]]></description>
			<content:encoded><![CDATA[<p>The book <a href="http://www.billiondollarlessons.com/">Billion Dollar Lessons</a> is making the business press rounds this month. I don&#8217;t have a copy, but that has never stopped me from writing about a book. Especially when a <a href="http://www.canadianbusiness.com/after_hours/lifestyle_products/article.jsp?content=20091026_10027_10027">review in Canadian Business</a> does a nice job of summarizing things.<br />
<br />
<i>It’s this often-demonstrated absence of sober second thought in the boardroom that has Carroll and Mui proposing a formula to build disagreement into the corporate strategic process — what they call the devil’s advocate review.</i><br />
<br />
According to the review, this devil&#8217;s advocacy process is the key to the success of business. Just having someone there challenging ideas is not enough though. It has be ingrained in to the culture of the organization.<br />
<br />
<i>Carroll and Mui don’t propose such a review as an alternative method for setting strategy, nor do they suggest that it should override a business’s top executives. But they want executives, senior managers, and board members to “expect, accept, and even demand frank discussion and robust analysis whenever ‘bet the company’ moves are on the table.”</i><br />
<br />
In other words, even though the ego likes it, don&#8217;t surround yourself with &#8216;yes men&#8217;.<br />
<br />
And in the testing community I belong to we also &#8216;expect, accept and even demand&#8217; our ideas to be challenged and discussed. It&#8217;s how CAST operates, and is in fact embodied in the guiding principles of the AST. I think in both cases it makes for better ideas as a result, though I agree that sometimes the &#8216;frank discussion&#8217; seems more unfriendly and personal at times.<br />
<br />
Is your test group the devil&#8217;s advocate? And does test leadership, and those up the chain from them also take up that mantle as well? A muted devil&#8217;s advocate isn&#8217;t a very effective one.<br />
<br />
Oh, and a bit of cool linguistic history. The term <i>devil&#8217;s advocate</i> comes from the Catholic Church&#8217;s <a href="http://en.wikipedia.org/wiki/Devil%27s_advocate">promotor fidel</a> whose job is to question sainthood appointments.<br />
<br />
And if you are interested in the strategies that companies pursue at their peril without serious devil&#8217;s advocacy, this presentation lists.<br />
</p>
<div style="width:425px;text-align:left" id="__ss_975177"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/jdbsf/Billion-Dollar-Lessons-Learning-From-Others-Failures" title="Billion Dollar Lessons   Learning From Others Failures">Billion Dollar Lessons   Learning From Others Failures</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=BillionDollarLessonsLearningFromOthersFailures-123343093793-phpapp01&#038;stripped_title=Billion-Dollar-Lessons-Learning-From-Others-Failures" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=BillionDollarLessonsLearningFromOthersFailures-123343093793-phpapp01&#038;stripped_title=Billion-Dollar-Lessons-Learning-From-Others-Failures" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/RELOad1hwC8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1294</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1294</feedburner:origLink></item>
		<item>
		<title>Adoption Velocity</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/MYY9mlhgagk/</link>
		<comments>http://adam.goucher.ca/?p=1293#comments</comments>
		<pubDate>Sun, 01 Nov 2009 02:00:44 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1293</guid>
		<description><![CDATA[Canadian Business has a piece called The downside of overnight success which talks about a paper called How Adoption Speed Affects the Abandonment of Cultural Tastes. (Fortune also covers it here.) The main argument of the research is not that certain products (like Crocs) don&#8217;t fall out of favor as fast at they do because [...]]]></description>
			<content:encoded><![CDATA[<p>Canadian Business has a piece called <a href="http://www.canadianbusiness.com/managing/strategy/article.jsp?content=20091109_10021_10021">The downside of overnight success</a> which talks about a paper called <a href="http://marketing.wharton.upenn.edu/documents/research/Adoption_Velocity.pdf">How Adoption Speed Affects the Abandonment of Cultural Tastes</a>. (Fortune also covers it <a href="http://www.forbes.com/2009/08/06/new-product-adoption-entrepreneurs-technology-wharton.html">here</a>.) The main argument of the research is not that certain products (like Crocs) don&#8217;t fall out of favor as fast at they do because of an inherent flaw in the product, but because they rose so fast.<br />
<br />
This has <i>HUGE</i> implications for startups. Especially those starting to emerge from stealth mode. Here is three and a half paragraphs from the article.<br />
<br />
<i>In other words, once something reaches a certain threshold of popularity, people no longer want to identify with it. And anything that reaches this threshold quickly has the added disadvantage of little built-up goodwill.<br />
<br />
“This has important implications for businesses,” says Wharton professor Jonah Berger, who co-authored the study with Gaël Le Mens of Barcelona’s Universitat Pompeu Fabra. “They think they want a thing to catch on quickly &#8212; we’ll have greater word-of-mouth, greater product awareness,” he says. But the findings suggest these products will have a shorter lifespan and be less successful overall.<br />
<br />
The study’s results pose an interesting problem for companies: how do you launch a product and hit it big, just not too big or too quickly? One place to start, suggests Terry O’Reilly, a marketing consultant and the host of CBC Radio’s The Age of Persuasion, is to think less about the life of the product and more about the life of the brand. “My mantra to clients is to think long term,” says O’Reilly. “A brand is a long story, not a bunch of short bursts. You want to tell the same story with consistency, but in fresh ways. Clients are always looking between here and Christmas, or between Christmas and the March break, and they need to look beyond that.”<br />
<br />
The brand story &#8212; the messages it evokes for the consumer &#8212; should stress a product’s quality and functionality so that its lifespan will extend long after any novelty wears off, says Claire Tsai of the University of Toronto’s Rotman School of Management. “We need to give consumers a reason to stay with the product,” Tsai says. “People are not going to abandon something like President’s Choice chocolate chip cookies just because they want to disassociate themselves from someone else who eats them &#8212; the quality is not affected.”</i><br />
<br />
What&#8217;s your company&#8217;s messaging and strategy like? Is it going for flash-in-the-pan? Are you building products to meet today&#8217;s buzzwords? Or are building something for the future?<br />
<br />
I&#8217;d be logging bugs on the former.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/MYY9mlhgagk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1293</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1293</feedburner:origLink></item>
		<item>
		<title>Creating a Successful Firm</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/SJc5zI_EdEQ/</link>
		<comments>http://adam.goucher.ca/?p=1292#comments</comments>
		<pubDate>Sun, 01 Nov 2009 01:38:47 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1292</guid>
		<description><![CDATA[Canadian Business magazine had an interview with &#8216;Star-chitect&#8217; Jack Diamond in the December issue. Yes, it isn&#8217;t even November here, but that is magazine cycles for you&#8230; It is a pretty good interview with things like &#8216;How do you know when a project is successful?&#8217; (recognition by peers, and by the public) and &#8216;How do [...]]]></description>
			<content:encoded><![CDATA[<p>Canadian Business magazine had an <a href="http://www.canadianbusiness.com/after_hours/lifestyle_activities/article.jsp?content=20091109_10026_10026&#038;utm_source=business&#038;utm_medium=rss">interview with &#8216;Star-chitect&#8217; Jack Diamond</a> in the December issue. Yes, it isn&#8217;t even November here, but that is magazine cycles for you&#8230; It is a pretty good interview with things like &#8216;How do you know when a project is successful?&#8217; (recognition by peers, and by the public) and &#8216;How do you deal with a difficult client?&#8217; (what people say isn’t always what they mean), but the best one is the final one.<br />
<br />
<i>What goes into creating a successful firm?<br />
<br />
People know we’re very serious about architecture, so we attract bright young people. One of the keys to our success is the Friday-afternoon meeting where the entire firm gathers to review projects, and there’s criticism and discussion about them. At those discussions, we talk only about architecture, not about insurance or liability or a burst pipe on a construction site. And a junior architect, if they have some constructive criticism to offer, it’ll change the direction of the project. So it’s a learning office. In fact, I often think our Friday-afternoon meeting is the best graduate seminar in the city. People are engaged. There’s very seldom a night or a weekend when there are not people working here, and it’s not done by cracking the whip. People say, “We love working here.”</i><br />
<br />
Let&#8217;s break this down.</p>
<ul>
<li>we’re very serious</li>
<li>we attract bright young people</li>
<li>the entire firm gathers</li>
<li>we talk only about architecture</li>
<li>it’s a learning office</li>
<li>people are engaged</li>
<li>People say, “We love working here.”</li>
</ul>
<p>
How many of these things apply to <u>your</u> office?<br />
<br />
Why not?</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/SJc5zI_EdEQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1292</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1292</feedburner:origLink></item>
		<item>
		<title>Shortcuts</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/Idy4bs3v3vE/</link>
		<comments>http://adam.goucher.ca/?p=1291#comments</comments>
		<pubDate>Sun, 01 Nov 2009 01:14:39 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1291</guid>
		<description><![CDATA[I don&#8217;t think I have ever linked to an obituary before, but at the end of this week&#8217;s Maclean&#8217;s magazine there is one for Jean Guy Potvin. It&#8217;s a pretty inspiring tale of someone overcoming the obstacles life throws your way, but there is also a message to be learn too. Here are two relevant [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t think I have ever linked to an obituary before, but at the end of this week&#8217;s Maclean&#8217;s magazine there is <a href="http://www2.macleans.ca/2009/10/29/jean-guy-potvin-1967-2009/">one for Jean Guy Potvin</a>. It&#8217;s a pretty inspiring tale of someone overcoming the obstacles life throws your way, but there is also a message to be learn too. Here are two relevant snippets.<br />
<br />
<i>On May 1, 2003, he was fixing a street sweeper, working beneath the large vehicle. Because it was a quick, simple job, he hadn’t secured the tank with a lock bar. But Jean slipped, knocking a lever, sending the tank crashing down on top of him. His friend, mechanic Harvey Jones, jumped on a forklift, which he used to lift the tank off Jean.</i><br />
<br /> <br />
<i>Jean began mentoring others with spinal cord injuries, taking them on bus rides, to the race track and to the zoo, and became a public speaker for WorkSafeBC—telling his story so others might avoid taking “shortcuts” and getting hurt.</i><br />
<br />
Admittedly, in testing we are unlikely to get physically injured or killed by taking a shortcut, but someone else might. Physically, financially, productivity-ly.<br />
<br />
What&#8217;s the difference between a shortcut and deciding to not do something? I think it has to do with laziness and the assessment of risks. Laziness should never be the motivation for an action. But analyzing the situation, weighing the pros and cons and then making a purposeful decision that <i>looks</i> like laziness is perfectly fine. But it also means that you accept the outcome of any of the risks that end up biting you in the butt later because you did not address them.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/Idy4bs3v3vE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1291</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1291</feedburner:origLink></item>
		<item>
		<title>ATT2009 – From Start to Success with Web Automation</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/6ANTPN-LJEQ/</link>
		<comments>http://adam.goucher.ca/?p=1287#comments</comments>
		<pubDate>Wed, 28 Oct 2009 14:51:56 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1287</guid>
		<description><![CDATA[My session at this year&#8217;s Agile Tour Toronto had the catchy title of &#8216;From Start to Success with Web Automation&#8217;. I think it went well and the feedback cards and post-talk hallway conversations seem to back that up. It was recorded and should show up on DZone at some point so you too can hear [...]]]></description>
			<content:encoded><![CDATA[<p>My session at this year&#8217;s Agile Tour Toronto had the catchy title of &#8216;From Start to Success with Web Automation&#8217;. I think it went well and the feedback cards and post-talk hallway conversations seem to back that up. It was recorded and should show up on <a href="http://dzone.com">DZone</a> at some point so you too can hear my umms, ahhs and other verbal stumbles. Normally I would just post by slides and be done with it, but they are rather Lessig-ish and are just pretty pictures without some accompanying text. So here is both.<br />
</p>
<div style="width:425px;text-align:left" id="__ss_2364672"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/agoucher/from-start-to-success-with-web-automation" title="From Start To Success with Web Automation">From Start To Success with Web Automation</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fromstarttosuccesswithwebautomation-slides-091028054439-phpapp01&#038;stripped_title=from-start-to-success-with-web-automation" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=fromstarttosuccesswithwebautomation-slides-091028054439-phpapp01&#038;stripped_title=from-start-to-success-with-web-automation" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<p>
<a href="http://testobsessed.com">Elisabeth Hendrickson</a> was in Europe recently and gave a keynote in which she identified a number of Key Practices of Agile Testing. While I wasn&#8217;t there, she did list them off on Twitter.</p>
<ul>
<li>Collective Test Ownership</li>
<li>Continuous Integration</li>
<li>Rehearsed Release</a>
<li>Automated Technical (code-level) Tests</li>
<li>Test Driven Development</li>
<li>Exploratory Testing</li>
<li>Automated Business (functional) Tests</li>
<li>Acceptance Test Driven Development</li>
<ul>
Of these Key Practices, three of them directly involve automation at the web level: ATDD, ET and Automated Business (functional) Tests. If you want to get really specific, then they also touch on CI and Collective Test Ownership too so clearly we need to be able to succeed in our web automation efforts if we want to succeed in Agile Testing.<br />
<br />
The problem is, that teams rarely come close to succeeding with them. So much so that automating the front-end of applications is considered a flagrant waste of time and effort in some circles. I&#8217;ve had success though. And I think the reasons for it are applicable outside of just the projects I have worked on.<br />
<br />
If we are aiming for successful automation, we should look at some of the attributes of a successful script commonly has. In other words, successful automation is&#8230;<br />
</p>
<ul>
<li><i>Paranoid</i> &#8211; Never ever, ever, ever, ever, ever, ever, ever trust the client. Just because something says something happened does not mean it has. Account information claimed to be updated? Check the database! As soon as you find yourself trusting things, you <i>will</i> get burned. Get burned too publicly too many times and you will find your time to work on automation being removed and / or the results just shrugged off as inaccurate. Perhaps &#8216;never trust&#8217; is too strong. How about &#8216;trust, but verify&#8217; instead.</li>
<li><i>Efficient and Effective</i> &#8211; A script exists to exercise a single piece of functionality. Just because you test your whole freakin&#8217; app in one script does not mean it is a good idea. True, there will be likely be a huge number of ways in which your script could not complete successfully, but those specific failure modes would be pointedly exercises by some other script. For example, in order to get to the page you want you have to login to the system. Don&#8217;t check the whole login process, just take for granted that it will work. Your login scripts will verify the functionality of the login system. Don&#8217;t worry about it anywhere else.</li>
<li><i>A Student of History and Linguistics</i> &#8211; Automation isn&#8217;t new. There have been lots of research and experience generated in the area over the last 10 &#8211; 15 years. Sometimes you have to invent a better wheel, but you should know about the design of earlier wheels as well. Do your research and build up a library. Something like <a href="http://www.amazon.ca/exec/obidos/ASIN/0131495054/adamgoucher-20/">xUnit Test Patterns</a> should be available on the bookshelf of anyone doing automation for instance. Also know which language to use when. Don&#8217;t fall into the trap of thinking you need to automate in Java just because that is what your application is written in. I, for example, automate in either Ruby or Jython usually; regardless of what the underlying application is written in.</li>
<li><i>Intelligent and Wise</i> &#8211; In Dungeons &amp; Dragons, Intelligence is your intellect or smarts and Wisdom is how you apply it to the talk at hand. Your scripts should be strutting about with 19s or higher in both categories. They should be able to interact with their environment to build their own data and even decision trees. They should also include their own oracles to determine whether the right thing happened, at the right time, in the right manner.</li>
<li><i>Modest</i> &#8211; I kept switching between &#8216;modest&#8217; and &#8216;humble&#8217; for this slide. The concept here is that when your script breaks, it doesn&#8217;t try to hide the fact. It says very obviously <i>I couldn&#8217;t do what you asked <u>here</u> because of <u>this</u></i>. When this happens it should clean up the mess that it left behind so your environment is not in a completely untrustworthy state.</li>
<li><i>Automates Checks and Facilitates Testing</i> &#8211; Michael Bolton has a meme running right now with the difference between <a href="http://www.developsense.com/2009/08/testing-vs-checking.html">Testing and Checking</a>. The key difference between the two is whether the oracle is automated or not. Automation can include the oracle as a <i>check</i> or it can zoom through your application to a specific page to help facilitate a human to do <i>testing</i>. Don&#8217;t confuse the purpose of your script when creating it. Though of course your facilitation script could have a number of checks so the tester knows the environment is, at minimum, ready for their sapience.</li>
</ul>
<p>
Now that you know what your end scripts will look like, you are ready to start writing stuff. Right? Well, not quite yet. Before we do that we need to know a bit about who is going to be the creators, consumers and maintainers of them. I broadly break these categories into two divisions: those who can code and those who can&#8217;t. It is my experience that you have a far greater chance of success if you target the geeks of the organization first.<br />
<br />
Geeks know how to code. They are comfortable inside a text editor and seeing xUnit style automation with all its quirks is not going to phase them in the least. They also know how to <a href="http://adam.goucher.ca/?p=153">Build their own Lightsaber</a> and by applying the DRY principle will abstract out common sequences of commands into helper methods/fixtures. These helper methods will form the basis of your organization&#8217;s DSL.<br />
<br />
Non-geeks are not second class citizens in successful automation by any means, they just have a different skill set that they bring to the table. Often this is in the form of Subject Matter Expertise and what they need is a way to using it efficiently and effectively within the framework. This is best achieved through a DSL that abstracts the technical details away from the business details. And because you had the geeks work on automating stuff first you already have the beginnings of that. The non-technical tester doesn&#8217;t care that there are 250 steps behind the scenes for building 50 shares of AAPL; they just want to be able to call &#8216;buy_stock(AAPL, 50)&#8217; and have it magically work.<br />
<br />
Yes, now you can start actually creating an automated script.<br />
<br />
<u>Record</u><br />
<br />
The first step in a successful automated script to to record the basic skeleton in some means. With the Selenium suite, you use the <a href="http://seleniumhq.org/projects/ide/">Selenium-IDE extension for Firefox</a>. In the actual talk I did a recording of a search operation on a local Wordpress installation in the IDE. Don&#8217;t forget to add your verify and assert statements in. If there is no way for the script for fail, it is not testing (or even checking) in my opinion.<br />
<br />
<img src="http://adam.goucher.ca/wordpress/wp-content/uploads/2009/10/se-ide.png" /><br />
<br />
I almost never save a script within Se-IDE. Instead I&#8217;ll export it out to a real language and run it from within Se-RC. Yes, even if it is just a &#8217;simple&#8217; script. &#8216;Simple&#8217; scripts have a tendency to increase in complexity over time.<br />
<br />
<u>Add Power</u><br />
<br />
The real power of Automation is unlocked when you have a real language, not just vendor-script. I&#8217;ve <a href="http://adam.goucher.ca/?p=1106">argued before</a> that Se-IDE is powerful enough to stay in it, but not powerful enough to really get stuff done.<br />
<br />
Here is the script as exported from Se-IDE into Ruby.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;selenium&quot;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;test/unit&quot;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> direct_export <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">Test::Unit::TestCase</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> setup
    <span style="color:#0066ff; font-weight:bold;">@verification_errors</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#ff6633; font-weight:bold;">$selenium</span>
      <span style="color:#0066ff; font-weight:bold;">@selenium</span> = <span style="color:#ff6633; font-weight:bold;">$selenium</span>
    <span style="color:#9966CC; font-weight:bold;">else</span>
      <span style="color:#0066ff; font-weight:bold;">@selenium</span> = <span style="color:#6666ff; font-weight:bold;">Selenium::SeleniumDriver</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;localhost&quot;</span>, <span style="color:#006666;">4444</span>, <span style="color:#996600;">&quot;*chrome&quot;</span>, <span style="color:#996600;">&quot;http://change-this-to-the-site-you-are-testing/&quot;</span>, <span style="color:#006666;">10000</span><span style="color:#006600; font-weight:bold;">&#41;</span>;
      <span style="color:#0066ff; font-weight:bold;">@selenium</span>.<span style="color:#9900CC;">start</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#0066ff; font-weight:bold;">@selenium</span>.<span style="color:#9900CC;">set_context</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;test_direct_export&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> teardown
    <span style="color:#0066ff; font-weight:bold;">@selenium</span>.<span style="color:#9900CC;">stop</span> <span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#ff6633; font-weight:bold;">$selenium</span>
    assert_equal <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#0066ff; font-weight:bold;">@verification_errors</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> test_direct_export
    <span style="color:#0066ff; font-weight:bold;">@selenium</span>.<span style="color:#CC0066; font-weight:bold;">open</span> <span style="color:#996600;">&quot;/&quot;</span>
    <span style="color:#0066ff; font-weight:bold;">@selenium</span>.<span style="color:#9900CC;">type</span> <span style="color:#996600;">&quot;s&quot;</span>, <span style="color:#996600;">&quot;pirate&quot;</span>
    <span style="color:#0066ff; font-weight:bold;">@selenium</span>.<span style="color:#9900CC;">click</span> <span style="color:#996600;">&quot;searchsubmit&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">begin</span>
        assert_equal <span style="color:#996600;">&quot;pirates are way better than ninjas&quot;</span>, <span style="color:#0066ff; font-weight:bold;">@selenium</span>.<span style="color:#9900CC;">get_text</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;link=pirates are way better than ninjas&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#6666ff; font-weight:bold;">Test::Unit::AssertionFailedError</span>
        <span style="color:#0066ff; font-weight:bold;">@verification_errors</span> <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> $!
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>But like most things in the open source world (especially the Ruby part of it), the code that the IDE produces isn&#8217;t up to the latest coolness. So with a bit of modifications to use the <a href="http://selenium-client.rubyforge.org/">selenium-client</a> gem, we have this code.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;test/unit&quot;</span>
gem <span style="color:#996600;">&quot;selenium-client&quot;</span>, <span style="color:#996600;">&quot;&gt;=1.2.15&quot;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;selenium/client&quot;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> CategoriesTest <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">Test::Unit::TestCase</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> setup
    <span style="color:#0066ff; font-weight:bold;">@verification_errors</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    <span style="color:#0066ff; font-weight:bold;">@browser</span> = <span style="color:#6666ff; font-weight:bold;">Selenium::Client::Driver</span>.<span style="color:#9900CC;">new</span> <span style="color:#996600;">&quot;localhost&quot;</span>, <span style="color:#006666;">4444</span>, <span style="color:#996600;">&quot;*firefox&quot;</span>, <span style="color:#996600;">&quot;http://localhost:5500&quot;</span>, <span style="color:#006666;">10000</span>
    <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">start_new_browser_session</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> teardown
    <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">close_current_browser_session</span>
    assert_equal <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#0066ff; font-weight:bold;">@verification_errors</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> test_search_for_pirates
    <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#CC0066; font-weight:bold;">open</span> <span style="color:#996600;">&quot;/&quot;</span>
    <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">type</span> <span style="color:#996600;">&quot;s&quot;</span>, <span style="color:#996600;">&quot;pirate&quot;</span>
    <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">click</span> <span style="color:#996600;">&quot;searchsubmit&quot;</span>
    assert_equal <span style="color:#996600;">&quot;pirates are way better than ninjas&quot;</span>, <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">get_text</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;link=pirates are way better than ninjas&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Power!<br />
<br />
Or at least the potential for power. The first step for adding power is often to data-drive your script. This is the process of abstracting your script to read data from an external source which is something Se-IDE can&#8217;t do (easily). In an environment of geeks and non-geeks this is often accomplished through the use of CSV files. The chief advantage of this is that you can add to scenarios without actually having to change the commands that are executed; just the inputs change. Here is the same script modified to be data driven through csv.<br />
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;test/unit&quot;</span>
gem <span style="color:#996600;">&quot;selenium-client&quot;</span>, <span style="color:#996600;">&quot;&gt;=1.2.15&quot;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;selenium/client&quot;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> CategoriesTest <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">Test::Unit::TestCase</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> setup
    <span style="color:#0066ff; font-weight:bold;">@verification_errors</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    <span style="color:#0066ff; font-weight:bold;">@browser</span> = <span style="color:#6666ff; font-weight:bold;">Selenium::Client::Driver</span>.<span style="color:#9900CC;">new</span> <span style="color:#996600;">&quot;localhost&quot;</span>, <span style="color:#006666;">4444</span>, <span style="color:#996600;">&quot;*firefox&quot;</span>, <span style="color:#996600;">&quot;http://localhost:5500&quot;</span>, <span style="color:#006666;">10000</span>
    <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">start_new_browser_session</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> teardown
    <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">close_current_browser_session</span>
    assert_equal <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#0066ff; font-weight:bold;">@verification_errors</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> test_search_by_word
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'faster_csv'</span>
&nbsp;
    FasterCSV.<span style="color:#9900CC;">foreach</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'data_driven.csv'</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>word, link_text<span style="color:#006600; font-weight:bold;">|</span>
      <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#CC0066; font-weight:bold;">open</span> <span style="color:#996600;">&quot;/&quot;</span>
      <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">type</span> <span style="color:#996600;">&quot;s&quot;</span>, word
      <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">click</span> <span style="color:#996600;">&quot;searchsubmit&quot;</span>
      assert_equal link_text, <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">get_text</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;link=#{link_text}&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>More Power!<br />
<br />
We can go even further though. We want scripts that can are Intelligent enough to data-drive themselves. Because we have the full power of a real language at our disposal we can hook into the database directly and let the script do its thing. Of course, in order to do this you need to understand at a very deep level what is going on in your application. That knowledge acquisition is a Good Thing though. The more you understand the system, the more complete your mental model becomes and the better testing and thorough checking you can accomplish.<br />
<br />
Again, same script, but driven from the database.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;test/unit&quot;</span>
gem <span style="color:#996600;">&quot;selenium-client&quot;</span>, <span style="color:#996600;">&quot;&gt;=1.2.15&quot;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;selenium/client&quot;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">class</span> CategoriesTest <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">Test::Unit::TestCase</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> setup
    <span style="color:#0066ff; font-weight:bold;">@verification_errors</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    <span style="color:#0066ff; font-weight:bold;">@browser</span> = <span style="color:#6666ff; font-weight:bold;">Selenium::Client::Driver</span>.<span style="color:#9900CC;">new</span> <span style="color:#996600;">&quot;localhost&quot;</span>, <span style="color:#006666;">4444</span>, <span style="color:#996600;">&quot;*firefox&quot;</span>, <span style="color:#996600;">&quot;http://localhost:5500&quot;</span>, <span style="color:#006666;">10000</span>
    <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">start_new_browser_session</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> teardown
    <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">close_current_browser_session</span>
    assert_equal <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#0066ff; font-weight:bold;">@verification_errors</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> test_search_by_word
    <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'mysql'</span>
&nbsp;
    <span style="color:#9966CC; font-weight:bold;">begin</span>
      dbh = Mysql.<span style="color:#9900CC;">real_connect</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;localhost&quot;</span>, <span style="color:#996600;">&quot;root&quot;</span>, <span style="color:#996600;">&quot;&quot;</span>, <span style="color:#996600;">&quot;selenium&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
&nbsp;
      res = dbh.<span style="color:#9900CC;">query</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;select post_title from wp_posts order by rand() limit 1&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">while</span> row = res.<span style="color:#9900CC;">fetch_row</span> <span style="color:#9966CC; font-weight:bold;">do</span>
        <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#CC0066; font-weight:bold;">open</span> <span style="color:#996600;">&quot;/&quot;</span>
        word = row<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot; &quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">type</span> <span style="color:#996600;">&quot;s&quot;</span>, word<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC0066; font-weight:bold;">rand</span><span style="color:#006600; font-weight:bold;">&#40;</span>term.<span style="color:#9900CC;">size</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#93;</span>
        <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">click</span> <span style="color:#996600;">&quot;searchsubmit&quot;</span>
        assert_equal row<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;">0</span><span style="color:#006600; font-weight:bold;">&#93;</span>, <span style="color:#0066ff; font-weight:bold;">@browser</span>.<span style="color:#9900CC;">get_text</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;link=#{row[0]}&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
      res.<span style="color:#9900CC;">free</span>
    <span style="color:#9966CC; font-weight:bold;">ensure</span>
      dbh.<span style="color:#9900CC;">close</span> <span style="color:#9966CC; font-weight:bold;">if</span> dbh
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>OMG! <a href="http://en.wikipedia.org/wiki/Fictional_history_of_Spider-Man#Cosmic_Spider-Man">Cosmic Spider-man</a>-esque Power!<br />
<br />
This is where you want to have your scripts function at for true success. Once you are here, you can have your scripts run continuously if you have a smart runner that notices when new scripts are added into the mix.<br />
<br />
One problem this doesn&#8217;t solve is Permutation Madness problem. This comes from there being a boatload of browser and OS configurations we need to care about in today&#8217;s environment. Selenium Grid is designed to solve this problem. Using a centralized machine you can farm out your script execution to various slave machines which could all have a different configuration.<br />
<br />
This solution doesn&#8217;t scale so well though. Suddenly you need a whole farm of machines to run your tests and that will suck of scare resources to make sure they are all patched, etc. Virtualization helps, but you still need to manage the VMs. Companies like <a href="http://saucelabs.com">Sauce Labs</a> and <a href="http://browsermob.com">Browser Mob</a> exist to remove that maintenance burden from you (and other value add stuff too).<br />
<br />
(Had I been thinking I would have run my script through Sauce Labs but I wasn&#8217;t and didn&#8217;t know how sketchy the wireless was at the venue.)<br />
<br />
Thus far we have covered what a successful script will look like and a recipe for achieving it. But how do you know when you are at risk of running off the rails? In programming terms, you check for smells. Here are the ones I mentioned in the talk. There are assuredly more.</p>
<ul>
<li><i>I need to re-record</i> &#8211; This hints that you are staying the Record phase to long and have not added things like error handling and the robustification that is possible in a real language. If the application has changes  significantly (intentionally) that your script no longer operates at all, throw it out and start with a clean slate. Don&#8217;t try and fix the existing one.</li>
<li><i>Number of Steps</i> &#8211; Various companies are learning and publishing the optimum length of script for ease of maintainability and readability and they seems to be averaging around the 200 step / action mark. If you have 1000 steps in a script then you really need to examine what it is doing. Odds are it is really a couple scripts that have organically grown as a single one.</li>
<li><i>Automate Everything</i> &#8211; The Cult of Automation is alive and well in the Agile community. Somethings should be automated, somethings should not be. Learn the difference.</li>
<li><i>Staying too long at phase of maturity</i> &#8211; Similar to the first one; don&#8217;t get stuck in Se-IDE, Se-RC or Se-Grid. Just because it was the right level before does not mean it is the same one now: new problems surface, new variations of old problems occur. If your Se-RC scripts take 9 hours to run because they run synchronously, then you likely are (well) overdue for the move to Se-Grid or one of the commercial offerings.</li>
<li><i>Trust</i> &#8211; Again, never trust in automation. Verify everything isn&#8217;t a lie. Even if it is a well-intentioned one.</li>
</ul>
<p>The last thing I talked about was Patterns for Success. I put them last because I didn&#8217;t know if I was going to run out of time and figured it was more important to get the Smells (Danger!) in than the Patterns. I didn&#8217;t run out of time so the decision ended up being irrelevant.</p>
<ul>
<li><i>Build a web</i> &#8211; Approach your application from multiple angles in order to build a web across it. Just as a spider catches bugs in its net, you automation can catch them it its. (This was one of the key points of <a href="http://chrismcmahonsblog.blogspot.com/">Chris McMahon</a>&#8217;s Agile 2009 talk.)</li>
<li><i>Tags</i> &#8211; I was taught to organize my scripts by functionality (in Mercury training circa 2000), but the rise of User Stories has people also grouping by User as well. Both systems can work to great success, but there are inherit issues of overlap in these. I&#8217;ve been messing with the idea of &#8216;tagging&#8217; scripts in addition to these structures. This removes the overlap problem as it is actually an important part; scripts are organized on disk by functionality, but tagged with the User(s) they affect. Runners need some modification though. As do Test Management Systems (if you are stuck using them)</li>
<li><i>Metaframeworks</i> &#8211; I publicly demonstrated for the first time the Metaframework I am working on in my &#8217;spare time&#8217; (heh, no wonder it is taking forever). A Metaframework will run and aggregate the results of scripts written in a number of different languages which lets people write them in whatever they are most comfortable. The point is to exercise the application, not your power in dictating the language tests must be in.</li>
<li><i>Sync &#8216;n Run</i> &#8211; See <a href="http://adam.goucher.ca/?p=29">this post</a> for a larger discussion, but essentially, it is &#8216;check <i>everything</i> into version control so deployment is just a sync operation</i>.</li>
<li><i>Design for Parallelism</i> &#8211; It is better to design your scripts initially in such a manner that they can be run (massively) parallel from the get go rather than have to hack it back in later. Things like file and database row contention become issues. The same techniques application developers use to deal with these problems apply just as well to your automation.</li>
<li><i>Data Doesn&#8217;t Have to be Real</i> &#8211; Input data has rules and as long as it adheres to those rules then you are golden. It doesn&#8217;t matter that you cannot pronounce the First Name the script generated, because, well, you don&#8217;t have to. It just needs to be accepted, processed and returned correctly by the system.</li>
<li><i>Test Discovery</i> &#8211; Mentioned before, but having a runner which can automatically detect a new script added into the available scripts pool is powerful. This means that you never have to turn off your scripts.</li>
</ul>
<p>And after a couple clarifying questions, that was it.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/6ANTPN-LJEQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1287</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1287</feedburner:origLink></item>
		<item>
		<title>ATT2009 – Declan Whelan – Building a Learning Culture on Your Agile Team</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/uofU-c_acOg/</link>
		<comments>http://adam.goucher.ca/?p=1284#comments</comments>
		<pubDate>Wed, 28 Oct 2009 02:09:46 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1284</guid>
		<description><![CDATA[Declan Whelan is a local-ish Agile Coach who has started to appear on the speaking circuit (which is a Good Thing). One of his talks is &#8216;Building a Learning Culture on Your Agile Team&#8217; which he has done at least a couple times before Agile Tour landed in Toronto. That practice showed as he was [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://dpwhelan.com/">Declan Whelan</a> is a local-ish Agile Coach who has started to appear on the speaking circuit (which is a Good Thing). One of his talks is &#8216;Building a Learning Culture on Your Agile Team&#8217; which he has done at least a couple times before Agile Tour landed in Toronto. That practice showed as he was confident in the front of the room and knew his content; unlike my umms and aaahs. His main argument is that high functioning Agile teams are ones that are good at learning. This makes sense with the traditional doctrine of spikes to learn, releasing quickly, etc. While learning isn&#8217;t the only attribute that is important, it is I think an important one.<br />
</p>
<ul>
<li><i>Learning is the bottleneck on teams</i> &#8211; <a href="http://www.jbrains.ca/">JB Rainsberger</a></li>
<li>We need to find effective ways to respond to change. That&#8217;s learning.</li>
<li>There is no short circuiting the learning process</li>
<li>If we get really good at learning, we can reduce the learning cycles. And thus deliver value quicker.</li>
<li>Learning and Long Term Value are two sides of the same thing. Think Yin and Yang.</li>
<li>Need to make the environment safe for learning to happen</li>
<li>Book &#8211; <a href="http://www.amazon.ca/exec/obidos/ASIN/0787976377/adamgoucher-20/">Overcoming the Five Dysfunctions of a Team</a></li>
<li>Learning is the acquisition of knowledge and the continuous practice of it</li>
<li>Book &#8211; <a href="http://www.amazon.ca/exec/obidos/ASIN/0385517254/adamgoucher-20/">The Fifth Discipline</a></li>
<li>We learn in three different ways: auditory, kinesthetic, visual</li>
<li>Visual learning needs to be an actual image; just &#8217;seeing&#8217; words is not enough</li>
<li>Book &#8211; <a href="http://www.amazon.ca/exec/obidos/ASIN/1934356050/adamgoucher-20/">Pragmatic Thinking and Learning: Refactor Your Wetware</a></li>
<li>Shu Ha Ri
<ul>
<li>Wow, I am sick of this. Though in most cases it comes of as &#8216;Hey! a cool idea from Japan! Let&#8217;s take it!&#8217;, but it made sense here. I&#8217;m still sick of it though&#8230;</li>
<li>The way you learn and the way you coach are different at each level</li>
<li>The expert may not be the best teacher</li>
<li><a href="http://www.idratherbewriting.com/2007/01/24/the-curse-of-knowledge-the-more-you-know-the-worse-communicator-you-become/">The Curse of Knowledge</a></li>
</ul>
</li>
<li><i>In the beginner&#8217;s mind there are many possibilities, but in the expert&#8217;s there are few.</i> &#8211; Shunryu Suzuki</li>
<li>The opportunity for learning is deeper in the beginner than in the expert</li>
<li>Paper = <a href="http://www.mitchlacey.com/docs/XR4PromiscuousPairingandBeginnersMind.pdf">Promiscuous Pairing and Beginner&#8217;s Mind: Embrace Inexperience</a></li>
<li>Stuff from the Fifth Discipline
<ul>
<li><i>Personal Mastery</i> &#8211; know yourself, biases, models</li>
<li><i>Mental Models</i> &#8211; be able to articulate and put up for critique</li>
<li><i>Shared Vision</i> &#8211; goal <u>and</u> purpose</li>
<li><i>Team Learning</i> &#8211; align learning around the bottleneck in the system</li>
<li><i>Systems Thinking</i> &#8211; end-to-end thinking is better than thinking in terms of silos</li>
</ul>
</li>
<li><a href="http://www.ted.com/talks/gever_tulley_s_tinkering_school_in_action.html">Tinkering School</a> &#8211; go watch the video.</li>
<li>Agile leadership is not about directing, but learning it in the right direction</li>
<li>Learning need&#8230;
<ul>
<li>to be intentional</li>
<li>an infrastructure</li>
<li>is incremental</li>
<li>safe</li>
</ul>
</li>
<li>The single most important thing in Agile? <i>Honest</i> retrospectives</li>
<li>James Shore&#8217;s <a href="http://jamesshore.com/Blog/Etudes-for-Excellence.html">Etudes</a></li>
<li>Book &#8211; <a href="http://www.amazon.ca/exec/obidos/ASIN/0201741571/adamgoucher-20/">Fearless Change</a></li>
<li><a href="http://www.tribes.com/">Tribes Learning Communities</a> &#8211; &#8220;After years of “fix-it” programs focused on reducing student violence, conflict, drug and alcohol, absenteeism, poor achievement, etc., educators and parents now agree, creating a positive school or classroom environment is the most effective way to improve behavior and learning&#8221;</li>
<li>Functional teams are like a nurturing family</li>
<li><i>Our tendency is to be interested in something that is growing in the garden, not in the bare soil itself. But if you want to have a good harvest, the most important thing is to make the soil rich and cultivate it well.</i> &#8211; Shunryu Suzuki</li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/uofU-c_acOg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1284</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1284</feedburner:origLink></item>
		<item>
		<title>A Smattering of Selenium #5</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/Rs9Jdlc89jU/</link>
		<comments>http://adam.goucher.ca/?p=1282#comments</comments>
		<pubDate>Tue, 27 Oct 2009 13:31:44 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1282</guid>
		<description><![CDATA[
Configuring the Selenium Toolkit for Different Environments using the Selenium Toolkit for .NET
Sauce Labs has a new website and commercial support for Selenium
Ruby, Selenium, and the Snow Leopard dance &#8211; another how-to-make-Selenium-work-in-Snow-Leopard post
Selenium 2.0 downloads &#8211; You want bleeding edge? Here is your bleeding edge.
Selenium and ABAP video from SAP TechEd 2009 Demo Jam
Django Selenium [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://www.bryancook.net/2009/10/configuring-selenium-toolkit-for.html">Configuring the Selenium Toolkit for Different Environments</a> using the Selenium Toolkit for .NET</li>
<li><a href="http://saucelabs.com/">Sauce Labs</a> has a new website and commercial support for Selenium</li>
<li><a href="http://agilesoftwaretesting.com/?p=105">Ruby, Selenium, and the Snow Leopard dance</a> &#8211; another how-to-make-Selenium-work-in-Snow-Leopard post</i>
<li><a href="http://code.google.com/p/selenium/downloads/list">Selenium 2.0 downloads</a> &#8211; You want bleeding edge? Here is your bleeding edge.</li>
<li><a href="http://www.computerservice-wolf.com/download/DemoJam-SeleniumABAP/DemoJam-SeleniumABAP.html">Selenium and ABAP video</a> from SAP TechEd 2009 Demo Jam</li>
<li><a href="http://pypi.python.org/pypi/django-selenium-test-runner/0.1.0">Django Selenium test runner</a></li>
<li><a href="http://www.computerminds.co.uk/automating-boring-tasks-selenium-ide">Automating boring tasks with Selenium IDE</a> has a nice example of hacking in loops to Se-IDE (though the &#8216;proper&#8217; solution is of course to drop to Se-RC and do it cleaner in-language)</li>
<li><a href="http://blog.jodiem.com.au/2009/10/26/automated-website-testing-with-selenium/">Automated Website Testing with Selenium</a> is an experience report from Jodie Miners about using Se on a 3 month contract.</li>
<li><a href="http://github.com/robfletcher/grails-selenium-rc/">Se-RC plugin for Grails</a></li>
<li><a href="http://wiki.github.com/aslakhellesoy/cuke4duke">Cuke4Duke</a> brings Cucumber to several programming languages on the JVM. And of course you can write steps in Se</li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/Rs9Jdlc89jU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1282</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1282</feedburner:origLink></item>
		<item>
		<title>Redistributing Microsoft Libraries</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/kowidZ2rJz4/</link>
		<comments>http://adam.goucher.ca/?p=1280#comments</comments>
		<pubDate>Tue, 27 Oct 2009 02:38:23 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1280</guid>
		<description><![CDATA[I spent a bit of time today looking into the redistribution requirements for things that ship with Visual Studio for someone today. (Part of testing is of course to see that we stay in compliance with the various licenses of tools we use to produce software after all.) Here is the verdict.

According the the Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>I spent a bit of time today looking into the redistribution requirements for things that ship with Visual Studio for someone today. (Part of testing is of course to see that we stay in compliance with the various licenses of tools we use to produce software after all.) Here is the verdict.<br />
<br />
According the the <a href="http://download.microsoft.com/documents/useterms/Visual%20Studio_2008%20Standard%20Edition_English_4c240268-8ee9-4cf3-96cf-3bd5ef02a81f.pdf">Microsoft Software License Terms Microsoft Visual Studio 2008 Standard Edition</a> section 3ci you can distribute:<br />
<br />
<i>REDIST.TXT Files. You may copy and distribute the object code form of code listed in REDIST.TXT files, plus any files listed on the REDIST list located at:<br />
<a href=http://go.microsoft.com/fwlink/?LinkID=100327&#038;clcid=0x409">http://go.microsoft.com/fwlink/?LinkID=100327&#038;clcid=0&#215;409</a>.</i><br />
<br />
I don&#8217;t have Visual Studio installed on my machine, but <a href="http://www.johndcook.com/blog/">John D. Cook</a> sent me the copy of REDIST.TXT from his install which I have <a href="http://adam.goucher.ca/wordpress/wp-content/uploads/2009/10/redist.txt">put online to view here</a>.<br />
<br />
I last had to look up this sort of thing 5 or 6 years ago and seem to recall hoops of extra licensing being required. It&#8217;s nice to see that no longer being the case.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/kowidZ2rJz4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1280</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1280</feedburner:origLink></item>
		<item>
		<title>ATT2009 – Stelios Pantazopoulos – Project Vital Signs</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/Tx1J_geQ5To/</link>
		<comments>http://adam.goucher.ca/?p=1276#comments</comments>
		<pubDate>Thu, 22 Oct 2009 15:05:20 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1276</guid>
		<description><![CDATA[Stelios Pantazopoulos delivered a nice presentation on useful metrics for project health. Because of the health idea, his metaphor was a patient in a hospital and the graphs and metrics were the output of the machines. It worked really well, but it almost seems to have the starting idea that your project is in the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.thoughtworks.com/who-we-are/our-people/profiles/Pantazopoulos,+Stelios.html">Stelios Pantazopoulos</a> delivered a nice presentation on useful metrics for project health. Because of the health idea, his metaphor was a patient in a hospital and the graphs and metrics were the output of the machines. It worked really well, but it almost seems to have the starting idea that your project is in the hospital. While not as grounded in science, I think a better idea would be to use some sort of holistic, preventative medicine one. The same things can be tracked, but the perspective and positioning changes completely.<br />
</p>
<ul>
<li>Has a chapter on the subject in <a href="http://www.amazon.ca/exec/obidos/ASIN/193435614X/adamgoucher-20/">The Thoughtworks Anthology</a></li>
<li>Metrics need to show how <i>and</i> why a project is on track</li>
<li>What you want is simple, quantitative, near real-time metrics</li>
<li>PMBOK (apparently) has 4 &#8216;levers&#8217; which affect a project. I of course didn&#8217;t write them down&#8230;</li>
<li>He adds a 5th: Team</li>
<li>The goal of vital sign checks is to bring visibility to all 5 levers</li>
<li>The Vital Signs
<ul>
<li>Scope Build Up</li>
<li>Current State of Delivery</li>
<li>Budget Burn Down</li>
<li>Delivery Quality</li>
<li>Team Dynamics</li>
</ul>
</li>
<li>Make all these public! The last place you want stats like this is buried in a status report. Transparency builds shared team responsibility and trust</li>
<li>These metrics (once the framework is in place) should only take 2 &#8211; 3 hours per week</li>
</ul>
<p>
Edit: The PMBOK levers are: Budget, Scope, Schedule, Quality. Thanks to <a href="http://www.mglenn.com/">Michael Glenn</a> who apparently took better notes than me.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/Tx1J_geQ5To" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1276</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1276</feedburner:origLink></item>
		<item>
		<title>ATT2009 – Thanou Thirakul – Large Scale Testing in Agile Time</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/VPBXo8EO_X8/</link>
		<comments>http://adam.goucher.ca/?p=1274#comments</comments>
		<pubDate>Wed, 21 Oct 2009 21:25:24 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1274</guid>
		<description><![CDATA[Thanou Thirakul did a nice experience report on a project he worked on for awhile which was having trouble continuing to use some of the Agile toolkit on. Specifically, their automated build and test infrastructure was failing them.

That was actually the illness, the symptoms, and more importantly how they addressed them were as follows:

Team lost [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.linkedin.com/pub/thanou-thirakul/2/4a3/a09">Thanou Thirakul</a> did a nice experience report on a project he worked on for awhile which was having trouble continuing to use some of the Agile toolkit on. Specifically, their automated build and test infrastructure was failing them.<br />
<br />
That was actually the illness, the symptoms, and more importantly how they addressed them were as follows:</p>
<ul>
<li><i>Team lost faith in the build</i> &#8211; The team, having lost faith in the build system would just ignore the results and even more damaging, would sometimes just skirt around it entirely. To address this they formed a specific team to restore faith in the build by tackling the other problems. One thing they did intentionally was to add people not currently in the project team to help figure out the solutions. This meant fresh eyes and ideas to a problem people might have tunnel vision towards.</li>
<li><i>No one wants to touche the build script</i> &#8211; Being a 6 year old java project, their build was a series of cobbled together ant scripts that had grown organically. To fix this they maven-ized their build and got it running inside Hudson. In my experience, this is exactly what you want to be doing, though Ant + Ivy would likely work as well. Sometimes starting over really is the correct idea.</li>
<li><i>Too many false build failures</i> &#8211; An analysis of their build failures showed they were largely environment related. To solve this they rebuilt their test machines as virtual machine snapshots. This meant they could quickly return things back to a known clean save removing the problem of environment degradation.</li>
<li><i>Integration tests taking too long</i> &#8211; Since their environment was now virtual, they solved part of the length problem by just spawning more VMs to test with. That just moves the problem around though really. Now you need a runner which will distribute your tests. They solved that problem by building their own test distribution server. It was <i>slick</i>!</li>
</ul>
<p>
Here are some other notes I took:</p>
<ul>
<li>Don&#8217;t contort your tools; use the right tool</li>
<li>Use the length of past test runs to estimate how long your next one will take.</li>
<li>When using VMs, for maximum performance assign each its own disk as I/O rapidly become the bottleneck.</li>
<li>More times than not, the first (correct) sultion is not to build yeat another tool</li>
</ul>
<p>
My major complaint about this talk was his commentary a couple times that &#8216;the best part about writing something cool like the test server is that you get to release it as open source&#8217;. When I asked where I could grab it I got something that sounded like a sales pitch. Even after talking to him afterward I&#8217;m not sure if I would have to part with money to doing something. Just release it! The community will find it and try it out in ways you can&#8217;t begin to think about.<br />
<br />
Aside from that, it was a well done talk.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/VPBXo8EO_X8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1274</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1274</feedburner:origLink></item>
		<item>
		<title>ATT2009 – Scott Ambler – Agile at Scale</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/23l0HrXdj9k/</link>
		<comments>http://adam.goucher.ca/?p=1272#comments</comments>
		<pubDate>Wed, 21 Oct 2009 13:19:29 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1272</guid>
		<description><![CDATA[Scott Ambler delivered the keynote at Agile Tour Toronto 2009. I could have sworn I have met him before, but I&#8217;m not sure anymore. He is, umm, unique it seems and I think I would have remembered it clearer. Scott is the Practice Leader Agile Development at IBM and it would seem that his views [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.ambysoft.com/">Scott Ambler</a> delivered the keynote at Agile Tour Toronto 2009. I could have sworn I have met him before, but I&#8217;m not sure anymore. He is, umm, unique it seems and I think I would have remembered it clearer. Scott is the Practice Leader Agile Development at IBM and it would seem that his views are, not unsurprising, widely tainted by the size of customer IBM Consulting attracts. I&#8217;m also not sure where he fits into the political structure of Agile; he seemed rather anti / bitter / pissed at  a number of people in the community at large. But I might be the only one who interpreted it that way and perhaps he was striking his tone to help reinforce his points of the talk.<br />
</p>
<ul>
<li>We don&#8217;t know what the laws of IT physics are, but they haven&#8217;t changed</li>
<li>Agile Scaling Model
<ol>
<li>Core Agile Development &#8211; construction focused, small teams with a straight-forward systems</li>
<li>Disciplined Agile Development &#8211; full lifecycle from conception to release, retire risks early, self-organization with adult supervision</li>
<li>Agility at Scale &#8211; one or more scaling factors are being controlled</li>
</ol>
</li>
<li>That stack of requirements have come from somewhere &#8212; up front modeling and planning</li>
<li>Scaling Factors (All are a scale, not binary. Easy to hard.)
<ul>
<li>Geographic distribution</li>
<li>Team size</li>
<li>Compliance requirements</li>
<li>Domain complexity</li>
<li>Organization distribution</li>
<li>Technically complex</li>
<li>Organizational complexity</li>
<li>Enterprise discipline</li>
</ul>
</li>
<li>Agile teams are good at delivering high-quality siloed applications</li>
<li>Traditional teams are good at delivering low-quality siloed applications</li>
<li>Different teams/projects are at different places, so how can you have a repeatable process across all of them.</li>
<li>Repeatable results beat repeatable process every time</li>
<li>Scott&#8217;s theory: Agile scales better than traditional and we are only 5 &#8211; 10 years away from having hard evidence to back t up</li>
<li>In distributed Agile, don&#8217;t use colocated team tools</li>
<li>Agile needs to &#8216;grow up&#8217; &#8211; his survey number show less than 50% of teams are working with legacy data. The implication being that they are building new silos</li>
<li>In meetings, focus on the value aspect rather than the status</li>
<li>If there are technical dependencies, there <i>are</i> functional dependencies</li>
<li>Our tools should generate the metrics we need</li>
<li>Bureaucracy is bureaucracy. AUtomate the heck out of it to get accurate and timely results</li>
<li>Part of failing early is to do the risky parts first</li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/23l0HrXdj9k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1272</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1272</feedburner:origLink></item>
		<item>
		<title>A Smattering of Selenium #4</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/nugRE1Ypb-c/</link>
		<comments>http://adam.goucher.ca/?p=1271#comments</comments>
		<pubDate>Wed, 21 Oct 2009 01:56:29 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1271</guid>
		<description><![CDATA[
Advanced Selenium RC logging with MSpec &#8211; like ruby’s selenium client’s rspec report; but for mspec
The Play framework uses Selenium as its acceptance test layer
Automated Testing with Selenium &#8211; Webinar by G2iX. Likely the same as last week&#8217;s, but if you missed it then you can undo that missing. (Anyone post any notes or anything [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://codebetter.com/blogs/aaron.jensen/archive/2009/10/19/advanced-selenium-logging-with-mspec.aspx">Advanced Selenium RC logging with MSpec</a> &#8211; like ruby’s selenium client’s rspec report; but for mspec</li>
<li><a href="http://www.playframework.org/documentation/1.0/test">The Play framework</a> uses Selenium as its acceptance test layer</li>
<li><a href="https://www1.gotomeeting.com/register/136965753">Automated Testing with Selenium</a> &#8211; Webinar by G2iX. Likely the same as last week&#8217;s, but if you missed it then you can undo that missing. (Anyone post any notes or anything from it?)</li>
<li><a href="http://code.google.com/p/corey-projects/source/browse/#svn/trunk">corey-projects</a> is where Corey Goldberg is now stashing his publicly consumable scripts</li>
<li><a href="http://www.phpunit.de/ticket/913">CaptureScreenShot Can&#8217;t Work on &#8220;Non OK&#8221; Selenium Response</a> &#8211; bug PHPUnit when using captureScreenShot* commands. Who wants to create a patch?</li>
<li><a href="http://seleniuminspector.org/">Selenium Inspectory</a> &#8211; another of the many frameworks / products that use Selenium as its core platform</li>
<li><a href="http://scottcsims.com/wordpress/?p=86">Essentials of getting started with Selenium Grid and Ruby</a> &#8211; Not as great as the title suggests, but some teases of ideas that might help you troubleshoot</li>
<li><a href="http://keithbloom.wordpress.com/2009/10/16/running-selenium-tests-in-visual-studio/"><br />
Running Selenium tests in Visual Studio</a> &#8211; as the title would suggest</li>
<li><a href="http://seleniumexamples.com/blog/examples/capturing-screenshots-from-remote-selenium-rc/">Capturing screenshots from remote Selenium RC</a> &#8211; seems like screen capturing was the thread of the week with a number of people arriving on irc specifically about it</li>
<li><a href="http://jira.openqa.org/browse/SIDE-362">setWindow not working outside of HTA environment</a> &#8211; bug, and fix for Se-IDE by the <a href="http://www.pushtotest.com">PushToTest</a> kids</li>
<li><a href="http://codekata.pragprog.com/2007/01/code_kata_backg.html">Code Kata</a> &#8211; do we need something like this for Selenium?</li>
<li><a href="http://code.qbranch.se/archive/2009/10/Maven-Selenium-and-a-hint-of-Groovy">Maven, Selenium and a hint of Groovy</a> &#8211; don&#8217;t forget to include the surefire-report plugin to see your results</li>
<li><a href="http://adhockery.blogspot.com/2009/09/testing-grails-apps-with-selenium-rc.html">Testing Grails Apps With Selenium-RC</a> &#8211; my &#8216;value chain&#8217; idea claims another victim! <img src='http://adam.goucher.ca/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li><a href="http://manish-chaks.livejournal.com/#post-manish_chaks-101507">&#8216;Selenium Internals&#8217; book</a> &#8211; Manish Chakravarty is starting to write a book on Selenium</a></li>
<li><a href="http://bddcasts.com/series/tools/episodes/using-selenium-with-webrat-and-cucumber">How to use Webrat and Selenium to test the parts of your application that rely on AJAX or some form of Javascript interaction with the user</a> &#8211; a screencast about, well, what it says it is</li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/nugRE1Ypb-c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1271</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1271</feedburner:origLink></item>
		<item>
		<title>Everyday Heuristics</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/yZlmUY0Uq9Y/</link>
		<comments>http://adam.goucher.ca/?p=1270#comments</comments>
		<pubDate>Wed, 14 Oct 2009 13:50:09 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1270</guid>
		<description><![CDATA[If we follow along with the theory that all testing is heuristic, then when we are teaching testing we need to teach about heuristics when teaching about testing. I often start with giving the &#8216;book&#8217; definition:

A fallible means of solving a problem or making a decision, conducive to learning; presumed to usually work but that [...]]]></description>
			<content:encoded><![CDATA[<p>If we follow along with the theory that all testing is heuristic, then when we are teaching testing we need to teach about heuristics when teaching about testing. I often start with giving the &#8216;book&#8217; definition:<br />
<br />
<i>A fallible means of solving a problem or making a decision, conducive to learning; presumed to usually work but that it might fail)</i><br />
<br />
That usually draws a lot of blanks looks and furrowed brows. So the next tack I try is to call it <i>a rule of thumb</i> and give a couple examples.</p>
<ul>
<li><i>Never chase after a bus, there is always another one coming.</i> Well, except when there isn&#8217;t or the next one is a really long time</li>
<li><i>Father always knows best.</i> I <u>really</u> like this one, but it typically fails in large degrees when my wife is around.</li>
<p>
I don&#8217;t know what got me thinking about it on the walk into the office, but it occurred to me that we all carry around with us a vast array of heuristics we apply to everything we do in life. The trick is to be able to recognize which we are applying in what situation. So that is what I did. Here are my (current) heuristics of getting from Place A to Place B.<br />
</p>
<ul>
<li>Always go towards the goal, never backwards</li>
<li>Arrive no earlier than 5 minutes before planned arrival</li>
<li>Arrive no later than 3 minutes after planned arrival</li>
<li>Have a planned arrival time</li>
<li>Don&#8217;t stop moving. Rather than wait for a light, continue along the street until the next opportunity to cross</li>
<li>Observe and understand traffic pattern and flow</li>
<li>Know where the closest washroom is. (Don&#8217;t ask)</li>
<li>Know ish where you are going to</li>
<li>Know where you are coming from</li>
<li>Have a mental model of the area you are in. (The first thing I buy when visiting a new city is a street map)</li>
<li>Back streets have some of the more interesting things to see</li>
<li>Know how you would pull the emergency cord if necessary</li>
<li>Have landmarks that work. (Buildings in hilly cities like San Francisco don&#8217;t work.)</li>
<li>Landmarks are relative to your point of reference. (The lake is to the south in Toronto, but the East in Chicago &#8212; that confused me to no end)</li>
</ul>
<p>
As testers, we can likely rattle of similarly long lists for &#8216;forms&#8217;, &#8216;installers&#8217;, &#8216;windows&#8217; and other archetypal testing situations. But just recording those lists for distribution isn&#8217;t necessarily useful or desirable. Like my traveling heuristics above, they develop based on your own biases and experiences. And that is something that cannot be transfered. Even if two people witness an event simultaneously they will <i>experience</i> it differently.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/yZlmUY0Uq9Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1270</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1270</feedburner:origLink></item>
		<item>
		<title>Discover, Decision, Action</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/OVNoUPdCX7U/</link>
		<comments>http://adam.goucher.ca/?p=1269#comments</comments>
		<pubDate>Wed, 14 Oct 2009 12:58:12 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1269</guid>
		<description><![CDATA[The kick-drum of the TDD rhythm is Red, Green, Refactor.

At its core, it is just a tight loop of writing a failed test, writing code to make it pass, then make it better without (silent) breakage due to the test.

On this week&#8217;s Writing Excuses they used the term Discover, Decision, Action and it dawned on [...]]]></description>
			<content:encoded><![CDATA[<p>The kick-drum of the TDD rhythm is <i>Red, Green, Refactor</i>.<br />
<br />
At its core, it is just a tight loop of writing a failed test, writing code to make it pass, then make it better without (silent) breakage due to the test.<br />
<br />
On this week&#8217;s <a href="http://www.writingexcuses.com/2009/10/11/writing-excuses-season-3-episode-20-plot-vs-character-driven-fiction/">Writing Excuses</a> they used the term <i>Discover, Decision, Action</i> and it dawned on me that is the rhythym of exploratory testing.<br />
</p>
<ul>
<li><i>Discover</i> &#8211; Something happened! How did we notice it? Using our senses and trained intuition to reference our catalog of heuristics</li>
<li><i>Decide</i> &#8211; Does our new Discovery matter? Alter what we are doing? Change our tactic choice or course? Lead us further into the rabbit hole or out of the brambles entirely?</li>
<li><i>Action</i> &#8211; Once we have come to a Decision (or number of Decisions) we act on one, some or all of them. This action causes us to return to the Discovery state.
</ul>
<p>And the process continues until we decide to take a &#8216;Stop Testing&#8217; Action and pop out of the loop.<br />
<br />
(Now all I need is a nice graphic showing this cycle and we&#8217;re off to the races)</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/OVNoUPdCX7U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1269</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1269</feedburner:origLink></item>
		<item>
		<title>A Smattering of Selenium #3</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/InxlmmWxiQQ/</link>
		<comments>http://adam.goucher.ca/?p=1267#comments</comments>
		<pubDate>Tue, 13 Oct 2009 23:13:07 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1267</guid>
		<description><![CDATA[
SAP TechEd 2009 Demo Jam &#8211; Automate Web Application Testing with Selenium for ABAP, Siteco Beleuchtungstechnik GmbH is a finalist
According to this tweet, Axe 2.0.3 has Selenium support
How to run Selenium RC with Ruby codes &#8211; a quick beginner guide for using the ruby gem
JavaScriptMVC used Selenium and Rhino under the cover for their testing
Automated [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://www.sapteched.com/demojam/">SAP TechEd 2009 Demo Jam</a> &#8211; Automate Web Application Testing with Selenium for ABAP, Siteco Beleuchtungstechnik GmbH is a finalist</li>
<li>According to <a href="http://twitter.com/OdinTech/statuses/4795934944">this tweet</a>, <a href="http://www.odintech.com/product_axe.html">Axe 2.0.3</a> has Selenium support</li>
<li><a href="http://www.railsfire.com/article/how-run-selenium-rc-ruby-codes">How to run Selenium RC with Ruby codes</a> &#8211; a quick beginner guide for using the ruby gem</li>
<li><a href="http://javascriptmvc.com/#&#038;who=testing">JavaScriptMVC</a> used Selenium and Rhino under the cover for their testing</li>
<li><a href="http://blog.nfocus.co.uk/2009/09/automated-functional-testing-tools-qtp.html">Automated Functional Testing tools, QTP V&#8217;s Selenium</a></li>
<li><a href="http://fijiaaron.wordpress.com/2009/10/13/the-death-of-selenium/">The death of Selenium?</a></li>
<li><a href="http://fijiaaron.wordpress.com/2009/10/13/firefox-3-handling-of-ssl-certs-is-broken/">Firefox 3 handling of SSL Certs is broken</a></li>
<li><a href="http://thetestingblog.com/2009/09/10/selenium-rc-in-c-using-nunit-an-end-to-end-example/">Selenium RC in C# using NUnit: An End-to-End Example</a></li>
<li><a href="http://typo3.org/extensions/repository/view/selenium/current/">Selenium extension for typo3</a></li>
<li><a href="http://pcquest.ciol.com/content/Developer/2009/109100605.asp">Automate Software Testing With Selenium</a></li>
<li><a href="http://stdev.wordpress.com/2009/10/07/test-automation-for-the-masses/">Test Automation for the Masses</a></li>
<li><a href="http://www.setfiremedia.com/blog/running-cucumber-tasks-through-selenium-on-internet-explorer">Running Cucumber Tasks Through Selenium on Internet Explorer</a></li>
<li><a href="http://developer-in-test.blogspot.com/2009/09/functional-test-suite-in-c-or-java-why.html">Functional Test suite in C# or Java&#8230; Why?</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/InxlmmWxiQQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1267</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1267</feedburner:origLink></item>
		<item>
		<title>The Most Important Stakeholder is You</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/b7OtZiLZgdo/</link>
		<comments>http://adam.goucher.ca/?p=1266#comments</comments>
		<pubDate>Mon, 12 Oct 2009 17:29:55 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1266</guid>
		<description><![CDATA[Due to the general, global economic woes I missed out on going to CAST this year even though I was scheduled to speak. I did however complete the paper I was going to talk on. The paper isn&#8217;t on the CAST site yet along with all the other ones yet, but in the meanwhile, you [...]]]></description>
			<content:encoded><![CDATA[<p>Due to the general, global economic woes I missed out on going to CAST this year even though I was scheduled to speak. I did however complete the paper I was going to talk on. The paper isn&#8217;t on the CAST site yet <a href="http://www.associationforsoftwaretesting.org/drupal/CAST2009/Sessions">along with all the other ones</a> yet, but in the meanwhile, you can download it <a href="http://adam.goucher.ca/papers/TheMostImportantStakeholder-You.pdf">here</a>.<br />
<br />
Here is the introduction:<br />
<br />
<i>It used to be that the when you joined an organization, you were there for most, if not all of your career. For better or worse, those days are largely over. Jobs and employees are increasingly mobile and more staffing is being done on a per-project base. Due to this pattern of changing stakeholders, the only thing that stays constant is you. This means that today?s testers need to manage their careers, their image, and in fact their entire brand more closely than prior generations.<br />
<br />
There is no secret formula for success, but there is a well trod path through the brambles if you look closely. This paper sheds some light on the path and explains some of the waypoints along it; discovering your issue, communicating your message, assembling your tribe, becoming a microbrand and the maintenance of it.</i></p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/b7OtZiLZgdo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1266</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1266</feedburner:origLink></item>
		<item>
		<title>Seth Godin since July</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/ywSG_Il3NTU/</link>
		<comments>http://adam.goucher.ca/?p=1261#comments</comments>
		<pubDate>Sat, 10 Oct 2009 15:03:23 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1261</guid>
		<description><![CDATA[Seth Godin blogs once a day, and for a good long while I was able to keep up. I noticed though that I had 93 unread posts by him in my feedreader so I spent the 90 minutes it took to go through them. Here are the chunks of text that struck some sort of [...]]]></description>
			<content:encoded><![CDATA[<p>Seth Godin <a href="http://sethgodin.typepad.com">blogs once a day</a>, and for a good long while I was able to keep up. I noticed though that I had 93 unread posts by him in my feedreader so I spent the 90 minutes it took to go through them. Here are the chunks of text that struck some sort of chord.<br />
</p>
<ul>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/07/winning-on-the-uphills.html">Winning on the Uphills</a> -<br />
The best time to do great customer service is when a customer is upset. The moment you earn your keep as a public speaker is when the room isn&#8217;t just right or the plane is late or the projector doesn&#8217;t work or the audience is tired or distracted. The best time to engage with an employee is when everything falls apart, not when you&#8217;re hitting every milestone. And everyone now knows that the best time to start a project is when the economy is lousy.</li>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/07/all-i-do-is-work-here.html">&#8220;All I do is work here&#8221;</a> -<br />
If you&#8217;re not proud of where you work, go work somewhere else. You don&#8217;t get the benefit of the brand when it&#8217;s hot without accepting the blame of the brand when it&#8217;s wrong.</li>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/08/willfully-ignorant-vs-aggressively-skeptical.html">Willfully Ignorant vs. Aggressively Skeptical</a> &#8211;<br />
If you want to change what your boss believes, or the strategy your company is following, the first step is to figure out how to be the best informed person in the room.</li>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/08/the-modern-talking-pad.html">The modern Talking Pad</a> -<br />
Now, when you make your presentation, sit next to the person you&#8217;re meeting with and go through the booklet page by page, writing directly on each page. As you work your way through the ideas in the booklet, the two of you can talk about what&#8217;s in front of you and mark it up.<br />
<br />
It&#8217;s not a brochure, it&#8217;s the outcome of a working session. Leave it behind when you go.</li>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/08/competing-with-the-singleminded.html">Competing with the Singleminded</a> -<br />
When you have someone who is willing to accomplish A without worrying about B and C, they will almost always defeat you in accomplishing A.</li>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/08/spare-no-expense.html">Spare No Expense</a> -<br />
It&#8217;s certainly possible to build a brand without going to (c) [spare no expense] (witness the way Google almost never gets embroiled in special cases or even answers the phone&#8211;I know that they&#8217;re certainly not eager to fix my imap problems), but once you&#8217;ve trained your customers that (c) [spare no expense] is an option, it&#8217;s awfully hard to scale back.</li>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/09/chai-wallah.html">Chai Wallah</a> &#8211; Or you can be a wallah. Someone who does only that one thing.<br />
<br />
When you go all in, it focuses your attention and effort, doesn&#8217;t it?</li>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/09/things-to-ask-before-you-redo-your-website.html">Things to ask before you redo your website</a> &#8211; What is the goal of the site? (This was first in the list. Everything else hangs on being able to answer it.)</li>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/09/win-the-fight-lose-the-customer.html">Win the Fight. Lose the Customer</a> -If someone thinks they&#8217;re unhappy, then you know what? They are.<br />
<br />
Trying say this to yourself: I have no problem acknowledging that you&#8217;re unhappy, upset or even angry. Next time, I&#8217;d prefer to organize our interaction so you don&#8217;t end up feeling that way, and I probably could have done it this time, too. You have my attention and my empathy and I value you. Thanks for being here.<br />
<br />
If you can&#8217;t be happy with that, then sure, go ahead and fire the customer, cause they&#8217;re going to leave anyway.</li>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/09/launching-brands-in-public.html">Launching Brands In Public</a> &#8211; You can&#8217;t control what people are saying about you. What you can do is organize that speech. You can organize it by highlighting the good stuff and rationally responding to the not-so-good stuff. You can organize it by embracing the people who love your brand and challenging them to speak up and share the good word. And you can respond to it in a thoughtful way, leaving a trail that stands up over time.</li>
<li><a href="http://sethgodin.typepad.com/seths_blog/2009/10/sell-like-you-buy.html">Sell like you Buy</a> &#8211; If it&#8217;s not good enough for you as a consumer, why should it be good enough for you as a marketer?</li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/ywSG_Il3NTU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1261</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1261</feedburner:origLink></item>
		<item>
		<title>The Goalpost problem</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/bj02DO5tdY0/</link>
		<comments>http://adam.goucher.ca/?p=1260#comments</comments>
		<pubDate>Sat, 10 Oct 2009 12:51:49 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1260</guid>
		<description><![CDATA[Scott Berkun wrote a great Letter to Micromanagers this week. This one paragraph got the wheels turning.

If you’re a manager, you must assume you have thoroughbreds working for you. Your job is to give them what they need to win their respective races, agreeing with them on the goal and rewards, but then getting the [...]]]></description>
			<content:encoded><![CDATA[<p>Scott Berkun wrote a great <a href="http://www.scottberkun.com/blog/2009/letter-to-micromanagers/">Letter to Micromanagers</a> this week. This one paragraph got the wheels turning.<br />
<br />
<i>If you’re a manager, you must assume you have thoroughbreds working for you. Your job is to give them what they need to win their respective races, agreeing with them on the goal and rewards, but then getting the hell out of the way. Until they start jumping fences or attacking other horses, you have to let them run their race.</i><br />
<br />
Agreeing with the on the goal.<br />
<br />
But what if the troops don&#8217;t <i>know</i> where the goalposts are located? Well, someone screwed up and there was a failure to communicate.<br />
<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/SnO9Jyz82Ps&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/SnO9Jyz82Ps&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object><br />
<br />
If everything boils down to being a people problem, the root cause of that is likely communication. Or lack thereof.<br />
<br />
When people don&#8217;t know where / what the goal is, they can&#8217;t operate with the same worldview as management. They may think they are, but any occurrence of that is just coincidence.<br />
<br />
Maybe you do have some grand, rule-the-world scheme. But if the people you are going to rely on to implement it don&#8217;t know / understand it, <i>you will fail</i>.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/bj02DO5tdY0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1260</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1260</feedburner:origLink></item>
		<item>
		<title>Depends on your definition of expert</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/QJG7jbN0uMA/</link>
		<comments>http://adam.goucher.ca/?p=1259#comments</comments>
		<pubDate>Fri, 09 Oct 2009 02:12:51 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1259</guid>
		<description><![CDATA[I&#8217;ll admit that Bob Cringely&#8217;s columns have lost a bit of their punch recently as he has gone off on mortgage and other tangents, but his recent post on the cybersecurity myth redeems him somewhat.

Let&#8217;s ignore the overall article, which is pretty bang-on I think and focus in on the notion of expert.

“(It) depends on [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ll admit that Bob Cringely&#8217;s columns have lost a bit of their punch recently as he has gone off on mortgage and other tangents, but his recent post on <a href="http://www.cringely.com/2009/10/the-cybersecurity-myth/">the cybersecurity myth</a> redeems him somewhat.<br />
<br />
Let&#8217;s ignore the overall article, which is pretty bang-on I think and focus in on the notion of expert.<br />
<br />
<i>“(It) depends on your definition of expert,” said expert number one, who works deep in the military-industrial complex. “If you mean someone who can spell ‘cyber’ then sure (there are 1,000). If you mean those who know that ‘cyber’ is short for ‘cybernetics’ and has little to do with computers then probably not.</i><br />
<br />
Ah. So you mean we have to come up with some sort of common definition of what &#8216;expert&#8217; means in a given context. Good luck getting that in the testing world where we are split over the very basic definition of testing.<br />
<br />
<i>“Define ‘expert,’ said another friend from behind Door Number Three, who comes from the security software business. “(An expert is) a person with a high degree of skill in or knowledge of a certain subject.  Great, but the question is all about scope. I may be an expert cook – but can I run a kitchen? Same thing with security there are tons of experts – in specific areas. I was an expert in AV, IDS, and other areas. But I was not the all knowing security guru. (even though my knowledge base was very broad). This is where we run into unintended actuated consequences. An expert will make a choice and take an action.  The end result may not be what they had anticipated because of other factors beyond the realm of their expertise caused an unanticipated consequence.</i><br />
<br />
Well, we addressed the first problem about definition, but we&#8217;ve added that annoying wrinkle of scope. Well, there has to be some way of understand a person&#8217;s scope of knowledge.<br />
<br />
*LIGHTBULB* We can certify them! Oh wait&#8230;<br />
<br />
<i>&#8220;DoD has established a number of credentials required to be classified as a security specialist like CompTIA Security+, CISSP, etc.  None of this stuff has any practical application because it is hardware/software neutral.&#8221;</i><br />
<br />
Oh riiiiight. Context matters as does hands-on, practical, real-world experience. <i>Not</i> just some letters behind their name. Good to know my industry isn&#8217;t the only one affected by this.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/QJG7jbN0uMA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1259</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1259</feedburner:origLink></item>
		<item>
		<title>Slide:ology Webinar</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/Nl0VO4bi87I/</link>
		<comments>http://adam.goucher.ca/?p=1258#comments</comments>
		<pubDate>Fri, 09 Oct 2009 01:44:50 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1258</guid>
		<description><![CDATA[O&#8217;Reilly sponsored a webinar today with Nancy Duarte as a cross promotion of her book, Slide:ology. She is perhaps, before the book, best known as the person who did Al Gore&#8217;s &#8216;An Inconvenient Truth&#8217; deck which won him an Oscar, so she has a bit of credibility on the subject of creating a nice presentation. [...]]]></description>
			<content:encoded><![CDATA[<p>O&#8217;Reilly sponsored a webinar today with <a href="http://blog.duarte.com/contributors/">Nancy Duarte</a> as a cross promotion of her book, <a href="http://www.amazon.ca/exec/obidos/ASIN/0596522347/adamgoucher-20/">Slide:ology</a>. She is perhaps, before the book, best known as the person who did Al Gore&#8217;s &#8216;An Inconvenient Truth&#8217; deck which won him an Oscar, so she has a bit of credibility on the subject of creating a nice presentation. As someone who is starting to speak more, I am getting more-and-more aware of my lack of presentation-fu. (And that of the testing community at large.)<br />
</p>
<ul>
<li>The mission of her company is to &#8216;make the complex simple&#8217;. Nice.</li>
<li>It is the job of leaders to eliminate uncertainty</li>
<li>The bar for presentations is (currently) so low in most places.</li>
<li>There is a scale at play here. Document -> Telepromptor -> Presentation. Obviously you want to be on the right hand.</li>
<li>The <a href="http://blog.duarte.com/wp-content/uploads/2009/07/presentationlandscape3.pdf">Presentation Landscape</a> is a great reference for what type of presentation you should be creating for which audience and for what purpose</li>
<li>The default template in PowerPoint makes &#8216;documents&#8217; not &#8216;presentations&#8217;</li>
<li>Rule of thumb &#8211; If a slide takes longer than 3 seconds to absorb, it has too much stuff on it. (She then did a fun trick of showing a couple slides for 3 seconds to illustrate the effect. Awesome.)</li>
<li>Only one message per slide</li>
<li>Make the illustration match the messages. For example, is a line drawing Marilyn Monroe right for a quote about simplicity?</li>
<li>Think like a designer</li>
<li>Design creates higher perceived value</li>
<li>The first, most obvious idea is <i>not</i> the best idea</li>
<li>Slides are free. Have lots.</li>
<li>Have only what you are talking about <i>now</i> on the page</li>
<li>What is the best way to display the information you need to convey the meaning you want?</li>
<li>Rule of thumb &#8211; Make you presentation look like it could be a magazine spread</li>
<li>STAR &#8211; <i>S</i>omething <i>T</i>hey will <i>A</i>lways <i>R</i>emember</li>
<li>As a presenter, you have the opportunity to deliver a profound experience</li>
<li>She is doing a series of for-cost <a href="http://blog.duarte.com/webinars/">webinars</a> which expound on these topics, and more</li>
</ul>
<p>
One other cool thing about the webinar is all attendees get 45 days access to the book in Safari. Of course, if O&#8217;Reilly wanted to send me a dead-tree copy, they have my mailing address&#8230;</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/Nl0VO4bi87I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1258</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1258</feedburner:origLink></item>
		<item>
		<title>A Smattering of Selenium #2</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/oQDPeeIBtgc/</link>
		<comments>http://adam.goucher.ca/?p=1255#comments</comments>
		<pubDate>Fri, 09 Oct 2009 00:13:02 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1255</guid>
		<description><![CDATA[Here is the current batch of Selenium links that came my way. If I decide to keep this up I&#8217;ll start to more aggressively filter links and put in commentary like A Fresh Cup, but for now&#8230;


How to test Ajax Apps with Selenium
Easy Automated Web Application Testing with Hudson and Selenium
Automated Acceptance Testing with Selenium [...]]]></description>
			<content:encoded><![CDATA[<p>Here is the current batch of Selenium links that came my way. If I decide to keep this up I&#8217;ll start to more aggressively filter links and put in commentary like <a href="http://afreshcup.com/">A Fresh Cup</a>, but for now&#8230;<br />
</p>
<ul>
<li><a href="http://www.reasonablyopinionated.com/2009/01/how-to-test-ajax-apps-with-selenium.html">How to test Ajax Apps with Selenium</a></li>
<li><a href="http://carsonified.com/blog/dev/easy-automated-web-application-testing-with-hudson-and-selenium/">Easy Automated Web Application Testing with Hudson and Selenium</a></li>
<li><a href="http://www.magneticreason.com/services/courses/course_selenium.html">Automated Acceptance Testing with Selenium</a> (course)</li>
<li><a href="http://thefrontiergroup.com.au/blog/2009/10/database-transactions-in-cucumber-breaking-selenium/">Database Transactions in Cucumber Breaking Selenium</a></li>
<li><a href="http://transfs.com/devblog/2009/09/03/selenium-testing-and-swfupload/">Selenium Testing and SWFUpload</a></li>
<li><a href="http://pypi.python.org/pypi/collective.ploneseltest/1.0b2">Selenium test support for Plone</a></li>
<li><a href="http://www.phphatesme.com/blog/tools/selenium-grundkurs/">Selenium &#8211; Basic Course (German)</a> &#8211; translated to (<a href="http://translate.google.com/translate?u=http%3A%2F%2Fwww.phphatesme.com%2Fblog%2Ftools%2Fselenium-grundkurs%2Fhttp%3A%2F%2F&#038;sl=de&#038;tl=en&#038;hl=en&#038;ie=UTF-8">english</a>)</li>
<li><a href="http://bucionrails.com/2009/09/25/cucumber-meets-selenium-meets-integrity/">Cucumber meets Selenium meets Integrity</a></li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/oQDPeeIBtgc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1255</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1255</feedburner:origLink></item>
		<item>
		<title>Hudson, Capistrano and SSH</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/-yMy4-CCGbM/</link>
		<comments>http://adam.goucher.ca/?p=1253#comments</comments>
		<pubDate>Thu, 08 Oct 2009 23:53:58 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1253</guid>
		<description><![CDATA[Our corporate heritage is Rails and so we&#8217;ve standardized on Capistrano for all our deployment needs. Yes, even our Java deployments are Cap based (it&#8217;s actually pretty cool and one of these days I&#8217;ll write a post about it). We also use Hudson as our CI server. Actually, its the nerve center of all our [...]]]></description>
			<content:encoded><![CDATA[<p>Our corporate heritage is Rails and so we&#8217;ve standardized on Capistrano for all our deployment needs. Yes, even our Java deployments are Cap based (it&#8217;s actually pretty cool and one of these days I&#8217;ll write a post about it). We also use Hudson as our CI server. Actually, its the nerve center of all our build and deploy processes. It should be no problem then to do a bit of Continuous Deployment magic using Hudson and Capistrano.<br />
<br />
You would think so. But you would be wrong.<br />
<br />
You see, to execute Cap, you need to have Hudson spawn a shell process (I think it is actually a thread, but whatever). And that shell has only a minimal environment.<br />
<br />
Why is that a problem? Well, Cap is based on ssh and once you have a number of machines to access you quickly move away from using passwords to public keys to negotiate sessions. These public keys are (on unix) stored in the user&#8217;s .ssh directory &#8212; of which the Hudson spawned shell <i>has no idea about</i>. This results in this sort of error:<br />
</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">+ cap deploy
  * executing `deploy'
  * executing `deploy:update'
 ** transaction: start
  * executing `deploy:update_code'
    updating the cached checkout on all servers
  * executing &quot;some command&quot;
    servers: [&quot;monkey.goucher.ca&quot;]
Password: stty: standard input: Invalid argument
stty: standard input: Invalid argument
stty: standard input: Invalid argument</pre></div></div>

<p>
Ugh-oh. No key means no access which means no deploy.<br />
<br />
An hour later I did manage to figure out a nice, neat solution.<br />
<br />
The trick is to tell Cap, <i>not the shell</i>, where the key you want to use is. In order to do this you need to add this somewhere in your Capfile<br />
</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">ssh_options<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:keys</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#006600; font-weight:bold;">%</span>w<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">/</span>hudson<span style="color:#006600; font-weight:bold;">/</span>.<span style="color:#9900CC;">ssh</span><span style="color:#006600; font-weight:bold;">/</span>id_rsa<span style="color:#006600; font-weight:bold;">&#41;</span></pre></div></div>

<p>
Obviously, if you user is not &#8216;hudson&#8217; you would change it to whatever it is. Likewise if you are using DSA rather than RSA for your key.<br />
<br />
Now you can run your Cap tasks from within Hudson. And not have a busted build. <img src='http://adam.goucher.ca/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/-yMy4-CCGbM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1253</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1253</feedburner:origLink></item>
		<item>
		<title>Rhythm</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/W9t5wgHmC1o/</link>
		<comments>http://adam.goucher.ca/?p=1252#comments</comments>
		<pubDate>Thu, 08 Oct 2009 23:35:06 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1252</guid>
		<description><![CDATA[The local professional football team sucks this year. The quarterback remarked after a recent game that the team lacked rhythm. The hosts on the radio yesterday were discussing this quote and said something along the lines of rhythm is not something you can draw on a clipboard or practice, but it is obvious when the [...]]]></description>
			<content:encoded><![CDATA[<p>The local professional football team <u>sucks</u> this year. The quarterback remarked after a recent game that the team <i>lacked rhythm</i>. The hosts on the radio yesterday were discussing this quote and said something along the lines of <i>rhythm is not something you can draw on a clipboard or practice, but it is obvious when the team is lacking it</i>.<br />
<br />
It is not uncommon to hear the term &#8216;rhythm&#8217; applied to practicing TDD. I&#8217;m really bad at TDD, but I know enough to completely understand the applicability.<br />
<br />
I think development teams can also get into rhythms. This is one of the reasons why Scrum meetings are held at the same time each day for instance; to try and develop a rhythm to the day. Committing code often, deploying frequently (internally or externally) are all part of a modern, healthy development rhythm.<br />
<br />
As organizations grow, they start to develop their own inertia against this rhythm with meetings about meetings, fiefdoms, external agendas, etc.. The role of the team lead (or Scrum Master if you are in that context) is then to protect the team&#8217;s rhythm. I keep thinking back to <a href="?p=1160">Mitch Lacey’s Agile 2009 talk</a> about how his team&#8217;s rhythm was under attack from within and he took on someone higher in the chain to resolve it <i>for the better of the team</i>.<br />
<br />
Right now I can&#8217;t help but think our team was finally starting to approach a healthy, sustainable rhythm, but in the last couple days it looks like we&#8217;re about to get tackled off that rhythm Real Soon Now. Hopefully we aren&#8217;t on the ground sucking wind for too long.<br />
<br />
At least we have been forewarned.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/W9t5wgHmC1o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1252</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1252</feedburner:origLink></item>
		<item>
		<title>Losing the room</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/aErwDIhEdUs/</link>
		<comments>http://adam.goucher.ca/?p=1251#comments</comments>
		<pubDate>Thu, 08 Oct 2009 21:45:06 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1251</guid>
		<description><![CDATA[In sport there is the expression &#8216;losing the room&#8217; which is used when the coach or manager has lost the faith / interest of the team. Essentially, the team has fired the coach and while they may listen to what they say, it just glosses over them and they do what they feel is best [...]]]></description>
			<content:encoded><![CDATA[<p>In sport there is the expression &#8216;losing the room&#8217; which is used when the coach or manager has lost the faith / interest of the team. Essentially, the team has fired the coach and while they may listen to what they say, it just glosses over them and they do what they feel is best and any alignment with the coach&#8217;s will is completely accidental. When this happens to a baseball or hockey club, the coach is often replaced. The players after all are the talent. They are whom the public shells out their money to see.<br />
<br />
Managers in dysfunctional organizations can lose the room as well. Especially if they are the source of the dysfunction. Too often people who make it into management are all too good at keeping their job. This results in gradual destruction of morale and high employee turnover. Sometimes it is a gradual eroding, but sometimes it is also a very glaring event. Or worse, a glaring event that knocks all the supports from out the erosion zone. That&#8217;s almost always uncomfortable.<br />
<br />
How do you avoid this? I think there are three contributing factors that combine to cause this phenomenon. One on its own is certainly not nice, but when you get all three mixed into the stew you have a real problem.<br />
</p>
<ol>
<li><i>Trust</i> &#8211; If your team doesn&#8217;t trust that you will do what is in their best interest it is really hard to get them on board with new ideas as they will be met with significant amounts of skepticism. Sometimes you have to make decisions which which are unpleasant for the team, but necessary for the company. When that happens, be honest about the reasons behind them. Problems happen when it appears you have your own agenda to push. <i>Especially</i> if you are still just new to the group. Blowing the trust of the team from the start is a fantastic way to hobble yourself in a new position.</li>
<li><i>Respect</i> &#8211; This is a companion to Trust. I won&#8217;t go so far as to cite the Golden Rule, but treat your team as the adults they are. Ask for their input on decisions. In a development environment, they actually <i>do</i> know more about how things are wired together. And don&#8217;t just ask for it then do your own thing anyways. That is an altogether too common pattern, but is a killer.</li>
<li><i>Belief</i> &#8211; A team needs to be able to believe that what their manager says. Without belief you end up with &#8217;sure, of course we are going to do x. riiiight&#8217;. Soon they are just a talking head. Not a manger. Certainly not a leader. Just the person who gets in your way.</li>
</ol>
<p>
Any high-functioning team, or even just a functioning team has those three elements. Both to and from management and within. But the disconnect between management and their teams is often where this appears most often and causes the most damage.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/aErwDIhEdUs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1251</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1251</feedburner:origLink></item>
		<item>
		<title>TWST5 – Day One</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/YrBR2958x38/</link>
		<comments>http://adam.goucher.ca/?p=1247#comments</comments>
		<pubDate>Wed, 07 Oct 2009 11:27:24 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1247</guid>
		<description><![CDATA[Here are my notes from most of the sessions of day one of this year&#8217;s TWST. The IP Agreement all participants agree to technically lets me publish them all, but one participant requested I abstain from posting theirs. If they have a change of heart, then the post will be updated. Notes from day two [...]]]></description>
			<content:encoded><![CDATA[<p>Here are my notes from most of the sessions of day one of this year&#8217;s <a href="http://www.quality-intelligence.com/TWST.htm">TWST</a>. The IP Agreement all participants agree to technically lets me publish them all, but one participant requested I abstain from posting theirs. If they have a change of heart, then the post will be updated. Notes from day two will surface in the next week or so.<br />
</p>
<h3><a href="http://www.staqs.com/">Paul Carvalho</a></h3>
<ul>
<li>Prefers to hire new grads</li>
<li>New tester training has three parts: domain, system, testing skills</li>
<li>When reviewing SBTM sessions, the magic number of tester&#8217;s work to review seems to be 2. Any more testers and the review process become more time consuming than the actual testing</li>
<li>Change reviewing assignments among the group on a weekly basis</li>
<li>When looking at a graph, ask &#8216;what is the story behind the graph&#8217;</li>
<li>Trends in graphs give like to bigger possible questions</li>
</ul>
<p></p>
<h3>Michael Cookson</h3>
<ul>
<li>Managers (at IBM) are measured on their mentoring of minions</li>
<li><a href="http://en.wikipedia.org/wiki/GROW_model">GROW model</a> &#8211; Goal, Reality, Options, Way forward</li>
<li>If you do coaching in a prescribed manner, all the time then it will fail</li>
<li>Forced coaching doesn&#8217;t work</li>
<li>Often we are coaching, even when we don&#8217;t realize it</li>
<li>Look for the motivation behind the goal</li>
<li>Don&#8217;t take on the problems of the person you are coaching / mentoring</li>
<li>It is important to understand &#8216;why&#8217; someone likes something. Maybe some life event, maybe they are good at it, etc.</li>
<li>Can use the GROW model for teams as well as individuals</li>
<li>To origins for a coaching relationship: the person approaches you for help, or you see that they need help </li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/YrBR2958x38" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1247</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1247</feedburner:origLink></item>
		<item>
		<title>A Quality Experience during deployments</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/BSspuB9LO7M/</link>
		<comments>http://adam.goucher.ca/?p=1242#comments</comments>
		<pubDate>Tue, 06 Oct 2009 14:06:01 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1242</guid>
		<description><![CDATA[As much as I think Continuous Deployment (to production) is a Bad Thing&#038;trade, the big benefit I see from that idea is that it treats deployment as a first class citizen. Too often getting software into the hands / browsers of customers is not the nicest experience for them, filled with standard web server &#8217;something [...]]]></description>
			<content:encoded><![CDATA[<p>As much as I think Continuous Deployment (to production) is a Bad Thing&#038;trade, the big benefit I see from that idea is that it treats deployment as a first class citizen. Too often getting software into the hands / browsers of customers is not the nicest experience for them, filled with standard web server &#8217;something is a miss&#8217; pages, <i>really</i> slow page loads while things get reloaded into memory, etc.. This is especially true in the Rails world where a common deployment methodology is to proxy requests using apache to a pack of mongrels (web servers). We&#8217;re starting to play in the &#8216;enterprise&#8217; space so that wasn&#8217;t going to cut it.<br />
<br />
Enter Capistrano and mod_rewrite to save(ish) the day.<br />
<br />
The first thing you need to make this work is two cap tasks which will start and stop your maintenance windows.</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">namespace <span style="color:#ff3333; font-weight:bold;">:maintenance</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  desc <span style="color:#996600;">&quot;start maintenance&quot;</span>
  task <span style="color:#ff3333; font-weight:bold;">:start</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    run <span style="color:#996600;">&quot;ln -s #{deploy_to}/shared/maintenance/maintenance.html /tmp/#{application}-maintenance.html&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  desc <span style="color:#996600;">&quot;stop maintenance&quot;</span>
  task <span style="color:#ff3333; font-weight:bold;">:stop</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    run <span style="color:#996600;">&quot;rm /tmp/#{application}-maintenance.html&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>
Fairly self explanatory, but for the cap impaired what it is doing is creating a symlink in /tmp to a file in the deployment directory.<br />
<br />
Notice that this is not in &#8216;current&#8217; or &#8216;releases&#8217;. We want this outside of the deployment so we can control its content very tightly and always know which file is being served. You will have to put this there yourself.<br />
<br />
Of course, just creating a file is not enough. We need to tell apache to do something special if it is there. This mod_rewrite rule will do that. I put it at the beginning of all my rules.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">RewriteCond <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>REQUEST_URI<span style="color: #7a0874; font-weight: bold;">&#125;</span> <span style="color: #000000; font-weight: bold;">!</span>\.<span style="color: #7a0874; font-weight: bold;">&#40;</span>css<span style="color: #7a0874; font-weight: bold;">&#41;</span>$
RewriteCond <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>REQUEST_URI<span style="color: #7a0874; font-weight: bold;">&#125;</span> <span style="color: #000000; font-weight: bold;">!</span>\.<span style="color: #7a0874; font-weight: bold;">&#40;</span>png<span style="color: #7a0874; font-weight: bold;">&#41;</span>$
RewriteCond <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>REQUEST_URI<span style="color: #7a0874; font-weight: bold;">&#125;</span> <span style="color: #000000; font-weight: bold;">!</span>\.<span style="color: #7a0874; font-weight: bold;">&#40;</span>jpg<span style="color: #7a0874; font-weight: bold;">&#41;</span>$
RewriteCond <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>REQUEST_URI<span style="color: #7a0874; font-weight: bold;">&#125;</span> <span style="color: #000000; font-weight: bold;">!</span>\.<span style="color: #7a0874; font-weight: bold;">&#40;</span>gif<span style="color: #7a0874; font-weight: bold;">&#41;</span>$
RewriteCond <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>monkey-maintenance.html <span style="color: #660033;">-f</span>
RewriteRule ^.<span style="color: #000000; font-weight: bold;">*</span>$ <span style="color: #000000; font-weight: bold;">/</span>tmp<span style="color: #000000; font-weight: bold;">/</span>monkey-maintenance.html <span style="color: #7a0874; font-weight: bold;">&#91;</span>L<span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></div></div>

<p>
What this does is return the file we created with cap above if it exists. Because it is the first rule, then users will always get that page. And because we are not applying it to css or images requests our static page can have them in it. Without them the page would just be all text.<br />
<br />
Customers will be still annoyed if they are doing something while you kick into maintenance mode, but at least there will be some sort of explanation saying what is going on so hopefully you don&#8217;t have to do this too many times in one day. In order to try and stave off that you can test the app before opening it up again.<br />
<br />
Except you can&#8217;t if you show a maintenance page for every request. But this is easy to work around with 2 lines of apache config and a dns entry.<br />
<br />
The first change you need to make to apache is create a &#8217;secret&#8217; alias for your webserver using the ServerAlias config directive.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">ServerName monkey.goucher.ca
ServerAlias s3kr3t.monkey.goucher.ca</pre></div></div>

<p>
You will need to add that new host into your DNS records to point to the same server and the non-s3kr3t one.<br />
<br />
Next we add an additional rule to the ones created around the maintenance page.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">RewriteCond <span style="color: #000000; font-weight: bold;">%</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>HTTP_HOST<span style="color: #7a0874; font-weight: bold;">&#125;</span> <span style="color: #000000; font-weight: bold;">!</span>^s3kr3t.monkey.goucher.ca$</pre></div></div>

<p>
Now the rule will be not be applied when going to the s3kr3t page so you can test it before taking down the window. For the hyper paranoid you could also restrict it to only the office&#8217;s gateway IP as well.<br />
<br />
Ideally, you would have cascading deployments which result in no downtime for any customers, but is non-trivial and can result in greater hardware requirements than you might have at your disposal. For small to medium applications, I think this would work just fine.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/BSspuB9LO7M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1242</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1242</feedburner:origLink></item>
		<item>
		<title>A Smattering of Selenium #1</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/LnrUlzEIFro/</link>
		<comments>http://adam.goucher.ca/?p=1241#comments</comments>
		<pubDate>Tue, 06 Oct 2009 13:20:05 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1241</guid>
		<description><![CDATA[I&#8217;ve now got a Twitter search for &#8217;selenium&#8217; running to keep a closer feel on the pulse of the user community. Before firefox crashes, here are the links I&#8217;ve collected over the last week.


A 10 day course
How to run Selenium tests with Hudson
Another &#8216;run Selenium in the cloud&#8217; vendor
Testing Nexus with Selenium &#8211; part one, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve now got a Twitter search for &#8217;selenium&#8217; running to keep a closer feel on the pulse of the user community. Before firefox crashes, here are the links I&#8217;ve collected over the last week.<br />
</p>
<ul>
<li><a href="http://www.kavinschool.com/Courses/Selenium/Index.html">A 10 day course</a></li>
<li><a href="http://shotgunsandpenguins.blogspot.com/2008/10/how-to-run-selenium-tests-with-hudson.html">How to run Selenium tests with Hudson</a></li>
<li><a href="http://www.cloudtesting.com/serviceFunctional.php">Another &#8216;run Selenium in the cloud&#8217; vendor</a></li>
<li>Testing Nexus with Selenium &#8211; <a href="http://www.sonatype.com/people/2009/09/testing-nexus-with-selenium-a-lesson-in-complex-ui-testing-part-1/">part one</a>, <a href="http://www.sonatype.com/people/2009/10/selenium-part-2/">part two</a>, <a href="http://www.sonatype.com/people/2009/10/selenium-part-3/">part three</a></li>
<li><a href="http://www.cambiaresearch.com/c4/702b8cd1-e5b0-42e6-83ac-25f0306e3e25/Javascript-Char-Codes-Key-Codes.aspx">Javascript character key codes</a></li>
<li><a href="http://github.com/delitescere/PreparedEval">PreparedEval</a> &#8211; Prepares Java strings for JavaScript evaluation, similar to SQL prepared statements. Saves you from quote escape nightmares! Great for Selenium tests.</a></li>
<li><a href="http://seleniumexamples.com/blog/">Selenium Examples</a> &#8211; the blog</li>
<li><a href="http://girliemangalo.wordpress.com/2009/02/05/creating-firefox-profile-for-your-selenium-rc-tests/">Creating Firefox profile for your Selenium RC tests</a></li>
<li><a href="http://functionaltestautomation.blogspot.com/2009/10/dataprovider-data-driven-testing-with.html">Data Driven Testing with Selenium and TestNG</a></li>
<li><a href="https://www1.gotomeeting.com/register/262890464"><br />
Automated Testing with Selenium</a> &#8211; webinar next Friday (October 16, 2009)</li>
<li><a href="http://gojko.net/2009/10/06/putting-selenium-in-the-right-place/">Putting Selenium in the right place</a></li>
<li><a href="http://www.youtube.com/watch?v=n4OkD9D05FE">Example of using Selenium to automate Drupal configuration changes across several servers Chris Shattuck</a> &#8211; a video, on, well, what it says it is about.</li>
<li><a href="http://www.buggybrain.com/2007/11/22/running-selenium-tests-with-maven.htm">Running Selenium Tests with Maven</a></li>
<li><a href="http://www.enjoyxstudy.com/selenium/autoexec/">Auto Exec Server</a> &#8211; in Japanese, but google claims it is &#8216;Using the Selenium AES, Selenium run regularly every day of the HTML format tests, and can easily send e-mail the results.&#8217;</li>
<li><a href="http://www.enjoyxstudy.com/selenium/htmlsuite/">HTMLSuite</a> &#8211; a bunch of enhancements to running suites of selenese based tests (also in Japanese)</li>
<li><a href="http://go-test.it/">And still another run-your-tests-in-the-cloud</a> provider</li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/LnrUlzEIFro" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1241</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1241</feedburner:origLink></item>
		<item>
		<title>Noticing</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/5dk1hYzM_Xw/</link>
		<comments>http://adam.goucher.ca/?p=1240#comments</comments>
		<pubDate>Mon, 05 Oct 2009 04:03:02 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1240</guid>
		<description><![CDATA[Here is, I think, a fairly non-controversial statement.

Testers notice stuff.

It&#8217;s kinda our job. And I suspect that people who are drawn into the field have always noticed things, only now we get paid for it.

Here is a quick anecdote from last weeekend to illustrate this. The boy was going to a birthday party at one [...]]]></description>
			<content:encoded><![CDATA[<p>Here is, I think, a fairly non-controversial statement.<br />
<br />
<i>Testers notice stuff.</i><br />
<br />
It&#8217;s kinda our job. And I suspect that people who are drawn into the field have always noticed things, only now we get paid for it.<br />
<br />
Here is a quick anecdote from last weeekend to illustrate this. The boy was going to a birthday party at one of his good friend&#8217;s house, but we lost the invitation. Which of course had the address. Through a bit of logic and memory comparisons we figured out which house we <i>thought</i> it was. After dropping the girl off at work the morning of the party I drove by the house and saw his mom&#8217;s and grandparent&#8217;s cars in the driveway (we live in the suburbs; we don&#8217;t park cars in the garage) confirming the address.<br />
<br />
When I mentioned seeing the cars in the drive to my wife she drew a blank. She had no idea what car they drove though one of them was always at the school at pick-up time. She is a veterinary technician and notices things, but her field of view is very narrow; this specific animal and its health.<br />
<br />
Testers though, notice a whole lot more. Our brains are taking in all the stimulus they can to try and make sense our current context and how things fit into it. Most testers who have been doing the job for awhile have experienced the <i>something is wrong on the screen, but I just can&#8217;t quite figure it out</i> feeling. We have subconsciously noticed a bug, but it just takes a bit to bubble it to the surface.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/5dk1hYzM_Xw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1240</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1240</feedburner:origLink></item>
		<item>
		<title>Tree or Tags. Or both?</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/L5SyF3sot2o/</link>
		<comments>http://adam.goucher.ca/?p=1239#comments</comments>
		<pubDate>Mon, 05 Oct 2009 03:23:47 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1239</guid>
		<description><![CDATA[I&#8217;ve written a number of automation runners in my career so far. I&#8217;ve been writing another one recently as well. This time it is not tied to a specific employer or product.

Each incarnation has had some variation of this for test organization and discovery. It is very hierarchical and structured which means it maps well [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve written a number of automation runners in my career so far. I&#8217;ve been writing another one recently as well. This time it is not tied to a specific employer or product.<br />
<br />
Each incarnation has had some variation of <a href="?p=1238">this</a> for test organization and discovery. It is very hierarchical and structured which means it maps well to tools like Quality Center and can generate nice graphs for completeness, etc..<br />
<br />
The big flaw is when you have bits of different trees you want to run.<br />
<br />
The solution I think might be to introduce &#8216;tags&#8217; to a test. <i>Run all test tagged as sanity</i> could be one possible scenario. But how would you organize such things? By tag? Well, that doesn&#8217;t work if they have multiple tags, as any such system would require. Chances are a hierarchy of some sort would evolve taking us back to the first approach almost.<br />
<br />
So I think the solution might be to offer the ability to run a section of a heirarchy <i>and</i> (or) a set of tagged tests.<br />
<br />
The question is which would people get most value out of quickly.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/L5SyF3sot2o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1239</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1239</feedburner:origLink></item>
		<item>
		<title>The Captain is the Captain of their ship. And only their ship. Sometimes.</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/1IVwgv1Fya0/</link>
		<comments>http://adam.goucher.ca/?p=1238#comments</comments>
		<pubDate>Mon, 05 Oct 2009 03:00:35 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1238</guid>
		<description><![CDATA[In my post The most important role for quality is the Product Owner (?!), it was rightly mentioned in the comments that

Product Owner is a particular role in the Scrum methodology, which does not exist similarly for XP, Lean or Crystal in this particular sense

But the spirit and intent of the Product Owner is what [...]]]></description>
			<content:encoded><![CDATA[<p>In my post <a href="http://adam.goucher.ca/?p=1235">The most important role for quality is the Product Owner (?!)</a>, it was rightly mentioned in the comments that<br />
<br />
<i>Product Owner is a particular role in the Scrum methodology, which does not exist similarly for XP, Lean or Crystal in this particular sense</i><br />
<br />
But the spirit and intent of the Product Owner is what I was trying to channel. In any methodology there is someone who could have a plaque on their desk with the word &#8216;the buck stops here&#8217; embossed on it. So how you do determine who that person is if they don&#8217;t have the acknowledged title of Product Owner?<br />
<br />
Let&#8217;s call this the <i>Ship&#8217;s Captain</i> heuristic.<br />
<br />
A Captain is master of the ship. His (or her) word is law and is not to be questioned. If they tell the engine room &#8216;all ahead full&#8217; then that is the engine speed. Likewise if they say that all meals will be designed for herbivores then it is &#8216;no meat for you&#8217;.<br />
<br />
In this analogy the Captain is the Product Owner, the engine room folk are the developer and the people running the kitchen are testers. Everyone has a role to play on board and is critical to the success of the mission. (Just try to operate a ship without means of propulsion or food for any length of time.) Each also has their own set of objectives and ways of achieving them, but ultimately, they take their lead from the Captain.<br />
<br />
And the ship is of course the product in all this.<br />
<br />
This isn&#8217;t to say that the Captain is always omnipotent in their ability to provide instructions. In a fleet context, the Captain takes order from the Admiral, and they in turn get them from Fleet Headquarters. But in a owner-operator/privateer perspective they really do make all the rules.<br />
<br />
Truly effective Captains also take into account the opinions of their crew when making decisions. But sometimes, they do have to make the unpleasant choice for the overall betterment of the mission.<br />
<br />
So who is the Captain of your ship? They are the ones who, barring outside intervention, really control the Quality of the product.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/1IVwgv1Fya0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1238</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1238</feedburner:origLink></item>
		<item>
		<title>The tester paradigm sweet spot</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/1O5Fl0acxnk/</link>
		<comments>http://adam.goucher.ca/?p=1237#comments</comments>
		<pubDate>Thu, 01 Oct 2009 22:19:40 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1237</guid>
		<description><![CDATA[A frequent discussion that I see is the one that goes along the lines of &#8220;you need to program in order to test&#8221; or it&#8217;s opposite, &#8220;if you see the code it will bias your testing&#8221;. Like most discussions of this type, both sides are neither wrong, nor neither right. But both are wrong in [...]]]></description>
			<content:encoded><![CDATA[<p>A frequent discussion that I see is the one that goes along the lines of &#8220;you need to program in order to test&#8221; or it&#8217;s opposite, &#8220;if you see the code it will bias your testing&#8221;. Like most discussions of this type, both sides are neither wrong, nor neither right. But both are wrong in their exclusion of the either.<br />
<br />
This is how I cross-section the testing community.<br />
<br />
<img src="http://adam.goucher.ca/wordpress/wp-content/uploads/2009/10/sweetspot.png" /><br />
<br />
On the left we have people who, if asked, would call themselves developers first and testers second. The classic example of this sort of thing is the tester groups at Microsoft or Google. These are programmers whose code output happens to be in the sphere of testing; scripts, frameworks, tools, etc.. Nothing wrong with that; the approach works in their contexts.<br />
<br />
On the right we have people who are testers. Their primary tool is their brain, not the compiler and tend to hang out with James Bach, Michael Bolton, et al. Exploratory testing to avoid the Minefield Problem and the Pesticide Paradox. Another approach that works in their contexts.<br />
<br />
The sweet spot I think for the future of testing is when the two groups collide.<br />
<br />
An agile tester, to me, is someone who not only knows how to think like a tester, but knows how to code test stuff when appropriate (Selenium, small scripts to help exploration, etc.). They can also read the code looking doe inspirations and have a conversation with a developer around a specific implementation detail.<br />
<br />
In my completely un-scientific survey of &#8216;testers&#8217; at Agile and from conversations online, he bulk of people who might call themselves &#8216;agile testers&#8217; know how to code. Automation, for instance, is a programming activity.<br />
<br />
If you believe, as I do, that this sort of testing will become more and more mainstream it will become more and more required to have one or two programming languages in your toolbox. I suspect that people not in the overlap will continued to be more marginalized.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/1O5Fl0acxnk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1237</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1237</feedburner:origLink></item>
		<item>
		<title>Sure, Quality is nice, but Support and Ecosystem wins the game</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/eS3_zEQDbao/</link>
		<comments>http://adam.goucher.ca/?p=1236#comments</comments>
		<pubDate>Thu, 01 Oct 2009 12:52:45 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1236</guid>
		<description><![CDATA[After almost four years of blogging, it should not be much of a surprise that Quality matters. A lot. But we all see (and use) products that are quality deficient, but industry leading.

Why is that? I think it boils down to two distinct factors.

Support

The &#8216;enterprise&#8217; market is driven largely based on support contracts. Both from [...]]]></description>
			<content:encoded><![CDATA[<p>After almost four years of blogging, it should not be much of a surprise that Quality matters. A lot. But we all see (and use) products that are quality deficient, but industry leading.<br />
<br />
Why is that? I think it boils down to two distinct factors.<br />
<br />
<u>Support</u><br />
<br />
The &#8216;enterprise&#8217; market is driven largely based on support contracts. Both from a monetary perspective and a customer retention one. We&#8217;re switching from MySQL to Postgres next week, but if we were using DB2 would we switch to Oracle at drop of a hat? Unlikely. We would call up IBM and talk to their engineers to determine a solution to the problem. This problem resolution circle cements a relationship. Or kills it.<br />
<br />
To build a &#8216;quality&#8217; Support team around your product, I think you should be thinking about:</p>
<ul>
<li>Do you have dedicated support channels for people to contact through</li>
<li>Who is answering the phone? An intern? Or someone who actually knows the product &#8212; and its use in the Real World.</li>
<li>Are they separate from Sales?</li>
<li>How empowered are they within the organization?</li>
<li>Is there development resources available to the Support group?</li>
<li>When not fighting individual customer fires, are Support members proactively contacting customers?</li>
<li>Are there dedicated people for specific key clients?</li>
</ul>
<p>
I think that if you do those things then things that slip into production, and there will always be some, can be overcome from a customer retention / warm-fuzzy view.<br />
<br />
<u>Ecosystem</u><br />
<br />
The other area that helps you win the market is the creation of an ecosystem around your product. Linux is the classic example of this. There are a lot of rough edges to the Linux experience (admittedly less than when I learned it way-back-when) but it grew, and grew based on the support users were able to give each other in the ecosystem.<br />
<br />
With the rise of Web 2.0-ish companies and greater corporate transparency, the patterns for ecosystem development are starting to be (more) well known. The two big items for my current thinking are:<br />
</p>
<ol>
<li>Have a Community Manager (or similar title) to be the face of the company in the ecosystem. They will monitor forums, email lists, etc. to gauge the pulse of the community. They will also work hand-in-hand with Support to answer questions from customers, <i>and prospective customers</i></li>
<li>Don&#8217;t let the community stagnate. A healthy community is a healthy product/company. When I&#8217;m looking at either of those, I check the traffic on their user forums and mailing lists. If the most recent post is 3 months ago, thats a yellow flag.</li>
</ol>
<p>
This is actually the second time I&#8217;ve written this post. The first time ended up sounding too <a href="http://www.satisfice.com/blog/archives/224">Quality Is Dead</a>. You could make the argument certainly, but I don&#8217;t think that is what I am saying. Quality is still an important feature; but if you have high quality Support systems and community/product ecosystem then you can often (more than) compensate for minor (and sometimes major) quality deficiencies. And that is what gives you the win.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/eS3_zEQDbao" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1236</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1236</feedburner:origLink></item>
		<item>
		<title>The most important role for quality is the Product Owner (?!)</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/4ypPnJvgqyc/</link>
		<comments>http://adam.goucher.ca/?p=1235#comments</comments>
		<pubDate>Wed, 30 Sep 2009 21:58:14 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1235</guid>
		<description><![CDATA[For a couple unrelated reasons, I&#8217;ve been thinking of which role in an organization has the greatest impact on Quality.

The first obvious answer is that testers do, since they find and advocate for bugs while acting as an agent for the user. Except, that implies gatekeepr-ism, which is not desirable (and been explored a couple [...]]]></description>
			<content:encoded><![CDATA[<p>For a couple unrelated reasons, I&#8217;ve been thinking of which role in an organization has the greatest impact on Quality.<br />
<br />
The first obvious answer is that testers do, since they find and advocate for bugs while acting as an agent for the user. Except, that implies gatekeepr-ism, which is not desirable (and been explored a couple times iirc.)<br />
<br />
The next obvious answer is that the developers do. After all <i>they</i> are the ones putting in the bugs in the first place. All a tester does is discover them. But even the developer can&#8217;t solely be held responsible for the code when what they are developing is a giant ball of knotted yarn.<br />
<br />
So what is the most important role for Quality?<br />
<br />
I&#8217;m starting to think it is the Product Owner. Think about it for a second. The Product Owner:</p>
<ul>
<li>Talks to the customer</li>
<li>To find out what they need</li>
<li>Interacts with both development and test</li>
<li>By prioritizing work</li>
<li>And accepts or rejects it before it gets to the end user</li>
</ul>
<p>
All of those thing have a <i>HUGE</i> impact on what gets released. If the product owner is all over the place, then the product will be too. If the product owner only pays lip service to quality, it will be evident when it gets released. If the product owner doesn&#8217;t have the pulse of the consumer / market then they will be leading the project down the wrong road.<br />
<br />
There is a whole industry around training testers to think better and to write better automation to make them more efficient. There is an even bigger industry around training developers to write (more | any) tests, loosely-coupled objects, etc.. What I don&#8217;t have any insight into is what we are doing to make our Product Owners better in terms of Quality.<br />
<br />
I suspect this might be a potential role for an evolved tester. Usually the roadmap is junior, intermediate, senior, lead, manager. Perhaps there is a fork in the road somewhere that takes you up into the business side of things where you can drive a Quality Agenda from.<br />
<br />
Food for thought.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/4ypPnJvgqyc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1235</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1235</feedburner:origLink></item>
		<item>
		<title>Continuous Deployment — the video</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/bhXXwEZ_Vu0/</link>
		<comments>http://adam.goucher.ca/?p=1234#comments</comments>
		<pubDate>Wed, 30 Sep 2009 00:53:43 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1234</guid>
		<description><![CDATA[The kids at Sauce Labs have put up a video from the last SF Selenium meet-up where the speaker was none other but Mr. Continuous Deployment himself, Timothy Fitz. You might remember the kerfuffle he raised in the testing world earlier in the year. If not, then you can see Michael Bolton&#8217;s thread on it [...]]]></description>
			<content:encoded><![CDATA[<p>The kids at <a href="http://saucelabs.com">Sauce Labs</a> have put up <a href="http://saucelabs.com/blog/index.php/2009/09/continuous-deployment%E2%80%94the-video/">a video from the last SF Selenium meet-up</a> where the speaker was none other but Mr. Continuous Deployment himself, Timothy Fitz. You might remember the kerfuffle he raised in the testing world earlier in the year. If not, then you can see Michael Bolton&#8217;s thread on it <a href="http://www.developsense.com/2009/03/50-deployments-day-and-perpetual-beta.html">here</a>, <a href="http://www.developsense.com/2009/03/well-that-generated-some-comments.html">here</a>, <a href="http://www.developsense.com/2009/03/more-imvu-comment-followup-survivorship.html">here</a>, <a href="http://www.developsense.com/2009/03/more-imvu-comment-followup-timothy.html">here</a>, <a href="http://www.developsense.com/2009/03/still-more-imvu-comment-followup-final.html">here</a> and <a href="http://www.developsense.com/2009/03/imvu-final-chapter.html">here</a>. I had hoped that Continuous Deployment (CD) would not get widespread adoption, but he is still flogging it so I decided to momentarily stop avoiding it and watch the video of the presentation.<br />
<br />
Before I list my thoughts and notes I took while watching the video I think I&#8217;ll outline my mindset to frame them. CD <i>to production</i> is reckless and borderline irresponsible. &#8216;Automated tests do not a test strategy make&#8217; to paraphrase Yoda. That said, there are some cool things he is doing that I can see be quite worthwhile exploring; especially if you are rolling out to dozens, or hundreds of machines. I suspect that some of them are almost required at that sort of scale. CD to a <i>test</i> environment for <i>humans</i> to test is an absolutely fantastic idea though. We should do more of that.<br />
<br />
With that out of the way, the notes:</p>
<ul>
<li><i>Don&#8217;t fix bugs on features no one uses.</i> I would go further and question why something is in the product at all that is not used.</li>
<li>At it&#8217;s core, CD means <i>ship more frequently</i></li>
<li>Regarding automated testing: <i>now we&#8217;re playing for keeps</i></li>
<li>That is a huge problem for me though. That implies that we know what the automated tests should look like to replicate human behavior the first time. We, as humans, are very bad at looking into crystal balls regarding the future.</li>
<li>CD implies at a very deep level that tests will be executed in parallel. That can only be a good thing in my books.</li>
<li>As is the idea to run tests in random order even when there is no commit-triggered build in order to find race conditions.</li>
<li>Debug <i>all</i> failures. No excuses. Your automated tests are the only thing between your IDE and the customer.</li>
<li>The most powerful idea in Timothy&#8217;s talk was about creating an Immune System for your application. I completely want to steal this idea. Essentially you instrument the application out the wazoo and it will automatically back out changes that cause a rush of white blood cells. Things like &#8216;number of registrations per minute&#8217; or &#8216;conversion rate in 30 minutes&#8217; are monitored; real business drivers not low-level server stuff. Well, likely in addition to, not as complete replacement.</li>
<li>The crux of CD is that you are putting code in front of real users as soon as humanly possible so they can derive the most value from it. This is standard Agile theory, pumped up on steroids to clown-like proportions as you could be delivering code 30+ times a day easily.</li>
<li>But customers are also the primary <i>human</i> means of problem discovery as well. Which is the principle problem with CD from a &#8216;tester&#8217; perspective. I don&#8217;t want my customers to experience annoyance, frustration or confusion from my application and take their money to a competitor and tell their friends why they couldn&#8217;t do X as advertised on the system. CD seems to have accepted that &#8216;customers will find bugs&#8217; and are ok with it. I accept that they will find bugs (perfect software is a myth, etc.), but I&#8217;m not ok with letting it happen with just a shrug.</li>
<li>Lock the repo when something fails since you are now in an unstable state.</li>
<li><i>Integrate the operations team into the development team.</i> Again, nothing new here. We want to develop a culture of &#8216;the product team&#8217; not silos.</li>
<li><i>We don&#8217;t have QA people writing tests, we have engineers writing tests</i>. Ummm, ya. I&#8217;m having deja-vu here. This sounds a lot like early Agile/XP where testers were not needed because &#8216;the bar is green dammit!&#8217;. What is state-of-the-art now? Oh ya, having &#8216;agile testers&#8217;. Guess that didn&#8217;t work so well, did it.</li>
<li>Wow. What a shock. CD is also related to Lean thinking. That metaphor has taken a beating recently in the testing world.</li>
<li>You have to make sure your application/platform can handle <i>every</i> edge case. Which of course means you can <i>predict</i> them all.</li>
<li>You can&#8217;t just start doing CD; your application needs to be built around it.</li>
<li>At 58:30 he says that another option is to deploy not to production, but to a production-like environment. <i>That&#8217;s</i> the winning idea</li>
<li>Have &#8216;dials&#8217; for all features. The volume of the dial determines how much of the cluster gets the new feature.</li>
<li>Gradual deployment is also a component of CD. That is the great backstop that lets your pull things out of production if they don&#8217;t work.</li>
<li>In response to a question about whether to use it in a &#8216;mission critical&#8217; (which I&#8217;m going to take as &#8217;someone could die&#8217;) he admits that CD is likely not right in that situation. This reinforces the notion I&#8217;ve had from seeing other stuff on CD that it is fine for &#8216;toy&#8217; applications (where things like even large social media things like Twitter and Facebook could possibly be lumped as &#8216;toy&#8217;), but if you are in the &#8216;enterprise&#8217; or higher then you need to <i>really</i>, <i><u>really</u></i> think twice about doing &#8216;pure&#8217; CD</li>
<li>Once a failure is rolled back from production you need to write unit and acceptance tests for it so <i>you don&#8217;t find that problem <u>in that way</u> again</i>. Fine. But what about all the <i>other</i> ways?</li>
<li><i>Engineering problems quickly become people problems</i>. Ain&#8217;t that the truth.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/bhXXwEZ_Vu0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1234</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1234</feedburner:origLink></item>
		<item>
		<title>I’m not the Gatekeeper! (except when I am)</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/lQHp8CvGJRI/</link>
		<comments>http://adam.goucher.ca/?p=1233#comments</comments>
		<pubDate>Tue, 29 Sep 2009 01:34:47 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1233</guid>
		<description><![CDATA[We (testers) know, acknowledge and understand that our role is not to be the gatekeeper of the product. We provide information to the [business] stakeholders who can then make a decision based on their (usually) larger world view.

But what if management hasn&#8217;t latched onto this idea yet? Or you yourself are just starting to see [...]]]></description>
			<content:encoded><![CDATA[<p>We (testers) know, acknowledge and understand that our role is not to be the gatekeeper of the product. We provide information to the [business] stakeholders who can then make a decision based on their (usually) larger world view.<br />
<br />
But what if management hasn&#8217;t latched onto this idea yet? Or you yourself are just starting to see the light?<br />
<br />
Well, that is a bit trickier.<br />
<br />
First, I would say that the person you need to talk to is your boss. Not the team, nor your counterpart in development, but the person who holds your job in their hands. Explain your idea of your what your role should be and explore the differences between what they think it should be. Ultimately, their opinion trumps yours. And if you think otherwise, then be ready for an unpleasant review next time around.<br />
<br />
Depending on how good you are at manipulating existing structures to your will, you could slowly change their opinion to be the same as yours.<br />
<br />
But chances are good that they will say &#8216;Sorry, you are the QA/Test person and its your job to be in charge of quality&#8217;. And short of finding a new job (more on that in a second), well, you are the gatekeeper whether your like it or not. On the upside though, this has been confirmed by management. Never underestimate the power of such a confirmation. You have been given the soapbox to stand on and a stick to wield.<br />
<br />
But it only works if you wield them. Remember, you were given approval, instruction actually, to do so.<br />
<br />
This I find is not always comfortable for people. Unfortunately, the ability to do so becomes more important the more senior you get. A key characteristic of a test &#8216;lead&#8217; is the ability to go nose-to-nose with their equal on the dev team and not go hide in the corner with their tail between their legs. But such is the daily agenda of a gatekeeper.<br />
<br />
One way I&#8217;ve found to head this off is point out what you perceive the role to entail right in the interview process. That way everyone understands what the role is going to be like and both can say &#8216;no thanks&#8217; if it does not meet the desires of either party.<br />
<br />
Being a gatekeeper is one of those things that seems like a fun job requirement as you absolutely have impact on the quality of the product. It is also <i>very</i> stressful since we as testers rarely have all the information about the larger world our software operates in to make a fully informed decision and blame for production failure has an easy target to aim at.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/lQHp8CvGJRI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1233</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1233</feedburner:origLink></item>
		<item>
		<title>TWST5 – Archetypes</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/54JsJpNiev0/</link>
		<comments>http://adam.goucher.ca/?p=1232#comments</comments>
		<pubDate>Mon, 28 Sep 2009 00:45:56 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[twst archetypes slides]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1232</guid>
		<description><![CDATA[Pending approval per the IP Agreement we all bound ourselves to, my detailed notes will be showing up later in the week, but I&#8217;m giving myself permission to publish my own stuff.

My contribution to TWST this year was to throw my archetypes idea against the wall in a room full of testers I respect and [...]]]></description>
			<content:encoded><![CDATA[<p>Pending approval per the IP Agreement we all bound ourselves to, my detailed notes will be showing up later in the week, but I&#8217;m giving myself permission to publish my own stuff.<br />
<br />
My contribution to TWST this year was to throw my <a href="?p=1004">archetypes</a> idea against the wall in a room full of testers I respect and see what sticks. From some of the conversations afterwards, it seems like a fair bit did. Or at least enough to warrant further investigation and though. There was some furrowed brows in the audience too though so I&#8217;ll have to ferret out that confusion.<br />
<br />
One thing I didn&#8217;t mention during my talk, or my slides but came up afterwards is that that a particular item can have multiple archetypes at play. For example, a Window is likely an archetype. But the content in that Window might be a Form or Report.<br />
<br />
Speaking of my slides, here they are.<br />
</p>
<div style="width:425px;text-align:left" id="__ss_2077509"><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=archetypes-090927193654-phpapp01&#038;stripped_title=archetypes-2077509" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=archetypes-090927193654-phpapp01&#038;stripped_title=archetypes-2077509" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object></div>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/54JsJpNiev0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1232</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1232</feedburner:origLink></item>
		<item>
		<title>The red flag that is ‘And’</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/70lofXASwDw/</link>
		<comments>http://adam.goucher.ca/?p=1231#comments</comments>
		<pubDate>Sun, 27 Sep 2009 13:47:25 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1231</guid>
		<description><![CDATA[As someone who blogs (a lot), is starting to appear with greater frequency in conference programs and who has a book coming out, I tend to get a fair amount of unsolicited job inquiries appearing in my mailbox. Some I dismiss completely, but others I will at least open up the company web site. What [...]]]></description>
			<content:encoded><![CDATA[<p>As someone who blogs (a lot), is starting to appear with greater frequency in conference programs and who has a book coming out, I tend to get a fair amount of unsolicited job inquiries appearing in my mailbox. Some I dismiss completely, but others I will at least open up the company web site. What I am looking for <i>in small, startup-ish companies</i> is not the technology, or the industry, or anything along those lines.<br />
<br />
What I am looking for is whether I can determine what they do <i>without</i> having to use the word &#8216;and&#8217;.<br />
<br />
In my experience, quality requires disciple in all aspects of an organization. Including its mission and reason.<br />
<br />
<i>We help individuals, [and] non-profit organizations, [and] cities, and enterprises do (this), [and] (this), and (this)</i> is a pretty strong indicator that quality is being sacrificed in favor market reach.<br />
<br />
And really, that is a perfectly valid strategy from a <i>business</i> perspective. But from a <i>quality</i> one it is atrocious. Those three markets have very different drivers and feature requirements. By targeting all three what you are essentially doing is splitting your attention three different ways resulting in three 1/3 completed products. Instead of that strategy, why not pick one and absolutely dominate it in terms of features and quality. Then take on the next.<br />
<br />
Similarly, the three actions mentioned above are also a concern, but not necessarily as bad a one. It all depends on where in the growth curve the company is. For a brand new company it is a huge problem. You should absolutely kick ass with one action before expanding into another.<br />
<br />
But! By constraining focus to a laser point are you not turning your back a large part of the market?<br />
<br />
Yes. If quality is your goal, you will be rewarded.<br />
<br />
Imagine that the market for your multi-limbed product is 100M per year and split into four, clear, sub-markets of 25M each. You could try to fight in all of them and win some battles but generally tread water as you have to spread your efforts across four distinct audiences and this results in say 20M and a reputation in the market as meeting requirements, but meh customer experience or joy. Or, you could focus in on a single segment, kicking ass along the way, still make 20M per year as the dominant force and have an awesome reputation in the market.<br />
<br />
As someone who is deeply rooted in the idea of delivery a quality product, the latter option is much more compelling a story.<br />
<br />
To a business owner though I completely understand why it would not be. Narrow focus companies tend to be smaller in terms of potential revenue and have a slower growth curve; two items that often run counter to why the company was started. Narrow companies are (likely) not going to change or save the world either. They can however change or save a specific segment of it which hopefully is enough.<br />
<br />
So how about your company? How many &#8216;Ands&#8217; do you need to describe it? And what can you do to <i>decrease</i> the ands and <i>increase</i> the quality?</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/70lofXASwDw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1231</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1231</feedburner:origLink></item>
		<item>
		<title>How does the market view your employer?</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/y4TA-BPOjys/</link>
		<comments>http://adam.goucher.ca/?p=1228#comments</comments>
		<pubDate>Tue, 22 Sep 2009 00:21:22 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1228</guid>
		<description><![CDATA[I&#8217;m a believer in actively managing your career. After all, no one else is qualified to do it but you. So two articles in Business Week&#8217;s September 14th issue caught reminded me of something.

Sometimes your hire-ability depends not on who you are, but your current and past employers.

Article one is The Best Places to Launch [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a believer in actively managing your career. After all, no one else is qualified to do it but you. So two articles in Business Week&#8217;s September 14th issue caught reminded me of something.<br />
<br />
<i>Sometimes your hire-ability depends not on who you are, but your current and past employers.</i><br />
<br />
Article one is <a href="http://www.businessweek.com/print/magazine/content/08_37/b4099036445894.htm">The Best Places to Launch Your Career</a></p>
<ul>
<li>&#8230; she entered a three-month management training program &#8230;</li>
<li>While traditional perks such as pensions and health insurance still have their place, more companies are finding inventive ways to attract, retain, and motivate their youngest employees—using everything from work-from-home programs to faster promotions to financial benefits that kick in a few years down the road. Says Adam Kling, a workplace consultant with RHR International: &#8220;They&#8217;re using those and other perks to help offset what you&#8217;re seeing in your monthly paycheck.&#8221; Or more to the point, what you&#8217;re not seeing in your monthly paycheck.</li>
<li>The Big Four firm still attracts more than 3,000 highly sought-after accounting students each year with extensive training and mentoring programs, performance bonuses, and the promise of face time with top executives—including an annual trip to Walt Disney World (DIS) for all U.S.-based interns, where they get to mingle with the powers that be.</li>
<li>To make the most of their recruiting efforts, many companies are scaling back their scope. In recent years, Philip Morris USA dropped nearly 50 campuses from its program, leaving it with just 34. Philip Morris President Craig A. Johnson says the quality of new hires is up as a result, and that more interns are being converted into full-time hires: 47% in 2007, up from 32% in 2005.</li>
<li>For many companies, though, the bigger problem—far bigger than recruiting—is retention.</li>
<li>Indeed, one reason high pay alone is no longer enough to guarantee loyalty is that many members of Gen Y, who have been entering the workforce since 2004, have other priorities. For them, issues such as community service and serving the greater good are among the most important, according to the 2008 Universum USA survey of U.S. undergraduates.</li>
<li>By making a big impression when it matters most—in the first year of employment, when a lot of entry-level hires jump ship, or at the three-year mark, when boredom and frustration often set in—employers can get their young charges over the hump and, with luck, motivated to stay on for many more years.</li>
<li>While many companies award promotions only when a vacancy exists, several, including Philip Morris USA, have shifted to a system that considers employees for new positions whenever they&#8217;re ready—vacancy or not—thereby removing one of the biggest obstacles to promotion.</li>
<li>And Whirlpool is now giving employees a chance to fast-track their careers by offering them opportunities to work on special projects that will enhance their skills, thus making them eligible for promotions earlier. The projects can be anything from a 60-day stint with HR to six months spent designing a new appliance. The pilot program was started in July, but the company expects it to be popular with young employees and to improve retention, which is already the best among consumer products companies in our ranking. &#8220;The more opportunities we can provide our employees to engage in meaningful work and challenging assignments, the more quickly we can help them achieve career goals,&#8221; says Jeff Beavers, Whirlpool&#8217;s director of global university relations.</li>
</ul>
<p>
Reading between the lines then, training and non-monetary carrots combine for low(er) turnover and thus better reputation the company has in the market. Better company reputation, the better you look for having worked there. If your employer has high turnover, no training plans or other schemes to better you, it is a warning sign.<br />
<br />
Article two is <a href="http://www.businessweek.com/print/magazine/content/09_37/b4146042031508.htm">The Companies Headhunters Avoid</a> and reinforces the deductions from the first. In fact they are back-to-back in the dead-tree version.</p>
<ul>
<li>The question: Which companies do they largely avoid recruiting from? Some of the most cited are known to be in turmoil &#8230;</li>
<li>Recruiters also singled out companies that are widely viewed as successful.</li>
<li>The conclusion among headhunters is that the very attributes that make Coke a great company—an iconic brand and an unmatched global distribution system—also make it too easy for young managers to rise without having to develop the entrepreneurial skills necessary to compete in other arenas.</li>
<li>Whether it&#8217;s their quirkiness, poor leadership development, or political culture, these players have become the corporate equivalents of the Hotel California: You can check in and enjoy your stay, but the risk is that you can&#8217;t leave.</li>
<li>Three of the companies named as problematic by recruiters made this year&#8217;s ranking of best places to start a career.</li>
<li>One trait that puts a company on the blacklist is excessive bureaucracy.</li>
<li>&#8230; recruiters take issue with what one describes as a &#8220;patrician culture of conflict avoidance,&#8221; which tends to make some alumni ill-equipped to handle crisis</li>
<li>One peril is a tendency at some companies to relegate managers to narrow duties, thereby fostering limited skill sets.</li>
<li>Several Silicon Valley headhunters say they&#8217;re now hesitant to recruit from two of the tech sector&#8217;s most successful companies because of their testosterone-driven, take-no-prisoners cultures. Managers who thrive there, they say, are often bad fits anywhere else.</li>
<li>&#8230; a culture that seemed to reward executives more for political skills than results.</li>
</ul>
<p>
It is accepted that most upper-level positions in business/management do not get advertised on Craigslist but are instead handled by an agency of some sort. As testing evolves, this will become more normal in this field as well. But even before that, hiring managers will see your resume and see your employer. Is that going to tilt the scales in your favor or against? It might be worth seeing what the market has to say about your employer and then seeing how you can offset or escape it if necessary.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/y4TA-BPOjys" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1228</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1228</feedburner:origLink></item>
		<item>
		<title>Why Diversity in Background Matters</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/SxaQAozQY4I/</link>
		<comments>http://adam.goucher.ca/?p=1227#comments</comments>
		<pubDate>Mon, 21 Sep 2009 21:58:40 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1227</guid>
		<description><![CDATA[When talking about &#8216;ideal&#8217; [testing] team structures, I tend to stress the need for a diverse set of backgrounds. Not to the exclusion of specific needs of course, but in general, a more diverse team is going to find a greater variety of bugs due entirely of how different view the world.

If a baker walks [...]]]></description>
			<content:encoded><![CDATA[<p>When talking about &#8216;ideal&#8217; [testing] team structures, I tend to stress the need for a diverse set of backgrounds. Not to the exclusion of specific needs of course, but in general, a more diverse team is going to find a greater variety of bugs due entirely of how different view the world.<br />
<br />
<i>If a baker walks into a kitchen, the first thing they are going to notice is if the counters are clean. If an artist walks into the same kitchen they are going to notice what colour the walls are and if the paintings are crooked.</i><br />
<br />
That is from <a href="http://www.writingexcuses.com/2009/09/20/writing-excuses-episode-3-season-17-characters-worldbuilding-qa-with-mary-robinette-kowal/">this week&#8217;s Writing Excuses</a> (by <a href="http://www.maryrobinettekowal.com/">Mary Robinette Kowal</a> specifically).<br />
<br />
Bringing it back to testing.<br />
<br />
If a scripter tests a product, the first thing they are going to notice are the hooks that make automated checks easier and more effective. If a victim of identity theft tests the same product they are going to notice the security and privacy features.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/SxaQAozQY4I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1227</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1227</feedburner:origLink></item>
		<item>
		<title>‘Exploratory Software Testing’ – a cheat of a book</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/5PexMlKggJM/</link>
		<comments>http://adam.goucher.ca/?p=1225#comments</comments>
		<pubDate>Mon, 21 Sep 2009 13:15:56 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1225</guid>
		<description><![CDATA[Much like in software, when you release a book into the hands of the masses it is largely out of your control. Part of the lack-of-control with a book is the review process where you send out free copies to people who have a platform in hopes they give it a nice review (thus garnering [...]]]></description>
			<content:encoded><![CDATA[<p>Much like in software, when you release a book into the hands of the masses it is largely out of your control. Part of the lack-of-control with a book is the review process where you send out free copies to people who have a platform in hopes they give it a nice review (thus garnering more interest and sales). I&#8217;ve been doing this the last week for Beautiful Testing and I get books sent to me periodically. James Whittaker&#8217;s <a href="http://www.amazon.com/exec/obidos/ASIN/0321636414/adamgoucher-20/">Exploratory Software Testing</a> is one such book that landed in my mailbox, but the review is not going to be positive.<br />
<br />
Lack of control sucks.<br />
<br />
I <i>really</i> wanted to like this book. Exploratory testing is an extremely powerful technique which is largely passed from person-to-person rather than through books. This lack of textbook presence keeps it out of University curriculums. But when reading it, the only word I kept thinking of was <i>cheat</i>.<br />
<br />
At its core, Exploratory Software Testing is about the useful metaphor of a tester as a tourist and the software their destination. An application, like a city, can be broken down into a number of districts (business, historical, tourist, entertainment, hotel and seedy) and for each district a number of &#8216;tours&#8217; can be had (guidebook, money, landmark, intellectual, fedex, after-hours and garbage collectors for the business district for example). This metaphor is fantastically developed and is quite useful in developing a testing strategy.<br />
<br />
But is that metaphor enough to justify a book? No. Not really. I wouldn&#8217;t dream of pitching <a href="?p=200">SLIME</a> as an entire book though I think it is just as useful to keep in mind as being a tourist. More on that in a second.<br />
<br />
But first&#8230;<br />
<br />
I took James Bach&#8217;s Rapid Software Testing August of 2005 (during hurricane Katrina) and during it there was a discussion of &#8216;tours&#8217; you can take through an application. Specifically Mike Kelly&#8217;s <a href="http://www.michaeldkelly.com/blog/archives/50">FCC CUTS VIDS</a> was mentioned. Mr. Whittaker joined Microsoft in 2006 and started to develop the idea of tours of there (on the soccer pitch according to Alan Page who did the Foreword) which ultimately culminated in this book. Now, there is nothing wrong with taking an idea and evolving it. We&#8217;ve all done it. But when you do that, you are obligated to say that is what you did and to cite the sources. The lack of background material in Exploratory Testing is a concern. Not only is there no mention of people who did work on the Testing-as-Touring idea, but there is no mention of people who are known thought leaders in exploratory testing. You mean to say you can write a book on exploratory testing without mentioning James or Jon Bach, Cem Kaner or Michael Bolton? Really? What does that do to your credibility on the subject?<br />
<br />
The lack of citation is actually not my biggest criticism of Exploratory Testing. Like I said, I think the metaphor is wonderful and a useful addition of testing lore. My biggest complaint is that the book even got published.<br />
<br />
Exploratory Software Testing is 224 pages in length and if we operate on the premise that the tour metaphor is the main focus of the book then it should be the majority of the content. Right? Well, James&#8217; work on it lasts for 39 pages (chapters 4 and 5). Total. In fact, the original work ends on page 143 at which point he reprints a bunch of StickyMinds articles and his MSDN blog for the remainder. Even that content before the reprints isn&#8217;t all his. The chapter after the tour metaphor is finished is mini-essays (34 pages) by people inside Microsoft who have used tours successfully on their project.<br />
<br />
In short, there isn&#8217;t enough content to warrant publishing a book that retails for $39.99 USD ($47.99 CDN). Take the tour metaphor one more step and bind it as a pocket tourist guide that sells for $15 and you have a winner. But for this price and packaging, unless you have an unlimited book budget, I can&#8217;t recommend that you pick it up. Eventually someone will post a description of each district and its tour and a few minutes of google-fu will give you the same value and still have enough money in your pocket for a week&#8217;s work the lunches.<br />
<br />
Having been through the book process once this feels a lot like the publisher saw that they could sell a bunch of books based on the author having had successful books in the past and a title that is somewhat misleading but popular in their target audience&#8217;s lexicon rather than producing something of lasting value.<br />
<br />
Here is another thing from the publishing world; they really don&#8217;t like publishing a book with the same(-ish) title as an existing one. Especially in the same subject matter space. It is a shame that this book is what will forever carry the mantle for exploratory testing.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/5PexMlKggJM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1225</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1225</feedburner:origLink></item>
		<item>
		<title>Competing and/or Complementary Patterns of Script Design</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/VuIHS0LfyXQ/</link>
		<comments>http://adam.goucher.ca/?p=1222#comments</comments>
		<pubDate>Fri, 18 Sep 2009 19:08:21 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1222</guid>
		<description><![CDATA[For a (long) while the phrase Page Object has been floating around the periphery of knowledge, but it wasn&#8217;t until today that I actually looked it up and actually figured out what it is. And now that I have that knowledge, it seems to me that there are (at least) 3 different patterns for creating [...]]]></description>
			<content:encoded><![CDATA[<p>For a (long) while the phrase <i>Page Object</i> has been floating around the periphery of knowledge, but it wasn&#8217;t until today that I actually looked it up and actually figured out what it is. And now that I have that knowledge, it seems to me that there are (at least) 3 different patterns for creating a (Selenium) script.<br />
</p>
<ol>
<li><i>Feature Flow</i> &#8211; These are the classic type of scripts where you automate a flow through an application in a long series of steps.<br />
<br />
selenium.type(&#8221;Search&#8221;, &#8220;monkey&#8221;)<br />
selenium.click(&#8221;sButton&#8221;)<br />
<br />
For additional maintainability and reuse, you will evolve things to include helper methods/fixtures. I would guess that the <i>vast</i> majority of scripts are of this type.</li>
<li><i>Page Object</i> &#8211; If Feature Flow is &#8216;functional&#8217; programming, then Page Objects are OO. The webdriver project (which is what is going to power Selenium coming version 2.0) has what appears to be the <a href="http://code.google.com/p/webdriver/wiki/PageObjects">definitive reference</a> on Page Objects. Essentially, each Page is an Object.<br />
<br />
myPage = searchPage()<br />
myPage.search(&#8217;monkey&#8217;)<br />
<br />
with all the implementation details are tucked into the search method code.</li>
<li><i>DSL</i> &#8211; This method is an abstraction layer on top of the implementation details which typically makes the script more consumable by non-technical persons, but also to hide lots of details from technical persons that they don&#8217;t want to worry about either.<br />
<br />
go_to search_page<br />
search_for monkey
</li>
</ol>
<p>
What I realized is that they are not really exclusive. You can use bot Feature Flows and Page Objects as the underlying logic for a DSL. And in fact, the implementation details that are encapsulated in the Page Object methods will look like Feature Flow code.<br />
<br />
There has got to be other patterns also out there that I haven&#8217;t heard of. But what are they?</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/VuIHS0LfyXQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1222</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1222</feedburner:origLink></item>
		<item>
		<title>Building a Commercial Environment to support Selenium</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/jumhX3qJiGw/</link>
		<comments>http://adam.goucher.ca/?p=1218#comments</comments>
		<pubDate>Mon, 14 Sep 2009 21:56:38 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1218</guid>
		<description><![CDATA[Selenium currently has the lion-share of the open-source browser driving frameworks/systems. But if it is improve or even maintain that lead I think one thing that needs to happen is the formalization of both the project and the corporate entities that benefit from it.



I see a path to potential success looking a bit like the [...]]]></description>
			<content:encoded><![CDATA[<p>Selenium currently has the lion-share of the open-source browser driving frameworks/systems. But if it is improve or even maintain that lead I think one thing that needs to happen is the formalization of both the project and the corporate entities that benefit from it.<br />
<br />
<img src="http://adam.goucher.ca/wordpress/wp-content/uploads/2009/09/valueadded.png" /><br />
<br />
I see a path to potential success looking a bit like the above venn diagram.<br />
<br />
On the left is company A who uses Selenium as a core technology for their products and/or services. But they have also developed extension to the core product. Those extensions are <i>their</i> value-add; it is what separates that company from others and belongs to them. That I think <i>should not</i> be contributed back to the main project. Now, if they fix bugs in the server or refactor or otherwise improve the core then that <i>should</i> be contributed.<br />
<br />
Same thing for the company B on the right who just happens to have two novel improvements that they keep as part of their corporate IP.<br />
<br />
Area Se (C &#8212; you have no idea how funny I think that is) is the missing links right now. Companies A and B (and likely D &#8211; J) already exist. Area Se is something akin to The Selenium Foundation which would be a not-for-profit which holds the copyrights and IP for the main project. Their role would be to act as the central marketing position for member companies, manage the mailing lists, web site, etc. They would also, ultimately, be responsible for the project roadmap and managing releases. I think this organization already exists, but I&#8217;m not sure it really has taken the bit and started running.<br />
<br />
This wouldn&#8217;t have to be a big organization; likely just a single person (Managing Director) initially, voted into a 2-year term by board members (initially I see such a board being made of representatives from Thoughtworks, Google, Sauce Labs, Browsermob and the community at large) and a big enough budget salary-wise to let someone dedicate 100% of their time on the task.<br />
<br />
I had thought Watir had pulled off this bit of re-organization with WatirCraft, but with its shuttering recently it looks like that momentum was lost.</p>
<p>Neither of A or B are precluded from offering their smaller bubbles back in into the the core projects (IDE, RC, Grid) at some point in the future if they desired. But at the same time, the Foundation wouldn&#8217;t be obligated to accept them if they were too specific to a certain problem.<br />
<br />
Of course, the venn diagram starts to break down pretty fast once you get more than two participants, but I think the model in-general resembles something close enough to the Debian / Ubuntu one that it still will scale out. The devil is of course in the details and the political will must exist among the existing vendors in order to make it happen.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/jumhX3qJiGw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1218</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1218</feedburner:origLink></item>
		<item>
		<title>Be prepared, but don’t carry knives</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/zvRRa46uhLo/</link>
		<comments>http://adam.goucher.ca/?p=1216#comments</comments>
		<pubDate>Sun, 13 Sep 2009 03:21:19 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1216</guid>
		<description><![CDATA[My whole family was involved in Scouting when I was growing up; my mom was a Beaver leader, my dad a Scout leader and Venturer adviser, my brother did Beavers through Scouts and I did Beavers through Venturers. So when flipping through the paper or a magazine, articles on Scouting tend to stick out.

In Wednesday&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>My whole family was involved in Scouting when I was growing up; my mom was a Beaver leader, my dad a Scout leader and Venturer adviser, my brother did Beavers through Scouts and I did Beavers through Venturers. So when flipping through the paper or a magazine, articles on Scouting tend to stick out.<br />
<br />
In Wednesday&#8217;s paper was a <a href="http://www.metronews.ca/toronto/comment/article/305101--common-sense-dulled">commentary piece</a> about Scouts in the UK not being allowed to carry a knife anymore <i>to prevent the spread of a growing knife culture</i>. Here are some choice quotes.</p>
<ul>
<li>Either give the little blighters the knowledge and skill required to become good scouts, or keep them at home and give out badges for ordering pizza.</li>
<li>Indeed, there is a thin line between savagery and civilization, but there is also one between civilization and demoralization, and somehow we have to civilize boys without turning them into ciphers.</li>
<li>I hasten to add that girls are just as disadvantaged by the ban, as girls need to be just as prepared as boys. What’s next? Confiscate all the needles from the sewing kits? No tent pegs?</li>
<li>“Be Prepared &#8230; a scout must prepare himself by previous thinking out and practicing how to act on any accident or emergency so that he is never taken by surprise.” And: “The boy is not governed by don’t, but is led by do.” &#8211; From the Boy Scout manual</li>
</ul>
<p>I don&#8217;t have a nice, tidy connection to testing with this (yet), but I think it goes something along the lines of: <i>In the context of Scouting, a knife is their primary tool and they need to know how to use it effectively in their context. In testing, our primary tool is our brain. We too need to know how to use it effectively in our context(s). Relying on &#8216;best practices&#8217; promoted by people who do not know or understand your context is akin to handing over your knife to someone in order to keep you safe.</i><br />
<br />
Actually, that did come out rather tidy.<br />
<br />
And while we&#8217;re talking about Scouting, my son is now a Beaver and I&#8217;m one of the Colony&#8217;s three leaders. That means I get a subscription to <a href="http://scoutinglife.ca">Scouting Life</a> magazine. In the August / September 2009 issue they have an article on which forms you need to use for different types of activities which included:<br />
<br />
<i>Leaders and Participants are:</p>
<ul>
<li>in the Right Place,</li>
<li>at the Right Time,</li>
<li>with the Right People</li>
<li>and with the Right Equipment</li>
</ul>
<p></i><br />
<br />
Seems like a good set of guidelines for a lot of different situations, like building a team, or even a company.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/zvRRa46uhLo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1216</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1216</feedburner:origLink></item>
		<item>
		<title>Bits and Pieces from the 8/31 Fortune</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/idZfG0Du9l8/</link>
		<comments>http://adam.goucher.ca/?p=1212#comments</comments>
		<pubDate>Sun, 13 Sep 2009 02:42:40 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1212</guid>
		<description><![CDATA[There are a couple things that popped out at me in the August 31, 2009 issue of Fortune. Unfortunately, none of them really warrant a post of their own, so here they all are in one.

Advice from the CEO of Mattel &#8211; article

Don&#8217;t put off layoffs &#8211; procrastination isn&#8217;t good for anyone
Always make an outline
Mind [...]]]></description>
			<content:encoded><![CDATA[<p>There are a couple things that popped out at me in the August 31, 2009 issue of Fortune. Unfortunately, none of them really warrant a post of their own, so here they all are in one.<br />
<br />
<b>Advice from the CEO of Mattel</b> &#8211; <a href="http://money.cnn.com/2009/08/21/magazines/fortune/management/bob_eckert_mattel.fortune/index.htm">article</a></p>
<ul>
<li>Don&#8217;t put off layoffs &#8211; procrastination isn&#8217;t good for anyone</li>
<li>Always make an outline</li>
<li>Mind the generation gap &#8211; don&#8217;t try to give them a snow job</li>
<li>Research before hiring &#8211; find out who you both know and ask them their perspective</li>
<li>Run efficient Meeting &#8211; send materials out in advance and make sure everyone reads them</li>
<li>Enforce punctuality</li>
<li>Target your message &#8211; worry more on what the audience needs to hear than what you want to say</li>
</ul>
<p>
<b>Leadership lessons from Home Depot&#8217;s CFO, Carol Tome</b> &#8211; <a href="http://money.cnn.com/2009/08/18/news/companies/home_depot_carol_tome.fortune/index.htm">article</a><br />
<br />
<i>&#8216;ve learned a lot. I&#8217;ve learned that it is really about the power of the team and the importance of alignment. You&#8217;ve got to break down silos, particularly in an environment like this. The only enemy we have is the company headquartered in North Carolina [Lowe's]. We need to be aligned as a team, and we have made great progress in that regard.<br />
<br />
I&#8217;ve learned that you&#8217;ve got to have a sense of humor. We&#8217;ve had some dark days, and the ability to just crack a joke or laugh for a minute really does help. It really is important to laugh at yourself and to say, Okay, I blew that, but that&#8217;s okay. Pick yourself up and keep going on.<br />
<br />
And never lose sight of the customer. At the end of the day it all comes back to the customer. The more time you can get out of the office and spend time talking to the customer, the better it is.</i><br />
<br />
<b>The new rules dealing with the downturn (and setting yourself up for the rebound)</b> &#8211; <a href="http://money.cnn.com/2009/08/11/news/economy/new_rules_recovery.fortune/index.htm">article</a><br />
</p>
<ul>
<li><i>Narrow your focus</i> &#8211; Strategic cutting wasn&#8217;t the end. It was the means for positioning the company to grow.</li>
<li><i>Accelerate innovation</i> &#8211; The more you do, the more you can do</li>
<li><i>Aggressively leverage what you can control</i></li>
<li><i>Obsessively search for the right growth</i> &#8211; not just any old growth, but the <i>right</i> growth</li>
</ul>
<p>And the last paragraph is also really good:<br />
<br />
<i>No matter what business you are in, no matter what you&#8217;ve done till now, there is still time to change your attitude from that of fighting for survival to seeking opportunities for growth. Face the tough decisions, but don&#8217;t let cutbacks stop you from seeing the windows of opportunity that are suddenly open. Think creatively. Act aggressively. We can&#8217;t predict with certainty when the broader economy will recover. But your company&#8217;s recovery can begin whenever you&#8217;re ready.</i><br />
<br />
<b>Four strategies for managing a company</b> &#8211; <a href="http://money.cnn.com/2009/08/12/news/companies/blackrock_trillionaires_club.fortune/index.htm">article</a></p>
<ol>
<li>Make a big business feel like a small company</li>
<li>When things get complex, do your homework</li>
<li>Acquire to grow, not cut</li>
<li>Know where your business is heading</li>
</ol>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/idZfG0Du9l8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1212</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1212</feedburner:origLink></item>
		<item>
		<title>Selenium Open Jam at Agile2009</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/BGQCIb31mr4/</link>
		<comments>http://adam.goucher.ca/?p=1207#comments</comments>
		<pubDate>Sun, 13 Sep 2009 01:15:32 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1207</guid>
		<description><![CDATA[One thing I found surprising at Agile this year was the lack of representation of both Watir and Selenium. Selenium, other than Chris&#8217; session wasn&#8217;t really mentioned and I didn&#8217;t see anything using Watir or people discussing it. So I did what anyone would do who has fairly strong opinions on/about an under-represented subject would [...]]]></description>
			<content:encoded><![CDATA[<p>One thing I found surprising at Agile this year was the lack of representation of both Watir and Selenium. Selenium, other than <a href="?p=1176">Chris&#8217; session</a> wasn&#8217;t really mentioned and I didn&#8217;t see anything using Watir or people discussing it. So I did what anyone would do who has fairly strong opinions on/about an under-represented subject would do and hosted an Open Jam on Selenium.<br />
<br />
Open Jam was a big, almost living-room space where you could host or attend a mini session on any topic you want. I sent out a tweet (which were broadcast on a big screen), put something on the lists and then let things fall where they landed.<br />
<br />
We ended up having 6 or 7 people show up to talk about Selenium; &#8216;best practices&#8217;, I had a problem with X, can you recommend a solution, etc.. One person, Mike Longin, beat me well to <a href="http://devxero.wordpress.com/2009/08/30/agile-2009-selenium-open-space/">posting a summary</a> of his time at our table.<br />
<br />
Jason Huggins also made an appearance as well. We were going to hack on the Se-IDE a bit, but that got rather sidetracked. What can you do&#8230;<br />
<br />
Here are the posters I put up on the wall, as well links to posts that have a bit more detail on what they are trying to convey.<br />
<br />
<img src="http://adam.goucher.ca/wordpress/wp-content/uploads/2009/09/se-oj.png" /><br />
<br />
<img src="http://adam.goucher.ca/wordpress/wp-content/uploads/2009/09/se-value.png" /><br />
<a href="?p=1198">The Selenium Value Chain</a><br />
<br />
<img src="http://adam.goucher.ca/wordpress/wp-content/uploads/2009/09/se-evol.png" /><br />
<a href="?p=589">Evolution of an Automated Test</a></p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/BGQCIb31mr4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1207</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1207</feedburner:origLink></item>
		<item>
		<title>Remembering without knowing it</title>
		<link>http://feedproxy.google.com/~r/AdamGoucher/~3/Vf6LKzAJfXg/</link>
		<comments>http://adam.goucher.ca/?p=1206#comments</comments>
		<pubDate>Sat, 12 Sep 2009 23:58:49 +0000</pubDate>
		<dc:creator>adam</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://adam.goucher.ca/?p=1206</guid>
		<description><![CDATA[Over at ScienceNOW is an Unconscious relational memory. Explaining what relational memory is, the article has this:

Try this trick at home: Have a friend remove an object from a room you know well&#8211;say, a napkin holder from your kitchen&#8211;and then see if you can guess what he&#8217;s taken away. Even if you don&#8217;t know the [...]]]></description>
			<content:encoded><![CDATA[<p>Over at ScienceNOW is an <a href="http://sciencenow.sciencemag.org/cgi/content/full/2009/910/4">Unconscious relational memory</a>. Explaining what relational memory is, the article has this:<br />
<br />
<i>Try this trick at home: Have a friend remove an object from a room you know well&#8211;say, a napkin holder from your kitchen&#8211;and then see if you can guess what he&#8217;s taken away. Even if you don&#8217;t know the answer, your eyes will unconsciously fixate on the stretch of countertop next to the toaster where the holder usually sits. Remembering what goes where in your kitchen is called relational memory, and now scientists have shown that your unknowing stare may be a sign that your brain remembers even when you don&#8217;t.</i><br />
<br />
The context of the article is about trying to figure out which part of the brain is involved in relational memory (hippocampus and prefrontal cortex). But here is the conclusion I have absolutely no right to make; one of the more useful skills of a tester is relational memory as applied to a screen in an application. Which means, you could run someone through an FMRI and see if they are better suited at a physical brain level to be an above average tester.<br />
<br />
One of the many hitches in that theory, other than the obvious &#8216;I am not a brain scientist&#8217; is<br />
<br />
<i>So your hippocampus may have made the connection that the napkin holder is missing, but your PFC must get involved for you to realize it. &#8220;The idea is that recollection may be a two-stage process,&#8221; Hannula says. &#8220;First you have retrieval of the memory, and then you have a conscious appreciation of what&#8217;s been retrieved.&#8221;</i><br />
<br />
The whole split between unconscious and conscious appreciation is where the niggly details hide.</p>
<img src="http://feeds.feedburner.com/~r/AdamGoucher/~4/Vf6LKzAJfXg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://adam.goucher.ca/?feed=rss2&amp;p=1206</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://adam.goucher.ca/?p=1206</feedburner:origLink></item>
	</channel>
</rss>
