<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Test Obsessed</title>
	<atom:link href="http://testobsessed.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://testobsessed.com</link>
	<description>Elisabeth Hendrickson&#039;s thoughts on Agile, Testing, and Agile Testing.</description>
	<lastBuildDate>Sun, 15 Aug 2010 22:36:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>On Winning the Gordon Pask Award at Agile2010</title>
		<link>http://testobsessed.com/2010/08/15/on-winning-the-gordon-pask-award-at-agile2010/</link>
		<comments>http://testobsessed.com/2010/08/15/on-winning-the-gordon-pask-award-at-agile2010/#comments</comments>
		<pubDate>Sun, 15 Aug 2010 22:36:10 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Agile]]></category>

		<guid isPermaLink="false">http://testobsessed.com/?p=403</guid>
		<description><![CDATA[<p>On Friday August 13, I accepted the Agile Alliance&#8217;s Gordon Pask award at the Agile 2010 conference in Orlando.</p>
<p>I wasn&#8217;t even aware that I had been nominated, so when David Hussman called me at home shortly after 7:30AM on Tuesday August 10 to tell me that I had won, I was beyond surprised. Gobsmacked? Flummoxed? Yes, <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2010/08/15/on-winning-the-gordon-pask-award-at-agile2010/">On Winning the Gordon Pask Award at Agile2010</a></span>]]></description>
			<content:encoded><![CDATA[<p>On Friday August 13, I accepted the <a href="http://www.agilealliance.org/programs/gordon-pask-award/">Agile Alliance&#8217;s Gordon Pask award</a> at the Agile 2010 conference in Orlando.</p>
<p>I wasn&#8217;t even aware that I had been nominated, so when David Hussman called me at home shortly after 7:30AM on Tuesday August 10 to tell me that I had won, I was beyond surprised. Gobsmacked? Flummoxed? Yes, those words fit. Also grateful, honored, and delighted. I immediately made arrangements to go to Orlando to accept the award in person.</p>
<p>Even now I find it difficult to articulate what the award means to me. I am amazed to have been nominated. To have won? I am enormously pleased to have my work in the Agile community validated by such an honor. I think back to the prior winners and am ecstatic to be in their company. And I feel incredibly flattered to have been chosen alongside <a title="Liz Keogh Blog" href="http://lunivore.com/">Liz Keogh</a> who I respect and admire tremendously.</p>
<p>My inability to articulate my feelings led to near-paralysis in the days leading up to the official (short) ceremony. I had most of Tuesday and all of Wednesday and Thursday to organize my thoughts, but I made very little progress.</p>
<p>I thought about what to say during the long flight to Orlando on Thursday. When we landed in Orlando I had no more idea what I would say than when we left San Francisco.</p>
<p>Confessing my uncertainty about what to say to Matthew Barcomb during the banquet on Thursday night, I joked that I could use my time on stage to help him find his missing VGA adapter. &#8220;Thanks for the award!&#8221; I said, &#8220;Now, where is Matthew Barcomb. Yes, there you are. Stand up. OK, now who borrowed Matthew&#8217;s VGA adapter? Could you go over there and return it to him please?&#8221;</p>
<p>Matthew laughed. Brian Marick chimed in. &#8220;You could thank me,&#8221; he joked.</p>
<p>&#8220;OK,&#8221; I said. &#8220;What shall I thank you for?&#8221;</p>
<p>&#8220;For resigning from the Pask committee so that I&#8217;m no longer there to blackball women or testers.&#8221;</p>
<p>We laughed.</p>
<p>Then we drank some more. As a group we found our way to &#8220;Mexico&#8221; in Epcot Center where we hung with the <a href="http://www.versionone.com/">Version One</a> folks. Then we meandered over to &#8220;England&#8221; where <a href="http://softwareeducation.wordpress.com/author/shanehastie/">Shane Hastie</a> put some delicious but deadly concoction of a cocktail into my hands. We made our way to the Dance Hall on the boardwalk where we danced to pounding music and I lost track of my head.</p>
<p>Keenly aware that I had to be onstage between 9AM and 9:30, I switched to water at midnight and made my way back to my hotel at 1AM. Before going to sleep, I set two alarms, a primary for 7AM and a backup for 7:30AM. Then I fell asleep, blissfully unencumbered by any thoughts whatsoever.</p>
<p>Friday morning dawned.</p>
<p>The &#8220;strum&#8221; sound from my iPhone woke me with a start. It was my backup alarm. That meant it was 7:30AM. I shook away the cobwebs of a surreal dream involving Craftsman architecture and escaping cookie dough. Bleary-eyed, turned off the alarm. No time to hit Snooze.</p>
<p>I wondered why my primary alarm on my iPad, set for 7:00AM, hadn&#8217;t gone off. I looked over at the iPad. The display showed the alarm clock app prompting me to dismiss the alarm. Apparently it had gone off, but silently. Whoopsie. Good thing I always set two alarms. I turned off the alarm clock on the iPad and shuffled toward the coffee maker.</p>
<p>I took a mental inventory. I felt better than I had any right to given that I&#8217;d been in California less than 24 hours prior, had flown across country, and had been out partying until 1AM. I congratulated myself for not overindulging the night before, at least not too much, and for going to bed early enough to get 6 hours of sleep.</p>
<p>My mind turned to preparing for the day. 7:30AM. That left me an hour in which to make myself presentable, have some coffee, and reflect on what I would say on stage before I had to walk over to the Dolphin. I still needed to iron my shirt, but I would have plenty of time for that. And I could organize my acceptance speech in my head while I ironed.</p>
<p>Then my glance fell on the hotel room clock.</p>
<p>As a general rule, I don&#8217;t use hotel clocks. I find the alarms on my iPhone and iPad tend to be more reliable, and their time is usually more accurate.</p>
<p>But this time I wished that I had consulted the hotel room clock sooner.</p>
<p>It read 9:17AM.</p>
<p>If it really was 9:17&#8230; then I was due on stage RIGHT NOW. I could picture JB or Jim Newkirk calling my name, looking for me.</p>
<p>My mind raced. Which clock was right? I looked outside. Bright. Sunny. Of course. It&#8217;s Florida. Bright and sunny are normal. That didn&#8217;t mean much. I checked my own internal sense of time. Because I&#8217;d slept in 3 different time zones in the space of a week, my internal sense of time was completely broken.</p>
<p>My iPhone now read 7:33. I recalled my stop-over in Denver. I have had my iPhone get &#8220;stuck&#8221; on the wrong time zone before. And given that my iPad was another Apple product, it was possible that it could have the same issue.</p>
<p>Nagging doubts remained. If it was really that late why hadn&#8217;t someone called me? Surely someone would have called me. But maybe they couldn&#8217;t find me. I was staying at the Yacht Club because the Dolphin was full. And maybe they didn&#8217;t have my cell number. Another doubt surfaced. If the problem was that my iPhone and iPad were &#8220;stuck&#8221; on Denver time, why was it not an exact 2-hour difference? Why did my iPhone now say 7:34 and the hotel clock said 9:18?</p>
<p>But I had to admit to myself that it was entirely plausible that the hotel room clock was closer to correct than my own devices.</p>
<p>My stomach plummeted.</p>
<p>I quickly searched my address book for cell phone numbers of everyone I could think of. Phil Brock. Jessica Ambrose. JB Rainsberger. David Hussman. No luck. All my contact information was on my computer back in California. In an attempt to travel light I only had my iPad with me and it didn&#8217;t have all my contact info. So I had no way to contact anyone at the conference.</p>
<p>Full panic mode set in. I was seized with the notion that it was after 9AM. Despair and disbelief washed over me. I had flown all the way across the country just to accept the award. I felt so honored to have been selected. Then I stayed out too late and slept through my chance to say thank you. In doing so, I threw the honor back in the face of the committee. I&#8217;ve made mistakes before. I have disappointed people. But this would be among the worst of my screwups.</p>
<p>I threw on some clothes. Maybe, just maybe, if I got out the door fast enough and ran full tilt to the Dolphin, I could make it before 9:30. I would look like a disaster, but I would be there.</p>
<p>Grabbing my phone and room key I glanced at the mirror on my way out. It showed me an unforgiving image. I was a total mess. &#8220;What will people think?&#8221; I wondered. &#8220;How will they interpret my appearance?&#8221; Drunk, I decided. People would look at my hair and mismatched clothes and think I&#8217;m drunk from the night before. That&#8217;s the only reason someone would show up looking like this. My stomach sank lower.</p>
<p>I decided that showing up looking like a complete mess was preferable to not showing up at all. I raced out the door.</p>
<p>The nagging doubts resurfaced. The first thing to do, I decided, was to find out exactly what time it really is.</p>
<p>A hapless tourist wandered into my field of view. I raced up to him.</p>
<p>&#8220;WHAT TIME IS IT??!?&#8221; I demanded.</p>
<p>His gave me a look that plainly said he thought I was nuts. I privately agreed with his assessment. He checked his watch.</p>
<p>&#8220;About 7:48,&#8221; he reported.</p>
<p>The adrenaline that had fueled my scrambled exit from my hotel room abated. I shook with relief. My mind stopped racing. It would all be OK after all. I felt a sense of joyous reprieve. The sinking feeling reversed, roller-coasted into elation.</p>
<p>&#8220;THANK GOD! THANK YOU! I FEEL LIKE SCROOGE!&#8221; I shouted at the tourist with the watch. The bit about Scrooge made perfect sense in my head, but I suspect it served to confirm the tourist&#8217;s diagnosis of CRAZY.</p>
<p>I ran back into my room and spent the next 5 minutes just remembering how to breathe.</p>
<p>The remainder of my morning went as originally planned. In the next 40 minutes, I made myself presentable, had some coffee, and reflected on what to say on stage. And I laughed a little at my foolishness over the time confusion.</p>
<p>At 8:30AM (10:17AM HCT &#8211; Hotel Clock Time) I made my way from the Yacht Club to the Dolphin. I contemplated possible acceptance speeches as I walked, my heels thunking on the wood of the boardwalk.</p>
<p>I considered telling the story of my morning and the clock mixup, but decided it was too off-topic.</p>
<p>I considered doing an Oscars-style &#8220;Thank you to&#8230;&#8221; in which I would thank everyone I&#8217;d learned from in the Agile community, but decided that it was a massively long list, it would take too long, and no matter how careful I tried to be I would forget someone important.</p>
<p>I considered saying something about the past controversy around the award and the fact that two women had won this year when none had one before, but decided that was too divisive a message.</p>
<p>I considered gushing appreciations about the award and what it meant to me, but decided I&#8217;d probably end up babbling &#8220;Thank you I&#8217;m so honored!&#8221; over and over.</p>
<p>My mind was still churning even as the morning session began.</p>
<p>Mercifully, Liz was called up to the stage first. <a href="http://lizkeogh.com/2010/08/13/the-gordon-pask-award/">She spoke eloquently of community</a>. I appreciated and agreed with her sentiments. But I knew that I could not get away with uttering, &#8220;Yeah. What Liz said!&#8221; I had to say something of my own.</p>
<p>Then it was my turn. As I walked up the steps I still did not really know what I would say.</p>
<p>But I had the germ of an idea. Brian had said I should thank him.</p>
<p>He had been joking. But he was right. I did need to thank him. Just not for the reason he suggested.</p>
<p>Brian is responsible for my starting down the path to learn about Agile, and he ushered me into the Agile community.</p>
<p>Brian started telling me about Extreme Programming sometime around 1999 or 2000. I ignored him for a couple years. Then at his urging, I went to see Kent Beck speak in 2001 and finally understood what Brian had been talking about. Set on the path to learning about Agile, I sought more sources of learning. I participated in one of Josh Kerievsky&#8217;s XP immersion classes. I finagled my way onto a Pivotal Labs project. I attended both XP Universe and the Agile Developer Conference (the forerunners to the Agile20XX conferences). Then Brian suggested that we do a session together at ADC2003 on Exploratory Testing in Agile. And so I started presenting at Agile conferences.</p>
<p>In short, if Brian had not introduced me to Agile concepts, principles, values, and the surrounding community, I wouldn&#8217;t be doing what I do today.</p>
<p>So, in my acceptance speech I said thank you to Brian. My words met with a few laughs, and I am still half expecting Brian to shoot me an email saying &#8220;WTF??!?&#8221;</p>
<p>But while I singled out Brian, I also want to thank members of the broader community. Fellow consultants and coaches. People I&#8217;ve worked with at my clients. Members of the AA-FTT community. Members of the BayXP and BayAPLN communities. Members of the local user groups that I&#8217;ve spoken to. The fine folks who work at Pivotal Labs, Atomic Object, CodeCentric, and Reaktor Innovations. Everyone who has come to Agilistry for events. Agile Alliance members.</p>
<p>All of you have been part of this journey. And I am immensely grateful to each and every one of you.</p>
<p>Communities take on a life of their own and deserve to be recognized and celebrated in their own right.</p>
<p>And I also wish to celebrate the individuals that make up the community.</p>
<p>So many, many thanks to all of you for being part of my Agile journey. I am honored. And grateful. And flattered. And extremely appreciative to be surrounded by a circle of such incredible individuals, part of an amazing community.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2010/08/15/on-winning-the-gordon-pask-award-at-agile2010/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Random Thoughts on Record-and-Playback</title>
		<link>http://testobsessed.com/2010/07/26/random-thoughts-on-record-and-playback/</link>
		<comments>http://testobsessed.com/2010/07/26/random-thoughts-on-record-and-playback/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 02:02:00 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://testobsessed.com/?p=183</guid>
		<description><![CDATA[<p>Some years ago I had lunch with a QA specialist who invited me to visit him at work.  He wanted to show off how he had used a macro recorder to automate his testing.  Over lunch I offered the opinion that test automation is a programming activity.  The QA specialist vehemently disagreed with <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2010/07/26/random-thoughts-on-record-and-playback/">Random Thoughts on Record-and-Playback</a></span>]]></description>
			<content:encoded><![CDATA[<p>Some years ago I had lunch with a QA specialist who invited me to visit him at work.  He wanted to show off how he had used a macro recorder to automate his testing.  Over lunch I offered the opinion that test automation is a programming activity.  The QA specialist vehemently disagreed with me.</p>
<p>&#8220;I don&#8217;t need to program to automate my tests!&#8221; he said, waving his fork. &#8220;And I don&#8217;t want to program!&#8221; His fork punctuated his words. &#8220;All those FOR loops. Never could get the hang of FOR loops. And what&#8217;s the point anyway!&#8221; The fork was becoming dangerous. I considered ducking.</p>
<p>I couldn&#8217;t help but notice that he seemed angry that FOR loops were too complicated, and yet he was trying to automate tests.  I haven&#8217;t visited that company again and I have no idea how they&#8217;re doing.  But that guy?  He scared me.  No, it wasn&#8217;t the fork that scared me.  It was the attitude about programming and automated tests.</p>
<h3>Not Everyone Has to Code</h3>
<p>I am often asked whether QA/Test people need to know how to program.</p>
<p>I always answer the same: QA/Test people do not need to know how to program, even on Agile projects.  Everyone on a team brings something to the table.  QA/Test people my not bring programming skills, but that&#8217;s OK, they don&#8217;t need to.  The programmers already have that covered. Rather, QA/Test people bring testing skills and analysis skills and critical thinking skills and communication skills.  Some bring other non-programming technical skills like database admin or network admin or system admin skills.  And some do bring programming skills, and that&#8217;s great too.  Whatever their skills, everyone brings something to the table.</p>
<p>And non-programming testers can collaborate very effectively with programmers to create awesome test automation (just ask Lisa Crispin).</p>
<p>But someone who is scared of FOR loops doing the coding part of test automation in isolation by recording and playing back stuff?  Seems to me like that&#8217;s a good way for everyone on the project to waste a huge amount of time and become very frustrated.</p>
<h3>Is Record-and-Playback a Solution to the Wrong Problem?</h3>
<p>I&#8217;ve been thinking about that guy today as I&#8217;ve been thinking about record-and-playback test automation.  I have had several conversations about record-and-playback test automation over the last few months with a wide variety of people.</p>
<p>Some people have said, &#8220;Yes, we discovered that what you are saying is true.  So while we may start by recording a script, we modify it so much that it is not recognizable as a recorded script when we&#8217;re done.&#8221;</p>
<p>Others have said, &#8220;I only use the record-and-playback for quick and dirty test-assistance scripts.  I know it can&#8217;t create real, robust test automation.&#8221;</p>
<p>Still others &#8211; usually vendors &#8211; have said, &#8220;Yes, I know you don&#8217;t like record-and-playback. But others do, and they want that capability.  They want to automate their tests without programming.&#8221;</p>
<p>So individual contributors generally recognize that record-and-playback can be a helpful stepping stone but it is not a strategy.  Yet at least some vendors still are very attached to record-and-playback, and customers apparently still demand it.</p>
<p>I wonder if record-and-playback is an attempt to solve the problem that QA/Test groups think they have rather than the real, underlying problem?  It seems to me that the reasoning usually goes something like this:</p>
<ol>
<li>We need automated tests to provide fast feedback.</li>
<li>Someone needs to write those tests.</li>
<li>It has the word &#8220;test&#8221; in it, so it must belong to the QA/Test group.</li>
<li>The QA/Test group doesn&#8217;t have much in the way of programming skills.</li>
</ol>
<p>Therefore, the reasoning concludes, we must need something that will allow QA/Test groups to automate tests without knowing how to program. Or we must make all QA/Test people learn to code.  That second thing isn&#8217;t gonna happen, so we need a tool to take care of the first solution.</p>
<p>The problem is that item #3 in the list is a total fallacy.  Just because something has the word &#8220;test&#8221; in it does not automatically mean that it should be assigned to a designated, independent tester.  If we get rid of the original constraint #3, we simplify the problem and open a world of alternative solutions.  So let&#8217;s state the situation instead as:</p>
<ol>
<li>We need automated tests to provide fast feedback.</li>
<li>Someone needs to write those tests.</li>
<li>The QA/Test group may not have much in the way of programming skills.</li>
</ol>
<p>So the people who are really good at coding can do the programming part of automating tests, and the non-programming testers can collaborate with them to make sure the automated tests are useful and effective.  And I do mean collaborate.  Not &#8220;hand off a specification to&#8230;&#8221;, not &#8220;make a request of&#8230;&#8221;, and certainly not &#8220;supervise.&#8221;  I mean collaborate as in work together on, at the same time.</p>
<h3>Worse, is Record-and-Playback a Substitute for the Real Solution?</h3>
<p>So if the reason customers demand record-and-playback capability in test automation tools is that it enables people who don&#8217;t know how to code to automate tests, it makes me wonder why they&#8217;re making non-programmers do programming work.</p>
<p>The most common reason I hear from QA/Test people is that the programmers won&#8217;t automate tests, so the testers have to do it.  The most common reason I hear from the programmers is that they don&#8217;t have time, and besides, there is a whole QA/Test group assigned to that kind of work.</p>
<p>But it seems to me like the real issue here is that we&#8217;re trying to use a tool to as a substitute for something else.  We&#8217;re using it as an alternative to real collaboration.</p>
<p>So now when I hear someone tell me that they&#8217;re using record-and-playback a lot in their test automation strategy, it suggests that perhaps the test effort and development effort aren&#8217;t integrated, that the organization is still operating in silos, and that we need to work on breaking down barriers to collaboration before we start talking seriously about tools.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2010/07/26/random-thoughts-on-record-and-playback/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Acceptance Tests as a Customer Deliverable</title>
		<link>http://testobsessed.com/2010/07/22/at-as-cust-deliver/</link>
		<comments>http://testobsessed.com/2010/07/22/at-as-cust-deliver/#comments</comments>
		<pubDate>Thu, 22 Jul 2010 16:24:51 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>

		<guid isPermaLink="false">http://testobsessed.com/?p=303</guid>
		<description><![CDATA[<p>There’s a discussion going on over on the software-testing discussion group about a customer’s delivery requirement that the software be handed over with an acceptance test script.</p>
<p>I want to illustrate my perspective on this topic with a short story. If stories aren’t your thing, skip to the end of the post. I make my real point <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2010/07/22/at-as-cust-deliver/">Acceptance Tests as a Customer Deliverable</a></span>]]></description>
			<content:encoded><![CDATA[<p>There’s <a href="http://groups.yahoo.com/group/software-testing/message/7153">a discussion</a> going on over on the <a href="http://groups.yahoo.com/group/software-testing/">software-testing discussion group</a> about a customer’s delivery requirement that the software be handed over with an acceptance test script.</p>
<p>I want to illustrate my perspective on this topic with a short story. If stories aren’t your thing, skip to the end of the post. I make my real point there.</p>
<p><strong>A Fictional Digression with Little Green Men, a Magic Transporter Stick, and a Jar of Mustard</strong></p>
<p>It’s just after dusk. You’re hanging out on your back porch enjoying the evening.</p>
<p>Suddenly with a whir and a whine, an alien space ship lands in your back yard. Two little green guys pop out. At first, you hear a bizarre series of clicks and whistles, but soon you hear a mechanical voice. You guess it must be a translator device. The voice says.</p>
<p>“Greetings! Do you have a jar of mustard? We will trade you our advanced technology for mustard.”</p>
<p>You aren’t sure you heard them right. This is too surreal. Mustard?</p>
<p>You stare at the green guys. They’re kind of roly-poly. Each one has five eyes on stalks on the top of its head, and five squat arms with a mass of tentacles coming out of the middle of their bodies. And they are green. Decidedly, definitely green.</p>
<p>“Little green men,” you mutter under your breath.</p>
<p>They repeat their message: “Greetings! Do you have a jar of mustard? We will trade you our advanced technology for mustard.”</p>
<p>You shake your head to clear it.</p>
<p>One half of your brain is still boggling at the fact that there are aliens hanging out by your rhododendrons.</p>
<p>The other half of your brain is remembering the huge economy-sized jar of mustard you got the last time you were at MegaStuff. You weren’t ever going to finish it anyway.</p>
<p>“Yeah, hang on,” you say. You go to fetch the jar of mustard. After all, you are the neighborly, helpful sort.</p>
<p>You are also the careful sort. As you are rummaging in the pantry it occurs to you that you don’t know what this “advanced technology” is. What does it do? How does it work? Is it safe? What if this is a plot to get a human to press the Go button on a Planet Death Device?</p>
<p>You can’t be too careful, after all. Time to ask some questions.</p>
<p>You come back outside, holding up the jar of mustard. The aliens nearly dislocate their eye stalks staring at it. All ten eyes are gleaming at you. It’s disconcerting.</p>
<p>Undaunted, you start your questions. “Before I give this to you,” you say, “what is this advanced technology? What does it do?”</p>
<p>The aliens each swivel one eye stalk up toward your face. The other four eyestalks remain firmly rooted on the mustard jar.</p>
<p>“It’s a portable personal surface transporter,” says the mechanical voice. “It will take you wherever on Earth you want to go.”</p>
<p>You consider this for a moment. A portable personal surface transporter. That could be handy. You consider your 45 minute commute each way every day, the long drives to see family, and the last time you paid an arm and a leg for a cramped economy seat in the back of the plane because you promised yourself you’d make it off your home continent while you were still young.</p>
<p>You look at the jar of mustard in your hand. You consider the possibilities.</p>
<p>Seems like a more than fair trade. A jar of mustard for instant transportation anywhere? That&#8217;s even worth some risks.</p>
<p>“OK,” you say. You walk over to the aliens and thrust the jar of mustard toward them. You have to bend down to get close enough. One of the aliens seizes the jar from your grasp with three of its hands. You&#8217;re surprised at how easily it hefts the weight of the jar given its size. All five of its eyestalks are on the jar, waving around the lid. Its hands are a sea of motion as its tentacles move over the large plastic container.</p>
<p>You look at the other alien. It’s riveted on the jar too. “What is it about these guys and mustard?” you wonder.</p>
<p>Then you notice that the other alien is holding a stick with a ball on the end in one of his hands. On him, it’s the right size for a walking stick. For you, it’s a little larger than a magic wand. A magic wand with a bulbous end.</p>
<p>“Magic wand indeed,” you mutter under your breath.</p>
<p>The alien hands it to you. It&#8217;s heavier than it appeared. Smooth, polished. “How does it work?” you ask.</p>
<p>A short series of clicks and whistles emits from one of them, you can’t tell which. Then the mechanical voice says: “Tap the bottom to turn it on.” Both aliens still absorbed by the mustard. One is holding the bottom of the jar while the other unscrews the lid.</p>
<p>You tap the bottom of the stick part of the device. The ball on the top starts glowing.</p>
<p>“Now what?” you ask.</p>
<p>One alien eyestalk swivels in your direction. “Touch the top wherever you want to go.”</p>
<p>You look at the ball again. It’s now a globe. A blue-green globe. A model of the Earth.</p>
<p>“So I touch New Zealand and I’m there? Really?” you turn it trying to find New Zealand. Once found, your hand hovers over the country.</p>
<p>“Wait!” one of the aliens swivels all five eyestalks over to you. He has a hand poised over the mustard jar. “WAIT!”</p>
<p>He moves toward you, eyestalks waving wildly. You decide that’s probably an indication of panic. You stop moving your hand toward the globe.</p>
<p>“What?” you ask.</p>
<p>The alien shuffles over and peers at the globe then your hand. He reaches up with three of his arms and grasps your hand in his tentacles.</p>
<p>“Oh dear,” the mechanical voice now seems to be coming from the vicinity of your feet. “Your hands are too big. This won’t work. No. If you touch the globe you could end up anywhere. Anywhere. You might not end up in New Zealand at all. Your hand is so big you could even end up in Tasmania. More likely you’ll drown in the middle of the ocean. Can’t have that. I’d feel terrible. You’ll have to enter the geocode instead of touching the globe.”</p>
<p>The mechanical voice is flat, emotionless. But you sense concern and perhaps fear in the clicks and whistles that the alien is making.</p>
<p>“Enter the geocode?”</p>
<p>“Yes,” the alien nods his eyestalks. “Let me show you.”</p>
<p>The alien takes the stick and manipulates it with his tentacles. He disappears.</p>
<p>Then, from over the fence, you hear: “Over here!” You look. The alien is waving at you from across the neighbor’s yard. Then a moment later he’s back by your side.</p>
<p>“See,” says the alien, pointing to the stick. “You need to press the sequence of buttons here with the geocode of where you want to go.” He hands you the stick. You look at it. The stick appears smooth and featureless.</p>
<p>The alien is acting like this is the most natural thing in the world. You’re baffled.</p>
<p>“Enter the geocode?” you ask again, hoping he’ll explain in more detail.</p>
<p>In the meantime you look over at the other alien. He appears to be enjoying the mustard. A lot. Noticing your attention, the second alien nods an eyestalk in your direction. “This is good stuff,” he says. Two eyestalks swivel to his compatriot. “Dude, you have to try this.” He holds out the jar.</p>
<p>The alien who has been helpfully explaining the portable personal surface transporter to you shuffles over to his friend. He is now lost in the mustard. An arm reaches into the jar. His eyestalks relax, drooping slightly.</p>
<p>“Oh, that is good. It’s been too long. Glad we stopped by Earth!” Both the aliens turn back toward their ship.</p>
<p>“WAIT!” you shout. “We’re not done. I don’t know how to use this thing! I don’t know how to tell if it’s working right! How do I enter the coordinates? How can I tell if I entered them correctly? HOW DO I KEEP MYSELF FROM LANDING IN THE MIDDLE OF THE OCEAN?”</p>
<p>The aliens seem impatient, but the helpful one turns back. He shuffles back to you and grasps your hand again. Manipulating your fingers with his tentacles he touches your fingers to the stick. “Here,” he says. “We’ll go over to there together.”</p>
<p>You can feel slight, ever so slight, impressions on the stick. Under his guidance, you tap on them. As you tap each one, it pulses back, apparently indicating that it received the tap. Partway through the sequence, you see a light appear on the side of the stick. A few more taps and another light appears. One last tap, and the globe flashes briefly. The alien tugs at your finger, pulling it to the other side of the stick and presses it down firmly. The next thing you know you’re on the other side of the rhododendrons.</p>
<p>“And back,” he says. He guides you to repeat the actions, but this time with a different sequence of taps. Different lights appear on the stick. The globe flashes again. Suddenly you’re back in front of the alien ship.</p>
<p>You have the hang of manipulating the buttons on the device now. But how will you know what the sequences are for different areas? What do the lights mean? How will you know if something has gone wrong?</p>
<p>You realize the aliens have turned back to their ship again.</p>
<p>“WAIT!” you shout. “I STILL DON’T KNOW HOW TO OPERATE THIS THING!”</p>
<p>You watch ten eyes all roll at the same time on only two bodies. The effect is disconcerting. But you need answers. You hold your ground, fearful and angry. You do not want to try randomly entering sequences. Who knows where you could end up?</p>
<p>“Don’t you have some documentation or something?” you plead.</p>
<p>One of the aliens shuffles up the ramp into the ship, then returns faster than you thought possible with a stack of paper.</p>
<p>“Here,” he says. “It’s a translation. It won’t be perfect. But it tells you what you should expect.”</p>
<p>You scan the document. It contains instructions for tapping, but even more importantly, it contains expected results. You realize that the first light you saw on the stick indicated that the stick accepted the latitude. The second indicated it accepted the longitude. The flash on the globe, had you looked at it carefully, would have given you some idea of where the coordinates would be taking you. The final tap on the other side of the stick confirmed the destination and activated the device. You notice that there is a cancel button next to the confirm button.</p>
<p>The next time you look up, you realize that the aliens are already in their ship. A soft whine from their engines and they’ve taken off. A scrap of paper floats down to you. “So long and thanks for the mustard!”</p>
<p>You go inside to look up the geocode for New Zealand.</p>
<p><strong>Back to the Point</strong></p>
<p>Now, let’s imagine for a moment that you are the hero in our story.</p>
<p>Unless you have a death wish, you’re probably not going to just start testing that thing to see what it does. Not really. You’re not going to push any buttons unless you have a very clear idea of what the expected result is.</p>
<p>Instead, you’re going to follow the instructions in the documentation exactly. And you want to know what you should expect to happen each step of the way. If something is going wrong at any point, you want to know right away so you can minimize the damage.</p>
<p>That’s not really testing: you only take actions where you know exactly what to expect. Testing involves experimenting with unknowns.</p>
<p>To frame your expectations, you need information. But the information you need is different from what you find in a typical user guide.</p>
<p>It is, however, very much like what you would find in a scripted acceptance test:</p>
<p>Touch buttons &#8211; 3 6 . 8 6 1 9 7<br />
See the 3rd blue light.<br />
Touch buttons 1 7 4 . 7 7 4 1 6 6<br />
See the 4th green light.<br />
Touch the Destination button.<br />
See a flash on the Globe at Auckland.<br />
Touch the Confirm button.<br />
Arrive in Auckland Domain, Auckland New Zealand.<br />
See greenery.</p>
<p>Now let’s imagine that you work for a huge company that has bought a software package. It’s not exactly alien technology. It may not even be particularly advanced technology. But it’s important to the business or the business would not have purchased it.</p>
<p>Let’s say that you’re not the end user for this software. You are in IT. This is a system that the sales team has purchased. Since you’re part of central IT, and you drew the short straw this month, you are responsible for the successful roll out of this new software.</p>
<p>You don’t actually understand what it does. In fact, you don’t really understand your sales people or what they do. You think they might be aliens. But you know that it’s gonna be on your head if you screw this up. So you want to make sure that everything is operating as expected.</p>
<p>You also know that there are finicky details about how the software is deployed and configured that make our imaginary portable personal surface transporter stick look like an etch-a-sketch.</p>
<p>How are you supposed to know if you set up the software right? If it’s configured correctly? If it’s doing what it’s expected to do?</p>
<p>Note that you don’t want to test the software. Even if you had time to test the software (you don’t), it’s not your job to do so. Someone else in your company made the decision to buy the software, so you’re not evaluating it. And the vendor presumably already tested that the software does what they intended it to do, at least some of the time. You’re not trying to find problems. You just want to get it to work and present evidence to the sales team that their precious new sales automation solution is ready to go.</p>
<p>In short, you need to conduct a final acceptance test after you have everything set up and configured.</p>
<p>But you are not qualified to design an acceptance test for this package. You do not know the software. You do not understand what it does. Your job is to install it and make sure that it’s wired up correctly.</p>
<p>The sales team is not qualified to conduct that test. They&#8217;re not even trained on the new system yet. The committee that decided to buy the software isn&#8217;t qualified to conduct the test. Some of them can barely retrieve their email unassisted.</p>
<p>So you need the people who made the software to tell you what to do and what you should expect.</p>
<p>Back to the software-testing group discussion: this is why customers ask for an acceptance test script to be delivered with software.</p>
<p>It is a perfectly reasonable request. The customer is not stupid or lazy or incompetent. The customer is asking for a deliverable that they need in order to ensure that the product that they purchased is operating as expected in their environment: with their permissions and authentication and security schemes, connecting to their customized databases, on their network with packet filters and firewalls. They just need to know it’s working. And reading the user guide won’t help them figure that out. Not efficiently. So they want an acceptance test. Think of it as a diagnostic checklist.</p>
<p>Oh, and if your organization is <a href="/2008/12/08/acceptance-test-driven-development-atdd-an-overview/">doing ATDD</a>, you’d already have an acceptance test script: you could just give them a prettied-up version of the natural language expectations without the automation.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2010/07/22/at-as-cust-deliver/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Why Test Automation Costs Too Much</title>
		<link>http://testobsessed.com/2010/07/19/why-test-automation-costs-too-much/</link>
		<comments>http://testobsessed.com/2010/07/19/why-test-automation-costs-too-much/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 22:47:04 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Test Automation]]></category>

		<guid isPermaLink="false">http://testobsessed.com/?p=261</guid>
		<description><![CDATA[<p>&#8220;We can&#8217;t automate everything. It costs too much.&#8221;</p>
<p>I&#8217;ve heard that concern&#8212;that test automation costs too much&#8212;multiple times when talking with folks in the middle of an Agile transition.</p>
<p>They know that automated regression testing is important in an Agile context. But they&#8217;re concerned about the costs. And they can&#8217;t even imagine getting to a point where all <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2010/07/19/why-test-automation-costs-too-much/">Why Test Automation Costs Too Much</a></span>]]></description>
			<content:encoded><![CDATA[<p><em><strong>&#8220;We can&#8217;t automate everything. It costs too much.&#8221;</strong></em></p>
<p>I&#8217;ve heard that concern&mdash;that test automation costs too much&mdash;multiple times when talking with folks in the middle of an Agile transition.</p>
<p>They know that automated regression testing is important in an Agile context. But they&#8217;re concerned about the costs. And they can&#8217;t even imagine getting to a point where all the regression tests are automated.</p>
<p>They&#8217;re right to be concerned. Their organizations have typically struggled just to reach a bare minimum of automated test coverage.</p>
<p>So why is that? Why have these organizations historically struggled with test automation?</p>
<p>Usually the organization&#8217;s test automation strategy involves a dedicated team creating automated tests after the code is written. At least that was probably their approach before the Agile transition. It&#8217;s the strategy promoted by most of the test automation tool vendors back in the 90&#8242;s.</p>
<p>(Some of those vendors even persist in promoting that kind of test-last automation strategy today. Unbelievable but true. Don&#8217;t even get me started. I&#8217;ll just rant. It won&#8217;t be pretty.)</p>
<p>But until the organization adopts a new test automation approach, they&#8217;re stuck with what they have. And the result of the traditional approach is that:</p>
<ol>
<li>The test automation is being written in a language or tool that is only accessible (or known) to a small number of specialists. That group of specialists is a bottleneck.<br />&nbsp;</li>
<li>To get anything done, that group of specialists has to reverse engineer the developed software to figure out how to shoehorn automation onto an untestable interface, typically a GUI. (Ow. Pain. Ow.) And they have to go through the GUI: the system quite probably has business logic intertwingled with the GUI layer. Even if it doesn&#8217;t, the test automation specialists probably don&#8217;t know how to reach into the code base to bypass the GUI.<br />&nbsp;</li>
<li>The specialists may be test automation experts, but they are usually not professional programmers. That means that while they can make test automation tools sing, dance, and jump through hoops, they usually have not studied program design principles (<a href="http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29">SOLID</a>, <a href="http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29">patterns</a>). Most test automation code I see that&#8217;s written by specialists is kinda <a href="http://en.wikipedia.org/wiki/Code_smell">smelly</a>. (I don&#8217;t blame them. My code was pretty dang smelly too when I was a test automation specialist. Pairing with real professional developers did a world of good for my programming skills.)<br />&nbsp;</li>
<li>The previous generation of commercial specialized test automation tools enforce their own architecture making it dang near impossible to apply software design principles even if you do understand them.<br />&nbsp;</li>
<li>The specialized commercial test automation tools usually cost an arm and a leg. (Need another license to execute the tests on the CI server? Fork over another 5 figures worth of licensing and maintenance fees.)
</li>
</ol>
<p><em><strong>Bottom line: the reason test automation costs so much is that it&#8217;s done in a silo far removed from the development effort. </strong></em></p>
<p>Buffered from the consequences of design decisions that decrease testability, the developers continue to create software that&#8217;s nigh onto impossible to automate.</p>
<p>And isolated from the technical expertise of how the software was constructed, the test automation specialists are in a situation where they cannot help but be both inefficient and ineffective.</p>
<p>Highly functioning Agile teams break down those silos. With the most effective Agile teams I&#8217;ve seen, everyone on the team is involved in automating the tests. And the automated tests go into the same shared source repository where the developers check in the code.</p>
<p>When we integrate the test automation effort with the development effort, we reduce the cost of test automation drastically. In doing so, <a href="/2009/02/10/how-much-to-automate-agile-changes-the-equation/">we fundamentally change the cost/benefit tradeoff equation</a> so that fully automated regression tests start looking like an achievable goal instead of an impossible pipe dream.</p>
<p>It&#8217;s time to stop imagining that test automation and programming are two separate activities done by different people with different job titles working in different departments.</p>
<p>That approach didn&#8217;t work particularly well with the V-Model, but it&#8217;s a flat out fail in an Agile context where programming and automating are part-and-parcel of the overall software development effort.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2010/07/19/why-test-automation-costs-too-much/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Look! An Update!</title>
		<link>http://testobsessed.com/2010/07/14/look-an-update/</link>
		<comments>http://testobsessed.com/2010/07/14/look-an-update/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 18:15:26 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Running the Business]]></category>

		<guid isPermaLink="false">http://testobsessed.com/?p=255</guid>
		<description><![CDATA[<p>So what have I been up to for the last 7 months? There&#8217;s the usual stuff: a fair bit of client work, some conferences, and a whole lot of travel: Finland, Germany, Japan, and various locations in the US.</p>
<p>But the most exciting news is that Agilistry Studio is open! We&#8217;ve held a bunch of events there <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2010/07/14/look-an-update/">Look! An Update!</a></span>]]></description>
			<content:encoded><![CDATA[<p>So what have I been up to for the last 7 months? There&#8217;s the usual stuff: a fair bit of client work, some conferences, and a whole lot of travel: Finland, Germany, Japan, and various locations in the US.</p>
<p>But the most exciting news is that <a href="http://www.agilistry.com">Agilistry Studio</a> is open! We&#8217;ve held a bunch of events there including an Open Source Test Automation Love In (OSTATLI), a week-long immersion dubbed &#8220;Agile Up to Here&#8221; (see writeups by <a href="http://www.cooper.com/journal/2010/05/agile_up_to_here.html">Alan Cooper</a> and <a href="http://jonbox.wordpress.com/2010/05/27/what-is-au2h-and-why-i-cared/">Jon Bach</a>), and a bunch of <a href="http://www.meetup.com/agilistry/">meetups</a>. We have <a href="http://agilistry.com/events/">classes</a> coming up there including an immersive Agile transformation simulation (<a href="http://agilistry.com/events/wordcount/">WordCount</a>). Please sign up!</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2010/07/14/look-an-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I Define Agile in Terms of Results</title>
		<link>http://testobsessed.com/2009/12/03/why-i-define-agile-in-terms-of-results/</link>
		<comments>http://testobsessed.com/2009/12/03/why-i-define-agile-in-terms-of-results/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 20:33:43 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Blog Post Categories]]></category>

		<guid isPermaLink="false">http://testobsessed.com/?p=250</guid>
		<description><![CDATA[<p>Not everyone agrees with my definition of Agile.</p>
<p>Dave Nicolette commented that he thinks my definition actually describes Lean. He defines Agile in terms of the Agile Manifesto.</p>
<p>I replied to Dave elsewhere, but wanted to post my response here too since this is a topic that comes up frequently.</p>
<p>I have trouble defining Agile solely in terms of <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2009/12/03/why-i-define-agile-in-terms-of-results/">Why I Define Agile in Terms of Results</a></span>]]></description>
			<content:encoded><![CDATA[<p>Not everyone agrees with <a href="/2009/05/26/defining-agile-results-characteristics-practices/">my definition of Agile</a>.</p>
<p><a href="http://www.davenicolette.net/agile/">Dave Nicolette</a> commented that he thinks my definition actually describes Lean. He defines Agile in terms of the <a href="http://agilemanifesto.org/">Agile Manifesto</a>.</p>
<p>I replied to Dave elsewhere, but wanted to post my response here too since this is a topic that comes up frequently.</p>
<p>I have trouble defining Agile solely in terms of the Agile Manifesto.</p>
<p>Mind you, I believe the Agile Manifesto is a great document. With it, the original signatories gave the industry a focal point, a fulcrum on which to turn. They forever changed our industry by distilling the difference, in terms of their guiding values and principles, between the lightweight approaches they used and the then-generally accepted formal processes &#038; industry &#8220;Best Practices.&#8221;</p>
<p>And turn we have. &#8220;Agile,&#8221; at least as a buzzword, is mainstream. Increasingly organizations are adopting Agile methods to remain competitive.</p>
<p>However, I see the manifesto as a beginning, not a definitive end. The community has learned much in intervening years.</p>
<p>Part of what I&#8217;ve personally learned is that defining Agile in terms of results short circuits two of the bigger problems I see plaguing the community: 1) religious debates and 2) superficial but ultimately hollow attempts at transitions that result in frAgile processes.</p>
<p>Where people define Agile in terms of practices, I see more instances of Cargo Cult adoption (&#8220;We&#8217;re Agile because we stand up every morning!&#8221;) and religious dogmatism (&#8220;You don&#8217;t TDD?!? You can&#8217;t possibly be Agile!&#8221;).</p>
<p>Where people define Agile in terms of values, I see more instances of Agile-as-an-excuse (&#8220;Documentation? No. We don&#8217;t document anything. We&#8217;re Agile!&#8221;).</p>
<p>But where people define Agile in terms of results, I see greater focus on the ultimate goal: value to the business.</p>
<p>As it happens, the best way we&#8217;ve found to achieve that goal so far&mdash;or at least the best way I&#8217;ve seen so far&mdash;involves embracing the values and principles of the manifesto.</p>
<p>But I believe that remembering why those values and principles are important, remembering the result we&#8217;re trying to achieve, is essential. And so I define Agile in terms of results.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2009/12/03/why-i-define-agile-in-terms-of-results/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>New Look &amp; Feel</title>
		<link>http://testobsessed.com/2009/11/23/new-look-feel/</link>
		<comments>http://testobsessed.com/2009/11/23/new-look-feel/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 20:28:59 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://testobsessed.com/?p=233</guid>
		<description><![CDATA[<p>I knew I should have updated my WordPress installation. But it seemed like I always had something more urgent on my plate. I&#8217;ve been living in Quadrant 1 for too long. Quadrant 2 tasks&#8212;those that are important but not (yet) urgent&#8212;have languished until, through the natural course of events, they became urgent. Like, oh say, when <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2009/11/23/new-look-feel/">New Look &#38; Feel</a></span>]]></description>
			<content:encoded><![CDATA[<p>I knew I should have updated my WordPress installation. But it seemed like I always had something more urgent on my plate. I&#8217;ve been living in <a href="http://en.wikipedia.org/wiki/File:MerrillCoveyMatrix.png">Quadrant 1</a> for too long. Quadrant 2 tasks&mdash;those that are important but not (yet) urgent&mdash;have languished until, through the natural course of events, they became urgent. Like, oh say, when this blog got hacked because of a security vulnerability in the older version of WordPress.</p>
<p>Whoopsie.</p>
<p>In my rush, I blew away a few things accidentally. Like my blog roll. So I still have some work to do to get the site completely back to normal.</p>
<p>But in the meantime I think I&#8217;ve gotten all the content back. And I&#8217;ve migrated to a shiny, new Theme that supports threaded comments.</p>
<p>Please let me know if you find bugs.</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2009/11/23/new-look-feel/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>My PNSQC Keynote with Agile Timeline</title>
		<link>http://testobsessed.com/2009/10/29/my-pnsqc-keynote-with-agile-timeline/</link>
		<comments>http://testobsessed.com/2009/10/29/my-pnsqc-keynote-with-agile-timeline/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 16:58:08 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Blog Post Categories]]></category>
		<category><![CDATA[Presentations]]></category>

		<guid isPermaLink="false">http://testobsessed.com/?p=227</guid>
		<description><![CDATA[<p>A few days ago, I tweeted that I was looking for nominations for events for an Agile timeline and am extremely grateful for all the responses I received.</p>
<p>The request was for the keynote talk that I just presented at PNSQC. I&#8217;ve had several requests for the timeline that resulted, so I figure the easiest (and therefore <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2009/10/29/my-pnsqc-keynote-with-agile-timeline/">My PNSQC Keynote with Agile Timeline</a></span>]]></description>
			<content:encoded><![CDATA[<p>A few days ago, I <a href="http://twitter.com/testobsessed/status/5127816805">tweeted</a> that I was looking for nominations for events for an Agile timeline and am extremely grateful for all the responses I received.</p>
<p>The request was for the keynote talk that I just presented at <a href="http://www.pnsqc.org">PNSQC</a>. I&#8217;ve had several requests for the timeline that resulted, so I figure the easiest (and therefore fastest) way to share the resulting timeline would be to share my slides.</p>
<p><a href="/wp-content/uploads/2009/10/atqlblf-pnsqc2009.pdf">Here they are (pdf, ~1Mb)</a>. Enjoy! (As always, comments/questions/critiques welcome.)</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2009/10/29/my-pnsqc-keynote-with-agile-timeline/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Specialized Test Management Systems are an Agile Impediment</title>
		<link>http://testobsessed.com/2009/10/06/specialized-test-management-systems-are-an-agile-impediment/</link>
		<comments>http://testobsessed.com/2009/10/06/specialized-test-management-systems-are-an-agile-impediment/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 22:20:03 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Blog Post Categories]]></category>

		<guid isPermaLink="false">http://testobsessed.com/?p=226</guid>
		<description><![CDATA[<p>If you work in an Agile organization and are using a heavy weight specialized tool for test management, I have an important message for you:</p>
<p>Stop. Seriously. Just stop. It&#8217;s getting in the way.</p>
<p>If you are accustomed to heavyweight test management solutions, you might not realize the extent to which a test management tool is more of <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2009/10/06/specialized-test-management-systems-are-an-agile-impediment/">Specialized Test Management Systems are an Agile Impediment</a></span>]]></description>
			<content:encoded><![CDATA[<p>If you work in an Agile organization and are using a heavy weight specialized tool for test management, I have an important message for you:</p>
<p><strong>Stop. Seriously. Just stop. It&#8217;s getting in the way.</strong></p>
<p>If you are accustomed to heavyweight test management solutions, you might not realize the extent to which a test management tool is more of an impediment than an aid to agility. But for Agile teams, it is. Always. Without exception.</p>
<p>I don&#8217;t make such claims lightly and I don&#8217;t expect you to accept my claims at face value. So let me explain.</p>
<h3>The Agile Alternative to Test Management</h3>
<p>The things you need need to manage the test effort in an Agile context are whatever you are already using for the: Backlog; Source Control Management (SCM) System; Continuous Integration (CI) System; and Automated Regression Tests.</p>
<p>That&#8217;s it. You don&#8217;t need any other tools or tracking mechanisms.</p>
<p>Any test-specific repository will increase duplication and add unnecessary overhead to keep the duplicate data in sync across multiple repositories. It will also probably necessitate creating and managing cumbersome meta data, like traceability matrices, to tie all the repositories together.</p>
<p>All that overhead comes at a high cost and adds absolutely no value beyond what SCM, CI, &#038; the Backlog already provide.</p>
<h3>But, But, But&#8230;</h3>
<p>I&#8217;ve heard any number objections to the notion that Agile teams don&#8217;t need specialized test management systems. I&#8217;ll tackle the objections I hear most often here:</p>
<p><strong>But Where Do the Tests Live?</strong><br />
Persistent test-related artifacts go in one of two places:</p>
<ul>
<li>High-level acceptance criteria, test ideas, and Exploratory Testing charters belong in the Backlog with the associated Story.
</li>
<li>Technical artifacts including test automation and manual regression test scripts (if any) belong in the Source Control System versioned with the associated code.</li>
</ul>
<p><strong>And Where Do We Capture the Testing Estimates?</strong><br />
In Agile, we ultimately care about Done Stories. Coded but not Tested means Not Done. Thus the test effort has to be estimated as part of the overall Story implementation effort if we are to have anything even remotely approaching accurate estimates. So we don&#8217;t estimate the test effort separately, and that means we don&#8217;t need a separate place to put test estimates.</p>
<p><strong>How Do I Prioritize Tests?</strong><br />
Agile teams work from a prioritized backlog. Instead of prioritizing tests, they prioritize Stories. And Stories are either Done or not. Given that context, it does not make sense to talk about prioritizing the tests in isolation.</p>
<p><strong>Hello, I Live in the Real World. There is Never Enough Time to Test. How Do I Prioritize Tests Given Time Pressure?</strong><br />
If the Story is important enough to code, it&#8217;s important enough to test. Period. If you&#8217;re working in an Agile context it is absolutely critical that everyone on the team understands this.</p>
<p><strong>But Testing is Never Done. Seriously, How Do I Prioritize What To Test?</strong><br />
This isn&#8217;t really a test management problem. This is a requirements, quality, and testing problem that test management solutions offer the illusion of addressing.</p>
<p>The answer isn&#8217;t to waste time mucking about in a test management tool attempting to manage the effort, control the process, or prioritize tests. Every minute we spend mucking about in a test management tool is a minute we&#8217;re not spending on understanding the real state of the emerging system in development.</p>
<p>The answer instead is to invest the time in activities that contribute directly to moving the project forward: understanding the Product Owner&#8217;s expectations; capturing those expectations in automated acceptance tests; and using time-boxed Exploratory Testing sessions to reveal risks and vulnerabilities.</p>
<p><strong>What about the Test Reports?</strong><br />
Traditional test management systems provide all kinds of reports: pass/fail statistics, execution time actuals v. estimated, planned v. executed tests, etc. Much of this information is irrelevant in an Agile context.</p>
<p>The CI system provides the information that remains relevant: the automated test execution results. And those results should be 100% Green (passed) most of the time.</p>
<p><strong>What about Historical Test Results Data?</strong><br />
Most teams find that the current CI reports are more interesting than the historic results. If the CI build goes Red for any reason, Agile teams stop and fix it. Thus Agile teams don&#8217;t have the same kind of progression of pass/fail ratios that traditional teams see during a synch and stabilize phase. And that means historic trends usually are not all that interesting.</p>
<p>However, if the team really wants to keep historic test execution results (or are compelled to do so as a matter of regulatory compliance), the test results can be stored in the source control system with the code.</p>
<p><strong>Speaking of Regulatory Compliance, How Can We Be in Compliance without a Test Management System?</strong><br />
If your context involves FDA, SOX, ISO, or just internal audit compliance, then you probably live in a world where:</p>
<ul>
<li>If it wasn&#8217;t documented, it didn&#8217;t happen
</li>
<li>We say what we do and do what we say</li>
<li>
Test repeatability is essential</li>
</ul>
<p>In that context, specialized test management solutions may be the defacto standard, but they&#8217;re not the best answer. If I&#8217;m working on a system where we have to be clear, concrete, and explicit about requirements, tests, and execution results, then I would much rather do Acceptance Test Driven Development. ATDD provides the added value of executable requirements. Instead of the tests and requirements just saying what the system should do, they can be executed to demonstrate that it does.</p>
<p>Certainly, doing ATDD requires effort. But so does maintaining a separate test management system and all the corresponding traceability matrices and overhead documentation.</p>
<p><strong>Our Management Requires Us to Use a Specialized Test Management System. Now What?</strong><br />
Send them the URL to this post. Ask them to read it. Then ask them what additional value they&#8217;re getting out a test management system that they wouldn&#8217;t get from leveraging SCM, CI, the Backlog, and the automated regression tests.</p>
<p><strong>So, have I convinced you? If not, please tell me why in the comments&#8230;</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2009/10/06/specialized-test-management-systems-are-an-agile-impediment/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>Adventures with Auto-Generated Tests and RSpec</title>
		<link>http://testobsessed.com/2009/09/04/adventures-with-auto-generated-tests-and-rspec/</link>
		<comments>http://testobsessed.com/2009/09/04/adventures-with-auto-generated-tests-and-rspec/#comments</comments>
		<pubDate>Sat, 05 Sep 2009 03:54:11 +0000</pubDate>
		<dc:creator>ehendrickson</dc:creator>
				<category><![CDATA[Blog Post Categories]]></category>
		<category><![CDATA[Test Automation]]></category>
		<category><![CDATA[Tester-Developer]]></category>
		<category><![CDATA[Thinking Like a Tester]]></category>

		<guid isPermaLink="false">http://testobsessed.com/?p=223</guid>
		<description><![CDATA[<p>This post started out as a quick little entry about a cool parlor trick you can do with RSpec to make it work for auto-generated test data. But in the middle of writing what was supposed to be a simple post, my tests found a subtle bug with bad consequences. (Yeah for tests!)</p>
<p>So now this post <span style="color:#777"> . . . &#8594; Read More: <a href="http://testobsessed.com/2009/09/04/adventures-with-auto-generated-tests-and-rspec/">Adventures with Auto-Generated Tests and RSpec</a></span>]]></description>
			<content:encoded><![CDATA[<p>This post started out as a quick little entry about a cool parlor trick you can do with RSpec to make it work for auto-generated test data. But in the middle of writing what was supposed to be a simple post, my tests found a subtle bug with bad consequences. (Yeah for tests!)</p>
<p>So now this post is about auto-generated tests with RSpec, and what I learned hunting down my bug.</p>
<h3>Meet RSpec</h3>
<p>In case you haven&#8217;t encountered <a href="http://rspec.info/">RSpec</a> before, it&#8217;s one of the <a href="http://en.wikipedia.org/wiki/Behavior_Driven_Development">Behavior Driven Development</a> developer test frameworks along with <a href="http://jbehave.org/">JBehave</a>, <a href="http://www.easyb.org/">EasyB</a>, and others.</p>
<p>Each RSpec test looks something like this:</p>
<pre>
  it "should be able to greet the world" do
      greet.should equal("Hello, World!")
  end
</pre>
<p>I used RSpec to TDD a solution to a <a href="http://thedailywtf.com/Articles/Sliding-Around.aspx">slider puzzle code challenge posted on the DailyWTF</a>.</p>
<h3>Auto-Generating LOTS of Tests with RSpec</h3>
<p>So let&#8217;s imagine that you&#8217;re testing something where it would be really handy to auto-generate a bunch of test cases.</p>
<p>In my particular case, I wanted to test my slider-puzzle example against a wide range of starting puzzle configurations.</p>
<p>My code takes an array representing the starting values in a 3&#215;3 slider puzzle and, following the rules of the slider puzzle, attempts to solve it. I knew that my code would solve the puzzle sometimes, but not always. I wanted to see how often my little algorithm would work. And to test that, I wanted to pump it through a bunch of tests and give me pass/fail statistics.</p>
<p>I could write individual solution tests like this:</p>
<pre>
  it "should be able to solve a board" do
      @puzzle.load([1, 2, 3, 4, 5, 6, 8, 7, nil])
      @puzzle.solve
      @puzzle.solved?.should be_true
  end
</pre>
<p>But with 362,880 possible permutations of the starting board, I most certainly was NOT going to hand code all those tests. I hand coded a few in my developer tests. But I wanted more tests. Lots more.</p>
<p>I knew that I could generate all the board permutations. But then what? Out of the box, RSpec isn&#8217;t designed to do data driven testing.</p>
<p>It occurred to me that I should try putting the &#8220;it&#8221; into a loop. So I tried a tiny experiment:</p>
<pre>
  require 'rubygems'
  require 'spec'

  describe "data driven testing with rspec" do

      10.times { | count |
          it "should work on try #{count}" do
              # purposely fail to see test names
              true.should be_false
          end
      }

  end
</pre>
<p>Lo and behold, it worked!</p>
<p>I was able then to write a little &#8220;permute&#8221; function that took an array and generated all the permutations of the elements in the array. And then I instantiated a new test for each:</p>
<pre>
  describe "puzzle solve algorithm" do
      permutations = permute([1,2,3,4,5,6,7,8,nil])

      before(:each) do
        @puzzle = Puzzle.new
      end

      permutations.each{ |board|
          it "should be able to solve [#{board}]" do
              @puzzle.load(board)
              @puzzle.solve
              @puzzle.solved?.should be_true
          end
      }
  end
</pre>
<h3>Sampling</h3>
<p>Coming to my senses, I quickly realized that it would take a long, long time to run through all 362,880 permutations. So I adjusted, changing the loop to just take 1000 of the permutations:</p>
<pre>
  permutations[0..999].each{ |board|
      it "should be able to solve [#{board}]" do
          @puzzle.load(board)
          @puzzle.solve
          @puzzle.solved?.should be_true
      end
  }
</pre>
<p>That returned in about 20 seconds. Encouraged, I tried it with 5000 permutations. That took about 90 seconds. I decided to push my luck with 10,000 permutations. That stalled out. I backed it down to 5200 permutations. That returned in a little over 90 seconds. I cranked it up to 6000 permutations. Stalled again.</p>
<p>I thought it might be some kind of limitation with rspec and I was content to keep my test runs to a sample of about 5000. But I decided that sampling the first 5000 generated boards every time wasn&#8217;t that interesting. So I wrote a little more code to randomly pick the sample.</p>
<p>My tests started hanging again.</p>
<h3>My Tests Found a Bug! (But I Didn&#8217;t Believe It at First.)</h3>
<p>Curious about why my tests would be hanging, I decided to pick a sample out of the middle of the generated boards by calling:</p>
<pre>
  permutations[90000..90999]
</pre>
<p>The tests hung. I chose a different sample:</p>
<pre>
  permutations[10000..10999]
</pre>
<p>No hang.</p>
<p>I experimented with a variety of values and found that there was a correlation: the higher the starting number for my sample, the longer the tests seemed to take.</p>
<p>&#8220;That&#8217;s just nuts,&#8221; I thought. &#8220;It makes no sense. But&#8230;maybe&#8230;&#8221;</p>
<p>In desperation, I texted my friend Glen.</p>
<p>I was hoping that Glen would say, &#8220;Yeah, that makes sense because [some deep arcane thing].&#8221; (Glen knows lots of deep arcane things.) Alas, he gently (but relentlessly) pushed me to try a variety of other experiments to eliminate RSpec as a cause. Sure enough, after a few experiments I figured out that my code was falling into an infinite loop.</p>
<p>Once I recognized that it was my code at fault, it didn&#8217;t take long to isolate the bug to a specific condition that I had not previously checked. I added the missing low-level test and discovered the root cause of the infinite loop.</p>
<p>It turns out that my code had two similarly-named variables, and I&#8217;d used one when I meant the other. The result was diabolically subtle: in most situations, the puzzle solving code arrived at the same outcome it would have otherwise, just in a more roundabout way. But in a few specific situations the code ended up in an infinite loop. (And in fixing the bug, I eliminated one of the two confusing variables to make sure I wouldn&#8217;t make the same mistake again.)</p>
<p>I never would have found that bug if I hadn&#8217;t been running my code through its paces with a large sample of the various input permutations. So I think it&#8217;s appropriate to have discovered the bug, thus demonstrating the value of high-volume auto-generated tests, while writing about the mechanics of auto-generating tests with RSpec.</p>
<p>In the meantime, if you would like to play with <a href="http://github.com/ehendri/Ruby-Slider-Puzzle-Sample/tree/master">my slider puzzle sample code and tests</a>, I&#8217;ve released it under Creative Commons license and posted it on github. Enjoy! (I&#8217;m not planning to do much more with the sample code myself, and can&#8217;t promise to provide support on it. But I&#8217;ll do my best to answer questions. Oh, and yes, it really could use some refactoring. Seriously. A bazillion methods all on one class. Ick. But I&#8217;m publishing it anyway because I think it&#8217;s a handy example.)</p>
]]></content:encoded>
			<wfw:commentRss>http://testobsessed.com/2009/09/04/adventures-with-auto-generated-tests-and-rspec/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
