<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Agile Sharepoint development by 21apps and Andrew Woodward MVP</title>
	
	<link>http://www.21apps.com</link>
	<description />
	<lastBuildDate>Thu, 19 Nov 2009 21:02:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/AndThePointIs" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Team 21apps welcomes James Fisk</title>
		<link>http://feedproxy.google.com/~r/AndThePointIs/~3/hQLl4jEzyAY/</link>
		<comments>http://www.21apps.com/21apps/welcomes-james-fisk/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 20:59:22 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[21apps]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1095</guid>
		<description><![CDATA[Great plans and opportunities take dedication and time,  but often the most important thing is to work with people who share your vision and can help you realise it.  Having grown 21apps over the past few years and worked with some great people it is now time to grow. 
It is my honour to welcome James [...]]]></description>
			<content:encoded><![CDATA[<p>Great plans and opportunities take dedication and time,  but often the most important thing is to work with people who share your vision and can help you realise it.  Having grown 21apps over the past few years and worked with some great people it is now time to grow. </p>
<p>It is my honour to welcome James Fisk to the team,  I asked James to do a short intro.   I will embarrass him with the picture I took at a team building night in Leeds  (and no he&#8217;s not small that is a Stein of beer <img src='http://www.21apps.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p> </p>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/11/JamesFisk.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="JamesFisk" src="http://www.21apps.com/wp-content/uploads/2009/11/JamesFisk_thumb.jpg" border="0" alt="JamesFisk" width="354" height="451" /></a></p>
<h3>James Fisk</h3>
<p>Agile evangelist with 10+ years in development, who specialises in SCRUM, Xtreme Programming, .NET.  I&#8217;ve recently become interested in SharePoint and have been involved in a few projects based on SharePoint  2007.  I&#8217;m proud to say that I was involved in a team who where one of the first to do TTD and mocking (using Typemock) with SharePoint.  I&#8217;m married with two wonderful boys who keep me very, very busy.</p>
<p><em>I&#8217;ll add to this that it was James who introduced me to Typemock.</em></p>
<p>Like me James tweets <a href="http://twitter.com/draken" target="_blank">@draken</a> and has (with some encouragement) started to share his experiences on his blog <a title="http://www.theotherpointis.com/" href="http://www.theotherpointis.com/">http://www.theotherpointis.com/</a>  (which is being refreshed)..</p>
<img src="http://feeds.feedburner.com/~r/AndThePointIs/~4/hQLl4jEzyAY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/21apps/welcomes-james-fisk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.21apps.com/21apps/welcomes-james-fisk/</feedburner:origLink></item>
		<item>
		<title>Interviewed by Typemock</title>
		<link>http://feedproxy.google.com/~r/AndThePointIs/~3/YXxVQn_1fyU/</link>
		<comments>http://www.21apps.com/sharepoint/interviewed-by-typemock/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 12:52:36 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[TypeMock]]></category>

		<guid isPermaLink="false">http://www.21apps.com/sharepoint/interviewed-by-typemock/</guid>
		<description><![CDATA[At the recent SharePoint Conference in Vegas I took a few minutes out to talk to Gil Zilberfeld of Typemock about what 21apps is doing with SharePoint and what I see as the next steps in the community regarding SharePoint development.
 
Looking at what areas I see as being a focus in the SharePoint development [...]]]></description>
			<content:encoded><![CDATA[<p>At the recent <a href="http://www.21apps.com/sharepoint/spc09-is-go-conference-keynote/" target="_blank">SharePoint Conference</a> in Vegas I took a few minutes out to talk to Gil Zilberfeld of <a href="http://learn.typemock.com" target="_blank">Typemock</a> about what 21apps is doing with SharePoint and what I see as the next steps in the community regarding SharePoint development.</p>
<p> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="437" height="389" id="viddler"><param name="movie" value="http://www.viddler.com/player/8e5d1ac5/" /><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><embed src="http://www.viddler.com/player/8e5d1ac5/" width="437" height="389" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" name="viddler"></embed></object>
<p>Looking at what areas I see as being a focus in the SharePoint development space,&#160; how I will continue to push TDD but will also, now that people are starting to talk about good SharePoint development practices, start to look at the wide picture &#8211; looking at how we complement the Unit Tests with integration tests,&#160; looking at ways to automate use acceptance tests and generally looking at ways to make the code better so that testers can focus on the scenarios and complex tests rather than dealing with the &#8217;stupid bugs&#8217;.</p>
<p>Original post on <a href="http://learn.typemock.com/andrew-woodward-on-unit-testin/" target="_blank">Typemock Blog</a></p>
<img src="http://feeds.feedburner.com/~r/AndThePointIs/~4/YXxVQn_1fyU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint/interviewed-by-typemock/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.21apps.com/sharepoint/interviewed-by-typemock/</feedburner:origLink></item>
		<item>
		<title>Listening, Speaking, Training and SharePint</title>
		<link>http://feedproxy.google.com/~r/AndThePointIs/~3/tXHhUf7rcQg/</link>
		<comments>http://www.21apps.com/sharepoint/listening-speaking-training-and-sharepint/#comments</comments>
		<pubDate>Sun, 08 Nov 2009 11:03:04 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[SharePint]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Conferences]]></category>
		<category><![CDATA[Public Speaking]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1088</guid>
		<description><![CDATA[The past month seems to have been a complete blur,  so much new information to take in so many great people to meet and yet so many more that I wanted to spend more time with.
Listening
The SharePoint Conference 2009 (SPC09) in Vegas was, to put it simply,  AWESOME!  Seven thousand people in one place all [...]]]></description>
			<content:encoded><![CDATA[<p>The past month seems to have been a complete blur,  so much new information to take in so many great people to meet and yet so many more that I wanted to spend more time with.</p>
<h3>Listening</h3>
<p>The <a href="http://www.mssharepointconference.com/" target="_blank">SharePoint Conference 2009</a> (SPC09) in Vegas was, to put it simply,  AWESOME!  Seven thousand people in one place all buzzing with excitement about the new features in SharePoint 2010.   Although I had the privilege of playing with some of the bits before the event,  it really was at the event that you&#8217;re understanding as to the size of the investment,  the amount of improvements and the amount of information and knowledge that we are going to have to take in over the coming months and years became clear.  If you thought SharePoint 2007 was a big product &#8211; &#8216;you ain&#8217;t seen nothing yet!&#8217;  It was also great to be part of the Worlds Biggest <strong>SharePint</strong> at the Eye Candy Bar &#8211; Kudos to Andrew Connell for putting this on.</p>
<h3>Speaking</h3>
<p>One of the things that I find the most enjoyable about being part of the SharePoint community is the opportunity to share my passion and knowledge.   I do like to speak (not for some personal gratification) but to be able to share all of the cool things that I have discovered.  Having such a great platform to talk about just makes it so much easier. </p>
<p><strong>MVP Open Day</strong></p>
<p>The week after SPC09 I attended the UK and Ireland MVP Open Day in Reading.   This is a great opportunity put on my Akim and Vicki (MVP Leads) to say thanks for the work we do,  but more importantly a way for people of different disciplines and social networks to get together and socialise.   Timing for this event was great,  I was able to demonstrate SharePoint 2010 to a fairly big audience and from the feedback I got I think people were impressed.</p>
<p><strong>SUGUK Manchester</strong></p>
<p>On Tuesday 10th November <a href="http://sharepointstudio.com/default.aspx" target="_blank">Mark Stokes</a> has arranged the first official <a href="http://suguk.org/forums/thread/21393.aspx" target="_blank">North West SUGUK event</a> where we will be talking about all things SharePoint 2010 and also getting feedback on what the community wants from the user group &#8211; it&#8217;s your opportunity to really have a say on how the community works in your area.    Currently the event is full,  if you still want to attend please respond to the post on SUGUK but we may have to have bouncers on the door <img src='http://www.21apps.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />     &#8211; needless to say we will be continuing the conversation over a <strong>SharePint</strong> after the event.</p>
<p><strong>SharePoint Conference Slovenia</strong></p>
<p>The 27th November sees the second <a href="http://www.sharepointkonferenca.si/eng/default.aspx" target="_blank">Slovenia SharePoint Conference</a>, having never travelled to this part of the world I thought it would be a great way to visit, enjoy some local beers over the obligatory <strong>SharePint</strong>.   The timing of the event is great as it allows people to get hands on with the SharePoint 2010 bits (hopefully they will be out by then).</p>
<h3>Training</h3>
<p>Having guest taught a number of SharePoint training courses for Combined Knowledge over the past few years,  and having spent time helping review the 2010 courses I am going to be in Ullesthorpe for the week of the 30th of November for the first <a href="http://www.combined-knowledge.com/Flyers/SP2010.html" target="_blank">SharePoint 2010 Beta Developer Track</a>.  If you are looking for an early insight and training in the latest platform get in touch with Zoe and see if she can fit you in. </p>
<h3>SharePint</h3>
<p>Do I really need to say anymore?   At any event or during ant trip I will be looking to take part or organise a SharePint where we can talk about SharePoint over a Pint.   I&#8217;m preferring good local brewed ales lately so recommendations always welcome <img src='http://www.21apps.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Having authored this post I think I really need to offer an apology as it does seem like a little bit of self promotion,  it is not meant to be &#8211; more like I&#8217;m going to be here, would love to meet up.</p>
<p>The End of 2009 is going to be the start of things to come in 21apps,  I am really excited about the changes taking place and look forward telling you more.   Rest assured that I will be blogging more technical stuff and providing more information on how to improve the way you develop your SharePoint projects.  </p>
<p>2009 has been good 2010 is going to be awesome <img src='http://www.21apps.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/AndThePointIs/~4/tXHhUf7rcQg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint/listening-speaking-training-and-sharepint/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.21apps.com/sharepoint/listening-speaking-training-and-sharepint/</feedburner:origLink></item>
		<item>
		<title>SPC09 is go! Conference Keynote</title>
		<link>http://feedproxy.google.com/~r/AndThePointIs/~3/3q_607nf_U0/</link>
		<comments>http://www.21apps.com/sharepoint/spc09-is-go-conference-keynote/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 19:22:53 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[SharePoint]]></category>

		<guid isPermaLink="false">http://www.21apps.com/sharepoint/spc09-is-go-conference-keynote/</guid>
		<description><![CDATA[The build up to this event has been growing,&#160; it sold out with over 7400 people attending,&#160; making this probably the biggest Microsoft Conference ever!&#160; 
&#160;
This is probably the best social networking conference,&#160; with the biggest beach party in Mandalay Bay hotel on Tuesday night..&#160; with room for dancing (or to quote Tom Rizzo) to [...]]]></description>
			<content:encoded><![CDATA[<p>The build up to this event has been growing,&#160; it sold out with over 7400 people attending,&#160; making this probably the biggest Microsoft Conference ever!&#160; </p>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/10/20091019090414.980.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2009-10-19 09-04-14.980" border="0" alt="2009-10-19 09-04-14.980" src="http://www.21apps.com/wp-content/uploads/2009/10/20091019090414.980_thumb.jpg" width="324" height="244" /></a>&#160;</p>
<p>This is probably the best social networking conference,&#160; with the biggest beach party in Mandalay Bay hotel on Tuesday night..&#160; with room for dancing (or to quote Tom Rizzo) to sway!</p>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/10/20091019090831.954.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2009-10-19 09-08-31.954" border="0" alt="2009-10-19 09-08-31.954" src="http://www.21apps.com/wp-content/uploads/2009/10/20091019090831.954_thumb.jpg" width="324" height="244" /></a>&#160; </p>
<p>7.5 miles of network cabling to support the Wireless network <img src='http://www.21apps.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Steve Balmer takes to the stage in his usual enthusiastic style,&#160; finally getting to take on the last thing from Bill Gates and present at a SharePoint conference. </p>
<blockquote><p>Everything Microsoft are doing,&#160; SharePoint is at the Center!</p>
</blockquote>
<h3></h3>
<h3><a href="http://www.21apps.com/wp-content/uploads/2009/10/20091019100716.395.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2009-10-19 10-07-16.395" border="0" alt="2009-10-19 10-07-16.395" src="http://www.21apps.com/wp-content/uploads/2009/10/20091019100716.395_thumb.jpg" width="324" height="244" /></a>&#160;</h3>
<h3>When can you get it?</h3>
<p>Public beta will be shipped in <strong>November!</strong>&#160; Releasing in the first half of next year.</p>
<h3></h3>
<h3>SharePoint Evolution</h3>
<p>Big talk on the successor to Groove with the use of <strong>SharePoint Workspace</strong>,&#160;&#160; and looking forward at bringing SharePoint to the consumer market.</p>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/10/20091019092438.140.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2009-10-19 09-24-38.140" border="0" alt="2009-10-19 09-24-38.140" src="http://www.21apps.com/wp-content/uploads/2009/10/20091019092438.140_thumb.jpg" width="324" height="244" /></a> </p>
<p>A push for Rapidly Responding to Business needs,&#160; with talk of end user &#8216;programming&#8217; &#8211; the empowerment of the power users through tools like SharePoint Designer. </p>
<p>SharePoint Designer = &#8216;Learn It, Live It, Live It&#8217;</p>
<p>Using the new Business Connectivity Services and SharePoint designer you can now link backend systems to SharePoint an on into Office with no code.&#160; Great example of using SharePoint external connector in Outlook so users see contacts as contacts and can edit in Outlook.</p>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/10/20091019092745.159.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2009-10-19 09-27-45.159" border="0" alt="2009-10-19 09-27-45.159" src="http://www.21apps.com/wp-content/uploads/2009/10/20091019092745.159_thumb.jpg" width="324" height="244" /></a> </p>
</p>
</p>
<p>Visual Studio tooling for SharePoint development has provided a &#8216;lot&#8217; of feedback to Microsoft,&#160; there is a ton of great enhancements to the tooling to make this much better with SharePoint tools in VS2010 out of the box.</p>
<h3>SharePoint development supported on Windows 7 and Vista!</h3>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/10/20091019093711.839.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2009-10-19 09-37-11.839" border="0" alt="2009-10-19 09-37-11.839" src="http://www.21apps.com/wp-content/uploads/2009/10/20091019093711.839_thumb.jpg" width="324" height="244" /></a> </p>
<p>Great out of the box integration with SharePoint explorer in Visual Studio.&#160; </p>
<p>Now with VS2010 you can deploy directly with F5 debugging.&#160;&#160; </p>
<p>Demo of the <strong>Developer Dashboard</strong> showing the code that is running, what SQL server queries have been run &lt;&lt; this is sweet.</p>
<h3>Sandboxed Solutions</h3>
<p>The ability to do solution deployments through the UI,&#160; with full control for usage on the database, processor and memory usage throttling.&#160; </p>
<h2>SharePoint Online</h2>
<p>Moving the services into the cloud,&#160; with the Sandbox solution support means it will have the capability to do most things. A real alternative to needing to do things on premise.</p>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/10/20091019094705.556.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2009-10-19 09-47-05.556" border="0" alt="2009-10-19 09-47-05.556" src="http://www.21apps.com/wp-content/uploads/2009/10/20091019094705.556_thumb.jpg" width="324" height="244" /></a> </p>
</p>
<h2>SharePoint for Internet Sites</h2>
<p>Options to do internet facing site either on premise, with partners or in the cloud.</p>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/10/20091019095149.091.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2009-10-19 09-51-49.091" border="0" alt="2009-10-19 09-51-49.091" src="http://www.21apps.com/wp-content/uploads/2009/10/20091019095149.091_thumb.jpg" width="324" height="244" /></a> </p>
<p>Product skus for internet facing</p>
<ul>
<li>SharePoint for Internet Sites Standard and Enterprise Editions</li>
<li>FAST Search Server 2010 for Internet Business</li>
</ul>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/10/20091019100316.873.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="2009-10-19 10-03-16.873" border="0" alt="2009-10-19 10-03-16.873" src="http://www.21apps.com/wp-content/uploads/2009/10/20091019100316.873_thumb.jpg" width="324" height="244" /></a> </p>
<p>Some great additions to the WCM capabilities with 1-click page layouts changing on the fly, with the chrome shown in the editor.&#160;&#160;&#160; Nice copy and paste office content from Office applications directly into the page. Spell checking in the box and in the editor.</p>
<p>Rich Search experience using Fast navigators,&#160; I can see Fast search being a big thing in 2010.</p>
<h2>SharePoint has Evolved</h2>
<img src="http://feeds.feedburner.com/~r/AndThePointIs/~4/3q_607nf_U0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint/spc09-is-go-conference-keynote/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.21apps.com/sharepoint/spc09-is-go-conference-keynote/</feedburner:origLink></item>
		<item>
		<title>TDD Kata – By Example video</title>
		<link>http://feedproxy.google.com/~r/AndThePointIs/~3/fCwqLWK3nEw/</link>
		<comments>http://www.21apps.com/agile/tdd-kata-by-example-video/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 08:35:09 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Kata]]></category>
		<category><![CDATA[Test Driven Development]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1065</guid>
		<description><![CDATA[Since attending Roy Osherove&#8217;s TDD Master Class I have been doing my daily TDD Kata, I will admit I have missed some days but generally I have been keeping up with it and really seeing the benefit.
Here I talked about what a Kata is and how it compares to Kumon Maths and I also took [...]]]></description>
			<content:encoded><![CDATA[<p>Since attending <a href="http://www.21apps.com/development/tdd-master-class/" target="_blank">Roy Osherove&#8217;s TDD Master Class</a> I have been doing my daily TDD Kata, I will admit I have missed some days but generally I have been keeping up with it and really seeing the benefit.</p>
<blockquote><p><a href="http://www.21apps.com/development/daily-tdd-kata/" target="_blank">Here</a> I talked about what a Kata is and how it compares to Kumon Maths and I also took the opportunity to practice my reviewing techniques by looking at the best and reviewing <a href="http://www.21apps.com/development/comparing-myself-to-uncle-bob-martin/" target="_blank">Uncle Bobs prime factors TDD Kata</a>.</p></blockquote>
<p>I had promised to provide a web cast of the TDD SharePoint session that I did at the <a href="http://www.21apps.com/sharepoint/review-bpc-2009-dc/" target="_blank">Best Practices conference</a>, but I feel now that I need to really improve my keyboard mastery before taking on that one.  Instead I have taken the opportunity to record my current TDD Kata which is based on <a href="http://osherove.com/tdd-kata-1/" target="_blank">Roy Osheroves String Calculator</a>.  I have limited the steps I have done in this recording as I think 30 minutes would get a little boring.</p>
<h3>String Calculator</h3>
<ol>
<li>Create a simple String calculator with a method <strong>int Add(string numbers)</strong>
<ol>
<li>The method can take 0, 1 or 2 numbers, and will return their sum (for an empty string it will return 0) for example<strong> &#8220;&#8221; or &#8220;1&#8243; or &#8220;1,2&#8243;</strong></li>
<li>Start with the simplest test case of an empty string and move to 1 and two numbers</li>
<li>Remember to solve things as simply as possible so that you force yourself to write tests you did not think about</li>
<li>Remember to refactor after each passing test</li>
</ol>
</li>
<li>Allow the Add method to handle an unknown amount of numbers</li>
<li>Allow the Add method to handle new lines between numbers (instead of commas).
<ol>
<li>the following input is ok:  &#8220;1\n2,3&#8243;  (will equal 6)</li>
<li>the following input is NOT ok:  &#8220;1,\n&#8221; </li>
<li>Make sure you only test for correct inputs. there is no need to test for invalid inputs for these katas</li>
</ol>
</li>
<li>Allow the Add method to handle a different delimiter:
<ol>
<li>to change a delimiter, the beginning of the string will contain a separate line that looks like this:   &#8220;//[delimiter]\n[numbers.]&#8221; for example &#8220;//;\n1;2&#8243; should return three where the default delimiter is &#8216;;&#8217; .</li>
<li>the first line is optional. all existing scenarios should still be supported</li>
</ol>
</li>
</ol>
<p> </p>
<p>The idea behind TDD is to work through one thing at a time,  so in the example we start with 0 numbers (or empty string) and progress through each requirement continuing to adopt the Red, Green, Refactor approach &#8211; hopefully this will be clear from the video.</p>
<p>The Kata is not about knowing how to solve this problem, it is about knowing how to do things quickly and also knowing how to approach problems using TDD. </p>
<p>In this example,  as in my day job, I am using <a href="http://www.jetbrains.com/resharper/" target="_blank">ReSharper</a> to aid refactoring,  <a href="http://www.nunit.org/index.php" target="_blank">NUnit 2.5</a> for my tests as this supports TestCase and <a href="http://www.testdriven.net/" target="_blank">TestDriven.Net</a> to run the tests.</p>
<p>I have setup some live templates for the Test method and common Assert.AreEquals statements and have added a Keyboard shortcut to Re-Run the tests in TestDriven.Net (I use Alt + R).</p>
<p>Hope you enjoy the video, I have left the sound off - if you perfer some nice background music I can edit and add some <img src='http://www.21apps.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Would love to hear your thoughts on this.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="450" 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://vimeo.com/moogaloop.swf?clip_id=7014098&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="600" height="450" src="http://vimeo.com/moogaloop.swf?clip_id=7014098&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowfullscreen="true" allowscriptaccess="always"></embed></object></p>
<p><a href="http://vimeo.com/7014098">TDD Kata &#8211; Calculator Part 1 by AndrewWoody</a> from <a href="http://vimeo.com/user2441558">Andrew Woodward</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>You can download the WMV video to watch locally from the Vimeo site.</p>
<img src="http://feeds.feedburner.com/~r/AndThePointIs/~4/fCwqLWK3nEw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/agile/tdd-kata-by-example-video/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.21apps.com/agile/tdd-kata-by-example-video/</feedburner:origLink></item>
		<item>
		<title>Which Build Servers in SharePoint – The Results</title>
		<link>http://feedproxy.google.com/~r/AndThePointIs/~3/7jqHUHasOmY/</link>
		<comments>http://www.21apps.com/sharepoint/which-build-servers-the-results/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 11:11:36 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[Aberdovey]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Continuous Integraton]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Continuous Integration]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1062</guid>
		<description><![CDATA[The numbers are in and I think this small sample really gives a good view as to the way people are approaching their SharePoint development projects.
Numbers taken from a one week poll asking people which build servers they used on their SharePoint projects.

It&#8217;s very clear from this that people are in one of 3 camps [...]]]></description>
			<content:encoded><![CDATA[<p>The numbers are in and I think this small sample really gives a good view as to the way people are approaching their SharePoint development projects.</p>
<blockquote><p>Numbers taken from a one week poll asking people <a href="http://www.21apps.com/agile/which-build-server-are-you-using/" target="_blank">which build servers they used on their SharePoint projects</a>.</p></blockquote>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/10/CIPollResults.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CI Poll Results" src="http://www.21apps.com/wp-content/uploads/2009/10/CIPollResults_thumb.png" border="0" alt="CI Poll Results" width="533" height="279" /></a></p>
<p>It&#8217;s very clear from this that people are in one of 3 camps of almost identical size</p>
<ul>
<li>Those using Team Foundation Server</li>
<li>Those that user another non Microsoft tool</li>
<li>Those that don&#8217;t do anything</li>
</ul>
<h3>Team Foundation Server</h3>
<p>Installing and using, or developing against Microsoft SharePoint Server requires a fairly big commitment to the Microsoft technology stack, so the domination of <a href="http://msdn.microsoft.com/en-us/teamsystem/default.aspx" target="_blank">Team Foundation Server</a> is probably to be expected.</p>
<ul>
<li>If your a big corporate user of SharePoint you most likely have a deal that includes TFS licenses</li>
<li>You have likely committed to Microsoft as the platform of choice across the board</li>
<li>If your a Microsoft Partner delivering products and solutions you will have a big investment in Microsoft licenses, and also a duty to adopt the MS recommended path</li>
<li>TFS is a good solution,  and it&#8217;s getting better in 2010</li>
</ul>
<h3>Non Microsoft Tools</h3>
<p>I was surprised by the mix of Non Microsoft tools,  having looked at what you get for free and the costs for licensing beyond that I would have expected <a href="http://www.jetbrains.com/teamcity/" target="_blank">Team City</a> to have a bigger following.  Perhaps the reason for not being higher is jetBrains being thought of a Java based?</p>
<p>I bundled <a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET" target="_blank">CruiseControl</a> and <a href="http://thoughtworks.com/cruise" target="_blank">Cruise</a> together,  in hindsight I should have split them as they are totally different products.   I will make the assumption that most are using CruiseControl as this was really one of the first decent automated build tools to target the .Net platform.  People have got to know it an have scripted automation for their non SharePoint projects already.</p>
<p><a href="http://www.finalbuilder.com/" target="_blank">Final Builder</a> I have always liked the look of;  I really do find the whole raw XML editing that we have to do in any build automation a bit like developing against SharePoint,  it&#8217;s ok but the tools really should be better than this.   Final Builder has a great product, but the cost per user is perhaps the barrier here.</p>
<h3>Other</h3>
<p>Some people had build servers but didn&#8217;t use it for SharePoint &#8211; would really count those as None.</p>
<p>Others listed the source repository (SVN) or scripting language (msbuild, nant) so I assume that the build is done manually using batch files rather than via a dedicated build server.</p>
<p>Also someone listed Hudson,  something I had personally never heard of, but will bundle with the Non Microsoft Tools.</p>
<h3>None, we don&#8217;t have a build server</h3>
<p>This was probably the biggest surprise to me,  and perhaps not the way you might think.  I was actually surprised that only 35% of people indicated that they did not have any form of build server for their SharePoint projects.  </p>
<p>Based on my years of doing consultancy gigs I found that the majority of companies that I went into to do work didn&#8217;t have anything even close to an automated build server.  Heck some don&#8217;t even have source control for the code!</p>
<p>So I can take a couple of things from this</p>
<ul>
<li>People who don&#8217;t were too embarrassed to answer</li>
<li>SharePoint development has moved on significantly and most teams now have proper build servers</li>
<li>The readers of my blog are not representative of the wider SharePoint user base</li>
</ul>
<p> </p>
<h3>Conclusion</h3>
<p><a href="http://www.21apps.com/wp-content/uploads/2009/10/CIPollResultsNumbers.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="CI Poll Results Numbers" src="http://www.21apps.com/wp-content/uploads/2009/10/CIPollResultsNumbers_thumb.png" border="0" alt="CI Poll Results Numbers" width="644" height="292" /></a></p>
<p>There are still a lot of SharePoint teams out there that have yet to get the benefit from automating their builds,  who will undoubtedly be spending many hours manually putting things together the night before Go-Live.  </p>
<p>For these people, and those moving into SharePoint for the first time, there is a need to provide more information on why investing time in getting your automated build in from the start can make huge savings over the life of a project.  Providing walkthroughs on how to do this and some of the challenges you will encounter along the way.</p>
<p>Based on the feedback I could look at doing TFS first,  but I know that for teams with nothing setup yet this is going to be a big stumbling block.  Trying to convince you boss to roll out Team Foundation Server just so you can automate your SharePoint build is not an easy argument to have.   I will instead look at the options allowing you to get up and running quickly and more importantly without needing to get budget for licenses. </p>
<p>I will start with <a href="http://thoughtworks.com/cruise" target="_blank">Cruise</a>,  and I will be dog fooding this for real on <a href="http://www.21apps.com/sharepoint/introducing-project-aberdovey/" target="_blank">Project Aberdovey</a>.  </p>
<p>Thanks to everyone who took the time to vote,  I would love to hear your own take on what the numbers mean to you and your experience with automating builds in SharePoint.</p>
<img src="http://feeds.feedburner.com/~r/AndThePointIs/~4/7jqHUHasOmY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/sharepoint/which-build-servers-the-results/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.21apps.com/sharepoint/which-build-servers-the-results/</feedburner:origLink></item>
		<item>
		<title>Which build server are you using?</title>
		<link>http://feedproxy.google.com/~r/AndThePointIs/~3/X9ojChI0YG0/</link>
		<comments>http://www.21apps.com/agile/which-build-server-are-you-using/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 16:32:06 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1051</guid>
		<description><![CDATA[I am looking to provide some guidance on doing Continuous Integration (CI) on SharePoint projects,  looking at the concepts behind CI but also looking to provide examples that can help people get the most out of CI on a SharePoint project.   Having used a number of technologies in the past I thought it would be useful [...]]]></description>
			<content:encoded><![CDATA[<p>I am looking to provide some guidance on doing Continuous Integration (CI) on SharePoint projects,  looking at the concepts behind CI but also looking to provide examples that can help people get the most out of CI on a SharePoint project.   Having used a number of technologies in the past I thought it would be useful to get an idea of the which technologies people are using, if any. </p>
<p>Please take a few seconds to tell me what you have used, and have a look at what others are doing.  </p>
<p style="text-align: center;"><script type='text/javascript' language='javascript' charset='utf-8' src='http://s3.polldaddy.com/p/2084177.js'></script><noscript> <a href='http://answers.polldaddy.com/poll/2084177/'>View Poll</a></noscript></p>
<p> </p>
<p>I have made the selections mutiple choice as I know people, especially consultants, have worked with more than one platform.  And if you haved used something not listed please add it in the other box.  </p>
<p>Also if you have any specific areas that you would like to see covered please add a comment.</p>
<p>Thanks for taking part</p>
<img src="http://feeds.feedburner.com/~r/AndThePointIs/~4/X9ojChI0YG0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/agile/which-build-server-are-you-using/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.21apps.com/agile/which-build-server-are-you-using/</feedburner:origLink></item>
		<item>
		<title>TDD Master Class – with Roy Osherove</title>
		<link>http://feedproxy.google.com/~r/AndThePointIs/~3/du_Dr-aPScs/</link>
		<comments>http://www.21apps.com/development/tdd-master-class/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 21:54:39 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[Training]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1045</guid>
		<description><![CDATA[For almost my entire career I have been involved in software development, and probably uniquely more often than not in an environment or role where I have needed to look at process improvement. This started with my first role where I had to ensure development adhered to ISO9001 standards, through to today where I work [...]]]></description>
			<content:encoded><![CDATA[<p>For almost my entire career I have been involved in software development, and probably uniquely more often than not in an environment or role where I have needed to look at process improvement. This started with my first role where I had to ensure development adhered to <a href="http://en.wikipedia.org/wiki/ISO9001" target="_blank">ISO9001</a> standards, through to today where I work with teams to help them adopt <a href="http://www.21apps.com/agile/" target="_blank">agile techniques</a> and continuous improvement.</p>
<p>Along the way almost everyone I talked to understands the basic idea that the earlier in the cycle you find a defect the cheaper and easier it is to fix, and from this most (if not all) agree that Unit Testing is one of the most cost effective ways to catch these defects. The problem is, it appears, developers are lazy; they understand they should do it they just never get around to it &#8211; &#8216;perhaps on the next project&#8217;.</p>
<p>As part of my own development I like to work with, be trained by or just hang with people that I see as having reached a higher level of knowledge and skill than me in a particular field. You could say a greater Mastery of the subject. One area that I am very passionate about, many may have seen some great interviews on the subject, is <a href="http://www.21apps.com/?s=tdd" target="_blank">Test Driven Development</a> (TDD). TDD is more than just doing Unit Testing; it is a technique that once you understand and are willing to invest time in helps you to become a better developer.</p>
<p>I have been doing TDD, although not on every project (sadly), for about 2 years and have shared the knowledge I have gained through <a href="http://www.21apps.com/agile/beginners-guide-to-test-driven-web-part-development/" target="_blank">white papers</a>, <a href="http://www.21apps.com/sharepoint/tdd-using-di/" target="_blank">blogs</a> and talking at <a href="http://www.21apps.com/sharepoint/tdd-at-spbpc-slidedeck/" target="_blank">conferences</a>. In trying to lead the way in my area of expertise, SharePoint, I felt that I was missing something. I had yet to reach a place where I felt that I had mastered the art, where I had moved into the phase of challenging myself to do more than just the practice of TDD.</p>
<p>As part of my work with <a href="http://learn.typemock.com/" target="_blank">Typemock</a>, the only solution of working with SharePoint&#8217;s sealed API, I found that these guys really did get it, they had the battle scars and were practicing what they preached, and they were challenging themselves to do it different, better. <a href="http://osherove.com/" target="_blank">Roy Osherove</a> is the Chief Architect at Typemock and I have seen him speak at conferences in a way that was engaging and thought provoking. The opportunity therefore to be able to spend 5 days with Roy doing a <a href="http://osherove.com/training/" target="_blank">TDD Master Class</a> was one that I could not miss.</p>
<p>I&#8217;m not going to do the, on day 1 we did this, on day two we did this, as I think that Sara (fellow attendee) has covered this quite well in her <a href="http://developerdame.blogspot.com/2009/09/learning-powers-of-tdd-and-much-more.html" target="_blank">post</a>. Instead I will talk about how the course was much more than a lesson in Test Driven Development; we paired up to cover all of the practices looking at the basics of unit testing frameworks (Nunit, MSTest), understanding isolation frameworks (Moq, Rhino Mocks, Typemock Isolator) and how they all look to solve the same issues whilst using slightly different syntax. We looked at how the techniques around TDD have evolved over time, and the how the tools have really moved on significantly in recent years making the barrier to entry and the ability to create readable and maintainable code possible. We looked at techniques, like the daily <a href="http://en.wikipedia.org/wiki/Kata" target="_blank">Kata</a>, that will help perfect the practices, and discussed the ideas of <a href="http://en.wikipedia.org/wiki/Shu_ha_ri" target="_blank">Shu -Ha -Ri</a> where the student moves from the fundamental techniques, to finding new ways and challenging tradition and then onto surpass the teacher and ultimate mastery.</p>
<p>I liked the way Roy questioned the idea that the lazy coder was in fact the one looking to do it as easily as possible, the one who knew all of the keyboard short cuts, the one with all the Live Templates in <a href="http://www.jetbrains.com/resharper/" target="_blank">ReSharper</a>. The Lazy code is really the one who gets the job done well, with the least amount of effort &#8211; unlike the average developer, who I initially thought of as lazy, who just doesn&#8217;t see development as a craft but more a way to pay the bills.</p>
<p>My view that learning from someone, who is at a higher level of knowledge and understanding has been reaffirmed. The same principles should apply to you, when you look at training and work, ensure that the person teaching you is someone you admire, someone who you feel has the level of knowledge and experience that you aspire to.</p>
<p>Having attended Roy&#8217;s TDD Master Class I can say that my knowledge has been enhanced, the core values have been reaffirmed and I am now in a much better place with regards my own capability, but more importantly my own ability to help others.</p>
<p>So the question is should you attend Roy&#8217;s TDD Master Class?</p>
<p>If you want to really Master the Art of Test Driven Development then <strong>definitely</strong>.</p>
<img src="http://feeds.feedburner.com/~r/AndThePointIs/~4/du_Dr-aPScs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/development/tdd-master-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.21apps.com/development/tdd-master-class/</feedburner:origLink></item>
		<item>
		<title>Comparing myself to Uncle Bob Martin</title>
		<link>http://feedproxy.google.com/~r/AndThePointIs/~3/xzvR2OA9dZ8/</link>
		<comments>http://www.21apps.com/development/comparing-myself-to-uncle-bob-martin/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 21:00:38 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Test Driven Development]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1038</guid>
		<description><![CDATA[Before last week, I attended Roy Osherove&#8217;s TDD Masterclass,  I do not think I would have had the &#8220;you know what&#8217;s&#8221; to be able to put up an alternative solution to one of Uncle Bobs (aka Robert Martin) examples of doing Test Driven Development,  but here I am publishing the the solution I arrived at [...]]]></description>
			<content:encoded><![CDATA[<p>Before last week, I attended <a href="http://osherove.com/" target="_blank">Roy Osherove&#8217;s</a> TDD Masterclass,  I do not think I would have had the &#8220;<em>you know what&#8217;s</em>&#8221; to be able to put up an alternative solution to one of <a href="http://butunclebob.com" target="_blank">Uncle Bobs</a> (aka Robert Martin) examples of doing Test Driven Development,  but here I am publishing the the solution I arrived at and suggesting that my solution better servers the values of Readability, Maintainability and trustworthiness.</p>
<blockquote><p>In Uncle Bobs defence his post is dated Apr 2006 and the art of Test Driven Development has moved on leaps and bounds in the past few years.</p></blockquote>
<h3>The Problem</h3>
<blockquote><p>Write a class named &#8220;PrimeFactors&#8221; that has one static method: generate.</p>
<p>The generate method takes an integer argument and returns a List&lt;Integer&gt;. That list contains the prime factors in numerical sequence.</p></blockquote>
<p>To see the details and how it was previously <a href=" http://butunclebob.com/ArticleS.UncleBob.ThePrimeFactorsKata" target="_blank">solved</a>.</p>
<h3>My Solution</h3>
<p>Although the original is coded in Java and mine in C#, there is enough similarities for you to be able to understand both &#8211; weird that really <img src='http://www.21apps.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>The Tests</strong></p>
<div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;">1:</span> <span style="color: #0000ff;">using</span> System.Collections.Generic;<!--CRLF--></div>
<p><span style="color: #606060;">2:</span> <span style="color: #0000ff;">using</span> NUnit.Framework;<!--CRLF--></p>
<p><span style="color: #606060;">3:</span> <!--CRLF--></p>
<p><span style="color: #606060;">4:</span> <span style="color: #0000ff;">namespace</span> Product.Tests<!--CRLF--></p>
<p><span style="color: #606060;">5:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">6:</span> [TestFixture]<!--CRLF--></p>
<p><span style="color: #606060;">7:</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> CalculatorTests<!--CRLF--></p>
<p><span style="color: #606060;">8:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">9:</span> <span style="color: #0000ff;">private</span> Calculator c;<!--CRLF--></p>
<p><span style="color: #606060;">10:</span> <!--CRLF--></p>
<p><span style="color: #606060;">11:</span> [SetUp]<!--CRLF--></p>
<p><span style="color: #606060;">12:</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> SetUp()<!--CRLF--></p>
<p><span style="color: #606060;">13:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">14:</span> c = <span style="color: #0000ff;">new</span> Calculator();<!--CRLF--></p>
<p><span style="color: #606060;">15:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">16:</span> <!--CRLF--></p>
<p><span style="color: #606060;">17:</span> [Test]<!--CRLF--></p>
<p><span style="color: #606060;">18:</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> Generate_Zero_ReturnEmptyList()<!--CRLF--></p>
<p><span style="color: #606060;">19:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">20:</span> List&lt;<span style="color: #0000ff;">int</span>&gt; result = c.Generate(0);<!--CRLF--></p>
<p><span style="color: #606060;">21:</span> <!--CRLF--></p>
<p><span style="color: #606060;">22:</span> Assert.AreEqual(0, result.Count);<!--CRLF--></p>
<p><span style="color: #606060;">23:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">24:</span> <!--CRLF--></p>
<p><span style="color: #606060;">25:</span> [Test]<!--CRLF--></p>
<p><span style="color: #606060;">26:</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> Generate_One_ReturnEmptyList()<!--CRLF--></p>
<p><span style="color: #606060;">27:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">28:</span> List&lt;<span style="color: #0000ff;">int</span>&gt; result = c.Generate(1);<!--CRLF--></p>
<p><span style="color: #606060;">29:</span> <!--CRLF--></p>
<p><span style="color: #606060;">30:</span> Assert.AreEqual(0, result.Count);<!--CRLF--></p>
<p><span style="color: #606060;">31:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">32:</span> <!--CRLF--></p>
<p><span style="color: #606060;">33:</span> [TestCase(2)]<!--CRLF--></p>
<p><span style="color: #606060;">34:</span> [TestCase(3)]<!--CRLF--></p>
<p><span style="color: #606060;">35:</span> [TestCase(5)]<!--CRLF--></p>
<p><span style="color: #606060;">36:</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> Generate_PrimeNumber_ReturnPrimeNumber(<span style="color: #0000ff;">int</span> expected)<!--CRLF--></p>
<p><span style="color: #606060;">37:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">38:</span> List&lt;<span style="color: #0000ff;">int</span>&gt; result = c.Generate(expected);<!--CRLF--></p>
<p><span style="color: #606060;">39:</span> <!--CRLF--></p>
<p><span style="color: #606060;">40:</span> Assert.AreEqual(expected, result[0]);<!--CRLF--></p>
<p><span style="color: #606060;">41:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">42:</span> <!--CRLF--></p>
<p><span style="color: #606060;">43:</span> [TestCase(4,2,2)]<!--CRLF--></p>
<p><span style="color: #606060;">44:</span> [TestCase(6,2,3)]<!--CRLF--></p>
<p><span style="color: #606060;">45:</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> Generate_NonPrimeNumberDivisableByTwo_ReturnTwoProducts(<span style="color: #0000ff;">int</span> number, <span style="color: #0000ff;">int</span> firstPrime, <span style="color: #0000ff;">int</span> secondPrime)<!--CRLF--></p>
<p><span style="color: #606060;">46:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">47:</span> List&lt;<span style="color: #0000ff;">int</span>&gt; result = c.Generate(number);<!--CRLF--></p>
<p><span style="color: #606060;">48:</span> <!--CRLF--></p>
<p><span style="color: #606060;">49:</span> Assert.AreEqual(firstPrime, result[0]);<!--CRLF--></p>
<p><span style="color: #606060;">50:</span> Assert.AreEqual(secondPrime, result[1]);<!--CRLF--></p>
<p><span style="color: #606060;">51:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">52:</span> <!--CRLF--></p>
<p><span style="color: #606060;">53:</span> [Test]<!--CRLF--></p>
<p><span style="color: #606060;">54:</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> Generate_NonPrimeNumberWithThreeProducts_ReturnThreeProducts()<!--CRLF--></p>
<p><span style="color: #606060;">55:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">56:</span> List&lt;<span style="color: #0000ff;">int</span>&gt; result = c.Generate(8);<!--CRLF--></p>
<p><span style="color: #606060;">57:</span> <!--CRLF--></p>
<p><span style="color: #606060;">58:</span> Assert.AreEqual(2, result[0]);<!--CRLF--></p>
<p><span style="color: #606060;">59:</span> Assert.AreEqual(2, result[1]);<!--CRLF--></p>
<p><span style="color: #606060;">60:</span> Assert.AreEqual(2, result[2]);<!--CRLF--></p>
<p><span style="color: #606060;">61:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">62:</span> <!--CRLF--></p>
<p><span style="color: #606060;">63:</span> [Test]<!--CRLF--></p>
<p><span style="color: #606060;">64:</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> Generate_NonPrimeNumberNotDivisableByTwoWithTwoProducts_ReturnProducts()<!--CRLF--></p>
<p><span style="color: #606060;">65:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">66:</span> List&lt;<span style="color: #0000ff;">int</span>&gt; result = c.Generate(9);<!--CRLF--></p>
<p><span style="color: #606060;">67:</span> <!--CRLF--></p>
<p><span style="color: #606060;">68:</span> Assert.AreEqual(3, result[0]);<!--CRLF--></p>
<p><span style="color: #606060;">69:</span> Assert.AreEqual(3, result[0]);<!--CRLF--></p>
<p><span style="color: #606060;">70:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">71:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">72:</span> }<!--CRLF--></div>
<p><strong>The Production Code</strong></p>
<div id="codeSnippetWrapper2" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;">1:</span> <span style="color: #0000ff;">using</span> System.Collections.Generic;<!--CRLF--></div>
<p><span style="color: #606060;">2:</span> <!--CRLF--></p>
<p><span style="color: #606060;">3:</span> <span style="color: #0000ff;">namespace</span> Product<!--CRLF--></p>
<p><span style="color: #606060;">4:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">5:</span> <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> Calculator<!--CRLF--></p>
<p><span style="color: #606060;">6:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">7:</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">const</span> <span style="color: #0000ff;">int</span> SMALLEST_PRIME = 2;<!--CRLF--></p>
<p><span style="color: #606060;">8:</span> <!--CRLF--></p>
<p><span style="color: #606060;">9:</span> <span style="color: #0000ff;">public</span> List&lt;<span style="color: #0000ff;">int</span>&gt; Generate(<span style="color: #0000ff;">int</span> i)<!--CRLF--></p>
<p><span style="color: #606060;">10:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">11:</span> List&lt;<span style="color: #0000ff;">int</span>&gt; primes = <span style="color: #0000ff;">new</span> List&lt;<span style="color: #0000ff;">int</span>&gt;();<!--CRLF--></p>
<p><span style="color: #606060;">12:</span> <!--CRLF--></p>
<p><span style="color: #606060;">13:</span> <span style="color: #0000ff;">int</span> divider = SMALLEST_PRIME;<!--CRLF--></p>
<p><span style="color: #606060;">14:</span> <span style="color: #0000ff;">while</span> (HasPrimes(i))<!--CRLF--></p>
<p><span style="color: #606060;">15:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">16:</span> <span style="color: #0000ff;">while</span> (IsDivisable(i, divider))<!--CRLF--></p>
<p><span style="color: #606060;">17:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">18:</span> i = AddPrimeToProductsAndReduce(i, primes, divider);<!--CRLF--></p>
<p><span style="color: #606060;">19:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">20:</span> divider++;<!--CRLF--></p>
<p><span style="color: #606060;">21:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">22:</span> <span style="color: #0000ff;">return</span> primes;<!--CRLF--></p>
<p><span style="color: #606060;">23:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">24:</span> <!--CRLF--></p>
<p><span style="color: #606060;">25:</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">bool</span> IsDivisable(<span style="color: #0000ff;">int</span> i, <span style="color: #0000ff;">int</span> divider)<!--CRLF--></p>
<p><span style="color: #606060;">26:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">27:</span> <span style="color: #0000ff;">return</span> i%divider == 0;<!--CRLF--></p>
<p><span style="color: #606060;">28:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">29:</span> <!--CRLF--></p>
<p><span style="color: #606060;">30:</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">bool</span> HasPrimes(<span style="color: #0000ff;">int</span> i)<!--CRLF--></p>
<p><span style="color: #606060;">31:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">32:</span> <span style="color: #0000ff;">return</span> i &gt;= SMALLEST_PRIME;<!--CRLF--></p>
<p><span style="color: #606060;">33:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">34:</span> <!--CRLF--></p>
<p><span style="color: #606060;">35:</span> <span style="color: #0000ff;">private</span> <span style="color: #0000ff;">int</span> AddPrimeToProductsAndReduce(<span style="color: #0000ff;">int</span> i, List&lt;<span style="color: #0000ff;">int</span>&gt; primes, <span style="color: #0000ff;">int</span> prime)<!--CRLF--></p>
<p><span style="color: #606060;">36:</span> {<!--CRLF--></p>
<p><span style="color: #606060;">37:</span> primes.Add(prime);<!--CRLF--></p>
<p><span style="color: #606060;">38:</span> i /= prime;<!--CRLF--></p>
<p><span style="color: #606060;">39:</span> <span style="color: #0000ff;">return</span> i;<!--CRLF--></p>
<p><span style="color: #606060;">40:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">41:</span> }<!--CRLF--></p>
<p><span style="color: #606060;">42:</span> }<!--CRLF--></div>
<p>I understand that showing the final solution does not prove the value of TDD, I will be posting a web cast of this process to really show how TDD helps you code to evolve and also how I adhere to the Red, Green, Refactor steps to achieve readable, maintable and trustworthy code.</p>
<h3>Where do I think mine is better?</h3>
<p><strong>The Tests</strong></p>
<p>The tests all adopt the naming convention <strong>Method_Scenario_Behaviour</strong></p>
<p>The Act and Assert are kept separate for readability.</p>
<p>I have not used any logic in my tests, unlike the <span style="font-family: courier new;">list()</span>method used in Uncle Bobs.</p>
<p><strong>The Production Code</strong></p>
<p>No magic numbers, I have extracted well named constants.</p>
<p>Refactored the logic in ther generate method into more readable methods. For example line 14.</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;">1:</span> <span style="color: #0000ff;">while</span> (HasPrimes(i))<!--CRLF--></div>
</div>
<p>Is much easier to understand than the line</p>
<div id="codeSnippetWrapper">
<div id="codeSnippet2" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #606060;">1:</span> <span style="color: #0000ff;">for</span> (<span style="color: #0000ff;">int</span> candidate = 2; n &gt; 1; candidate++)<!--CRLF--></div>
</div>
<p>I don&#8217;t like the way the while loops were refactored into for loops to reduce the code. If you look closely at the for loop above you will see that it does not follow the normal convention where the evaluation part is related to the incremental part.Â  This I feel makes it easy to misread and hard to read if you don&#8217;t miss it.</p>
<p>Overall I think that the my code, although longer than Uncle Bobs is much easier to read and therefore easier to maintain.</p>
<p>I would love to hear feedback on the code, perhaps I have a couple of refactoring&#8217;s that could improve it still further.</p>
<img src="http://feeds.feedburner.com/~r/AndThePointIs/~4/xzvR2OA9dZ8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/development/comparing-myself-to-uncle-bob-martin/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.21apps.com/development/comparing-myself-to-uncle-bob-martin/</feedburner:origLink></item>
		<item>
		<title>Daily TDD Kata – now I’m doing what Jack does</title>
		<link>http://feedproxy.google.com/~r/AndThePointIs/~3/EgpcpqhumHc/</link>
		<comments>http://www.21apps.com/development/daily-tdd-kata/#comments</comments>
		<pubDate>Sun, 27 Sep 2009 19:40:12 +0000</pubDate>
		<dc:creator>Andrew Woodward</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Kata]]></category>
		<category><![CDATA[Test Driven Development]]></category>

		<guid isPermaLink="false">http://www.21apps.com/?p=1036</guid>
		<description><![CDATA[Last week I had the pleasure of attending Roy Osherove&#8217;s Test Driven Development Masterclass,  I will post in a few days more on this but can say this is one of the best training courses I have ever attended.
During the course I got to learn about the Kata technique, something I had heard about but [...]]]></description>
			<content:encoded><![CDATA[<p>Last week I had the pleasure of attending <a href="http://osherove.com/" target="_blank">Roy Osherove&#8217;s</a> Test Driven Development Masterclass,  I will post in a few days more on this but can say this is one of the best training courses I have ever attended.</p>
<p>During the course I got to learn about the <a href="http://en.wikipedia.org/wiki/Kata" target="_blank">Kata</a> technique, something I had heard about but had never investigated.</p>
<blockquote><p><strong>Kata</strong> is a Japanese word describing detailed choreographed patterns of movements practiced either solo or in pairs. most commonly known for the presence in the martial arts.</p></blockquote>
<p>The theory is that if you practice a common technique regularly (every day) over time the actions will become natural and automatic, you will have muscle memory.  During the course Roy introduced the idea of coding a reasonably detailed solution, using all of the good TDD practices (Red, Green, Refactor), every day so that the techniques used become second nature, the act of coding something using TDD is natural.</p>
<p>Over the course of the week the class went from being unable to code half of the problem in 30 minutes, to being able to complete the solution.  The obvious productivity&#8217;s aside, I will discuss this in a future post, it was clear that every developer in the class was able to master a new technique.   In fact I have tweeted with some of the class members who were doing the same code Kata on Saturday morning.</p>
<h3>So what does Jack do?</h3>
<p>Although he did join me in my Sunday morning Kata I am not saying that Jack has been doing these coding Katas for years. No, Jack has been doing <a href="http://en.wikipedia.org/wiki/Kumon_method" target="_blank">Kumon</a> mathematics since he was 4 years old. </p>
<blockquote><p><strong>Kumon</strong> is a math and reading enrichment program. Students do not work together as a class, but progress through the curriculum at their own pace, moving on to the next level when they have achieved mastery of the previous level. Mastery is defined as speed and accuracy.  They only progress when they have mastered the skills through practice and repetition.</p></blockquote>
<p>Kumon sheets (numbers of questions) are completed daily, they build up the students skills in mental arithmetic and techniques by repeating them often.   Jack, like all new students, started at a level that is below their current ability but through which they can quickly progress.  Jack started at level 6A and moved quickly through the numbers bonds and now has an amazing ability to do mental maths.  Although challenging at times Jack has continued with his daily Kumon (KATA) and had reached the G-League before starting high school, an amazing achievement.</p>
<p>So I can now say that Jack and I will be doing our daily Kata together,  perhaps aiming to master a different art, but taking a daily step closer to achieving that mastery.</p>
<p>Kata is definitely something that will become a way of life for people at 21apps, the value is real and measurable, the personal satisfaction is infectious.</p>
<img src="http://feeds.feedburner.com/~r/AndThePointIs/~4/EgpcpqhumHc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.21apps.com/development/daily-tdd-kata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.21apps.com/development/daily-tdd-kata/</feedburner:origLink></item>
	</channel>
</rss>
