<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
   <channel>
      <title>CITCON Blog Aggregator</title>
      <description>Aggregates the blogs from various CITCON participants, and filters out the dupes amongst them. Filters out posts not related to CI &amp; Testing.</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=b787fd1ec5db6b74feb6129e9d55dfe8</link>
      <pubDate>Sun, 08 Nov 2009 09:40:01 -0800</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/CitconBlogs" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
         <title>Mable Peabody's Beauty Parlor and Chainsaw Repair Night Club</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/cdlTpTw4t2Y/index.php</link>
         <description>This business owner is trying too hard. Our latest code-quality theme, the Interface Segregation Principle, says your classes and interfaces shouldn’t try too hard, either. If one object really is going to do two jobs, give it two interfaces and let other objects talk to whichever interface they actually need. This gives you the flexibility to split the object into its constituent parts or replace some of those parts in the future. We found several examples relevant to the Interface Segregation Principle in our code, including a PriceManager object that manages many different types of market data in disparate ways (classes with “manager” in the title are particularly susceptible to double-wide-interface disease) a single Services object that implements interfaces for various families of actions (creating, updating, and closing) a Builder object that had an extraneous getter floating around in its interface (we moved the getter to a more appropriate object) You may enjoy the demotivational posters we came up with to illustrate the Interface Segregation Principle: All I wanted was a volume control. I said a pizza with everything, dammit! Two great things must work great together.</description>
         <author>dsquirrel</author>
         <guid isPermaLink="false">266@https://dev.youdevise.com/YDBlog/</guid>
         <pubDate>Sat, 07 Nov 2009 02:54:58 -0800</pubDate>
         <content:encoded><![CDATA[<p>This business owner is <em>trying too hard.</em> </p> <div class="image_block"><img src="https://dev.youdevise.com/YDBlog/media/blogs/DevBlog/mable.jpg" alt="Mable Peabody&#039;s Beauty Parlor and Chainsaw Repair Night Club" title="" width="400" height="300"/></div> <p>Our latest <a rel="nofollow" target="_blank" href="https://dev.youdevise.com/YDBlog/index.php?title=consistency_is_the_hobgoblin_of_little_m">code-quality theme</a>, the <a rel="nofollow" target="_blank" href="http://www.objectmentor.com/resources/articles/isp.pdf">Interface Segregation Principle</a>, says your classes and interfaces shouldn&#8217;t try too hard, either. If one object really is going to do two jobs, give it two interfaces and let other objects talk to whichever interface they actually need. This gives you the flexibility to split the object into its constituent parts or replace some of those parts in the future.</p> <p>We found several examples relevant to the Interface Segregation Principle in our code, including</p>
<ul> <li>a PriceManager object that manages many different types of market data in disparate ways (classes with &#8220;manager&#8221; in the title are particularly susceptible to double-wide-interface disease)</li> <li>a single Services object that implements interfaces for various families of actions (creating, updating, and closing)</li> <li>a Builder object that had an extraneous getter floating around in its interface (we moved the getter to a more appropriate object)</li>
</ul> <p>You may enjoy the <a rel="nofollow" target="_blank" href="http://despair.com/">demotivational posters</a> we came up with to illustrate the Interface Segregation Principle:</p> <div class="image_block"><img src="https://dev.youdevise.com/YDBlog/media/blogs/DevBlog/isp3.jpg" alt="Moog synthesizer control panel" title="Interface Segregation Principle" width="360" height="450"/><div class="image_legend">All I wanted was a volume control.</div></div><p></p> <div class="image_block"><img src="https://dev.youdevise.com/YDBlog/media/blogs/DevBlog/isp2.jpg" alt="Pizza with a huge number of toppings" title="Interface Segregation Principle" width="450" height="360"/><div class="image_legend">I said a pizza with everything, dammit!</div></div><p></p> <div class="image_block"><img src="https://dev.youdevise.com/YDBlog/media/blogs/DevBlog/isp1.jpg" alt="Maya Schaper Antiques and Cheese Shop" title="Interface Segregation Principle" width="450" height="360"/><div class="image_legend">Two great things must work great together.</div></div><div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/YoudeviseDeveloperBlog?a=cdlTpTw4t2Y:4CbQCR_AvuU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/YoudeviseDeveloperBlog?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/YoudeviseDeveloperBlog?a=cdlTpTw4t2Y:4CbQCR_AvuU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/YoudeviseDeveloperBlog?i=cdlTpTw4t2Y:4CbQCR_AvuU:V_sGLiPBpWU" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/YoudeviseDeveloperBlog?a=cdlTpTw4t2Y:4CbQCR_AvuU:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/YoudeviseDeveloperBlog?i=cdlTpTw4t2Y:4CbQCR_AvuU:gIN9vFwOqvQ" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/YoudeviseDeveloperBlog?a=cdlTpTw4t2Y:4CbQCR_AvuU:cGdyc7Q-1BI"><img src="http://feeds.feedburner.com/~ff/YoudeviseDeveloperBlog?d=cGdyc7Q-1BI" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/cdlTpTw4t2Y" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>https://dev.youdevise.com/YDBlog/index.php?title=mable_peabody_s_beauty_parlor_and_chains&amp;more=1&amp;c=1&amp;tb=1&amp;pb=1</feedburner:origLink></item>
      <item>
         <title>Checking is not testing, testing is not checking</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/W0pnIKiCU6Y/</link>
         <description>Today at the Oredev conference in Malmo, James Marcus Bach suggested renaming a large part of what is now called tests to checks. Bach said there is a big difference between a conscious process of questioning and evaluating a product and almost mechanical rule-based verifications. These two things are different enough that they should have [...]</description>
         <author>gojko</author>
         <guid isPermaLink="false">http://gojko.net/?p=1386</guid>
         <pubDate>Fri, 06 Nov 2009 03:12:28 -0800</pubDate>
         <content:encoded><![CDATA[<p>Today at the Oredev conference in Malmo, <a rel="nofollow" target="_blank" href="http://www.buccaneerscholar.com/blog/">James Marcus Bach</a> suggested renaming a large part of what is now called tests to checks. Bach said there is a big difference between a conscious process of questioning and evaluating a product and almost mechanical rule-based verifications. These two things are different enough that they should have different names, and bundling them under the name of &#8220;test&#8221; causes confusion. He suggested calling the former kind of work <i>testing</i> and latter <i>checking</i>.<span id="more-1386"></span></p>
<p><img/></p>
<p>Bach compared the situation in testing today to early days of software development where compiling and writing code were all called programming, then compiling got separated and renamed to reflect the fact that it is completely done with a machine. Checking can be automated to a great degree and delegated to the machine, said Bach, offering an example of classic TDD unit tests. Testing as a concious process needs to be done by a trained specialist. This allows us to put more emphasis on exploratory testing, which Elisabeth Hendrickson listed as one of the <a rel="nofollow" target="_blank" href="http://gojko.net/2009/10/13/seven-key-agile-testing-practices-for-releasable-software/">key seven practices for successful agile testing</a>.</p>
<p>On a similar note, Mary Poppendieck talked about how <a rel="nofollow" target="_blank" href="http://gojko.net/2009/10/16/mary-poppendieck-test-driven-development-redefined/">testing is a learning activity</a> at the <a rel="nofollow">Agile Testing Days</a> conference in Berlin, contrasting it to checking the correctness using known expectations. </p>
<p>See other articles from the <a rel="nofollow">Oredev</a> conference.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/W0pnIKiCU6Y" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://gojko.net/2009/11/06/checking-is-not-testing-testing-is-not-checking/</feedburner:origLink></item>
      <item>
         <title>XML verification just got easier with easyb</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/aZ1I2jli_SA/</link>
         <description>There&amp;#8217;s myriad ways to validate XML these days; in fact, with Groovy, the mechanics of parsing XML with XMLSlurper couldn&amp;#8217;t be easier! Nevertheless, from time to time, because it&amp;#8217;s my bag, baby, I&amp;#8217;ve found that I&amp;#8217;ve needed an easy way to validate XML documents without having to actually parse them myself. Thus, XMLUnit has been [...]</description>
         <author>Andy</author>
         <guid isPermaLink="false">http://thediscoblog.com/?p=878</guid>
         <pubDate>Thu, 05 Nov 2009 10:57:52 -0800</pubDate>
         <content:encoded><![CDATA[<p>There&#8217;s myriad ways to validate XML these days; in fact, with Groovy, the mechanics of <i>parsing</i> XML with <code><a rel="nofollow" target="_blank" HREF="http://groovy.codehaus.org/Reading+XML+using+Groovy%27s+XmlSlurper">XMLSlurper</a></code> couldn&#8217;t be easier! Nevertheless, from time to time, because it&#8217;s my bag, baby, I&#8217;ve found that I&#8217;ve needed an easy way to validate XML documents without having to actually parse them myself. Thus, <a rel="nofollow" target="_blank" HREF="http://www.ibm.com/developerworks/java/library/j-cq121906.html">XMLUnit</a> has been a handy <a rel="nofollow" target="_blank" href="http://thediscoblog.com/2009/08/11/xml-validation-is-easyb/">framework today</a> as it has been for years. </p>
<p>While XMLUnit is a hip JUnit-style framework, you can certainly leverage it outside of JUnit. What&#8217;s more, via <a rel="nofollow" target="_blank" href="http://code.google.com/p/easyb/wiki/PluginAPI">easyb&#8217;s plug-in framework</a>, using XMLUnit just got a lot easier! For instance, leveraging XMLUnit <i>without</i> the new plug-in required a bit of manual manipulation of XMLUnit&#8217;s <code>Diff</code> class and then a <code>boolean</code> verification like so:</p>
<pre>
import org.custommonkey.xmlunit.XMLUnit
import org.custommonkey.xmlunit.Diff XMLUnit.setIgnoreWhitespace(true) scenario "the XMLRepresentationBuilder should build XML", { given "a table name and collection of name value pairs", { lst = [new ColumnNameValue("LN_ID", 10002130), new ColumnNameValue("NIBA", "99.99"), new ColumnNameValue("EFF_DATE", "2009-04-01")] map = ["LN_ID":"id", "NIBBA":"nb","EFF_DATE":"effectiveDate"] } then "the XML produced should be valid", { rep = new DatabaseTableResource() rep.columnNameValues = lst rep.columnNameMappings = map rep.identifiers = ["LN_ID"] out = XMLRepresentationBuilder.buildRepresentation(rep) control = """&lt;cmnres id='10002130'&gt; &lt;nib&gt;99.99&lt;/nib&gt;&lt;effectiveDate&gt;2009-04-01&lt;/effectiveDate&gt; &lt;/cmnres&gt;""" diff = new Diff(control, out) diff.identical().shouldBe true }
}
</pre>
<p>Note how in this code it&#8217;s necessary to:</p>
<ul>
<li>Ensure white space doesn&#8217;t cause comparison errors via the <code>XMLUnit.setIgnoreWhitespace(true)</code> call</li>
<li>Use XMLUnit&#8217;s <code>Diff</code> class to compare two documents and then call the <code>identical</code> (or <code>similar</code>) method to actually verify the documents</li>
</ul>
<p>With easyb&#8217;s XMLUnit plug-in, things are a lot simpler! All you need to do is insert a <code>using</code> clause and ensure the plug-in is in your classpath. Watch:</p>
<pre>
using "xmlunit" scenario "XML documents are compared easier via xml unit plug-in", { given "some xml document", { control = """&lt;account&gt;&lt;id&gt;3A-00&lt;/id&gt;&lt;name&gt;acme&lt;/name&gt;&lt;/account&gt;""" } then "the plugin should enable easy comparisons", { testXML = """&lt;account&gt;&lt;id&gt;3A-00&lt;/id&gt;&lt;name&gt;acme&lt;/name&gt;&lt;/account&gt;""" testXML.shouldBeIdenticalTo control testXML.shouldBeIdenticalWith control //same behavior different call testXML.shouldBeIdentical control //ditto testXML.identical control //ditto } and "the instance of XMLUnit should be available for use", { XMLUnit.version.shouldBe "1.3alpha" XMLUnit.getIgnoreWhitespace().shouldBe true }
}
</pre>
<p>Notice that there isn&#8217;t any need to alter the white space setting (it&#8217;s been done for you in the plug-in &#8212; yo can undo it easily too &#8212; see the <code>and</code> clause?), nor is it necessary to use XMLUnit&#8217;s <code>Diff</code> class &#8212; it&#8217;s all done under the covers. While this story uses the <code>identical</code> call, there is a corresponding <code>similar</code> call (and related pattern &#8212; that is, <code>shouldBeSimilarTo</code> and the like). </p>
<p>Also, the initialized instance of <code>XMLUnit</code> is available should you need further configurations, etc &#8212; the plug-in inserts the copacetic instance into the binding available to your behaviors as shown in the <code>and</code> phrase above.</p>
<p>As you can see, the XMLUnit plug-in for easyb makes <a rel="nofollow" target="_blank" href="http://www.ibm.com/developerworks/java/library/j-pg05199/">workin with xml</a> (that is, comparing documents) a lot easier. While there&#8217;s plenty of ways to skin a cat, so to speak, this is just one of them &#8212; I&#8217;ve certainly found it handy from time to time &#8212; I think you will too! </p>
<p>You can download the current version of the plug-in at <a rel="nofollow" target="_blank" href="http://code.google.com/p/easyb/downloads/list">easyb&#8217;s Google code site</a> along with a few other hip gems like <a rel="nofollow" target="_blank" href="http://easyb.org/dbunit.html">easyb&#8217;s DbUnit plug-in</a>.</p> <p><center>You can now follow <a rel="nofollow" target="_blank" href="http://twitter.com/thediscoblog">The Disco Blog on Twitter</a>, baby!</center></p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/aZ1I2jli_SA" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://thediscoblog.com/2009/11/05/xml-verification-just-got-easier-with-easyb/</feedburner:origLink></item>
      <item>
         <title>Test Automation Design and Strategy Training</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/oWT_efUzQ44/</link>
         <description>I meet more and more teams, both within my company and externally, who are getting really good at agile testing. They&amp;#8217;ve adopted a Whole Team approach, they write tests first, they collaborate and communicate well, they use feedback to improve. Agile teams are functioning much better overall than what I was seeing a couple of [...]</description>
         <author>admin</author>
         <guid isPermaLink="false">http://lisacrispin.com/wordpress/?p=331</guid>
         <pubDate>Thu, 05 Nov 2009 10:55:41 -0800</pubDate>
         <content:encoded><![CDATA[<p><span style="color:#333399;">I meet more and more teams, both within my company and externally, who are getting really good at agile testing. They&#8217;ve adopted a Whole Team approach, they write tests first, they collaborate and communicate well, they use feedback to improve. Agile teams are functioning much better overall than what I was seeing a couple of years ago.</span></p>
<p><span style="color:#333399;">One perennial issue - and this isn&#8217;t new with agile - is that testers and teams still struggle with how to design and write automated tests that have a good return on investment. That is, the tests are reliable, stable, maintainable, and provide good value for the amount of work that goes into them. We also all struggle with how much to automate, what to not automate, what to keep in our regression suite. </span></p>
<p><span style="color:#333399;">Janet and I devoted a section of our book to automation, and we presented principles, techniques and strategies that will help. We also include this in our Agile Testing course, and we both do conference tutorials on how to succeed with automation in agile projects. I think in addition to that, a lot of people need some practical hands-on experience. They need to be guided through an example of automating tests for a story, then they need to try it for themselves.</span></p>
<p><span style="color:#333399;">I&#8217;m developing an internal class for people at my company, and we also have ideas for workshops and other ways for teams who have solved some automation problems and developed good practices to share with other teams. I just mind mapped the ideas we have so far. At Adam Goucher&#8217;s suggestion, I&#8217;m posting my first draft here. </span></p>
<p><span style="color:#333399;">It&#8217;s my hope that I could extend this to a more generic class that would be appropriate for a conference tutorial. I&#8217;ve talked with some folks about collaborating on something like this and kind of making it open source, with several of us who could teach it, like the Watir tutorial that Bret Pettichord, Charley Baker and others have taught. But, others better than I have tried to teach hands-on courses like this and run into issues. What tools would we use that can easily be installed on all participants&#8217; laptops? What if the participants have different skill levels? So, I don&#8217;t know if this is really possible. I&#8217;m interested in ideas, or if anyone has done this successfully. </span></p>
<p><span style="color:#333399;">Actually I&#8217;m sure this has been done successfully by people like Elfriede Dustin who have been specializing in test automation for years - I need to get her book out and re-read it. I&#8217;m not trying to steal anyone&#8217;s idea or say that this is a new original idea I thought up. I just see a gap in many teams&#8217; ability to create the &#8216;right&#8217; automated regression tests.<br />
</span></p>
<p><span style="color:#333399;">So, here is the mind map, you&#8217;ll have to open it in a new window (I&#8217;m sure there&#8217;s a better way to do this but I have to catch a plane), feedback welcomed.</span></p>
<p><a rel="nofollow" target="_blank" href="http://lisacrispin.com/wordpress/wp-content/uploads/2009/11/test-automation-design-and-strategy-training.jpg"><img class="alignnone size-medium wp-image-332" title="test-automation-design-and-strategy-training" src="http://lisacrispin.com/wordpress/wp-content/uploads/2009/11/test-automation-design-and-strategy-training-300x102.jpg" alt="" width="300" height="102"/></a></p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/oWT_efUzQ44" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://lisacrispin.com/wordpress/2009/11/05/test-automation-design-and-strategy-training/</feedburner:origLink></item>
      <item>
         <title>Put Sonar Gadgets on your JIRA Dashboard !</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/NR0BOnqefwo/</link>
         <description>Ross Row won last week the Atlassian Codegeist Competition in the OpenSocial Gadget Category with his Sonar Gadget. Congratulations to Ross who has done a great job so far working on the Sonar integration with the Atlassian suite. This integration is well summarized by Jesse Gibbs in his article Put Sonar Gadgets on your JIRA [...]</description>
         <author>Olivier Gaudin</author>
         <guid isPermaLink="false">http://sonar.codehaus.org/?p=2067</guid>
         <pubDate>Thu, 05 Nov 2009 09:30:58 -0800</pubDate>
         <content:encoded><![CDATA[<p>Ross Row won last week the <a rel="nofollow" target="_blank" href="http://www.atlassian.com/codegeist/">Atlassian Codegeist Competition</a> in the OpenSocial Gadget Category with his <a rel="nofollow" target="_blank" href="http://confluence.atlassian.com/display/CODEGEIST/Sonar+Gadget">Sonar Gadget</a>. Congratulations to Ross who has done a great job so far working on the Sonar integration with the Atlassian suite. <br/><br />
This integration is well summarized by Jesse Gibbs in his article <a rel="nofollow" target="_blank" href="http://blogs.atlassian.com/devtools/2009/10/put-sonar-gadgets-on-your-jira-dashboard.html">Put Sonar Gadgets on your JIRA Dashboard !</a> where he also mentions the two new <a rel="nofollow" target="_blank" href="http://docs.codehaus.org/display/SONAR/Bamboo+Plugin">Bamboo Sonar Plugins</a>.</p>
<img src="http://feeds.feedburner.com/~r/Sonar/~4/9zsoNdQyPfQ" height="1" width="1"/><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/NR0BOnqefwo" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://feedproxy.google.com/~r/Sonar/~3/9zsoNdQyPfQ/</feedburner:origLink></item>
      <item>
         <title>How to make money selling iPhone games</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/77t_-WIT_rg/</link>
         <description>Michael Schade, CEO of Fishlabs, talked today at Oredev on strategies for maximising revenue from iPhone games. Citing research to Mobilegamesdb, PinchMedia and Appsfire, he said that $900M was paid out to developers from AppStore last year and that the estimate is that this figure will surge to $2.8b in 2.8b. An average [...]</description>
         <author>gojko</author>
         <guid isPermaLink="false">http://gojko.net/?p=1379</guid>
         <pubDate>Thu, 05 Nov 2009 06:50:34 -0800</pubDate>
         <content:encoded><![CDATA[<p>Michael Schade, CEO of <a rel="nofollow" target="_blank" href="http://fishlabs.net">Fishlabs</a>, talked today at <a rel="nofollow">Oredev</a> on strategies for maximising revenue from iPhone games. Citing research to <a rel="nofollow" target="_blank" href="http://www.mobilegamesdb.com/">Mobilegamesdb</a>, <a rel="nofollow" target="_blank" href="http://www.pinchmedia.com/">PinchMedia</a> and <a rel="nofollow" target="_blank" href="http://appsfire.com/">Appsfire</a>, he said that $900M was paid out to developers from AppStore last year and that the estimate is that this figure will surge to $2.8b in 2.8b. An average user spends $80 on 65 apps, out of which 65% are free, making average commercial spend $1.90 per application. In average, an application earns $8500, but the store sales are top-heavy, so most applications make much less than that. Budgets for high-end games are now well over $250k, so it is very important to carefully position and market the games if to compete.<span id="more-1379"></span></p>
<h2>Make it visible</h2>
<p>AppStore is now saturated with games, with over a hundred new applications appearing weekly. Schade advised first carefully choosing the category where you want to compete. Putting this into context, he said that there are over 6000 puzzle games in the store, 1107 card games, 1014 role-play games, 679 casino games, coming down to less than hundred in high-end 3D simulations. </p>
<p>To make the application visible in AppStore, Schade advised choosing a catchy name and creating an icon that presents unique game features. For example, the icon for their Rally Master Pro game shows dirt on tires and lights to demonstrate that they have levels with different tracks and weather conditions. He also advised keeping the product description short and snappy as customers mostly won&#8217;t read that first but look at screenshots. This also means that you have to choose screenshots wisely to demonstrate unique features of the game. For keyword selection, he advised applying traditional SEO techniques. &#8220;Pick keywords wisely as you won&#8217;t be able to change them without resubmission. Ask yourself what people would look for without knowing your application. Those who know your application will find it anyway&#8221;, said Schade. He also advised making price drops very clear and visible because some customers wait for price drops to buy games.</p>
<h2>Marketing schedule</h2>
<p>Fishlabs has a very aggressive marketing schedule for games. The key phases there are:</p>
<ul>
<li>Announce the title early and focus on things that make the game special (eg. number of tracks in the game, weather)</li>
<li>Contact journalists to provide them with unique identifiers (UDIDs) to be able to deliver adhoc beta builds to them. Schade said that developers get only up to 50 UDIDs yearly, so they are careful about who they give them to. He suggested contacting people on <a rel="nofollow" target="_blank" href="http://www.toucharcade.com">Touch Arcade forum </a>(US), <a rel="nofollow" target="_blank" href="http://www.pocketgamer.co.uk">Pocket Gamer</a> (UK) and <a rel="nofollow" target="_blank" href="http://www.slidetoplay.com">Slide To Play</a></li>
<li>At the alpha stage, they spread first screenshots</li>
<li>At the beta stage, they release the game-play trailer on YouTube and provide beta builds to journalists for initial feedback</li>
<li>Two weeks before submission, they release the official game trailer on YouTube to generate buzz on forums. Schade said that these trailers can get up to 100k views.</li>
<li>When submitting the application to AppStore, they spread the final screenshots and story about the game online.</li>
<li>They they send the final version to journalists for review and chase those who haven&#8217;t published a review. Schade said that most journalists know that UUIDs are scarse, so they will respect that and publish a review.</li>
<li>Once the game is live, they send out the press releases. They need to be sent to Apple upfront according to the developer agreement, so Schade advised taking extra care to get the spelling of Apple products right.</li>
<li>They then provide promo codes to journalists and enthusiastic gamers with blogs and youtube channels that will review the game. To startups without such connections, he suggested announcing promo codes on the promo-code section on Touch Arcade.</li>
<li>They recently started running online and mobile banners banners for the first time, so it&#8217;s still early to know the effects of this.</li>
<li>Then they carefully monitor user reviews, YouTube comments and special interest groups, replying to complaints and offering advice, making sure that comments from spammers and competitors are removed where possible.</li>
</ul>
<h2>Prepare for promotion</h2>
<p>The US customers represent 50% of the market, UK customers 30%, so releasing only the English language initially first makes sense. Schade also advised considering are French, Italian, Spanish, German, Dutch and Japanese. Even if you release only English initially, Schade advised to be prepared to localise very quickly if needed. Apple might decide to promote the application internationally if it becomes popular, said Schade, and they might ask you for example to give them a Japanese localised version that same day. In that case, you&#8217;ll have to act very quickly. &#8220;If Apple asks you to jump, don&#8217;t ask why but how high&#8221;, said Schade, because being promoted helps a lot with sales. You also need to have hi-resolution screenshots ready in layered PSD format for this. Although there is no guarantee that the application will be promoted, you can increase your chances by monitoring applications that are currently promoted and trying to understand why they are there. As some good ideas that might get the game promoted, Schade mentioned utilising latest technologies, having very polished games or a distinctive style. Schade advised not launching the light game while being promoted or dropping the price.</p>
<h2>Online CRM</h2>
<p>A key marketing tool for application developers is online CRM, but not in a traditional sense. Schade advised being very active on forums and monitoring YouTube channel comments and Twitter feeds for people talking about your application, especially those that are complaining. &#8220;Watch out for major complaints and fix them ASAP&#8221;, advised Schade, saying that developers should be responsive and seek out clarification for any complaints in order to either provide advice or reply constructively to diffuse potential bad reputation. The most important period to monitor are the first two to four weeks after a release, especially the weekends when the traffic goes up three times. Schade said that monitoring online channels is now a 24/7 job for him, and that other team members do that occasionally as well.</p>
<p>They also make an effort to broadcast news on Twitter. Schade advised posting anything relevant to the game, especially new reviews and price drops because people retweet these things. Again, Twitter feeds should be monitored closely and any complaints should be dealt with straight away. He also advised following journalists and game reviewers because they might also follow you then.</p>
<h2>Game commercials</h2>
<p>Schade categorised applications in two groups: Premium (costs between $4.99 and $9.99) and Freemium ($0.99 to $3.99). For premium games, he advised launching the full version to early adopters and then launching a light version when the full version failed to make it to charts or dropped out. &#8220;If you&#8217;re not in top 50 within the first week, you&#8217;re never going to make it [to the chart].&#8221;, said Schade. The light version should be fully playable on at least one level in proper game mode, not just be a 30 second preview. In-application purchase (available in 3.0) should be used to unlock full version without download. For freemium games, Schade advised offering a free download and then using in-game purchase to unlock it. The purpose of this strategy is to maximise reach and make people addicted to the game before they purchase. &#8220;Allow people to feel the game and tan ask for money&#8221;, said Schade.</p>
<p>See other news from the <a rel="nofollow">Oredev</a> conference.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/77t_-WIT_rg" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://gojko.net/2009/11/05/how-to-make-money-selling-iphone-games/</feedburner:origLink></item>
      <item>
         <title>Cool Tools - for customer data etc</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/fIEwhoxVbkk/8323</link>
         <description>&lt;p&gt;Test data is often a bottleneck on testing projects. Security and privacy issues can require complex massaging of existing information, Today, there are tools to make it easy to create it from scratch! I find two in particular quite useful.&lt;/p&gt; &lt;p&gt;I&amp;#8217;ve been telling people about &lt;a rel="nofollow" target="_blank" href="http://www.generatedata.com"&gt;generatedata.com&lt;/a&gt; for several years. It is an amazing tool for generating data for customers or other items, including items chosen from lists and data ranges. It is free, customizable and can even be run off a USB (after it is customized for the computer and database etc). &lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/fIEwhoxVbkk" height="1" width="1"/&gt;</description>
         <author />
         <guid isPermaLink="false" />
         <pubDate>Thu, 05 Nov 2009 05:24:07 -0800</pubDate>
      <feedburner:origLink>http://www.testingreflections.com/node/view/8323</feedburner:origLink></item>
      <item>
         <title>Take Time to Learn Something New</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/iaHi17FUVgM/</link>
         <description>&lt;p&gt;This past Monday, OSC had a company hackathon day. It is not our first, but we have been trying to make this sort of activity a more regular thing for us. Unlike our previous hackathons, this one was more flexible on the rules. Previously we had the entire team work on the same technology or goal whereas this time was more free form. We each had the opportunity to work on either a new or old technology (by new and old I mean something we&amp;#8217;ve worked with before or not), on new or old projects and to collaborate or work individually.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.opensourceconnections.com/2009/11/04/take-time-to-learn-something-new/" class="more-link"&gt;Read more on Take Time to Learn Something New&amp;#8230;&lt;/a&gt;&lt;/p&gt;</description>
         <author>Youssef Chaker</author>
         <guid isPermaLink="false">http://www.opensourceconnections.com/?p=571</guid>
         <pubDate>Wed, 04 Nov 2009 17:30:02 -0800</pubDate>
         <content:encoded><![CDATA[<p>This past Monday, OSC had a company hackathon day. It is not our first, but we have been trying to make this sort of activity a more regular thing for us. Unlike our previous hackathons, this one was more flexible on the rules. Previously we had the entire team work on the same technology or goal whereas this time was more free form. We each had the opportunity to work on either a new or old technology (by new and old I mean something we&#8217;ve worked with before or not), on new or old projects and to collaborate or work individually.</p>
<p>The day featured work on things like Google App Engine and the Android application platform. I took this chance to get myself out of the PHP world I&#8217;ve been stuck in for about a year now and get back into some Rails development. I had a little tool in mind that I wanted to develop which would help us internally do some things a bit more efficiently. I used that as an excuse to try out some of the Rails plugins or gems that I have wanted to use for a while, which are:</p>
<ul>
<li>Mocha (http://github.com/mislav/rspec-rails-mocha http://mocha.rubyforge.org/)</li>
<li>Factory Girl (http://github.com/thoughtbot/factory_girl)</li>
<li>GChart (http://github.com/jbarnette/gchart)</li>
<li>Open Flash Chart (http://github.com/pullmonkey/open_flash_chart)</li>
</ul>
<p>I have to say, the buzz around Mocha and Factory Girl is very old and I wish I had the opportunity to use these tools before now. New things come out everyday and it is tough to keep up with everything. My advise to you is to dedicate a &#8220;playing time&#8221; often for you to try out the newest and greatest thing that comes out. Do this in groups where each one can be working on a different things and share your findings at the end of the day. Even though I didn&#8217;t work on the Android app, I did get a feel for it from Arin through his experience with it. One of the things that helped take this experience further is our presence all together in one conference room feeding out of each other.</p>
<p>Looking forward to the next OSC hackathon.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/iaHi17FUVgM" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.opensourceconnections.com/2009/11/04/take-time-to-learn-something-new/</feedburner:origLink></item>
      <item>
         <title>Software Estimation: The Cone of Uncertainty vs The Wormhole of Reality</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/thB1k-wpiXs/</link>
         <description>&lt;p&gt;Earlier this year in my &lt;a rel="nofollow" target="_blank" href="http://www.commerce.virginia.edu/academic_programs/MSMIT/Pages/index.aspx"&gt;MSMIT classes at UVa&lt;/a&gt;, we talked about software estimation techniques, which was a very interesting topic.&lt;/p&gt;
&lt;p&gt;One thing we talked about was the &amp;#8220;Cone of Uncertainty&amp;#8221;, as described in Steve McConnell&amp;#8217;s book &amp;#8220;Rapid Development.&amp;#8221; You can read the full description of the cone of uncertainty &lt;a rel="nofollow" target="_blank" href="http://www.construx.com/Page.aspx?hid=1648"&gt;on the Construx website&lt;/a&gt;. Here is a drawing of it as depicted on that website.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.opensourceconnections.com/2009/11/04/estimation-the-cone-of-uncertainty-vs-the-wormhole-of-reality/" class="more-link"&gt;Read more on Software Estimation: The Cone of Uncertainty vs The Wormhole of Reality&amp;#8230;&lt;/a&gt;&lt;/p&gt;</description>
         <author>Arin Sime</author>
         <guid isPermaLink="false">http://www.opensourceconnections.com/?p=561</guid>
         <pubDate>Wed, 04 Nov 2009 14:33:17 -0800</pubDate>
         <content:encoded><![CDATA[<p>Earlier this year in my <a rel="nofollow" target="_blank" href="http://www.commerce.virginia.edu/academic_programs/MSMIT/Pages/index.aspx">MSMIT classes at UVa</a>, we talked about software estimation techniques, which was a very interesting topic.</p>
<p>One thing we talked about was the &#8220;Cone of Uncertainty&#8221;, as described in Steve McConnell&#8217;s book &#8220;Rapid Development.&#8221; You can read the full description of the cone of uncertainty <a rel="nofollow" target="_blank" href="http://www.construx.com/Page.aspx?hid=1648">on the Construx website</a>. Here is a drawing of it as depicted on that website.</p>
<p><img title="ConeOfUncertainty" src="http://www.opensourceconnections.com/wp-content/uploads/2009/11/ConeOfUncertainty.jpg" alt="ConeOfUncertainty" width="474" height="347"/><br />
<br clear="left"/><br />
The Cone of Uncertainty is a convenient way to think of how software estimation works. When a project is first beginning, you know very little about it and so you should never give customers a single point estimate. A single point estimate just means that you supply one number, like saying &#8220;this project will take 6 months.&#8221;</p>
<p>Giving estimates in ranges instead is much more valuable and realistic. This more accurately conveys to your customer the uncertainty of an estimate, and therefore the risk. For example, if I give you a wide estimate like &#8220;this will take 3-12 months&#8221;, that is a very clear way to communicate that we don&#8217;t know enough yet to give a firm estimate.</p>
<p>The Cone of Uncertainty shows that the more you know about a project, the more you can narrow that range. So while I might initially think it&#8217;s 3-12 months, after spending time analyzing the project, I can revise that to a more narrow range, like 6-8 months perhaps, or 10-12 months.</p>
<p>But what about the end of a project? The Cone of Uncertainty says that the closer you get to the end of a project, the more likely you are to know exactly when it ends. That makes sense in theory, but is it realistic?</p>
<p>I would suggest that many times, there is a large amount of uncertainty at the end of a project, even if it&#8217;s well run. Imagine that you are two weeks away launching a new site, and you are still working out some bugs that your testers have found. You know you only have a few bugs left, so you confidently assert to your boss or customer that you&#8217;ll be ready to launch in two weeks. Each day you are fixing bugs, but the testers keep finding new bugs. Perhaps they are even finding new bugs faster than you are fixing them, or their rate of finding bugs is not decreasing.</p>
<p>When you had a short bug list in front of you, you felt very confident about two weeks, but now you are less certain. How many more bugs will testing uncover? Your confidence about the time left to launch is now decreasing, and you have to go back to your boss or client and ask for additional time.</p>
<p>The Cone of Uncertainty captures risk at the front end of a project very well, but it doesn&#8217;t capture the risk and uncertainty at the back end of a project.</p>
<p>There&#8217;s one other thing that also makes me feel like the Cone of Uncertainty is perhaps a bit simplistic. In my classes, we discussed using the Cone of Uncertainty as a way to educate our bosses and clients about why estimates are inaccurate. The idea was to sketch it out on a napkin or whiteboard, and use it to convince them why you can&#8217;t give them a set estimate up front (&#8221;6 months&#8221;), but instead need to estimate in a range (&#8221;3 &#8211; 9 months&#8221;).</p>
<p>However, I believe the problem is that the Cone of Uncertainty implies that you will converge on a middle point most of the time. While that is not the intention of the cone, it still can appear that way because of the way the cone is drawn. So if your boss wants to be tricky, he can play games with the numbers. If you tell him that a project will take 3-9 months, then he may just translate that to mean 6 months (the midpoint of your range.)</p>
<p>But how often have your range estimates actually converged on the midpoint? I would speculate that most of the time, they actually converge on something above the midpoint. That&#8217;s because our initial reactions are almost always optimistic, so as we learn more about the project&#8217;s complexity which we had not originally anticipated, then we are likely to settle on a point higher in our initial range estimate.</p>
<p>So I would further suggest that it&#8217;s better to draw the cone as not converging on a midpoint. At some point in time, your estimates are likely to converge on an estimate that is higher than your original midpoint. This leads me to my humbly suggested variation of the cone of uncertainty, which I like to call &#8220;The Wormhole of Reality.&#8221;</p>
<p><img class="alignnone size-full wp-image-566" title="WormholeOfReality" src="http://www.opensourceconnections.com/wp-content/uploads/2009/11/WormholeOfReality.jpg" alt="WormholeOfReality" width="472" height="269"/><br />
<br clear="left"/></p>
<p>Why the wormhole of reality? When the cone is redrawn like I&#8217;ve done above, it just looks more like a wormhole than a cone. I&#8217;m referring to the <a rel="nofollow" target="_blank" href="http://en.wikipedia.org/wiki/Wormhole">wormholes</a> of physics and astronomy, where it is a shortcut through space and time. There&#8217;s no correlation between the meanings of wormholes in space and my estimation wormhole, it&#8217;s just that they look similar. Plus I think it&#8217;s a cool name.</p>
<p>But more importantly, how do we avoid getting sucked into &#8220;The Wormhole of Reality&#8221;? If the Cone of Uncertainty is ideally the way we want our estimates to work, then we want to avoid the &#8220;fuzzy back end&#8221; of a project. As I already suggested, the fuzzy back end is driven by continual bug reports that seem like they may never end. Here are some tips to try and close out your projects more predictably:</p>
<ul>
<li>Use test driven development to write your unit tests early.</li>
<li>Use browser based automated testing tools like Selenium to automate user level testing.</li>
<li>Keep your continuous integration server happy and well-fed with frequent code check ins, so it can feed you bug information earlier rather than later.</li>
<li>Engage users in your system testing early on. Make sure that you deliver incremental releases of your code, at least to internal users and testers, well before the final weeks of your project.</li>
<li>Engage customers in those incremental releases too. If your internal users are not an accurate representation of external users to your code, then identify some beta customers who would be willing to try out future versions of your product.</li>
<li>Consider incorporating regular user-experience testing with beta releases of your product, on a feature by feature basis. This is another way to get additional feedback about the code you are going to deploy.</li>
<li>Use agile methodologies to drive all of the above recommendations.</li>
</ul>
<p>While the &#8220;Cone of Uncertainty&#8221; is an easy way to explain to managers and clients how to estimate software development, too often we fall into development traps and end up in dangerous territory like &#8220;The Wormhole of Reality.&#8221; But by following best practices, and clearly communicating to customers the risk at the front and back end of a project, you will be more likely to avoid these pitfalls and deliver your software on time, on scope, and on budget.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/thB1k-wpiXs" height="1" width="1"/>]]></content:encoded>
         <category>Uncategorized</category>
      <feedburner:origLink>http://www.opensourceconnections.com/2009/11/04/estimation-the-cone-of-uncertainty-vs-the-wormhole-of-reality/</feedburner:origLink></item>
      <item>
         <title>Efficiency is the enemy of effectiveness</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/p5MZNTWuQyo/</link>
         <description>Dan North gave a very inspiring talk at the Oresund Developer conference today, titled Our obsession with efficiency. His presentation focused on perceptions of efficiency and pitfalls of applying wrong efficiency models to software development. efficiency. Most efficiency is measured as budget/revenue, effort, time or activity and improvement efforts focus on these things, but according [...]</description>
         <author>gojko</author>
         <guid isPermaLink="false">http://gojko.net/?p=1375</guid>
         <pubDate>Wed, 04 Nov 2009 06:07:24 -0800</pubDate>
         <content:encoded><![CDATA[<p><a rel="nofollow" target="_blank" href="http://dannorth.net">Dan North</a> gave a very inspiring talk at the <a rel="nofollow">Oresund Developer conference</a> today, titled <i>Our obsession with efficiency</i>. His presentation focused on perceptions of efficiency and pitfalls of applying wrong efficiency models to software development. efficiency. Most efficiency is measured as budget/revenue, effort, time or activity and improvement efforts focus on these things, but according to North this is wrong.<span id="more-1375"></span></p>
<p>&#8220;We get what we measure&#8221;, said he, adding that the system is going to game the metrics. &#8220;Does finding a lot of bugs really mean that you have good testers, or does it mean that you have crap code?&#8221;, asked North. He also mentioned several examples of how people game the system in software development, including commenting out failing tests to increase test pass rates and generating tests without assertions to increase test coverage. Improving the efficiency in these parts leads to inefficiencies on the global level. &#8220;When you focus on efficiency of a part, you lose sight of the big picture. [...] Efficiency is the enemy of effectiveness.&#8221;, said North. </p>
<p>Likewise, things that seem very inefficient can produce great effect on the global scale. As some examples of that, North mentioned cross-functional teams, pair programming, parallel spikes and the theory of constraints. Using a less controversial topic, he said that experimentation and innovation are very inefficient if considered on their own because they lead to lots of work that will necessarily be thrown away, but the global results of that are very effective. </p>
<p>North suggested that teams shouldn&#8217;t care about effort, but about the effect. Functional points, velocity, man hours and similar are easy to game and can lead to local optimisations that hurt the big picture. It is crucial to measure the correct thing and North suggests measuring cycle time for end-to-end customer satisfaction or cost of the end-to-end process, including opportunity costs and factoring in time. </p>
<p>So how can we improve the effectiveness? North suggests these pointers:</p>
<ul>
<li>Understand that you&#8217;re working in a system, and that it is likely that there is a system above that system and a system above that one</li>
<li>Identify the goal of that system &#8211; sometimes it&#8217;s just its own survival</li>
<li>Step outside to observe the effects &#8211; how well does its goal align with yours?</li>
<li>Think about what&#8217;s stopping the system from giving you what you want, and improve that.</li>
</ul>
<p><i>I&#8217;ll be posting many more articles on <a rel="nofollow">Oredev</a> in the next few days. Subscribe to my <a rel="nofollow">rss reed</a> to get notified about updates</i></p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/p5MZNTWuQyo" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://gojko.net/2009/11/04/efficiency-is-the-enemy-of-effectiveness/</feedburner:origLink></item>
      <item>
         <title>Respect the Tests</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/YvLiVjfthTE/</link>
         <description>Last month I had the great pleasure to participate in Agile Testing Days. I did a tutorial on using the Agile Testing Quadrants for test planning, and a keynote on 7 key success factors for agile testing success. More importantly, I got to attend a lot of great sessions by leading agile testing practitioners.
There were [...]</description>
         <author>admin</author>
         <guid isPermaLink="false">http://lisacrispin.com/wordpress/?p=327</guid>
         <pubDate>Tue, 03 Nov 2009 13:19:07 -0800</pubDate>
         <content:encoded><![CDATA[<p><span style="color:#333399;">Last month I had the great pleasure to participate in Agile Testing Days. I did a tutorial on using the Agile Testing Quadrants for test planning, and a keynote on 7 key success factors for agile testing success. More importantly, I got to attend a lot of great sessions by leading agile testing practitioners.</span></p>
<p><span style="color:#333399;">There were so many good sessions and I&#8217;ll only mention a few here. Mark your calendars for next year&#8217;s Agile testing Days, Oct. 4 - 6.</span></p>
<p><span style="color:#333399;">My slogan after this conference comes from Dave Evans (and from Mike Scott - not sure which one of them coined the phrase but they both talked about it): Respect the Tests. More about that in a minute.</span></p>
<p><span style="color:#333399;"><a rel="nofollow" target="_blank" href="http://www.testobsessed.com">Elisabeth Hendrickson</a> always inspires me, and her keynote didn&#8217;t let me down. I&#8217;ve heard her definition of agile before, but it bears repeating: Delivering value in the form of releasable software at frequent, regular intervals at a sustainable pace, while adapting ot the changing needs of business. She quoted <a rel="nofollow" target="_blank" href="http://poppendieck.com">Mary Poppendieck</a> as saying, if you want to go very fast, you have to be very disciplined. Sustainable pace means that we keep technical debt down so that the code doesn&#8217;t impede us.</span></p>
<p><span style="color:#333399;">Elisabeth presented her four sources of technical risk: Ambiguity, assumptions, dependencies and capacity, and her 7 key testing practices: TDD, ATDD, Exploratory Testing, Automated System Tests, Collective Test Ownership, CI, and one more that I think is automated unit tests (I can&#8217;t read my notes!)</span></p>
<p><span style="color:#333399;">Elisabeth also quoted Tobias Mayer, who refers to the Product Owner as the Voice of the What, and the dev team as the Tribe of the How. I like this, but I take issue with it a bit. The Poppendiecks have influenced me to experiment with having the dev team learn the business inside out, so the dev team itself can help the business prioritize and even think of features. This worked well for my team at ePlan, and I have to agree that funneling all the business requirements through the Product Owner has a lot of drawbacks.</span></p>
<p><span style="color:#333399;">What was new to me in this talk was something that several of us had talked about a night or two before, the idea of Collective Test Ownership. This ties in with the Whole Team Approach. Everyone on the team takes responsibility for quality, testing, and test automation.</span></p>
<p><span style="color:#333399;">Another great session, again from someone whose work I&#8217;m familiar with, was <a rel="nofollow" target="_blank" href="http://www.computerworlduk.com/toolbox/software-quality-testing/blogs/index.cfm?blogid=20">David Evans</a>&#8216; talk. One big takeaway for me was this: If a test is worth writing, it&#8217;s worth automating, and it must always pass in the future. I often see teams that ignore failures in their CI tests because &#8220;We have to get these new stories out, this is the PO&#8217;s priority.&#8221; So the PO doesn&#8217;t care whether what she prioritized in previous sprints still works or not? When the CI breaks, the team should stop the line and get it green.</span></p>
<p><span style="color:#333399;">Dave pointed out that if all tests pass, you don&#8217;t need extra metrics. Defects are evidence of missing tests. So don&#8217;t call it a defect - call it a failing test, write the failing test and fix it right away. If the customer really doesn&#8217;t want it fixed now, write a story for later.</span></p>
<p><span style="color:#333399;">Dave recommend fixing time and quality, but don&#8217;t fix functional scope. If time is running out, thin the requirements. It&#8217;s not like leaving a wheel off or leaving out the engine. <strong>Respect the tests</strong> - any test worth writing is worth running all the time.</span></p>
<p><span style="color:#333399;">Dave presented his Agile Quality Framework. I won&#8217;t go into all the details, but one of my favorite parts is applying <strong>balloon patterns</strong>. An empty balloon is still a balloon, but if you don&#8217;t have the rubber outside, it&#8217;s hard to have the air and then add the rubber later. Do the rubber first - the CI, the test framework.</span></p>
<p><span style="color:#333399;">Mike Scott elaborated on the balloon pattern in his demo of <a rel="nofollow" target="_blank" href="http://code.google.com/p/testifywizard/">Testify Wizard</a>. In one hour, Mike went from zero to a full CI process, including the project two continuous builds, one running unit tests, and one running FitNesse tests. It even generated code coverage reports! I think he did this with both Java and .Net during the same session. He did this with a couple of pushes of the button,some minor configuration and a wave of his crutch.</span></p>
<p><span style="color:#333399;">This shows how easy it is to respect the tests. It&#8217;s not that hard to build a framework to integrate our code and run our automated tests so that we get quick feedback all the time.</span></p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/YvLiVjfthTE" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://lisacrispin.com/wordpress/2009/11/03/respect-the-tests/</feedburner:origLink></item>
      <item>
         <title>Links for November 3</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/6FIzsHHhxDg/</link>
         <description>The Build Doctor is now running a new version of Wordpress, Thesis and some other plugins, on a new VPS. I have plans to make the blog more useful now that it&amp;#8217;s not running an ancient version of Wordpress. On the positive side of things I was very impressed that none of the vulnerabilities hit [...] Related posts:&lt;ol&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href='http://www.build-doctor.com/2009/01/19/links-for-2009-01-18/' title='Permanent Link: links for 2009-01-18'&gt;links for 2009-01-18&lt;/a&gt; &lt;small&gt; Sonatype&lt;/small&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href='http://www.build-doctor.com/2009/02/01/links-for-2009-01-31/' title='Permanent Link: links for 2009-01-31'&gt;links for 2009-01-31&lt;/a&gt; &lt;small&gt; A Univer&lt;/small&gt;&lt;/li&gt;&lt;li&gt;&lt;a rel="nofollow" target="_blank" href='http://www.build-doctor.com/2008/12/25/links-for-2008-12-24/' title='Permanent Link: links for 2008-12-24'&gt;links for 2008-12-24&lt;/a&gt; &lt;small&gt; collect &lt;/small&gt;&lt;/li&gt;&lt;/ol&gt; Related posts brought to you by &lt;a rel="nofollow" target="_blank" href='http://mitcho.com/code/yarpp/'&gt;Yet Another Related Posts Plugin&lt;/a&gt;.</description>
         <author>admin</author>
         <guid isPermaLink="false">http://www.build-doctor.com/?p=1053</guid>
         <pubDate>Tue, 03 Nov 2009 05:29:13 -0800</pubDate>
         <content:encoded><![CDATA[<p></p><div class="tweetmeme_button" style="float:right;margin-left:10px;"><a rel="nofollow" target="_blank" href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.build-doctor.com%2F2009%2F11%2F03%2Flinks-for-november-3%2F"><img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.build-doctor.com%2F2009%2F11%2F03%2Flinks-for-november-3%2F" height="61" width="51"/></a></div><p>The Build Doctor is now running a new version of Wordpress, Thesis and some other plugins, on a new VPS. I have plans to make the blog more useful now that it&#8217;s not running an ancient version of Wordpress. On the positive side of things I was very impressed that none of the vulnerabilities hit the blog. Having your entire Wordpress install owned by the root user helps, certainly.</p>
<p>Anyway, I&#8217;ll be pretty busy for the first part of November. Until I manage to get some of my devopsdays notes up, here&#8217;s some links to keep you going:</p>
<ul>
<li>The Ship&#8217;s Blog fires a <a rel="nofollow" target="_blank" href="http://tapestryjava.blogspot.com/2009/10/maven-throwing-out-bath-water-keeping.html">shot across Maven&#8217;s bows</a>. The Sonatype guys respond with <a rel="nofollow" target="_blank" href="http://www.sonatype.com/people/2009/11/maven-howard-how-to-execute-the-perfect-oss-drive-by-shooting/">all cannons blazing</a>.</li>
<li>There&#8217;s yet <a rel="nofollow" target="_blank" href="http://www.diegocarrion.com/2009/10/30/really-easy-continuous-integration-with-signal/">another</a> Ruby CI server. Looks better than some of the alternatives.</li>
<li>Erik <a rel="nofollow" target="_blank" href="http://erik.doernenburg.com/2009/11/making-build-pain-visible/">visualizes</a> build pain</li>
<li>Damon Edwards is working on a Creative Commons licensed <a rel="nofollow" target="_blank" href="http://dev2ops.org/blog/2009/11/2/6-months-in-fully-automated-provisioning-revisited.html">whitepaper on automated provisioning</a>.</li>
</ul> <p>Related posts:<ol><li><a rel="nofollow" target="_blank" href='http://www.build-doctor.com/2009/01/19/links-for-2009-01-18/' title='Permanent Link: links for 2009-01-18'>links for 2009-01-18</a> <small> Sonatype</small></li><li><a rel="nofollow" target="_blank" href='http://www.build-doctor.com/2009/02/01/links-for-2009-01-31/' title='Permanent Link: links for 2009-01-31'>links for 2009-01-31</a> <small> A Univer</small></li><li><a rel="nofollow" target="_blank" href='http://www.build-doctor.com/2008/12/25/links-for-2008-12-24/' title='Permanent Link: links for 2008-12-24'>links for 2008-12-24</a> <small> collect </small></li></ol></p>
<p>Related posts brought to you by <a rel="nofollow" target="_blank" href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p><div class="feedflare">
<a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheBuildDoctor?a=rAs89IRsUD4:Ye3rNGDtjyw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheBuildDoctor?d=yIl2AUoC8zA" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheBuildDoctor?a=rAs89IRsUD4:Ye3rNGDtjyw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TheBuildDoctor?i=rAs89IRsUD4:Ye3rNGDtjyw:F7zBnMyn0Lo" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheBuildDoctor?a=rAs89IRsUD4:Ye3rNGDtjyw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TheBuildDoctor?i=rAs89IRsUD4:Ye3rNGDtjyw:V_sGLiPBpWU" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheBuildDoctor?a=rAs89IRsUD4:Ye3rNGDtjyw:ZWQ2tSG2k2o"><img src="http://feeds.feedburner.com/~ff/TheBuildDoctor?d=ZWQ2tSG2k2o" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheBuildDoctor?a=rAs89IRsUD4:Ye3rNGDtjyw:I9og5sOYxJI"><img src="http://feeds.feedburner.com/~ff/TheBuildDoctor?d=I9og5sOYxJI" border="0"></a> <a rel="nofollow" target="_blank" href="http://feeds.feedburner.com/~ff/TheBuildDoctor?a=rAs89IRsUD4:Ye3rNGDtjyw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/TheBuildDoctor?i=rAs89IRsUD4:Ye3rNGDtjyw:gIN9vFwOqvQ" border="0"></a>
</div><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/6FIzsHHhxDg" height="1" width="1"/>]]></content:encoded>
         <category>links</category>
      <feedburner:origLink>http://feedproxy.google.com/~r/TheBuildDoctor/~3/rAs89IRsUD4/</feedburner:origLink></item>
      <item>
         <title>First impressions of StAX</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/lubqZx50uoQ/</link>
         <description>I have recently been working on this issue, converting some of Pulses&amp;#8216; XML processing from using DOM to using StAX. Whilst the DOM API is a simpler to work with, it is not so memory friendly and was becoming a problem for some of our customers.
I chose to try StAX rather than SAX because [...]</description>
         <author>Daniel</author>
         <guid isPermaLink="false">http://www.alittlemadness.com/?p=391</guid>
         <pubDate>Wed, 28 Oct 2009 22:54:27 -0700</pubDate>
         <content:encoded><![CDATA[<p>I have recently been working on this <a rel="nofollow" target="_blank" href="http://jira.zutubi.com/browse/CIB-2090">issue</a>, converting some of <a rel="nofollow" target="_blank" href="http://zutubi.com/products/pulse">Pulses</a>&#8216; XML processing from using DOM to using StAX. Whilst the <a rel="nofollow" target="_blank" href="http://java.sun.com/j2se/1.4.2/docs/api/org/w3c/dom/package-summary.html">DOM API</a> is a simpler to work with, it is not so memory friendly and was becoming a problem for some of our <a rel="nofollow" target="_blank" href="http://zutubi.com/products/pulse/testimonials/">customers</a>.</p>
<p>I chose to try <a rel="nofollow" target="_blank" href="http://stax.codehaus.org/Home">StAX</a> rather than <a rel="nofollow" target="_blank" href="http://www.saxproject.org/">SAX</a> because it was developed to be a middle ground between DOM and SAX, having the memory efficiency of a streaming parser like SAX whilst retaining a simpler API like DOM.</p>
<p>A quick note: This is not an exhaustive analysis of the pros and cons of the various XML APIs as this has <a rel="nofollow" target="_blank" href="http://weblogs.java.net/blog/2006/04/24/overview-xml-parsing-java-different-methods-and-libraries">been</a> <a rel="nofollow" target="_blank" href="http://java.sun.com/javaee/5/docs/tutorial/doc/bnbdw.html">done</a> before. Rather, this is a comparison of some of the things I made a mental note of whilst doing the conversion.</p>
<h2>DOM</h2>
<ul>
<li>Works with an in memory tree representation of the XML document, and therefore has high memory requirements for large documents</li>
<li>Easy to use API that allows you to navigate the XML document in whatever way is most appropriate to. You can process a element as often as you like, go forwards and backwards as well as search through the document.</li>
</ul>
<p>This is what our code looked like before the conversion.</p>
<div class="codesnip-container">
<div class="codesnip"><span class="kw2">protected</span> <span class="kw4">void</span> processSuites <span class="br0">&#40;</span><a rel="nofollow" target="_blank" href="http://www.google.com/search?q=allinurl%3AElement+java.sun.com&#038;bntl=1"><span class="kw3">Element</span></a> root<span class="br0">&#41;</span><br />
<span class="br0">&#123;</span>
<p>&nbsp; &nbsp; <a rel="nofollow" target="_blank" href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&#038;bntl=1"><span class="kw3">String</span></a> suiteElement = getConfig<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getSuiteElement</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; Elements suiteElements = root.<span class="me1">getChildElements</span><span class="br0">&#40;</span>suiteElement<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i = <span class="nu0">0</span>; i &lt; suiteElements.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; i++<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; processSuite<span class="br0">&#40;</span>suiteElements.<span class="me1">get</span><span class="br0">&#40;</span>i<span class="br0">&#41;</span>, tests<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Note that using dom is simply manipulating an in memory tree.</p>
<h2>SAX</h2>
<ul>
<li>Implementations manage the state in the form of instance variables. This works well for simple documents, but becomes more difficult to manage as the document gets more complex.</li>
<li>Processing of an element typically occurs when you encounter the elements end tag, as only then is all of the elements content available. Until you reach an end tag, you have no real idea of how far through an element you are.</li>
<li>You only need to respond to elements that are of interest. Ie, when you receive a callback for one of these elements, just do nothing and return.</li>
</ul>
<h2>StAX</h2>
<ul>
<li>Implementations typically manage the state on the execution stack, with a new method call for each element that is encountered. This makes the code pretty easy to read as it is self documenting.</li>
<li>You need to process each and every (unfiltered) tag and event in the xml document. This is rather low level, and without care can lead to confusion and complications.</li>
</ul>
<p>And this is what the code looked like after the conversion:</p>
<div class="codesnip-container">
<div class="codesnip"><span class="kw2">protected</span> <span class="kw4">void</span> processSuites <span class="br0">&#40;</span>XMLStreamReader reader<span class="br0">&#41;</span> <span class="kw2">throws</span> XMLStreamException<br />
<span class="br0">&#123;</span>
<p>&nbsp; &nbsp; expectStartElement<span class="br0">&#40;</span>ELEMENT_SUITES, reader<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; reader.<span class="me1">nextTag</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</p>
<p>&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>reader.<span class="me1">isStartElement</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>isElement<span class="br0">&#40;</span>getConfig<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getSuiteElement</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, reader<span class="br0">&#41;</span><span class="br0">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; processSuite<span class="br0">&#40;</span>reader<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// ignore this element.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nextElement<span class="br0">&#40;</span>reader<span class="br0">&#41;</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; expectEndElement<span class="br0">&#40;</span>ELEMENT_SUITES, reader<span class="br0">&#41;</span>;<br />
<span class="br0">&#125;</span></div>
</div>
<p>My use of StAX is a little more regimented. I begin and end each method with an assertion that I am at the element I expect to be (this has the advantage of documenting the implementation). The rest of the implementation is similar to its DOM counterpart, expect that rather than simply asking for the elements I want to process, I need to loop over all the elements, skipping over those that are not of interest.</p>
<h2>Summary</h2>
<p>Overall, I am happy with the way the conversion has turned out. A couple of things were unexpected. The StAX API did not include any higher level utility functions that allowed you to move around at the element level, only between the end tag of one element and the start tag of the next. The other was that it required a fair amount of effort to write the code such that it was resilient to unexpected data in the reports. Every tag has to be processed after all.</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/lubqZx50uoQ" height="1" width="1"/>]]></content:encoded>
         <category>Technology</category>
      <feedburner:origLink>http://www.alittlemadness.com/2009/10/29/first-impressions-of-stax/</feedburner:origLink></item>
      <item>
         <title>Department of Defense CIO Publishes Open Source Guidance</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/oIOmJrKGEkU/</link>
         <description>&lt;p&gt;In a memorandum dated October 16, 2009, the CIO of the Department of Defense published &lt;a rel="nofollow" title="DoD CIO Open Source Guidance" target="_blank" href="http://powdermonkey.blogs.com/files/2009oss.pdf"&gt;guidance&lt;/a&gt; on the use of open source software within the DoD. The CIO&amp;#8217;s assessment of the perception of open source sums up quite well the obstacles we have seen time and time again:&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.opensourceconnections.com/2009/10/27/department-of-defense-cio-publishes-open-source-guidance/" class="more-link"&gt;Read more on Department of Defense CIO Publishes Open Source Guidance&amp;#8230;&lt;/a&gt;&lt;/p&gt;</description>
         <author>Jason Hull</author>
         <guid isPermaLink="false">http://www.opensourceconnections.com/?p=467</guid>
         <pubDate>Tue, 27 Oct 2009 11:03:42 -0700</pubDate>
         <content:encoded><![CDATA[<p>In a memorandum dated October 16, 2009, the CIO of the Department of Defense published <a rel="nofollow" title="DoD CIO Open Source Guidance" target="_blank" href="http://powdermonkey.blogs.com/files/2009oss.pdf">guidance</a> on the use of open source software within the DoD. The CIO&#8217;s assessment of the perception of open source sums up quite well the obstacles we have seen time and time again:</p>
<p>&#8220;Unfortunately, there have been misconceptions and misinterpretations of the existing laws, policies and regulations that deal with software and apply to OSS, that have hampered effective DoD use and development of OSS.&#8221;</p>
<p>I wonder how long it will take for contracting officers to get the memorandum (so to speak) and to try to find ways around the guidance, spelled out in Attachment 2:</p>
<p>&#8220;In almost all cases, OSS meets the definition of “commercial computer software” and shall be given appropriate statutory preference in accordance with 10 USC 2377 (reference (b)) (see also FAR 2.101(b), 12.000, 12.101 (reference (c)); and DFARS 212.212, and 252.227-7014(a)(1) (reference (d))).&#8221;</p>
<p>We also eagerly await broader acceptance within the DoD information assurance community, but do not expect rapid change, despite the following guidance:</p>
<p>&#8220;DoD Instruction 8500.2, “Information Assurance (IA) Implementation,” (reference (g)) includes an Information Assurance Control, “DCPD-1 Public Domain Software Controls,” which limits the use of “binary or machine-executable public domain software or other software products with limited or no warranty,” on the grounds that these items are difficult or impossible to review, repair, or extend, given that the Government does not have access to the original source code and there is no owner who could make such repairs on behalf of the government. This control should not be interpreted as forbidding the use of OSS, as the source code is available for review, repair and extension by the government and its contractors.&#8221;</p>
<p>In sum, this is good news for those of us who believe that open source has a place in the Department of Defense. However, word spreads slowly in the Government, and I expect that this policy will take many months, if not years, before gaining significant traction in DoD contracting policy. A good place to start would be providing correct links in the policy memo. Clicking on the link currently leads to a 404 error.</p>
<p>Thanks to the <a rel="nofollow" title="Powdermonkey blog" target="_blank" href="http://powdermonkey.blogs.com/powdermonkey/2009/10/department-of-defense-new-guidance-on-open-source-software.html">Powdermonkey blog</a> and <a rel="nofollow" title="Dr. Mark Drapeau's Twitter Profile" target="_blank" href="http://www.twitter.com/cheeky_geeky">Dr. Mark Drapeau</a> for sharing this!</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/oIOmJrKGEkU" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.opensourceconnections.com/2009/10/27/department-of-defense-cio-publishes-open-source-guidance/</feedburner:origLink></item>
      <item>
         <title>James Bach, the bad boy of Testing?</title>
         <link>http://feedproxy.google.com/~r/CitconBlogs/~3/CJLhNddh5XY/</link>
         <description>&lt;p&gt;So, is &lt;a rel="nofollow" target="_blank" href="http://www.satisfice.com/blog/"&gt;James Bach&lt;/a&gt; (&lt;a rel="nofollow" target="_blank" href="http://www.twitter.com/jamesmarcusbach"&gt;@jamesmarcusbach&lt;/a&gt;) the bad boy of testing? &lt;/p&gt;
&lt;p&gt;I flew up to Boston on Monday to lead some workshops on Continuous Integration. I checked into my room at the Hyatt and then went downstairs to see who was around. I ran into a couple of speakers milling about, and eventually joined one of them, and we headed over to the MIT Press bookstore, me to look for my Solr book. I wasn&amp;#8217;t too sure of the name of the other speaker I was with (I asked once, but couldn&amp;#8217;t quite remember what it was&amp;#8230;). So we got to the book shop, I ask my fellow speaker again: James Bach. The name I was familiar with, but couldn&amp;#8217;t quite place it&amp;#8230; I ended up buying &lt;a rel="nofollow" target="_blank" href="http://www.amazon.com/Parentonomics-Economist-Dad-Looks-Parenting/dp/0262012782/ref=sr_1_1?ie=UTF8&amp;#038;s=books&amp;#038;qid=1256239604&amp;#038;sr=8-1"&gt;Parentonomics&lt;/a&gt;, and then we go for coffee.&lt;/p&gt;
&lt;p&gt;&lt;a rel="nofollow" target="_blank" href="http://www.opensourceconnections.com/2009/10/26/james-bach-the-bad-boy-of-testing/" class="more-link"&gt;Read more on James Bach, the bad boy of Testing?&amp;#8230;&lt;/a&gt;&lt;/p&gt;</description>
         <author>Eric Pugh</author>
         <guid isPermaLink="false">http://www.opensourceconnections.com/?p=466</guid>
         <pubDate>Mon, 26 Oct 2009 13:23:51 -0700</pubDate>
         <content:encoded><![CDATA[<p>So, is <a rel="nofollow" target="_blank" href="http://www.satisfice.com/blog/">James Bach</a> (<a rel="nofollow" target="_blank" href="http://www.twitter.com/jamesmarcusbach">@jamesmarcusbach</a>) the bad boy of testing? </p>
<p>I flew up to Boston on Monday to lead some workshops on Continuous Integration. I checked into my room at the Hyatt and then went downstairs to see who was around. I ran into a couple of speakers milling about, and eventually joined one of them, and we headed over to the MIT Press bookstore, me to look for my Solr book. I wasn&#8217;t too sure of the name of the other speaker I was with (I asked once, but couldn&#8217;t quite remember what it was&#8230;). So we got to the book shop, I ask my fellow speaker again: James Bach. The name I was familiar with, but couldn&#8217;t quite place it&#8230; I ended up buying <a rel="nofollow" target="_blank" href="http://www.amazon.com/Parentonomics-Economist-Dad-Looks-Parenting/dp/0262012782/ref=sr_1_1?ie=UTF8&#038;s=books&#038;qid=1256239604&#038;sr=8-1">Parentonomics</a>, and then we go for coffee.</p>
<p>So, over coffee, he asks me about what my topic is, and I gave him the brief summary of my two CI related workshops. Wow.. Little did I realize that I was sitting with the guy who rails against the &#8220;fetish&#8221; that Agile folks have for automated testing! That his entire approach to &#8220;testing&#8221; is to use skilled, motivated folks who do &#8220;sapient testing&#8221;. And I&#8217;m the guy who&#8217;s selling an approach that REQUIRES automated tests! That encourages expanding the use of automated testing!</p>
<p>He actually walked me through a process of talking about how to &#8220;think like a tester&#8221;, and it was really great mini-workshop.. He definitely subscribes to the socratic approach, and believes in his message, I was sweating at the end of it! That chat probably sparked more ideas in less time over that coffee then anything else this week. I also heard a lot of ideas and phrases that were echoed in Michael Bolton&#8217;s keynote later on in the week. Clearly a lot of collaboration between the two!</p>
<p>Probably the biggest idea that James and chatted about was the idea that automated tests really aren&#8217;t automated tests, they are automated checks. They verify that the expected behavior of the code was met. His argument that if you want to do testing, real testing, then computers, automated processes can&#8217;t meet that need, only people can. </p>
<p>Now, I don&#8217;t know if I believe that is completely true, but I am very aware that the &#8220;manual testing&#8221; where long test scripts written as Word documents are executed by human beings by hand are really a waste of human potential. And that those test scripts are really, to use James terms, &#8220;check scripts&#8221; because the people are not using any creativity! In fact, a lot of my interest in CI comes from the idea that people should not do <a rel="nofollow" target="_blank" href="http://www.newtechusa.com/PPI/services.asp#Testing">monkey testing</a>, that machines can do it much better, and my frustation with the perception that testing is a low value activity and can be easily shipped off to low skilled folks.</p>
<p>I think that this shift away from the term &#8220;test&#8221; for automated tests is actually happening in many places. In the Ruby world, we have libraries like Shoulda that are moving from using words like <em>assert</em> to other words like <em>should</em>. A <a rel="nofollow" target="_blank" href="http://www.rubyinside.com/cucumber-the-latest-in-ruby-testing-1342.html">Cucumber</a> test really shows how controlled the space that a test needs to be to work well in an automated fashion:</p>
<blockquote><p>
Scenario: See all vendors<br /> Given I am logged in as a user in the administrator role<br /> And There are 3 vendors<br /> When I go to the manage vendors page<br /> Then I should see the first 3 vendor names
</p></blockquote>
<p>So while I don&#8217;t know if I am bought in on the idea that only people can do &#8220;testing&#8221;, and machines can only do &#8220;checking&#8221;. Tools like <a rel="nofollow" target="_blank" href="http://ruby.sadi.st/Heckle.html">Heckle</a> try to simulate aspects of what a human can do. While not suggesting that we can automate the &#8220;does my website look okay after someone changed the CSS&#8221; type of work today, in the future our automated testing will be more capable then just &#8220;checking&#8221; because we will move beyond the very constrained tests we have today to ones that mimicing the richness of the simulators that Airline Pilots use. Instead of testing the training given to pilots, we&#8217;ll be testing the robustness of software via simulations!</p>
<p>At any rate, James Bach, while taking a rather provocative approach to sharing his ideas, does subscribe to my favorite bullet in the Agile Manifesto: <strong>Individuals and interactions over processes and tools</strong>.</p>
<p>Here is him giving a great presentation with the subversive title of &#8220;<a rel="nofollow" target="_blank" href="http://www.stpcon.com/session-how-to-fake-test-project.html">How to Fake a Project</a>&#8221; that was incredible entertaining, and also quite thought provoking:</p>
<p><a rel="nofollow" target="_blank" href="http://www.flickr.com/photos/27517504@N05/4047081589/" title="James Bach talking about "Faking a Test Plan" by opensourceconnections, on Flickr"><img src="http://farm3.static.flickr.com/2450/4047081589_3c8e0fbb07.jpg" width="500" height="375" alt="James Bach talking about "Faking a Test Plan""/></a></p>
<p><br clear='all'/><br />
What do you think? Automated testing is a fetish of the Agile community?</p><img src="http://feeds.feedburner.com/~r/CitconBlogs/~4/CJLhNddh5XY" height="1" width="1"/>]]></content:encoded>
      <feedburner:origLink>http://www.opensourceconnections.com/2009/10/26/james-bach-the-bad-boy-of-testing/</feedburner:origLink></item>
   </channel>
</rss><!-- fe2.pipes.re3.yahoo.com uncompressed/chunked Sun Nov  8 09:40:00 PST 2009 -->
