<?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>amit klein &#187; Testing</title>
	<atom:link href="http://amitklein.com/category/testing/feed/" rel="self" type="application/rss+xml" />
	<link>http://amitklein.com</link>
	<description>an american in bombay working on improving the web</description>
	<lastBuildDate>Sun, 18 Jul 2010 16:25:46 +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>Who Needs Estimates?</title>
		<link>http://amitklein.com/2009/09/17/who-needs-estimates/</link>
		<comments>http://amitklein.com/2009/09/17/who-needs-estimates/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 16:59:20 +0000</pubDate>
		<dc:creator>amit</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[project management]]></category>

		<guid isPermaLink="false">http://amitklein.com/?p=678</guid>
		<description><![CDATA[Last weekend, I participated in and helped organize the CodeChef TechTalks.  In Bangalore, we had a birds of a feather session where the question was asked, why do we need estimates when developing software? Here&#8217;s my take: No one is &#8230; <a href="http://amitklein.com/2009/09/17/who-needs-estimates/">Continue reading <span class="meta-nav">&#8594;</span></a>


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Last weekend, I participated in and helped organize the <a href="http://bit.ly/k1ZYI">CodeChef TechTalks</a>.  In Bangalore, we had a birds of a feather session where the question was asked, why do we need estimates when developing software?  Here&#8217;s my take:</p>
<ul>
<li><strong>No one is good at estimating </strong>- I&#8217;ve never met anyone who can consistently, correctly identify how long a development task will take.  In the case that you do manage to complete a task within your estimate, it&#8217;s most likely you&#8217;ve added a 50% buffer (i.e. which in essence is saying you have no idea how long it&#8217;ll take)</li>
<li><strong>Estimates cause stress </strong>- The developer tells the project/account/product manager that a feature will be done in 3 days.  The manager tells the client it will be done in 6 days (they of course add another 50% padding).  6 days later the feature is buggy, doesn&#8217;t work in IE and is no way client ready.  Everyone is angry and pointing fingers.</li>
<li><strong>Estimating takes time </strong>- It might take half a day to figure out all the nuances of a particular feature and account for everything that may go wrong before an estimate can be given.  This time is better spent developing working software.</li>
<li><strong>Estimates reduce the quality of software -</strong> &#8220;I gotta get this feature out the door tomorrow, there&#8217;s no way I&#8217;m writing tests that will help me update and maintain the system down the road.  I&#8217;m hacking this together so I can watch football on Sunday.&#8221;</li>
</ul>
<p>If you ask most managers, the reason they want estimates is to: make sure projects are on-time, measure return  on their investment, see if they require additional/fewer developers, help prioritize new features, and to help plan with other teams.</p>
<p>I don&#8217;t really buy it though.  It seems like all the reasons above can be accomplished without estimates.  Instead, the focus should be on &#8220;are we consistently delivering value through short incremental releases at a sustainable pace?&#8221;</p>
<p>When we talked about this as a group (almost everyone was a developer), they said this all sounds great, but how do we convince our company to scrap estimates?  We didn&#8217;t really come to any consensus but some interesting suggestions included:</p>
<ul>
<li><strong>Release code to production often </strong>- Instead of working on a feature for a month, then at the end of the release finding out the a client requirement changed, or that the implementation wasn&#8217;t as per their expectation, release code often and get feedback quickly.</li>
<li><strong>Deliver software in thin, vertical slices </strong>-  In most typical construction projects you work on the foundation, then put in steel beams, then put up some walls, insert windows, put in carpeting, etc&#8230;  Once the entire building is mostly ready, can people start moving in (I have no idea if this is actually how buildings are built, you get my point though).  In Bombay I&#8217;ve seen some constructions projects in which they will finish a section of the building completely, before they start on the next floor/wing/etc&#8230;  People can start living there (deriving value), as soon as that piece is done.</li>
<li><strong>Focus on customer happiness not features </strong>- If you get your clients/customers involved, are transparent about your process, get feedback early and often and demonstrate constant progress, everyone should be happy, right?</li>
</ul>
<p>One of the joys of working at a products company is that we don&#8217;t have clients making ridiculous demands (like asking us when stuff will be done <img src='http://amitklein.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' title="Who Needs Estimates?" /> ).  Certainly in a service company it&#8217;s a lot harder to pull this off.  Instead of drafting a proposal for a certain set of features delivered at a fix price in a fixed time period, maybe moving to a monthly retainer is better for both parties (though this definitely requires a high level of trust and maturity).</p>
<p>If the post above doesn&#8217;t convince you, my buddy Naresh wrote a better post (with some very interesting comments) <a href="http://blogs.agilefaqs.com/2008/12/25/estimation-considered-harmful/">here</a>.  What do you think, are estimates a necessary evil?</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://amitklein.com/2009/09/17/who-needs-estimates/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Functional Web Application Testing with Selenium IDE and RC</title>
		<link>http://amitklein.com/2008/02/26/functional-web-application-testing-with-selenium-ide-and-rc/</link>
		<comments>http://amitklein.com/2008/02/26/functional-web-application-testing-with-selenium-ide-and-rc/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 14:50:01 +0000</pubDate>
		<dc:creator>amit</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[selenium]]></category>

		<guid isPermaLink="false">http://amitklein.com/?p=124</guid>
		<description><![CDATA[Introduction (How can testing make our lives easier) What is Selenium? Selenium IDE Trivial Example A Less Trivial Test Case (and some useful commands) Selenium RC Setup An example using Python The Future Additional Resources Reference Tutorials Testivus Introduction (How &#8230; <a href="http://amitklein.com/2008/02/26/functional-web-application-testing-with-selenium-ide-and-rc/">Continue reading <span class="meta-nav">&#8594;</span></a>


Related posts:<ol><li><a href='http://amitklein.com/2008/02/26/testivus/' rel='bookmark' title='Permanent Link: Testivus'>Testivus</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div id="Table of Contents1" dir="ltr">
<ol>
<li><a href="#4.What is Selenium_|outline">Introduction (How can testing make our lives easier)</a></li>
<li><a href="#5.1.A Trivial Example |outline">What is Selenium?</a>
<ol>
<li><a href="#5.1.A Trivial Example |outline">Selenium IDE </a></li>
<li><a href="#5.1.A Trivial Example |outline">Trivial Example </a></li>
<li><a href="#5.2.A Less Trivial Test Case (and some useful commands)|outline">A Less Trivial Test Case (and some useful commands) </a></li>
</ol>
</li>
<li><a href="#6.Selenium RC|outline">Selenium RC </a>
<ol>
<li><a href="#6.1.Setup|outline">Setup </a></li>
<li><a href="#6.2.An example using Python|outline">An example using Python </a></li>
</ol>
</li>
<li><a href="#7.The Future|outline">The Future </a></li>
<li><a href="#8.Additional Resources|outline">Additional Resources </a>
<ol>
<li><a href="#8.1.Reference|outline">Reference </a></li>
<li><a href="#8.3.Tutorials|outline">Tutorials </a></li>
<li><a href="#8.4.Testivus|outline">Testivus </a></li>
</ol>
</li>
</ol>
</div>
<h2><a name="4.Introduction (How can testing make our lives easier)|outline"></a><br />
Introduction (How can testing make our lives easier)</h2>
<p>Testing is important, saves time, and makes our life easier.  Imagine a world where you can easily identify when changing code breaks existing functionality.  With Selenium we can write test suites for projects that can be automatically executed prior to code pushes, in this way we can have a high level of confidence that changes to a code base don’t have any unintentional consequences.</p>
<p>Functional testing of web applications isn’t easy, different browser/OS combinations all react differently, and now with the proliferation of Ajax, traditional testing methods no longer apply.  Selenium is great because it allows you to wait for and verify that certain Ajaxy conditions are met.  Additionally you can write one test script and run it on all browser/OS combinations.</p>
<p>This document is not intended to be a complete reference guide or tutorial (since there are many already available on the web including: <a href="http://www.devchix.com/2007/02/19/an-introduction-to-selenium-ide/">http://www.devchix.com/2007/02/19/an-introduction-to-selenium-ide/</a>, <a href="http://selenium-rc.openqa.org/tutorial.html">http://selenium-rc.openqa.org/tutorial.html</a>, <a href="http://www.infoq.com/articles/testing-ajax-selenium">http://www.infoq.com/articles/testing-ajax-selenium</a>).  Instead, the goal is to introduce Selenium, discuss the importance of testing, and provide some information specific to our process to help us improve the quality of the sites we develop.</p>
<h2><a name="4.What is Selenium_|outline"></a>What is Selenium?</h2>
<p>“Selenium is a test tool for web applications.  Selenium tests run directly in a browser, just as real users do.  And they run in Internet Explorer, Mozilla and Firefox on Windows, Linux, and Macintosh. (<a href="http://selenium.openqa.org/">http://selenium.openqa.org/</a>)”  Selenium comes in a few different flavors: the Firefox IDE (integrated development environment), Selenium Core, Selenium RC, Selenium Grid and Selenium on Rails.  Selenium IDE and RC are discussed below.</p>
<h2><a name="5.Selenium IDE|outline"></a>Selenium IDE</h2>
<p align="center"><img class="alignright size-full wp-image-125" title="selenium-ide" src="http://amitklein.com/wp-content/uploads/2008/09/selenium-ide.png" alt="selenium ide Functional Web Application Testing with Selenium IDE and RC" width="400" height="520" /></p>
<p>“Selenium IDE is an integrated development environment for Selenium tests. It is implemented as a Firefox extension, and allows you to record, edit, and debug tests. Selenium IDE … allow[s] you to easily and quickly record and play back tests in the actual environment that</p>
<p>they will run. (<a href="http://selenium-ide.openqa.org/">http://selenium-ide.openqa.org/</a>)”  Selenium IDE is written entirely in Javascript and has hooks for exporting test cases in your favorite language (Java, Ruby, Python, Perl, and PHP).</p>
<p>Clicking the record button (top right corner) allows you to execute commands in your browser to create a Selenium test.   When you have executed all the commands in your browser, you can use an assert command to verify that a certain condition has been met.</p>
<p>Although the IDE does not compare Visual Studio or Eclipse, you are still able to step through commands, set breakpoints, view debug output, and double click commands to see them execute in the browser.</p>
<h2><a name="5.1.A Trivial Example |outline"></a>A Trivial Example</h2>
<ul>
<li> Download the Selenium IDE (<a href="http://selenium-ide.openqa.org/">http://selenium-ide.openqa.org/</a>)</li>
<li>Launch the IDE from the Firefox Toolbar:</li>
</ul>
<p style="text-align: center;"><img class="alignnone size-full wp-image-126" title="firefox-toolbar" src="http://amitklein.com/wp-content/uploads/2008/09/firefox-toolbar.png" alt="firefox toolbar Functional Web Application Testing with Selenium IDE and RC"  /></p>
<ul>
<li>Click record:</li>
</ul>
<p style="text-align: center;"><img class="alignnone size-full wp-image-127" style="font-size: 19.5px; line-height: 28.5px;" title="record" src="http://amitklein.com/wp-content/uploads/2008/09/record.png" alt="record Functional Web Application Testing with Selenium IDE and RC" width="547" height="124" /></p>
<ul>
<li>In Firefox, go through the series of steps you need to accomplish to verify that a condition has been met:</li>
</ul>
<p style="text-align: center;"><img class="size-full wp-image-128 aligncenter" style="font-size: 19.5px; line-height: 28.5px;" title="sample-test" src="http://amitklein.com/wp-content/uploads/2008/09/sample-test.png" alt="sample test Functional Web Application Testing with Selenium IDE and RC" width="571" height="438" /></p>
<ul>
<li>Walking through each of the commands in the test above:</li>
<li>Open: Opens the base URL above (<a href="http://www.google.com/">www.google.com</a>) with the extention /ig?hl=en (the default when I go to Google):</li>
</ul>
<p><img class="alignnone size-full wp-image-129" title="google-firebug" src="http://amitklein.com/wp-content/uploads/2008/09/google-firebug.png" alt="google firebug Functional Web Application Testing with Selenium IDE and RC" width="791" height="381" /></p>
<ul>
<li>Type: target=q, value=mets best in NL.  In this step, the value of the search bar has an html id of “q” (you can verify this using firebug, see the image below).  By selecting target=q, it selects the search bar, and types in the value “mets best in nl.”</li>
<li>clickAndWait: target=btnG.  Click on Google Search.  Using firebug you can also verify that the Google Search button has the id=”btnG”  Wait till the resulting page is loaded.</li>
<li>clickAndWait: target(link=ABC News: Santana Deal Makes Mets…)  So not only can you target elements by their ID, you can also reference links by their display text:</li>
</ul>
<p style="text-align: center;"><img class="size-full wp-image-130 aligncenter" style="font-size: 19.5px; line-height: 28.5px;" title="mets-best" src="http://amitklein.com/wp-content/uploads/2008/09/mets-best.png" alt="mets best Functional Web Application Testing with Selenium IDE and RC"  /></p>
<ul>
<li>assertTextPresent:  Santana Makes Mets NL Favorite.  This final step creates a true/false condition at the end of the test.  If that link is clicked and the text is present on the following page, then the test case passes with a value of True, otherwise False.</li>
</ul>
<h2><a name="5.2.A Less Trivial Test Case (and some useful commands)|outline"></a>A Less Trivial Test Case (and some useful commands)</h2>
<p><span style="text-decoration: line-through;">The following test case goes to the Shop Dev environment, adds a few products to the cart, goes through the checkout process, and asserts that checkout has successfully completed.  In order to run this test you must be connected to the Shop VPN.</span> Please note that I have removed the aforementioned example because of security issues.  I plan to include another one soon.</p>
<p>Let’s review some of the more useful commands used in this test case:</p>
<ul>
<li>waitForElementPresent &#8211;  Verifies that the specified element is somewhere on the page.  If you try using the recorder to generate test cases, you will find that in most cases, it executes them too quickly.  waitForElementPresent allows you to use an id, name, javascript expression, xpath or link as an input.  For more info see: <a href="http://release.openqa.org/selenium-core/0.8.0/reference.html">http://release.openqa.org/selenium-core/0.8.0/reference.html</a>.  This is especially useful when waiting for certain conditions to be met, like waiting for a layer to pop-up (shopping cart), or waiting for the content on screen to change (like checkout).</li>
<li>assertVisable &#8211; Determines if the specified element is visible. An element can be rendered invisible by setting the CSS &#8220;visibility&#8221; property to &#8220;hidden&#8221;, or the &#8220;display&#8221; property to &#8220;none&#8221;, either for the element itself or one if its ancestors. This method will fail if the element is not present.  In this particular case we end our test with asserting that id=successResponse is visable and failureResponse is not.</li>
</ul>
<h2><a name="6.Selenium RC|outline"></a>Selenium RC</h2>
<p>While the IDE is great for writing test cases, you can only write test cases in Selenese (the HTML table format), tests can only be executed in Firefox, and you don’t have the ability to kick off a series of tests.  Enter Selenium RC.</p>
<p>&#8220;Selenium Remote Control provides a Selenium Server, which can automatically start/stop/control any supported browser. It works by using <a href="http://www.openqa.org/selenium/">Selenium Core</a> a pure-HTML+JS library that performs automated tasks in JavaScript.</p>
<p>The Selenium Server communicates directly with the browser using AJAX (XmlHttpRequest). You can send commands directly to the Server using simple HTTP GET/POST requests; that means that you can use any programming language that can make HTTP requests to automate Selenium tests on the browser. To further ease this process, we provide wrapper objects for a number of mainstream programming languages (Java, .NET, Perl, Python, and Ruby).</p>
<p>Finally, the Selenium Server acts as a client-configured HTTP proxy, to stand in between the browser and your website. This allows a Selenium-enabled browser to run JavaScript on arbitrary websites. (<a href="http://selenium-rc.openqa.org/">http://selenium-rc.openqa.org/</a>)</p>
<h3><a name="6.1.Setup|outline"></a>Setup</h3>
<ul>
<li>Download Selenium RC (<a href="http://selenium-rc.openqa.org/download.jsp">http://selenium-rc.openqa.org/download.jsp</a>)</li>
<li>We made a modification to the Selenium Server Jar file to allow us to verify text is present in XML (thanks Nicholas and Sudhakar!)  Download the updated jar file here: <a href="http://extranet.ipartners.com/selenium/selenium-server.jar">http://extranet.ipartners.com/selenium/selenium-server.jar</a></li>
<li>Start  the Selenium Server:</li>
</ul>
<p style="padding-left: 60px;"><em>java -jar selenium-server.jar -interactive</em></p>
<p style="padding-left: 60px;">Test it out by trying to open Google in Firefox:</p>
<p style="padding-left: 60px;"><em>cmd=getNewBrowserSession&amp;1=*firefox&amp;2=http://www.google.com<em></em></em></p>
<h3>An example using Python</h3>
<ul>
<li>If you don’t have it already download Python <a href="http://www.python.org/">http://www.python.org/</a>)</li>
<li><span style="text-decoration: line-through;">Download the following files into the selenium-python-client folder:<br />
selenium-python-client folder:</span> Again because of security reasons I had to remove this example, I will post a new one soon.</li>
</ul>
<h2>The Future</h2>
<p>Eventually we hope to integrate testing more deeply in our process.  One day as part of any code  push automated test scripts will run and code will only get pushed if these tests pass in the target environment.  Once we have a core framework in place, we can automate the process of nightly builds and testing.  See tools like <a href="http://cruisecontrol.sourceforge.net/">http://cruisecontrol.sourceforge.net/</a><a href="http://www.jsunit.net/">http://www.jsunit.net/</a></p>
<p>In the near future we will need to centralize test machines.  For now having one test machine with virtual instances with different browser combinations will work.  In the long term <a href="http://selenium-grid.openqa.org/">Selenium Grid</a> will work till we get into <a href="http://www.amazon.com/gp/browse.html?node=201590011">Cloud Computing</a></p>
<p>A few more long term goals:</p>
<ul>
<li>Continuous Integration:<a href="http://www.martinfowler.com/articles/continuousIntegration.html">http://www.martinfowler.com/articles/continuousIntegration.html</a></li>
<li>Test Drive Deployment:<a href="http://www.martinfowler.com/bliki/TestDrivenDevelopment.html">http://www.martinfowler.com/bliki/TestDrivenDevelopment.html</a></li>
<li>XP:<a href="http://www.extremeprogramming.org/">http://www.extremeprogramming.org/</a></li>
</ul>
<h2><a name="8.Additional Resources|outline"></a>Additional Resources</h2>
<h3><a name="8.1.Reference|outline"></a>Reference</h3>
<ul>
<li><a href="http://release.openqa.org/selenium-core/0.8.0/reference.html">http://release.openqa.org/selenium-core/0.8.0/reference.html</a></li>
<li><a href="http://agiletesting.blogspot.com/2006/01/useful-tools-for-writing-selenium.html">http://agiletesting.blogspot.com/2006/01/useful-tools-for-writing-selenium.html</a></li>
<li><a href="http://ttwhy.org/home/blog/2007/05/12/selenium-ui-element-locator/">http://ttwhy.org/home/blog/2007/05/12/selenium-ui-element-locator/</a></li>
</ul>
<h3><a name="8.3.Tutorials|outline"></a>Tutorials</h3>
<ul>
<li><a href="http://www.devchix.com/2007/02/19/an-introduction-to-selenium-ide/">http://www.devchix.com/2007/02/19/an-introduction-to-selenium-ide/</a><a href="http://selenium-rc.openqa.org/tutorial.html">http://selenium-rc.openqa.org/tutorial.html</a></li>
<li><a href="http://www.infoq.com/articles/testing-ajax-selenium">http://www.infoq.com/articles/testing-ajax-selenium</a></li>
</ul>
<h3><a name="8.4.Testivus|outline"></a>Testivus</h3>
<ul>
<li><a href="http://www.developertesting.com/archives/month200705/20070502-000424.html">http://www.developertesting.com/archives/month200705/20070502-000424.html</a></li>
</ul>


<p>Related posts:<ol><li><a href='http://amitklein.com/2008/02/26/testivus/' rel='bookmark' title='Permanent Link: Testivus'>Testivus</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://amitklein.com/2008/02/26/functional-web-application-testing-with-selenium-ide-and-rc/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Testivus</title>
		<link>http://amitklein.com/2008/02/26/testivus/</link>
		<comments>http://amitklein.com/2008/02/26/testivus/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 02:34:26 +0000</pubDate>
		<dc:creator>amit</dc:creator>
				<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://amitklein.com/?p=44</guid>
		<description><![CDATA[Although we are striving towards integrating testing more closely into our development process we still have a long way to go. I thought this article does a good job of explaining testing philosophy in a fun way. http://www.developertesting.com/archives/month200705/20070502-000424.html To summarize: &#8230; <a href="http://amitklein.com/2008/02/26/testivus/">Continue reading <span class="meta-nav">&#8594;</span></a>


Related posts:<ol><li><a href='http://amitklein.com/2008/02/26/functional-web-application-testing-with-selenium-ide-and-rc/' rel='bookmark' title='Permanent Link: Functional Web Application Testing with Selenium IDE and RC'>Functional Web Application Testing with Selenium IDE and RC</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><a href="http://projects.ipartners.com/extranet/Selenium/Testing%20with%20Selneium%20v2.pdf"></a>Although we are striving towards integrating testing more closely into our development process we still have a long way to go.  I thought this article does a good job of explaining testing philosophy in a fun way.</p>
<p><a href="http://www.developertesting.com/archives/month200705/20070502-000424.html">http://www.developertesting.com/archives/month200705/20070502-000424.html</a></p>
<p>To summarize:</p>
<ul>
<li>All code needs to be tested.</li>
<li>Ugly tests are better then no tests.</li>
<li>Write tests often</li>
<li>Run tests often</li>
</ul>
<p>A few weeks ago I gave a short presentation regarding testing with Selenium.  Earlier today I sent out some <a href="http://amitklein.com/2008/02/26/functional-web-application-testing-with-selenium-ide-and-rc/">introductory documentation as well.</a> Hopefully in the coming weeks we will all begin to familiarize ourselves with some of the testing tools out there and begin, more seriously, incorporating testing into our build process.</p>


<p>Related posts:<ol><li><a href='http://amitklein.com/2008/02/26/functional-web-application-testing-with-selenium-ide-and-rc/' rel='bookmark' title='Permanent Link: Functional Web Application Testing with Selenium IDE and RC'>Functional Web Application Testing with Selenium IDE and RC</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://amitklein.com/2008/02/26/testivus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Good Bug Tracking (aka How to make developers not want to kill you for logging ambiguous bugs they cant reproduce)</title>
		<link>http://amitklein.com/2007/12/10/good-bug-tracking-aka-how-to-make-developers-not-want-to-kill-you-for-logging-ambiguous-bugs-they-cant-reproduce/</link>
		<comments>http://amitklein.com/2007/12/10/good-bug-tracking-aka-how-to-make-developers-not-want-to-kill-you-for-logging-ambiguous-bugs-they-cant-reproduce/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 04:19:44 +0000</pubDate>
		<dc:creator>amit</dc:creator>
				<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://amitklein.com/?p=81</guid>
		<description><![CDATA[In the high-flying fast-paced world of web development it seems like the current &#8220;hot&#8221; technologies change every day. Luckily there some things that never change&#8230; bugs. While we are trying to improve our method of logging, assigning, tracking and resolving &#8230; <a href="http://amitklein.com/2007/12/10/good-bug-tracking-aka-how-to-make-developers-not-want-to-kill-you-for-logging-ambiguous-bugs-they-cant-reproduce/">Continue reading <span class="meta-nav">&#8594;</span></a>


No related posts.]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" src="http://www.zigzags.co.uk/images/Eyewonder%20Paperback%20-%20Bugs.jpg" alt="Eyewonder%20Paperback%20 %20Bugs Good Bug Tracking (aka How to make developers not want to kill you for logging ambiguous bugs they cant reproduce)" width="252" height="326" title="Good Bug Tracking (aka How to make developers not want to kill you for logging ambiguous bugs they cant reproduce)" /></p>
<p>In the high-flying fast-paced world of web development it seems like the current &#8220;hot&#8221; technologies change every day.   Luckily there some things that never change&#8230; bugs.  While we are trying to improve our method of logging, assigning, tracking and resolving bugs, I&#8217;d like to share an article that gives general pointers on good bug logging.  Although this article was written in ancient times (2000) it&#8217;s tips are still useful:</p>
<p><strong>Every good bug report needs exactly three things.</strong></p>
<blockquote><p>1.  Steps to reproduce<br />
2.  What you expected to see, and<br />
3.  What you saw instead.</p></blockquote>
<p>Additionally here are the most relevant of the top ten tips for bug tracking:</p>
<blockquote><p>1.  A good tester will always try to reduce the repro steps to the <em>minimal steps</em> to reproduce; this is extremely helpful for the programmer who has to find the bug.<br />
5.  You&#8217;ll want to keep careful track of versions. Every build of the software that you give to testers should have a build ID number so that the poor tester doesn&#8217;t have to retest the bug on a version of the software where it wasn&#8217;t even supposed to be fixed.<br />
10.  Avoid the temptation to add new fields to the bug database. Every month or so, somebody will come up with a great idea for a new field to put in the database. You get all kinds of clever ideas, for example, keeping track of the file where the bug was found; keeping track of what % of the time the bug is reproducible; keeping track of how many times the bug occurred; keeping track of which exact versions of which DLLs were installed on the machine where the bug happened. It&#8217;s very important <em>not</em> to give in to these ideas. If you do, your new bug entry screen will end up with a thousand fields that you need to supply, and nobody will want to input bug reports any more. For the bug database to work, everybody needs to use it, and if entering bugs &#8220;formally&#8221; is too much work, people will go <em>around</em> the bug database.</p></blockquote>
<p>I&#8217;m also going to add my own 11th  top ten tip for bug tracking:</p>
<p>Screenshots help!</p>
<p>For more info check out the article <a href="http://www.joelonsoftware.com/articles/fog0000000029.html">here</a></p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://amitklein.com/2007/12/10/good-bug-tracking-aka-how-to-make-developers-not-want-to-kill-you-for-logging-ambiguous-bugs-they-cant-reproduce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
