<?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>Getting Agile &#187; General</title>
	<atom:link href="http://www.gettingagile.com/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gettingagile.com</link>
	<description>with Sterling Barton</description>
	<lastBuildDate>Mon, 14 Jun 2010 18:18:02 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Focus on Team Communication</title>
		<link>http://www.gettingagile.com/2010/02/03/focus-on-team-communication/</link>
		<comments>http://www.gettingagile.com/2010/02/03/focus-on-team-communication/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 02:21:06 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Agile Leadership]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gettingagile.com/?p=368</guid>
		<description><![CDATA[In the agile community there are some common practices that are either seen as valuable or to be avoided. Two of those practices are estimation using Planning Poker and Sprint Planning task breakdown. The focus for many teams in these practices is on the estimates themselves and how &#8220;accurate&#8221; they are. It has been my [...]]]></description>
			<content:encoded><![CDATA[<p>In the agile community there are some common practices that are either seen as valuable or to be avoided. Two of those practices are estimation using Planning Poker and Sprint Planning task breakdown. The focus for many teams in these practices is on the estimates themselves and how &#8220;accurate&#8221; they are. It has been my experience that accuracy in estimates is not possible and belief in their accuracy leads to wasted effort and failure to meet commitments.</p>
<p><a href="http://www.gettingagile.com/wp-content/uploads/2010/02/poker_cards.jpg"><img class="alignleft size-medium wp-image-369" title="poker_cards" src="http://www.gettingagile.com/wp-content/uploads/2010/02/poker_cards-300x225.jpg" alt="" width="300" height="225" /></a><strong>Planning Poker</strong></p>
<p>Teams often ask &#8220;what if we estimate wrong&#8221;. To me this is reality for any estimation process. By definition we are &#8220;guessing&#8221; (hopefully educated) and therefore our estimates will be wrong. The idea is to be consistent rather than precisely wrong. This allows teams to better predict based upon similar constraints to earlier iteration how much they will be able to deliver in the next iteration. Rather than basing estimates on predictions of the future we are basing them on what we have done in the past.</p>
<p>The use of <a href="http://www.methodsandtools.com/archive/archive.php?id=25p3" target="_blank">&#8220;estimate size; derive duration&#8221;</a> method of estimation helps teams gain knowledge about how much they can deliver in a time-boxed iteration. One technique to generate the estimates of size is <a href="http://www.planningpoker.com/" target="_blank">Planning Poker</a>. Most teams start out attempting to get the estimate exactly &#8220;right&#8221;. I will not advocate that this is bad to do but I do think that teams would find Planning Poker and other exercises for estimating size more valuable if they focused on the communication that occurs. The real magic of Planning Poker is that cross-functional team members and team members with different perspectives are able to share their knowledge with each other and ultimately meld the points of view into an approach for implementing a user story. A focus on communication allows teams to capture important information, constraints, and decisions around a particular user story and better understand as a team what is involved in its delivery.</p>
<p><a href="http://www.gettingagile.com/wp-content/uploads/2010/02/178400_detail.jpg"><img class="alignleft size-medium wp-image-370" title="Task Clips" src="http://www.gettingagile.com/wp-content/uploads/2010/02/178400_detail-300x300.jpg" alt="" width="300" height="300" /></a><strong>Sprint Planning Task Breakdown</strong></p>
<p>When teams come together for the first time in organizations where they have been separated by functional role or even teams that haven&#8217;t worked together before, the act of breaking down user stories into tasks assists teams with communication. If the Product Backlog describes the &#8220;what&#8221; then the Sprint Backlog describes the &#8220;how&#8221;. Tasks are tools for capturing the &#8220;how&#8221; and makes it visible to the entire team. Instead of team members with different functional roles, team members describe how they will contribute to the potentially shippable product increment delivered by the end of the iteration. Instead of focusing on the perfect tasks and estimates on those tasks, I believe it is more valuable to have a shared understanding of how the team will deliver the user story. Tasks are just the tool to make visible that shared understanding and we should focus on the communication between team members and capturing the important details that enable successful delivery.</p>
<p>Now, tasks are not the only way to get a shared understanding, of course. I have been on teams where we would talk, draw a little picture on a post-it note, and then agree with as a team that was enough to plan with. This was with an extremely experienced Scrum team that worked together or around each other for a long time. When a new team comes together in an organization that has not created user stories before they have difficulty getting &#8220;right-sized&#8221; user stories for the team. Most of the time there seems to be some difficulty breaking them down items into small enough items for the team to deliver within 1/2 of a sprint&#8217;s length. As the team does task breakdown they are better able to capture details that help them work out how the whole team will contribute to the user story. This leads to recognition of user stories that are too big or even those that are ambiguous.</p>
<p>New teams using task breakdown in their Sprint Planning meetings should focus on how they communicate with each other and make sure that each member of the team is heard. This will lead to a better shared understanding of how they will work together and deliver successfully.</p>
<p><strong>Focus on Team Communication</strong></p>
<p>Here are some things that teams can do to help their communication in planning:</p>
<ul>
<li>Make sure all team members are heard so they will feel compelled to participate</li>
<li>Always discuss reasons why you, as a team member, are not satisfied with the plan</li>
<li>Don&#8217;t push your estimate or task breakdown suggestions on the entire team</li>
<li>Cross-pollinate within your team across functional role boundaries to better understand other roles</li>
<li>Use past experiences and story-telling to describe reasons for a particular position</li>
<li>Use whiteboards and design techniques to visually portray ideas</li>
</ul>
<p>Hopefully a focus on team communication will help make estimating and task breakdown a more valuable experience for your team. Please share things that your teams have done to help focus more on communication to increase shared understanding by leaving comments on this blog entry. I look forward to hearing from you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2010/02/03/focus-on-team-communication/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Extreme Feedback from My Tools &#8211; Part 1: Maven 2 Configuration</title>
		<link>http://www.gettingagile.com/2009/12/11/extreme-feedback-from-my-tools-part-1-maven-2-configuration/</link>
		<comments>http://www.gettingagile.com/2009/12/11/extreme-feedback-from-my-tools-part-1-maven-2-configuration/#comments</comments>
		<pubDate>Sat, 12 Dec 2009 02:53:34 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gettingagile.com/?p=354</guid>
		<description><![CDATA[
For many years now, it has been a goal of mine to get feedback as early as possible when developing software. Past blog entries here and here have discussed how we can approach increased feedback. A tweet from Jason Gorman mentioned his list of tools that provide continuous feedback on his code and design: &#8220;Emma, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><span><span><img class="aligncenter size-medium wp-image-358" style="float: left;" title="Feedback" src="http://www.gettingagile.com/wp-content/uploads/2009/12/Feedback-300x300.jpg" alt="Feedback" width="180" height="180" /></span></span></p>
<p>For many years now, it has been a goal of mine to get feedback as early as possible when developing software. Past blog entries <a href="http://www.gettingagile.com/2007/11/13/running-all-unit-tests-when-saving-a-file-in-eclipse/" target="_blank">here</a> and <a href="http://www.gettingagile.com/2008/12/13/executable-design-a-new-name-for-tdd/" target="_blank">here</a> have discussed how we can approach increased feedback. A tweet from <a href="http://twitter.com/jasongorman/" target="_blank">Jason Gorman</a> mentioned his list of tools that provide continuous feedback on his code and design: <span><span>&#8220;Emma, Jester, XDepend, Checkstyle and Simian&#8221;. This inspired me to write a post on how I approach setting up project reporting and my IDE to provide increased feedback. This article will be the first part of a series on &#8220;Extreme Feedback from My Tools&#8221; and will focus on Maven 2 configuration and reporting.<br />
</span></span></p>
<p style="text-align: center;"><span><span><img class="aligncenter" title="Build by Maven" src="http://maven.apache.org/images/logos/maven-feather.png" alt="" width="90" height="30" /><br />
</span></span></p>
<p><span><span>Maven is my tool of choice for managing builds, versioning, deployment, and test execution. Although, it wouldn&#8217;t hurt my feelings if teams I worked on used Ant, make, or other scripting methods to manage these, but it tends to be more difficult overall. For those who are alright with using Maven, here is a look at different aspects of a typical POM file configuration I use:</span></span></p>
<pre class="code">&lt;build&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
      &lt;configuration&gt;
        &lt;source&gt;1.5&lt;/source&gt;
        &lt;target&gt;1.5&lt;/target&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
      &lt;artifactId&gt;maven-surefire-plugin&lt;/artifactId&gt;
      &lt;version&gt;2.4.2&lt;/version&gt;
      &lt;configuration&gt;
        &lt;includes&gt;
          &lt;include&gt;**/When*.java&lt;/include&gt;
        &lt;/includes&gt;
        &lt;redirectTestOutputToFile&gt;true&lt;/redirectTestOutputToFile&gt;
        &lt;trimStackTrace&gt;false&lt;/trimStackTrace&gt;
        &lt;useSystemClassLoader&gt;false&lt;/useSystemClassLoader&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
  &lt;/plugins&gt;
&lt;/build&gt;</pre>
<p><span>The above portion of the POM file are configurations for all Maven execution scenarios for this project. The first plugin, &#8220;maven-compiler-plugin&#8221;, sets the expected source code compliance and the JVM version that the compiled binary will target. The &#8220;maven-surefire-plugin&#8221; executes tests such as those developed with JUnit and TestNG. Because my approach is to take a more BDD-like naming convention and style for test cases, this POM is configured to execute unit tests that start with the word &#8220;When&#8221; in the test source code directory, by default this is &#8220;src/test/java&#8221;. Having the full stack trace from test execution issues is essential to effective debugging of the automated build and tests, therefore the configuration makes sure that they are not trimmed in the output file. Finally, some code that I have created in the recent past needed to find classes on the Maven classpath and through much debugging I found out that the system class loader was used by default with surefire so I now make sure to set it up to use the Maven class loader instead.<br />
</span></p>
<pre class="code">&lt;reporting&gt;
  &lt;plugins&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
      &lt;artifactId&gt;maven-pmd-plugin&lt;/artifactId&gt;
      &lt;version&gt;2.3&lt;/version&gt;
      &lt;configuration&gt;
        &lt;linkXref&gt;true&lt;/linkXref&gt;
        &lt;targetJdk&gt;1.5&lt;/targetJdk&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
      &lt;artifactId&gt;cobertura-maven-plugin&lt;/artifactId&gt;
      &lt;version&gt;2.4&lt;/version&gt;
      &lt;configuration&gt;
        &lt;formats&gt;
          &lt;format&gt;html&lt;/format&gt;
          &lt;format&gt;xml&lt;/format&gt;
        &lt;/formats&gt;
      &lt;/configuration&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
      &lt;artifactId&gt;jdepend-maven-plugin&lt;/artifactId&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
      &lt;artifactId&gt;dashboard-maven-plugin&lt;/artifactId&gt;
    &lt;/plugin&gt;
    &lt;plugin&gt;
      &lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;
      &lt;artifactId&gt;findbugs-maven-plugin&lt;/artifactId&gt;
      &lt;version&gt;2.2&lt;/version&gt;
    &lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/reporting&gt;</pre>
<p><span>Reports are effective at giving the team indicators of potential problems in their project artifacts early. Teams tend to find that trends are more valuable then specific targets in the generated reports. If the code coverage is going down we ask ourselves &#8220;why?&#8221;. If more defects are being detected by source code analysis tools then we can look at how we can change our approach to reduce the frequency of these issues. The 5 plugins used in this POM report on different perspectives of the software artifacts and can help to find problematic trends early.</span></p>
<ul>
<li><span><a href="http://pmd.sourceforge.net/" target="_blank">PMD</a> is for source code analysis<br />
</span></li>
<li><span><a href="http://cobertura.sourceforge.net/" target="_blank">Cobertura</a> is for code coverage</span></li>
<li><span><a href="http://clarkware.com/software/JDepend.html" target="_blank">JDepend</a> is a package dependency analyzer<br />
</span></li>
<li><span><a href="http://findbugs.sourceforge.net/" target="_blank">FindBugs</a> detects bugs in code</span></li>
<li><span>The <a href="http://mojo.codehaus.org/dashboard-maven-plugin/" target="_blank">dashboard plugin</a> shows the results of the reports in a single view</span></li>
</ul>
<p>When the continuous integration server successfully executes the build and automated tests, the Maven reporting command is executed to generate these reports. This happens automatically and is shown on our video monitor &#8220;information radiator&#8221; in the team area.</p>
<pre class="code">&lt;dependencies&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;junit&lt;/groupId&gt;
    &lt;artifactId&gt;junit&lt;/artifactId&gt;
    &lt;version&gt;4.7&lt;/version&gt;
    &lt;scope&gt;test&lt;/scope&gt;
  &lt;/dependency&gt;
  &lt;dependency&gt;
    &lt;groupId&gt;org.mockito&lt;/groupId&gt;
    &lt;artifactId&gt;mockito-all&lt;/artifactId&gt;
    &lt;version&gt;1.8.0&lt;/version&gt;
  &lt;/dependency&gt;
&lt;/dependencies&gt;</pre>
<p><span>We make sure to update the POM to use <a href="http://www.junit.org/" target="_blank">JUnit 4</a> so that our team can use annotations and better names for the tests. Also, <a href="http://mockito.org/" target="_blank">Mockito</a> has become my favorite mock objects framework since it stays away from the &#8220;replay&#8221; confusion of other mock frameworks (or their old versions at least) and also has a <a href="http://mockito.googlecode.com/svn/branches/1.8.0/javadoc/org/mockito/BDDMockito.html" target="_blank">BDDMockito</a> class that enables our team to use the given/when/then construction for our tests.</span></p>
<p><span>Once your POM file is configured with these reporting plugins, you can generate the reports by executing the &#8217;site&#8217; life cycle in Maven:</span></p>
<pre class="code">
mvn site
</pre>
<p><span>Part 2 of this series of articles will discuss configuration of an Eclipse IDE environment for Extreme Feedback.<br />
</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/12/11/extreme-feedback-from-my-tools-part-1-maven-2-configuration/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>HOWTO: Maven + StoryTestIQ + Selenium RC</title>
		<link>http://www.gettingagile.com/2009/11/23/howto-maven-storytestiq-selenium-rc/</link>
		<comments>http://www.gettingagile.com/2009/11/23/howto-maven-storytestiq-selenium-rc/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 01:43:57 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gettingagile.com/?p=328</guid>
		<description><![CDATA[StoryTestIQ is an automated acceptance testing tool, which was originally a mashup of 2 existing open source projects, Selenium and FitNesse. StoryTestIQ is many times shortened to STIQ (pronounced &#8220;stick&#8221;) so it rolls off the tongue more easily. STIQ takes the idea of testing inside the browser a la Selenium and enables editing, tagging, and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://storytestiq.sf.net" target="_blank">StoryTestIQ</a> is an automated acceptance testing tool, which was originally a mashup of 2 existing open source projects, Selenium and FitNesse. StoryTestIQ is many times shortened to STIQ (pronounced &#8220;stick&#8221;) so it rolls off the tongue more easily. STIQ takes the idea of testing inside the browser a la Selenium and enables editing, tagging, and multi-table execution through a modified FitNesse underneath the covers. The version control from FitNesse was removed so that the generated wiki files are able to be checked in, without any binaries, alongside the code those tests are executing against. The multi-table execution allows for test components, written in &#8220;selenese&#8221;, to be refactored out of and included in larger test cases. There are many more modifications that the development team, headed by Paul Dupuy, have done to enhance STIQ&#8217;s capabilities beyond running Fit and Selenium tests but this is enough background for now.</p>
<p>During STIQ&#8217;s development, we created a <a href="http://maven.apache.org" target="_blank">Maven 2</a> plugin, imaginatively named maven-stiq-plugin. This plugin did only 1 thing: start up the STIQ server for your project without having to run Java from the command line. In the past couple of days, I have finally had enough time and desire to develop integration of exporting STIQ tests into Selenium RC compliant &#8220;selenese&#8221; so they can also be executed during your Maven integration-test cycle in the 2.2-SNAPSHOT version. So, lets get down to the &#8220;how&#8221;.</p>
<p>First, add the STIQ Maven 2 repository to your POM (pom.xml file for your project) as shown below: (NOTE: updated with correction on URL from original posting)</p>
<pre style="border-style: dashed; border-width: 1px; padding: 2px; overflow: auto; width: 95%; background-color: lightgray;">&lt;repositories&gt;
...
  &lt;repository&gt;
     &lt;id&gt;STIQ Sourceforge&lt;/id&gt;
     &lt;url&gt;https://storytestiq.svn.sourceforge.net/svnroot/storytestiq/trunk/www/maven2/&lt;/url&gt;
  &lt;/repository&gt;
&lt;/repositories&gt;</pre>
<p>We, also, must put the STIQ Maven 2 repository into our plugin repositories within the POM because so that we can find the maven-stiq-plugin to execute during the integration-test cycles: (NOTE: updated with correction on URL from original posting)</p>
<pre style="border-style: dashed; border-width: 1px; padding: 2px; overflow: auto; width: 95%; background-color: lightgray;">&lt;pluginRepositories&gt;
...
  &lt;pluginRepository&gt;
     &lt;id&gt;STIQ Plugins Sourceforge&lt;/id&gt;
     &lt;url&gt;https://storytestiq.svn.sourceforge.net/svnroot/storytestiq/trunk/www/maven2/&lt;/url&gt;
  &lt;/pluginRepository&gt;
&lt;/pluginRepositories&gt;</pre>
<p>Next, we will put in the maven-stiq-plugin configuration.</p>
<pre style="border-style: dashed; border-width: 1px; padding: 2px; overflow: auto; width: 95%; background-color: lightgray;">&lt;plugin&gt;
 &lt;groupId&gt;net.sourceforge.storytestiq&lt;/groupId&gt;
 &lt;artifactId&gt;maven-stiq-plugin&lt;/artifactId&gt;
 &lt;version&gt;2.2-SNAPSHOT&lt;/version&gt;
 &lt;executions&gt;
   &lt;execution&gt;
   &lt;id&gt;export&lt;/id&gt;
   &lt;phase&gt;pre-integration-test&lt;/phase&gt;
   &lt;goals&gt;
     &lt;goal&gt;export&lt;/goal&gt;
   &lt;/goals&gt;
   &lt;configuration&gt;
     &lt;pageRootPath&gt;repository&lt;/pageRootPath&gt;
     &lt;suiteWikiPagePath&gt;ProjectRoot.StoryTests&lt;/suiteWikiPagePath&gt;
   &lt;/configuration&gt;
 &lt;/execution&gt;
 &lt;execution&gt;
   &lt;id&gt;exec&lt;/id&gt;
   &lt;phase&gt;integration-test&lt;/phase&gt;
   &lt;goals&gt;
     &lt;goal&gt;exec&lt;/goal&gt;
   &lt;/goals&gt;
   &lt;configuration&gt;
     &lt;userExtensions&gt;src/main/resources/user-extensions.js&lt;/userExtensions&gt;
     &lt;browserType&gt;*firefox&lt;/browserType&gt;
     &lt;suiteFile&gt;target/stiq/ProjectRoot.StoryTests.html&lt;/suiteFile&gt;
   &lt;/configuration&gt;
   &lt;/execution&gt;
 &lt;/executions&gt;
&lt;/plugin&gt;</pre>
<p>Now, to tell you a little bit about what is going on in the above configuration. The &lt;groupId&gt; and &lt;artifactId&gt; elements describe what plugin to grab from the plugin repository and use in the project. In the executions section, we define 2 separate execution elements. The first execution is called &#8220;export&#8221;. This execution will occur during the &#8220;pre-integration-test&#8221; cycle within the full <a href="http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html" target="_blank">Maven 2 build life cycle</a>. The goal, similar to an Ant target, on our maven-stiq-plugin that you will be &#8220;export&#8221;, which is the goal that exports our StoryTestIQ acceptance tests as &#8220;selenese&#8221; to run within the Selenium RC server. The configurations shown above are &lt;pageRootPath&gt;, which is the directory located below your top-level project directory where the StoryTestIQ tests are located, and &lt;suiteWikiPagePath&gt;, which is a wiki page location for the top-level suite including all of the tests to export. If you don&#8217;t already have STIQ tests, please go to <a href="http://storytestiq.sf.net" target="_blank">http://storytestiq.sf.net</a> to find out how to get started.</p>
<p>The second execution element is called &#8220;exec&#8221;. This execution will run during the &#8220;integration-test&#8221; cycle in the Maven build life cycle and will execute the exported tests using Selenium RC server. The configurations for this goal are &lt;userExtensions&gt;, which is where any new selenese actions are defined specific to your project, &lt;browserType&gt;, which is the web browser to execute the tests within, and &lt;suiteFile&gt;, which is where the exported selenese tests were generated during the &#8220;export&#8221; goal execution. As a convention, the generated selenese file will be located under the &#8220;target/stiq&#8221; directory by default with the name of the file as &lt;suiteWikiPagePath&gt;.html.</p>
<p>Now you can run the usual &#8216;install&#8217; command in your project&#8217;s top-level directory:</p>
<pre style="border-style: dashed; border-width: 1px; padding: 2px; overflow: auto; width: 95%; background-color: lightgray;">mvn install</pre>
<p>This should compile and execute all of your unit tests then during the integration-test phase it will run the maven-stiq-plugin goals, &#8220;export&#8221; and &#8220;exec&#8221; in that order. During the maven-stiq-plugin &#8220;exec&#8221; goal execution, the web browser will open up in the background and you will see the STIQ tests run. After the tests have executed, the web browser will close and the Maven build life cycle will complete.</p>
<blockquote><p>NOTE: If you are having trouble with &#8220;*firefox&#8221; as &lt;browserType&gt;, then you might be seeing a current bug with Selenium RC server version 1.1.1. An upcoming release version will include a fix and we will update the dependency once we see the update. For now, the fix is to go back to Firefox version 3.5.3 or switch to using a different browser as listed <a href="http://wiki.openqa.org/display/SRC/Specifications+for+Selenium+Remote+Control+Client+Driver+Protocol#SpecificationsforSeleniumRemoteControlClientDriverProtocol-5.3.3.1SupportedSpecialBrowserStrings%28RECOMMENDED%29" target="_blank">here</a> on the Selenium RC documentation.</p></blockquote>
<p>There is still much more to do with the plugin before getting to a release version of 2.2. Please comment on this blog post with any suggestions or issues that you have with the plugin and it&#8217;s configuration. If you are interested, do a search on StoryTestIQ within this blog to find out more about using StoryTestIQ or visit the main project page <a href="http://storytestiq.sf.net" target="_blank">http://storytestiq.sf.net</a>. Thank you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/11/23/howto-maven-storytestiq-selenium-rc/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Slides from Managing Software Debt Talk at PNSQC 2009</title>
		<link>http://www.gettingagile.com/2009/10/27/slides-from-managing-software-debt-talk-at-pnsqc-2009/</link>
		<comments>http://www.gettingagile.com/2009/10/27/slides-from-managing-software-debt-talk-at-pnsqc-2009/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 22:00:28 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[DotNet]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gettingagile.com/?p=316</guid>
		<description><![CDATA[Tomorrow at 1:30pm I will be discussing my paper published by the Pacific Northwest Software Quality Conference 2009 in Portland, OR on &#8220;Managing Software Debt: Continued Delivery of High Value as Systems Age&#8221;. I have uploaded the slides for this presentation and I hope that some of the new content will help those looking for [...]]]></description>
			<content:encoded><![CDATA[<p>Tomorrow at 1:30pm I will be discussing my paper published by the Pacific Northwest Software Quality Conference 2009 in Portland, OR on &#8220;Managing Software Debt: Continued Delivery of High Value as Systems Age&#8221;. I have uploaded the slides for this presentation and I hope that some of the new content will help those looking for ways to manage their software debt more effectively in 5 key areas:</p>
<ul>
<li>Technical debt: tends to focused on the code and reveals itself in duplication and code smells</li>
<li>Quality debt: focuses on QA aspects of software development and shows up in growing bug databases and longer regression test runs</li>
<li>Configuration Management debt: focuses on integration and release management aspects and becomes apparent with extreme branching and inability to recreate environments from scratch</li>
<li>Design debt: focuses on design constructs of components within an application or enterprise infrastructure and is usually difficult to figure out until you are close to a deadline such handling production load</li>
<li>Platform Experience debt: focuses on the people in the software creation process and usually involves extreme specialization and waiting on people to finish their part</li>
</ul>
<p>Without further ado, here are the slides:</p>
<div id="__ss_2357272" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Managing Software Debt - PNSQC 2009" href="http://www.slideshare.net/csterwa/managing-software-debt-pnsqc-2009">Managing Software Debt &#8211; PNSQC 2009</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=managingsoftwaredebt-pnsqc2009-091027083353-phpapp02&amp;stripped_title=managing-software-debt-pnsqc-2009" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=managingsoftwaredebt-pnsqc2009-091027083353-phpapp02&amp;stripped_title=managing-software-debt-pnsqc-2009" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/csterwa">Chris Sterling</a>.</div>
</div>
<p>Also, here is the picture I use to discuss Managing Software Debt from high level in terms of maintaining and enhancing value of software assets:</p>
<p><a href="http://chrissterling.gettingagile.com/wp-content/uploads/2008/10/effectrefactoringtopreserveswvalue.jpg"><img title="Effect of Managing Software Debt to Preserve Software Value" src="http://chrissterling.gettingagile.com/wp-content/uploads/2008/10/effectrefactoringtopreserveswvalue-300x181.jpg" alt="Effect of Managing Software Debt to Preserve Software Value" width="300" height="181" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/10/27/slides-from-managing-software-debt-talk-at-pnsqc-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Brent Barton and Chris Sterling &#8211; Partner to Bring New Product to Market</title>
		<link>http://www.gettingagile.com/2009/10/10/brent-barton-and-chris-sterling-partner-to-bring-new-product-to-market/</link>
		<comments>http://www.gettingagile.com/2009/10/10/brent-barton-and-chris-sterling-partner-to-bring-new-product-to-market/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 14:10:29 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://www.gettingagile.com/?p=300</guid>
		<description><![CDATA[Brent Barton and I have decided to start a new company called Sterling Barton that will focus on delivering products to market. We have just started this venture and in our spare time have begun development for our first product. The following letter explains our move to separate from SolutionsIQ so that we can concentrate [...]]]></description>
			<content:encoded><![CDATA[<p>Brent Barton and I have decided to start a new company called <strong><em>Sterling Barton</em></strong> that will focus on delivering products to market. We have just started this venture and in our spare time have begun development for our first product. The following letter explains our move to separate from SolutionsIQ so that we can concentrate on this new endeavor. It also outlines how we will continue to work with SolutionsIQ in a complimentary into the future.</p>
<blockquote><p>To whom it may concern:</p>
<p>For many years we, Chris Sterling and Brent Barton, have worked for SolutionsIQ.  We both have had an amazing time working and establishing great relationships, strategic business capabilities, and successfully supporting SolutionsIQ clients.  We recently decided to follow a passion of ours: creating products. This means that as of October 16, 2009, we will no longer be employees of SolutionsIQ and will begin work under our new company, Sterling Barton.</p>
<p>It is important to let everyone know that this does not mean the end of our working relationship with SolutionsIQ.  We are working diligently to have a partner agreement that enables both of our companies to fulfill engagements together.  It is our expectation that this will be a strong relationship that continues well into the future. Our focus will be to fund our product development through consulting and this means our relationship with SolutionsIQ should be seen as complimentary.</p>
<p>Leaving SolutionsIQ is both exciting and difficult.  We have incredible friends at SolutionsIQ who also challenge us with their insightful perspectives.  SolutionsIQ has proven to be a joyful place to work combined with significant capabilities that go hand-in-hand with great people. This has not changed and we expect this to be continuing into the future and improving with time. We want the bonds we have created with the people at SolutionsIQ to extend past our employment with SolutionsIQ.</p>
<p>Brent, if you didn’t already know, started with SolutionsIQ six and one half years ago. He started the Agile Consulting part of the business four years ago and has shown himself to be a tremendous thought leader and respected individual in the Agile community.</p>
<p>For those not familiar with Chris, Chris started with SolutionsIQ four years ago as ScrumMaster and team member on projects. He joined Brent on Agile Consulting engagements soon after that part of the business started and has also become a thought leader in the Agile space.</p>
<p>With SolutionsIQ, we have both found the freedom and support needed to pursue new business opportunities and raise the presence of the company and ourselves within a larger community.  We are grateful for these opportunities and are happy with where we are today based on these and many other people’s efforts.</p>
<p>As we venture out and build a grass roots business, feel free to contact us.  We are having fun and would love to share more good times together with you.</p>
<p>Sincerely,</p>
<p>Chris Sterling and Brent Barton</p>
<p><a href="http://www.sterlingbarton.com" target="_blank">sterlingbarton.com</a></p></blockquote>
<p>If you are interested in contacting us, you can email us at brent at sterlingbarton dot com or chris at sterlingbarton dot com. If you are interested in hiring us  to support you in Agile adoption, management consulting, and technology consulting please send an email to info at sterlingbarton dot com. Thank you.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/10/10/brent-barton-and-chris-sterling-partner-to-bring-new-product-to-market/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Pacific Northwest Software Quality Conference (PNSQC) Coming Up</title>
		<link>http://www.gettingagile.com/2009/10/08/pacific-northwest-software-quality-conference-pnsqc-coming-up/</link>
		<comments>http://www.gettingagile.com/2009/10/08/pacific-northwest-software-quality-conference-pnsqc-coming-up/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 16:41:27 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.gettingagile.com/?p=297</guid>
		<description><![CDATA[It has been a while since I have blogged. I apologize and have plenty of good excuses (if there are such things) about why (book, traveling, family time, etc&#8230;). I am now back and will be blogging on a more frequent basis in the next few months.
My first blog entry back is about the upcoming [...]]]></description>
			<content:encoded><![CDATA[<p>It has been a while since I have blogged. I apologize and have plenty of good excuses (if there are such things) about why (book, traveling, family time, etc&#8230;). I am now back and will be blogging on a more frequent basis in the next few months.</p>
<p>My first blog entry back is about the upcoming Pacific Northwest Software Quality Conference (PNSQC) that is happening from October 26-28 in Portland, OR. This conference was highly recommended to me by many people. This year I am fortunate enough to attend, have a paper published for the event, and presenting the paper for 45 minutes during the conference. Here are the details for my paper and presentation:</p>
<blockquote><p><em><a name="30">P-30</a> <strong>Managing Software Debt</strong></em></p>
<p><em><strong>Chris Sterling, SolutionsIQ</strong></em></p>
<p><em>Many software developers will have to deal with legacy code at some point during their careers. Seemingly simple changes are turned into frustrating endeavors with code that is hard to read and unnecessarily complex. Test scripts and requirements are lacking, and at the same time are out of sync with the existing system. The build is cryptic, minimally sufficient, and difficult to successfully configure and execute. It is almost impossible to find the proper place to make a requested change without breaking unexpected portions of the application. The people who originally worked on the application are long gone.</em></p>
<p><em>How did the software get like this? It is almost certain the people who developed this application did not intend to create such a mess. This paper presentation will highlight ways teams can work with stakeholders to manage software debt over the delivery life cycle of the product.</em></p></blockquote>
<p>I hope that I am able to see others at this event. If you are interested in attending and would like to get a $50 off the normal conference attendance fee, enter the promotion code &#8220;FOA &#8211; Chris Sterling&#8221; when registering. You can register at the PNSQC web site (<a href="http://www.pnsqc.org/2009-conference/registration-information" target="_blank">http://www.pnsqc.org/2009-conference/registration-information</a>). See you there!</p>
<p><em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/10/08/pacific-northwest-software-quality-conference-pnsqc-coming-up/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Executable Specifications &#8211; Presentation from AgilePalooza</title>
		<link>http://www.gettingagile.com/2009/08/06/executable-specifications-presentation-from-agilepalooza/</link>
		<comments>http://www.gettingagile.com/2009/08/06/executable-specifications-presentation-from-agilepalooza/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 13:48:41 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[DotNet]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=296</guid>
		<description><![CDATA[Earlier this year I did a presentation on Executable Specficiations for AgilePalooza conference. There is information about working with legacy code, commercial off-the-shelf (COTS) systems, and Acceptance Test-Driven Development (ATDD) using automated acceptance testing tools. Also, the presentation lists types of automated acceptance testing tools out there along with actual names of tools and what [...]]]></description>
			<content:encoded><![CDATA[<p>Earlier this year I did a presentation on Executable Specficiations for AgilePalooza conference. There is information about working with legacy code, commercial off-the-shelf (COTS) systems, and Acceptance Test-Driven Development (ATDD) using automated acceptance testing tools. Also, the presentation lists types of automated acceptance testing tools out there along with actual names of tools and what they are best used for on projects. Hope it is interesting to you.</p>
<div style="width:425px;text-align:left" id="__ss_1499430"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/csterwa/executable-specifications-agile-palooza" title="Executable Specifications Agile Palooza">Executable Specifications Agile Palooza</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=executablespecifications-agilepalooza-090528014316-phpapp01&#038;stripped_title=executable-specifications-agile-palooza" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=executablespecifications-agilepalooza-090528014316-phpapp01&#038;stripped_title=executable-specifications-agile-palooza" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/csterwa">Chris Sterling</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/08/06/executable-specifications-presentation-from-agilepalooza/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maintain One List of Work</title>
		<link>http://www.gettingagile.com/2009/06/12/maintain-one-list-of-work/</link>
		<comments>http://www.gettingagile.com/2009/06/12/maintain-one-list-of-work/#comments</comments>
		<pubDate>Fri, 12 Jun 2009 18:44:00 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=281</guid>
		<description><![CDATA[During an interview at the Better Software conference this week, I mentioned that I thought maintaining a single list of work prioritized by the business was important for our industry to improve. The following text is an excerpt, in first draft form, from chapter 2, &#8220;Architecture Integrity&#8221;, of my upcoming book &#8220;Architecture in an Agile [...]]]></description>
			<content:encoded><![CDATA[<p><em>During an interview at the Better Software conference this week, I mentioned that I thought maintaining a single list of work prioritized by the business was important for our industry to improve. The following text is an excerpt, in first draft form, from chapter 2, &#8220;Architecture Integrity&#8221;, of my upcoming book &#8220;Architecture in an Agile Organization&#8221; that is relevant to this topic.</em></p>
<hr size="1" />In Scrum, the Product Backlog is a list of desired features prioritized by the Product Owner. Prioritization is done by the Product Owner to optimize value of the software delivered to the users. Instead of prioritizing within levels of importance such as high, medium, and low the Product Owner must prioritize in “stack-rank” order. This means that no Product Backlog item has the same priority as another item. This form of prioritization gives clear directions to development teams about what the most important feature is next to work on.</p>
<p>A healthy Product Backlog contains not only new features but also technical requirements to support the next Product Backlog items in priority. The development team is expected to review the Product Backlog frequently to provide cost estimates for Product Backlog items to help the Product Owner prioritize based on both cost and benefit. During the development team’s review they will suggest Product Backlog items that are missing from a technical point of view in the product definition. These technical Product Backlog items will be discussed with the Product Owner so they are able to prioritize them effectively. It is essential that the development team explain why each technical Product Backlog item is important to support other upcoming items. If this is not expressed the Product Owner could be inclined to demote those technical Product Backlog items because the value of them is not understood enough.</p>
<p>When issues are found in the software they usually come in three varieties:</p>
<ul>
<li>Enhancement – a suggestion for improving the current state of the software from a user’s point of view</li>
<li>Defect – a system fault that occurs while using the software</li>
<li>Fire – a system fault that is inhibiting significant usage scenarios in the software and must be fixed immediately</li>
</ul>
<p>Enhancements are requests for improvements to the software based on the perspective of the user. These improvements should be prioritized based on their value against all other Product Backlog items. An enhancement and defect issues are hard to distinguish from one another at times but that is fine. Defects are system faults that users are able to workaround but should not be happening from a user experience and/or technical perspective. Since we are able to work around these defects and the development team is able to provide a fix in the next iteration they are placed into the Product Backlog and prioritized against all other Product Backlog items. Fires are defects that cannot be worked around and cause serious problems for users of the software. In healthy software applications, fires should be a rare occurrence. It is important that a fix is implemented right away and may interrupt the work getting done in the current iteration.</p>
<p><img class="aligncenter size-medium wp-image-282" title="issuetriage" src="http://chrissterling.gettingagile.com/wp-content/uploads/2009/06/issuetriage-300x167.png" alt="issuetriage" width="300" height="167" /><em></em></p>
<p><em>Figure: This flow diagram describes how an identified issue is triaged in an iterative and incremental approach such as Scrum. If the issue is an enhancement or defect that can be worked around for now it goes into the Product Backlog and prioritized based on its value. If the issue is a “fire” or defect that cannot be worked around then it must be fixed immediately. The development will put the fire into their current list of work in the Sprint Backlog and figure out how it effects their commitment to deliver on their current iteration.</em></p>
<p>Defects are captured in bug databases in many organizations. Teams using the Scrum process to manage their software development find themsves in a predicament. Do we continue working from two lists, the Product Backlog of desired features and bug database? Or do we incorporate items from the bug database into the Product Backlog? I suggest all teams should incorporate defects into the Product Backlog. There are multiple reasons to do this:</p>
<ul>
<li>Development team does not make priority decisions for the business stakeholders. If the development team decides to work on defects rather than desired features then they are deciding the defects are higher priority than the desired features without including the Product Owner in the decision-making process.</li>
<li>Minimizes the amount of hidden work done by the development team. By providing visibility into the defects, the development team is being transparent about the state of the software they are working on.</li>
<li>Provides the Product Owner with an opportunity to prioritize the defect lower. The Product Owner could decide the defect is not important enough to fix at this time.</li>
<li>Allows development team and Product Owner to design a solution for dealing with defects. From time to time the defect provides insight into a design flaw that the Product Owner would like to improve.</li>
</ul>
<p>Ultimately, the development is able to maintain alignment with business priorities for the software. Priorities are decided based upon the full reality of the software, new features and defects included.</p>
<p>A single work queue, such as the Product Backlog, provides visibility to the development team about current expectations about upcoming work. The Product Owner should share the Product Backlog with the development team and discuss the direction of the product beyond the next iteration. As the development team gains knowledge about the direction of the product they will be able to provide input into the Product Backlog. This visibility is important so Product Backlog items do not surprise the development team when it is too late to prepare a proper solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/06/12/maintain-one-list-of-work/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Designing Through Programmer Tests (TDD)</title>
		<link>http://www.gettingagile.com/2009/05/27/designing-through-programmer-tests-tdd/</link>
		<comments>http://www.gettingagile.com/2009/05/27/designing-through-programmer-tests-tdd/#comments</comments>
		<pubDate>Wed, 27 May 2009 19:47:53 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=227</guid>
		<description><![CDATA[To reduce duplication and rigidity of the programmer test relationship to implementation code, move away from class and methods as the definition of a “unit” in your unit tests. Instead, use the following question to drive your next constraint on the software:
What should the software do next for the user?
The following coding session will provide [...]]]></description>
			<content:encoded><![CDATA[<p>To reduce duplication and rigidity of the programmer test relationship to implementation code, move away from class and methods as the definition of a “unit” in your unit tests. Instead, use the following question to drive your next constraint on the software:</p>
<blockquote><p><em><strong>What should the software do next for the user?</strong></em></p></blockquote>
<p>The following coding session will provide an example of applying this question. The fictitious application is a micro-blogging tool named “Jitter”. This is a Seattle-based fictitious company that focuses on enabling coffee injected folks write short messages and have common online messaging shorthand to be expanded for easy reading. The user story we are working on is:</p>
<blockquote><p><strong>So that it is easier to keep up with my kid’s messages, Mothers want to automatically expand their kid’s shorthand</strong></p></blockquote>
<p>The acceptance criteria for this user story are:</p>
<ul>
<li>LOL, AFAIK, and TTYL are expandable</li>
<li>Able to expand lower and upper case versions of shorthand</li>
</ul>
<p>The existing code already includes a JitterSession class that users obtain when they authenticate into Jitter to see messages from other people they are following. Mothers can follow their children in this application and so will see their messages in the list of new messages. The client application will automatically expand all of the messages written in shorthand.</p>
<p>The following programmer test expects to expand LOL to “laughing out loud” inside the next message in the JitterSession.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public class WhenUsersWantToExpandMessagesThatContainShorthandTest {

    @Test
    public void shouldExpandLOLToLaughingOutLoud() {
        JitterSession session = mock(JitterSession.class);
        when(session.getNextMessage()).thenReturn("Expand LOL please");
        MessageExpander expander = new MessageExpander(session);
        assertThat(expander.getNextMessage(), equalTo("Expand laughing out loud please"));
    }

}
</pre>
<p>The MessageExpander class did not exist so along the way I created a skeleton of this class to make the code compile. Once the assertion is failing, I then make the test pass with the following implementation code inside the MessageExpander class:</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public String getNextMessage() {
    String msg = session.getNextMessage();
    return msg.replaceAll("LOL", "laughing out loud");
}
</pre>
<p>This is the most basic message expansion I could do for only one instance of shorthand text. I notice that there are different variations of the message that I want to handle. What if LOL is written in lower case? What if it is written as “Lol”? Should it be expanded? Also, what if some variation of LOL is inside a word? It probably should not expand the shorthand in that case except if the characters surrounding it are symbols, not letters. I write all of this down in the programmer test as comments so I don’t forget about all of these.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
// shouldExpandLOLIfLowerCase
// shouldNotExpandLOLIfMixedCase
// shouldNotExpandLOLIfInsideWord
// shouldExpandIfSurroundingCharactersAreNotLetters
</pre>
<p>I then start working through this list of test cases to enhance the message expansion capabilities in Jitter.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldExpandLOLIfLowerCase() {
    when(session.getNextMessage()).thenReturn("Expand lol please");
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo("Expand laughing out loud please"));
}
</pre>
<p>This forced me to use the java.util.regex.Pattern class to handle case insensitivity.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public String getNextMessage() {
    String msg = session.getNextMessage();
    return Pattern.compile("LOL", Pattern.CASE_INSENSITIVE).matcher(msg).replaceAll("laughing out loud");
}
</pre>
<p>Now make it so mixed case versions of LOL are not expanded.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldNotExpandLOLIfMixedCase() {
    String msg = "Do not expand Lol please";
    when(session.getNextMessage()).thenReturn(msg);
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo(msg));
}
</pre>
<p>This forced me to stop using the Pattern.CASE_INSENSITIVE flag in the pattern compilation. Instead I tell it to match only “LOL” or “lol” for replacement.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
public String getNextMessage() {
    String msg = session.getNextMessage();
    return Pattern.compile("LOL|lol").matcher(msg).replaceAll("laughing out loud");
}
</pre>
<p>Next we’ll make sure that if LOL is inside a word it is not expanded.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldNotExpandLOLIfInsideWord() {
    String msg = "Do not expand PLOL or LOLP or PLOLP please";
    when(session.getNextMessage()).thenReturn(msg);
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo(msg));
}
</pre>
<p>The pattern matching is now modified to use spaces around each variation of valid LOL shorthand.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
return Pattern.compile("\\sLOL\\s|\\slol\\s").matcher(msg).replaceAll("laughing out loud");
</pre>
<p>Finally, it is important that if the characters around LOL are not letters it still expands.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
@Test
public void shouldExpandIfSurroundingCharactersAreNotLetters() {
    when(session.getNextMessage()).thenReturn("Expand .lol! please");
    MessageExpander expander = new MessageExpander(session);
    assertThat(expander.getNextMessage(), equalTo("Expand .laughing out loud! please"));
}
</pre>
<p>The final implementation of the pattern matching code looks as follows.</p>
<pre style="overflow:auto;width:95%;padding:2px;background-color:lightgray;border-style:dashed;border-width:1px">
return Pattern.compile("\\bLOL\\b|\\blol\\b").matcher(msg).replaceAll("laughing out loud");
</pre>
<p>I will defer refactoring this implementation until I have to expand additional instances of shorthand text. It just so happens that our acceptance criterion for the user story asks that AFAIK and TTYL are expanded, as well. I won’t show the code for the other shorthand variations in the acceptance criteria. However, I do want to discuss how the focus on “what should the software do next” drove the design of this small component.</p>
<p>Driving the software development using TDD focusing on what the software should do next helps guide us to only implement what is needed and with 100% programmer test coverage for all lines of code. For those who have some experience with object-oriented programming will implement the code with high cohesion, modules focused on specific responsibilities, and low coupling, modules that make few assumptions about other module they interact with will do. This is supported by the disciplined application of TDD. The failing programmer test represents something that the software does not do yet. We focus on modifying the software with the simplest implementation that will make the programmer test pass. Then we focus on enhancing the software’s design with the refactoring step. It has been my experience that refactoring refactoring represents most of the effort expended when doing TDD effectively.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/05/27/designing-through-programmer-tests-tdd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AgilePalooza in San Francisco May 29th</title>
		<link>http://www.gettingagile.com/2009/05/19/agilepalooza-in-san-francisco-may-29th/</link>
		<comments>http://www.gettingagile.com/2009/05/19/agilepalooza-in-san-francisco-may-29th/#comments</comments>
		<pubDate>Tue, 19 May 2009 20:57:15 +0000</pubDate>
		<dc:creator>Chris Sterling</dc:creator>
				<category><![CDATA[Acceptance Testing]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Product Owner]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Software Architecture]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Travel]]></category>
		<category><![CDATA[User Stories]]></category>
		<category><![CDATA[XP]]></category>

		<guid isPermaLink="false">http://chrissterling.gettingagile.com/?p=267</guid>
		<description><![CDATA[
AgilePalooza is a one day Agile conference on Friday May 29th at the San Francisco State University downtown campus. There will be two tracks: Learning Agility and Advancing Agility.
&#8220;Learning Agility&#8221; will be presentation style whereas &#8220;Advancing Agility&#8221; will use the open space format.
Speakers include David Hussman (DevJam), Chris Sterling (SolutionsIQ), Luke Hohmann (Enthiosys), Lee Henson [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="AgilePalooza logo" src="http://www.agilepalooza.com/images/AgilePaloozaHeader.gif" alt="" width="497" height="87" /></p>
<p><span><a href="http://www.AgilePalooza.com" target="_blank">AgilePalooza</a> is a one day Agile conference on Friday May 29th at the <a href="http://maps.yahoo.com/maps_result?addr=835+Market+St&amp;csz=94103&amp;country=us&amp;new=1&amp;name=&amp;qty=&amp;mkt_tok=3RkMMJWWfF9wsRovsqvfLqzsmxzEJ8r57eUpX7Hr08Yy0EZ5VunJEUWy2YEJSA%3D%3D" target="_blank">San Francisco State University downtown campus</a>. There will be two tracks: Learning Agility and Advancing Agility.</p>
<p>&#8220;Learning Agility&#8221; will be presentation style whereas &#8220;Advancing Agility&#8221; will use the open space format.</p>
<p>Speakers include David Hussman (DevJam), Chris Sterling (SolutionsIQ), Luke Hohmann (Enthiosys), Lee Henson (VersionOne Services) with special guests Ainsley Nies (open space co-facilitator) and Ian Culling (VersionOne CTO). When not presenting for the &#8220;Learning Agility&#8221; track speakers will participate in the open space.</p>
<p>Space is limited and the cost is low so please register soon if you would like to attend. For more information or to register please visit <a href="http://www.AgilePalooza.com" target="_blank">www.AgilePalooza.com</a>.</p>
<p><strong>Where? </strong></span></p>
<p><span>San Francisco State University Downtown Campus, 835 Market Street, San Francisco. (Powell street BART station in the Westfield Center) &#8211; <a href="http://maps.yahoo.com/maps_result?addr=835+Market+St&amp;csz=94103&amp;country=us&amp;new=1&amp;name=&amp;qty=&amp;mkt_tok=3RkMMJWWfF9wsRovsqvfLqzsmxzEJ8r57eUpX7Hr08Yy0EZ5VunJEUWy2YEJSA%3D%3D" target="_blank">Map/Directions</a><br />
</span></p>
<p><strong><span>When? </span></strong></p>
<p><span>9am-5pm (check-in and continental breakfast starts at 8am)</span></p>
<p><span><strong>Cost?</strong> </span></p>
<p><span>$69</span></p>
<p><span>Register here: <a href="http://www.AgilePalooza.com">www.AgilePalooza.com</a></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gettingagile.com/2009/05/19/agilepalooza-in-san-francisco-may-29th/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
