<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Andrew Stopford&amp;#39;s Weblog</title><link>http://weblogs.asp.net/astopford/default.aspx</link><description>poobah</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>Blog move</title><link>http://weblogs.asp.net/astopford/archive/2011/01/01/blog-move.aspx</link><pubDate>Sat, 01 Jan 2011 15:01:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7671732</guid><dc:creator>andrewstopford</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7671732</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2011/01/01/blog-move.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;I will be moving this blog to &lt;A href="http://andystopford.wordpress.com/" mce_href="http://andystopford.wordpress.com/"&gt;http://andystopford.wordpress.com/&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;RSS feed address is &lt;A href="http://andystopford.wordpress.com/feed/rss/" mce_href="http://andystopford.wordpress.com/feed/rss/"&gt;http://andystopford.wordpress.com/feed/rss/&lt;/A&gt;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Atom feed address is &lt;A href="http://andystopford.wordpress.com/feed/atom/" mce_href="http://andystopford.wordpress.com/feed/atom/"&gt;http://andystopford.wordpress.com/feed/atom/&lt;/A&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;I will cross post a few posts over the next few months but please move any feeds over to the new address.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7671732" width="1" height="1"&gt;</description></item><item><title>The year ahead, 2011.</title><link>http://weblogs.asp.net/astopford/archive/2010/12/31/the-year-ahead-2011.aspx</link><pubDate>Fri, 31 Dec 2010 00:15:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7670832</guid><dc:creator>andrewstopford</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7670832</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/12/31/the-year-ahead-2011.aspx#comments</comments><description>&lt;P&gt;When I look back at &lt;A href="http://weblogs.asp.net/astopford/archive/2009/12.aspx" mce_href="http://weblogs.asp.net/astopford/archive/2009/12.aspx"&gt;last years look at 2010&lt;/A&gt; my blogging rate has not changed much (I suspect this is largely down to &lt;A href="http://twitter.com/andystopford" mce_href="http://twitter.com/andystopford"&gt;using Twitter a lot&lt;/A&gt;) but my interests this year have developed a lot further. &lt;/P&gt;
&lt;P&gt;My view on 2010 would be that Microsoft would commit more to OSS, while I wanted to see more hires from that audience and more projects on Outercurve foundation instead there has been support for JQuery and Gems (aka NuGet). I would love to see more from Microsoft on the OSS front in 2011, Outercurve could become like the Apache foundation with enough support.&lt;/P&gt;
&lt;P&gt;Staying on the Microsoft front I predict that&amp;nbsp;2011 will bring the following.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;C# 5.0 will go RTM (still no MOP though)&lt;/LI&gt;
&lt;LI&gt;The next release of VS will go alpha or early beta&lt;/LI&gt;
&lt;LI&gt;MS MVC 4.0 (I think by Mix time)&amp;nbsp;and maybe this release will get a command line.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;I also suspect that Microsoft will want to target the tablet market with WP7 in 2011 (Mix 2011 maybe...).&lt;/P&gt;
&lt;P&gt;I also predict the following&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Java will fork with Apache\Google. Oracle will then take them to court and the whole thing will boil right through 2011 (Java have had enough court cases, come on guys). Java and the JVM will sadly not move forward at all in 2011.&lt;/LI&gt;
&lt;LI&gt;Android will cause Apple a serious headache, both the smartphone and tablet market will see figures cut from Apple share. By the end of 2011 the current 70% apple market share will be 40-50%. As the features, performance and price of Android devices gets ever better Apple will be left out in the open.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Lastly after 7 years&amp;nbsp;I intend to move this blog away from weblogs. In 2011 I will be exploring Java, Ruby\Rails and Android and such subjects don't make sense to talk about it here.&lt;/P&gt;
&lt;P&gt;See you in 2011.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7670832" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>MbUnit\Gallio 3.2</title><link>http://weblogs.asp.net/astopford/archive/2010/09/22/mbunit-gallio-3-3.aspx</link><pubDate>Wed, 22 Sep 2010 20:15:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7618908</guid><dc:creator>andrewstopford</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7618908</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/09/22/mbunit-gallio-3-3.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;MbUnit\Gallio 3.2 was released today and includes many new features and fixes.&lt;/P&gt;
&lt;P mce_keep="true"&gt;The release notes &lt;A href="http://gallio.org/wiki/doku.php?id=release_notes:v3.2" mce_href="http://gallio.org/wiki/doku.php?id=release_notes:v3.2"&gt;can be found here&lt;/A&gt;, you can &lt;A href="http://gallio.org/Downloads.aspx" mce_href="http://gallio.org/Downloads.aspx"&gt;find the download here&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;Icarus&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Icarus continues to grow as feature rich GUI for running unit tests, this feature has added a &lt;A href="http://gallio.org/wiki/doku.php?id=tools:icarus_-_search" mce_href="http://gallio.org/wiki/doku.php?id=tools:icarus_-_search"&gt;search feature&lt;/A&gt; as well a &lt;A href="http://code.google.com/p/mb-unit/issues/list?can=1&amp;amp;q=label:Milestone-3.2%20status:Fixed%20component=Icarus&amp;amp;sort=id&amp;amp;colspec=ID%20Type%20Status%20Component%20Priority%20Milestone%20Owner%20Summary" mce_href="http://code.google.com/p/mb-unit/issues/list?can=1&amp;amp;q=label:Milestone-3.2%20status:Fixed%20component=Icarus&amp;amp;sort=id&amp;amp;colspec=ID%20Type%20Status%20Component%20Priority%20Milestone%20Owner%20Summary"&gt;number of bug fixes&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 453px; HEIGHT: 253px" src="http://gallio.org/wiki/lib/exe/fetch.php?media=tools:v32_icarus_search.png" width=606 height=314 mce_src="http://gallio.org/wiki/lib/exe/fetch.php?media=tools:v32_icarus_search.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;Echo&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://gallio.org/wiki/doku.php?id=tools:report_arguments_for_echo#report_archive" mce_href="http://gallio.org/wiki/doku.php?id=tools:report_arguments_for_echo#report_archive"&gt;New command line option&lt;/A&gt; to allow reports to be compressed as a Zip.&lt;/P&gt;
&lt;P mce_keep="true"&gt;We also offer this support in the MsBuild task, CCNet task and PowerShell integration.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;VS Integration&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;As&lt;A href="http://weblogs.asp.net/astopford/archive/2010/04/13/gallio-and-vs2010.aspx" mce_href="http://weblogs.asp.net/astopford/archive/2010/04/13/gallio-and-vs2010.aspx"&gt; noted in previous posts&lt;/A&gt; Gallio has offered integration with the VS unit test tools for some time now, in this release we have added support for the new VS10 Data Collector feature.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/vs2010/5.png" width=383 height=318 mce_src="http://weblogs.asp.net/blogs/astopford/vs2010/5.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;TD.NET&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;You&amp;nbsp;can now configure TD.NET options from within the Gallio control panel.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 321px; HEIGHT: 348px" src="http://gallio.org/wiki/lib/exe/fetch.php?media=release_notes:controlpaneltdnetreport.png" width=450 height=412 mce_src="http://gallio.org/wiki/lib/exe/fetch.php?media=release_notes:controlpaneltdnetreport.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;MbUnit.&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;This release has added a number of new features to&amp;nbsp;MbUnit.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;The &lt;A href="http://gallio.org/wiki/doku.php?id=mbunit:mirror" mce_href="http://gallio.org/wiki/doku.php?id=mbunit:mirror"&gt;Mirror&lt;/A&gt;&amp;nbsp;framework&amp;nbsp;replaces the reflection support&amp;nbsp;that has existed since&amp;nbsp;v2 and offers&amp;nbsp;a powerful way of testing non public members.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_Mirror.png" mce_src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_Mirror.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://gallio.org/wiki/doku.php?id=mbunit:assertions:collection#assertcount" mce_href="http://gallio.org/wiki/doku.php?id=mbunit:assertions:collection#assertcount"&gt;Assert.Count&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_AssertCount.png" mce_src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_AssertCount.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Also see this &lt;A href="http://vkreynin.wordpress.com/2010/07/18/assert-count-in-mbunit-version-3-2/" mce_href="http://vkreynin.wordpress.com/2010/07/18/assert-count-in-mbunit-version-3-2/"&gt;post from it's author&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Brand new XML Assertions&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Assert.Xml.AreEqual&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Assert.Xml.Exists&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Assert.Xml.IsUnique&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;DIV mce_keep="true"&gt;See&amp;nbsp;&lt;A href="http://gallio.org/wiki/doku.php?id=mbunit:xml_assertions" mce_href="http://gallio.org/wiki/doku.php?id=mbunit:xml_assertions"&gt;the&amp;nbsp;new documention&lt;/A&gt; on this feature&amp;nbsp;and &lt;A href="http://vkreynin.wordpress.com/2010/07/18/test/" mce_href="http://vkreynin.wordpress.com/2010/07/18/test/"&gt;this post&lt;/A&gt; by it's author.&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;A href="http://gallio.org/wiki/doku.php?id=mbunit:contract_verifiers:hash_code_acceptance_contract" mce_href="http://gallio.org/wiki/doku.php?id=mbunit:contract_verifiers:hash_code_acceptance_contract"&gt;Hash code acceptance contract verifier&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_HashCodeAcceptanceContract.png" mce_src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_HashCodeAcceptanceContract.png"&gt;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;Also see &lt;A href="http://interfacingreality.blogspot.com/2010/05/hash-code-acceptance-contract-verifier.html" mce_href="http://interfacingreality.blogspot.com/2010/05/hash-code-acceptance-contract-verifier.html"&gt;this post from it's author&lt;/A&gt;.&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;BR&gt;New Attributes&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;BR&gt;&lt;A href="http://gallio.org/wiki/doku.php?id=mbunit:custom_behaviors:converter" mce_href="http://gallio.org/wiki/doku.php?id=mbunit:custom_behaviors:converter"&gt;[Converter] attribute.&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_ConverterAttribute.png" mce_src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_ConverterAttribute.png"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;BR&gt;&lt;A href="http://gallio.org/wiki/doku.php?id=mbunit:custom_behaviors:comparer" mce_href="http://gallio.org/wiki/doku.php?id=mbunit:custom_behaviors:comparer"&gt;[Comparer] attribute.&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;A href="http://gallio.org/wiki/doku.php?id=mbunit:custom_behaviors:equalitycomparer" mce_href="http://gallio.org/wiki/doku.php?id=mbunit:custom_behaviors:equalitycomparer"&gt;[EqualityComparer] attribute.&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_EqualityComparerAttribute.png" mce_src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_EqualityComparerAttribute.png"&gt;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;BR&gt;&lt;A href="http://gallio.org/wiki/doku.php?id=mbunit:custom_behaviors:formatter" mce_href="http://gallio.org/wiki/doku.php?id=mbunit:custom_behaviors:formatter"&gt;[Formatter] attribute.&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;A href="http://gallio.org/wiki/doku.php?id=mbunit:test_flow#disable" mce_href="http://gallio.org/wiki/doku.php?id=mbunit:test_flow#disable"&gt;[Disable] attribute&lt;/A&gt; to create abstract test fixtures and methods.&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_DisableAttribute.png" mce_src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_DisableAttribute.png"&gt;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;BR&gt;Fluent syntax for the Data Generation framework.&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;BR&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_DataGenerationFramework.png" mce_src="http://weblogs.asp.net/blogs/astopford/Gallio33/v32_MbUnit_DataGenerationFramework.png"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;Also see this series of posts on the&amp;nbsp;&lt;A href="http://interfacingreality.blogspot.com/search/label/Data%20Generation%20Framework" mce_href="http://interfacingreality.blogspot.com/search/label/Data%20Generation%20Framework"&gt;MbUnit Data Generation Framework&lt;/A&gt;.&lt;/DIV&gt;
&lt;DIV mce_keep="true"&gt;&lt;BR&gt;Other&lt;/DIV&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;A href="http://gallio.org/wiki/doku.php?id=gallio:debugging_with_symbols_and_source_code" mce_href="http://gallio.org/wiki/doku.php?id=gallio:debugging_with_symbols_and_source_code"&gt;Gallio\MbUnit debug symbols&lt;/A&gt;.&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Installs in the correct program files folder when using a 64 bit OS.&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;New &lt;A href="http://gallio.org/wiki/doku.php?id=tools:format_report_utility_command" mce_href="http://gallio.org/wiki/doku.php?id=tools:format_report_utility_command"&gt;command line option&lt;/A&gt; in Gallio.Utility to format an existing XML report.&amp;nbsp;&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Supports&amp;nbsp;.NET 4.0&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Support&amp;nbsp;for R# 5.0 and 5.1.&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Support for XUnit 1.6.1 and NUnit 2.5.7&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;&lt;A href="http://code.google.com/p/mb-unit/issues/list?can=1&amp;amp;q=status=Fixed%20milestone=3.2%20type=Defect#" mce_href="http://code.google.com/p/mb-unit/issues/list?can=1&amp;amp;q=status=Fixed%20milestone=3.2%20type=Defect#"&gt;A number of bug fixes&lt;/A&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;This release was made possible with contributions from Jeff Brown, Yann Trevin, Graham Hay, Vadim Kreyin and Andy Stopford. The core team also wishes to thank the help of Euan Garden, Bruce Taimana and Michael Koltachev.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Finally, with this release I am resuming my role as MbUnit's poobah and help drive Gallio and MbUnit on to the next milestone.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7618908" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/MbUnit/default.aspx">MbUnit</category><category domain="http://weblogs.asp.net/astopford/archive/tags/.NET/default.aspx">.NET</category></item><item><title>OCP : Open Closed Principle</title><link>http://weblogs.asp.net/astopford/archive/2010/08/16/orp-open-closed-principle.aspx</link><pubDate>Mon, 16 Aug 2010 12:31:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7595316</guid><dc:creator>andrewstopford</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7595316</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/08/16/orp-open-closed-principle.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;The O in the &lt;A href="http://en.wikipedia.org/wiki/Solid_(object-oriented_design)" mce_href="http://en.wikipedia.org/wiki/Solid_(object-oriented_design)"&gt;SOLID &lt;/A&gt;principles, Uncle Bob explains this simply&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;A class and it's component parts&lt;/EM&gt; should be Open for extension and Closed for modification.&lt;/P&gt;
&lt;P mce_keep="true"&gt;To follow this principle let's take the clock object again. We know from SRP what parts are responsible for what and when we mix these we can create new kinds of clocks. Certain things may be internal to a clock part such as the clock face.&lt;/P&gt;
&lt;P mce_keep="true"&gt;The clock face may be composed of several different things such as the display, hands and numbers etc. If the face was to change from say roman dail to micky mouse we don't want to have one clock face object that we have to keep changing\rewriting for every different kind of face (you risk code duplication) but instead give it (extend it) the component parts it needs. A mickey mouse clock face would have mickey mouse hands, display and numbers but would display the hours\minutes via the rest of the clock object in the same way as the roman dail or any other type of clock face.&lt;/P&gt;
&lt;P mce_keep="true"&gt;In software terms the way we achieve OCP is with either simple inheritance or dependency injection. More on these in later posts.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7595316" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://weblogs.asp.net/astopford/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>Use Gallio with SharpDevelop</title><link>http://weblogs.asp.net/astopford/archive/2010/08/03/use-gallio-with-sharpdevelop.aspx</link><pubDate>Tue, 03 Aug 2010 12:09:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7577917</guid><dc:creator>andrewstopford</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7577917</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/08/03/use-gallio-with-sharpdevelop.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Matt Ward has a sample &lt;A href="http://community.sharpdevelop.net/blogs/mattward/archive/2010/05/31/CodeSampleGallioAddin.aspx" mce_href="http://community.sharpdevelop.net/blogs/mattward/archive/2010/05/31/CodeSampleGallioAddin.aspx"&gt;that shows how to write a plugin for Gallio&lt;/A&gt; that can then integrate with the SharpDevelop IDE.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://wiki.sharpdevelop.net/GetFile.aspx?File=/Samples/GallioAddin/GallioAddin.UnitTestsWindowAfterTestRun.png" mce_src="http://wiki.sharpdevelop.net/GetFile.aspx?File=/Samples/GallioAddin/GallioAddin.UnitTestsWindowAfterTestRun.png"&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7577917" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/MbUnit/default.aspx">MbUnit</category><category domain="http://weblogs.asp.net/astopford/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/astopford/archive/tags/unit+testing/default.aspx">unit testing</category></item><item><title>SRP: Single Responsibility Principle</title><link>http://weblogs.asp.net/astopford/archive/2010/07/22/srp-single-responsibility-principle.aspx</link><pubDate>Thu, 22 Jul 2010 11:23:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7571047</guid><dc:creator>andrewstopford</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7571047</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/07/22/srp-single-responsibility-principle.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;The S in the &lt;A href="http://en.wikipedia.org/wiki/Solid_(object-oriented_design)" mce_href="http://en.wikipedia.org/wiki/Solid_(object-oriented_design)"&gt;SOLID principles&lt;/A&gt; is one of the most simple and most important principles.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Let's take a simple example, one of a clock. A clock might have lot's of parts, parts that keep time, that tell you what the hour and minute of the day are etc.&lt;/P&gt;
&lt;P mce_keep="true"&gt;A clock might also have other parts such a display to output the time. In OO the display would inherit the other clock parts to obtain the time and then display it. In an analouge clock this might include the clock face, hour hands, minute hands etc. In a digital clock this might include an LED display etc. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Now we ask the question while both displays are are concerned with the display of the time, the analouge clock is not concerned with the digital clocks LED display and the digital clock is not concerned with the analouge clocks hour and minute hands etc. Each display is concerned only with it's own display types and does not need to know nor bother with anything else. Both displays are not concerned with keeping the time, that is left to other parts of the clock, the only thing the display is concerned with is showing you the time.&lt;/P&gt;
&lt;P mce_keep="true"&gt;If an LED display was concerned with clock hands it would break the SRP principle.&lt;/P&gt;
&lt;P mce_keep="true"&gt;If we take this back to your coding we apply the SRP principle to everything from class to method, making sure that each is focused on one thing.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7571047" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/Patterns/default.aspx">Patterns</category><category domain="http://weblogs.asp.net/astopford/archive/tags/General+Software+Development/default.aspx">General Software Development</category></item><item><title>Technical Debt</title><link>http://weblogs.asp.net/astopford/archive/2010/07/19/technical-debt.aspx</link><pubDate>Mon, 19 Jul 2010 21:13:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7569695</guid><dc:creator>andrewstopford</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7569695</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/07/19/technical-debt.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Technical Debt is subject that is very close to my heart, I first heard of the concept at a great session that &lt;A href="http://twitter.com/garyshort" mce_href="http://twitter.com/garyshort"&gt;Gary Short&lt;/A&gt; gave and ever since I have found ways of finding and addressing the problem. So what is Technical Debt?&lt;/P&gt;
&lt;P mce_keep="true"&gt;Technical Debt is a like any other kind of debt. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;Shipping first time code is like going into debt. A little debt speeds development so long as it is paid back promptly with a rewrite... The danger occurs when the debt is not repaid. Every minute spent on not-quite-right code counts as interest&amp;nbsp;on that debt. Entire engineering organizations can be brought to a stand-still under the debt load of an unconsolidated implementation,&amp;nbsp;OO&amp;nbsp;or otherwise.&amp;nbsp;-&amp;nbsp;&lt;A href="http://en.wikipedia.org/wiki/Technical_debt#cite_note-oopsla92-0" mce_href="http://en.wikipedia.org/wiki/Technical_debt#cite_note-oopsla92-0"&gt;Ward Cunningham.&lt;/A&gt;&lt;/EM&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;So what causes Technical Debt, for that&amp;nbsp;I'am going to borrow &lt;A href="http://martinfowler.com/bliki/TechnicalDebtQuadrant.html" mce_href="http://martinfowler.com/bliki/TechnicalDebtQuadrant.html"&gt;Martin Fowlers great quadrant diagram&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://martinfowler.com/bliki/techDebtQuadrant.png" width=426 height=317 mce_src="http://martinfowler.com/bliki/techDebtQuadrant.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Every hack, work around, bad piece of code builds technical debt. So what it is the cost, an image from&lt;A href="http://www.coderfriendly.com/2010/04/08/do-your-team-members-agree-on-when-a-feature-is-done/" mce_href="http://www.coderfriendly.com/2010/04/08/do-your-team-members-agree-on-when-a-feature-is-done/"&gt; this great article&lt;/A&gt; sums it up well.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 461px; HEIGHT: 266px" src="http://www.coderfriendly.com/wp-content/uploads/2010/04/technical_debt_customer.JPG" width=461 height=266 mce_src="http://www.coderfriendly.com/wp-content/uploads/2010/04/technical_debt_customer.JPG"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;The real cost of Technical Debt is that for every bad piece of code, it can cause problems to your customers and cost you&amp;nbsp;and&amp;nbsp;your business&amp;nbsp;money. It can cause you defects (and in some cases) cost the business money. It can takes other coders time to find and fix the problems or work with the code, time is money.&lt;/P&gt;
&lt;P mce_keep="true"&gt;As time goes by and theh debt builds up the cost also goes up, the further the problems, the harder to resolve and the bigger the cost. &lt;/P&gt;
&lt;P mce_keep="true"&gt;I'll move into approaches to resolving technical debt in later posts.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7569695" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/astopford/archive/tags/Technical+Debt/default.aspx">Technical Debt</category></item><item><title>Working with Legacy code #7 : The boy scout rule. </title><link>http://weblogs.asp.net/astopford/archive/2010/07/19/working-with-legacy-code-7-the-boy-scout-rule.aspx</link><pubDate>Mon, 19 Jul 2010 20:42:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7569675</guid><dc:creator>andrewstopford</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7569675</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/07/19/working-with-legacy-code-7-the-boy-scout-rule.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Uncle Bob &lt;A href="http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule" mce_href="http://programmer.97things.oreilly.com/wiki/index.php/The_Boy_Scout_Rule"&gt;outlines this concept well&amp;nbsp;in in the 97 rules book.&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;&amp;nbsp;Leave the code a little cleaner than you found it&lt;/EM&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;In other words where you can improve and make better the code you are working in. In legacy code you should follow this concept with a blazing degree of intent. By its very nature legacy code needs to be better and no matter what you are doing or where you will need to improve it.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://www.xprogramming.com/Practices/PracNotNeed.html" mce_href="http://www.xprogramming.com/Practices/PracNotNeed.html"&gt;YANGI?&lt;/A&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;In legacy code it is always a temptation to leave behind the small things. Let's take for example a small function that has two 'return'&amp;nbsp;exit points.&amp;nbsp;While you can agree that such a small function may not cause too many problems and changing the function violates YANGI you can fall into a trap. Some else comes to that function and follows it's structure to add yet more exit points. Soon the function carries more technical debt weight then you came across it.&amp;nbsp; With the boy scott rule you leave nothing behind, if you see it might cause problems not only for you, now, but also for the team in the future you make it better.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7569675" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/astopford/archive/tags/Legacy+Code/default.aspx">Legacy Code</category></item><item><title>Working with Legacy code #6 : Technical Debt</title><link>http://weblogs.asp.net/astopford/archive/2010/07/13/working-with-legacy-code-6-technical-debt.aspx</link><pubDate>Tue, 13 Jul 2010 20:41:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7565068</guid><dc:creator>andrewstopford</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7565068</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/07/13/working-with-legacy-code-6-technical-debt.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;I'm going to write more about &lt;A href="http://www.martinfowler.com/bliki/TechnicalDebt.html" mce_href="http://www.martinfowler.com/bliki/TechnicalDebt.html"&gt;technical debt&lt;/A&gt; at a later date but it is a subject also worth covering at a legacy level.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Legacy code has a high level of technical debt by it's very nature, in following the series so far the debt is being managed and repaid. The danger you face is adding to the technical debt and never overcoming the debt mountain. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Consider very carefully the &lt;A href="http://en.wikipedia.org/wiki/Single_responsibility_principle" mce_href="http://en.wikipedia.org/wiki/Single_responsibility_principle"&gt;single responsibility principle&lt;/A&gt;, legacy code tends&amp;nbsp;not to follow this principle and in the refactoring work your first aim is to strictly&amp;nbsp;follow this principle. Failure to do so can result in code mixing concerns and in turns causes technical debt.&lt;/P&gt;
&lt;P mce_keep="true"&gt;If you&amp;nbsp;start to work with the code more, adding new code and failing to follow this principle can cause technical debt.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;So why technical debt? Consider that when you leave the code behind and some else picks up the code if the code still has problems those problems need to be overcome, that takes time, resource, money (all debt to you, your project and your company). I do hear sometimes debt can be occured if a programmer is unable to work with the principle, such issues&amp;nbsp;should be&amp;nbsp;measured and balanced against the debt (what is the real cost).&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7565068" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/astopford/archive/tags/Legacy+Code/default.aspx">Legacy Code</category></item><item><title>Working with Legacy code #5: The blackhole.</title><link>http://weblogs.asp.net/astopford/archive/2010/06/01/working-with-legacy-code-5-the-blackhole.aspx</link><pubDate>Tue, 01 Jun 2010 21:07:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7514158</guid><dc:creator>andrewstopford</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7514158</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/06/01/working-with-legacy-code-5-the-blackhole.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Someone creates a class or series of classes for something, the classes are big in size with large complicated methods. The effort is a sea of technical debt for the entire team but in the thick of the daily chaos it is lost. With out the coder talking to the team, with no team code policy and&amp;nbsp;no&amp;nbsp;code reviews (and action points) it remains. Pretty soon the team forget about that code.&lt;/P&gt;
&lt;P mce_keep="true"&gt;A few weeks\months\years goes by, some of the team may have left, some may remain but business asks for the team to add to that code. The team is now looking at a black hole, no one knows how it works, what it does, what it is for, it is a smelly hell hole and the deadline is fast approaching. &lt;/P&gt;
&lt;P mce_keep="true"&gt;The team now tries to change the code, with no approach at unit tests or refactoring in fear of breaking the black hole the team do just that and the business have just lost money.&lt;/P&gt;
&lt;P mce_keep="true"&gt;If you are faced with a black hole you need to look back over my series, even a black hole in what might&amp;nbsp;seem like a clean unit tested application. Don't be fooled into thinking that&amp;nbsp;legacy code&amp;nbsp;does not apply to your code base.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;The next stage is don't let blackholes in your codebase. Effective code reviews, team communication and good overal team coding policies will really help. Even if you are faced with a deadline &lt;STRONG&gt;do not let them appear&lt;/STRONG&gt;, stop, take stock, what can be done and who can help. If you allow them through they will grow and grow and grow and the technical debt will hit you like a tidal wave soon enough,.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7514158" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/astopford/archive/tags/Legacy+Code/default.aspx">Legacy Code</category></item><item><title>Working with Legacy code #4 : Remove the hard dependencies</title><link>http://weblogs.asp.net/astopford/archive/2010/06/01/working-with-legacy-code-4-remove-the-hard-dependencies.aspx</link><pubDate>Tue, 01 Jun 2010 20:54:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7514129</guid><dc:creator>andrewstopford</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7514129</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/06/01/working-with-legacy-code-4-remove-the-hard-dependencies.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;During your refactoring cycle you should be seeking out the hard dependencies that the code may have, examples of these can include.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;File System&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Database&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Network (HTTP)&lt;/DIV&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;DIV mce_keep="true"&gt;Application Server (Crystal)&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;Classes that service these kind (or code that can be abstracted to a class) of these kind of dependencies should be wrapped in an interface for easier mocking. If you team starts refering to the interface version of these classes the hard dependency will over time work it's self free.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7514129" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/astopford/archive/tags/Legacy+Code/default.aspx">Legacy Code</category></item><item><title>Gallio and VS2010 code coverage</title><link>http://weblogs.asp.net/astopford/archive/2010/05/04/gallio-and-vs2010-code-coverage.aspx</link><pubDate>Tue, 04 May 2010 22:48:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7470363</guid><dc:creator>andrewstopford</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7470363</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/05/04/gallio-and-vs2010-code-coverage.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;Scott mentioned on twitter&amp;nbsp;a great&amp;nbsp;post on using &lt;A href="http://weblogs.asp.net/gunnarpeipman/archive/2010/05/04/how-to-configure-visual-studio-2010-code-coverage-for-asp-net-mvc-unit-tests.aspx" mce_href="http://weblogs.asp.net/gunnarpeipman/archive/2010/05/04/how-to-configure-visual-studio-2010-code-coverage-for-asp-net-mvc-unit-tests.aspx"&gt;VS2010 code coverage with ASP.NET unit tests&lt;/A&gt;&amp;nbsp;with the following comment.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 267px; HEIGHT: 149px" src="http://weblogs.asp.net/blogs/astopford/vs2010cc/4.png" width=408 height=238 mce_src="http://weblogs.asp.net/blogs/astopford/vs2010cc/4.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;So I&amp;nbsp;figured I would work up a quick post on&amp;nbsp;using Gallio with the code coverage features (and thus MbUnit, NUnit etc).&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Using Gallio with the VS2010&amp;nbsp;code coverage features is exactly the same as you would use&amp;nbsp;MSTest. Just enable the code coverage collector.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/vs2010cc/1.png" mce_src="http://weblogs.asp.net/blogs/astopford/vs2010cc/1.png"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Select the assembly you want to profile (double click the collector to do this)&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/vs2010cc/3.png" mce_src="http://weblogs.asp.net/blogs/astopford/vs2010cc/3.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Run your test&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 391px; HEIGHT: 88px" src="http://weblogs.asp.net/blogs/astopford/vs2010cc/5.png" width=391 height=88 mce_src="http://weblogs.asp.net/blogs/astopford/vs2010cc/5.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;Right Click and select code coverage.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/vs2010cc/2.png" mce_src="http://weblogs.asp.net/blogs/astopford/vs2010cc/2.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7470363" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/MbUnit/default.aspx">MbUnit</category><category domain="http://weblogs.asp.net/astopford/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/astopford/archive/tags/VS10/default.aspx">VS10</category></item><item><title>Gallio and VS2010</title><link>http://weblogs.asp.net/astopford/archive/2010/04/13/gallio-and-vs2010.aspx</link><pubDate>Tue, 13 Apr 2010 22:41:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7442801</guid><dc:creator>andrewstopford</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7442801</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/04/13/gallio-and-vs2010.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;With the launch of VS2010 this week it seems like a good time to talk about some of the work that has been going on with Gallio to integrate with VS2010. This work will be a feature of the next release, no beta yet but&amp;nbsp;you are welcome to try the&amp;nbsp;nightly builds (all normal risks apply etc).&amp;nbsp;Just like VS08 you can use the VS Test Runner to run Gallio tests (such as MbUnit) in the same way you can MSTest.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 193px; HEIGHT: 164px" src="http://weblogs.asp.net/blogs/astopford/vs2010/2.png" width=193 height=164 mce_src="http://weblogs.asp.net/blogs/astopford/vs2010/2.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;With Gallio installed&amp;nbsp;the Test View window shows a Gallio (in this case MbUnit) test loaded (note the icon). If I go ahead and run this test I can see it working in the Test Results window.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 365px; HEIGHT: 96px" src="http://weblogs.asp.net/blogs/astopford/vs2010/3.png" width=365 height=96 mce_src="http://weblogs.asp.net/blogs/astopford/vs2010/3.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;In VS2010 you can collect additonal data that a test can include (system data, intellitrace data etc). If I set VS to collect system data and run the test I can click the 'Test run completed' link and see that it is included.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/vs2010/4.png" mce_src="http://weblogs.asp.net/blogs/astopford/vs2010/4.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;If I also right click in the Test Results window I can select "View Test Results Details" and a Gallio test results window will load up.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG src="http://weblogs.asp.net/blogs/astopford/vs2010/5.png" mce_src="http://weblogs.asp.net/blogs/astopford/vs2010/5.png"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Note that Gallio treats the collector data as attachments so you can go ahead and view the attachment data right from the report.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7442801" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/MbUnit/default.aspx">MbUnit</category><category domain="http://weblogs.asp.net/astopford/archive/tags/.NET/default.aspx">.NET</category><category domain="http://weblogs.asp.net/astopford/archive/tags/VS10/default.aspx">VS10</category></item><item><title>Working with Legacy code #3 : Build a safety net.</title><link>http://weblogs.asp.net/astopford/archive/2010/04/11/working-with-legacy-code-3-build-a-safety-net.aspx</link><pubDate>Sat, 10 Apr 2010 23:06:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7438979</guid><dc:creator>andrewstopford</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7438979</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/04/11/working-with-legacy-code-3-build-a-safety-net.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;The first port of call in changing legacy code is a safety net, without one your fingers will get burnt. Make your safety net a high level&amp;nbsp;functional test over the major areas of the application. Automate the test, plug it into your CI builds&amp;nbsp;and run it every night. The test should act as a final fail safe&amp;nbsp;as you work.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7438979" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/astopford/archive/tags/Legacy+Code/default.aspx">Legacy Code</category></item><item><title>Working with Legacy code #2 : Understand it.</title><link>http://weblogs.asp.net/astopford/archive/2010/04/05/working-with-legacy-code-2-understand-it.aspx</link><pubDate>Mon, 05 Apr 2010 20:19:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7431612</guid><dc:creator>andrewstopford</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/astopford/rsscomments.aspx?PostID=7431612</wfw:commentRss><comments>http://weblogs.asp.net/astopford/archive/2010/04/05/working-with-legacy-code-2-understand-it.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;In my last post I suggested drawing up a plan, the plan might be based on what you and the team already know of the code and your experiences so far in coding, fixing and refactoring attempts on the code base. Your plan might need further detail when you start to get into the finer detail of the codebase and into areas you and team may have never have been into before.&lt;/P&gt;
&lt;P mce_keep="true"&gt;There are a great deal of ways you can do this, simple debugging and breakpoint for example but the detail learned can be lost if only ever used by it's self. Another approach is logging intercepts to log method calls as and when they occur. Using something like log4net can allow you to log to what ever&amp;nbsp;medium you want with relative ease, if you don't want to leave logging calls around then a clean solution is&amp;nbsp;&lt;A href="http://code.google.com/p/postsharp-user-plugins/wiki/Log4PostSharp" mce_href="http://code.google.com/p/postsharp-user-plugins/wiki/Log4PostSharp"&gt;combine with&amp;nbsp;PostSharp&lt;/A&gt;. A third approach is a static analysis tool such as&amp;nbsp;&lt;A href="http://www.ndepend.com/" mce_href="http://www.ndepend.com/"&gt;NDepend&lt;/A&gt; which allows you to really drill into the codebase. A fouth approach is to use code profiling tools like &lt;A href="http://www.red-gate.com/products/ants_performance_profiler/index.htm" mce_href="http://www.red-gate.com/products/ants_performance_profiler/index.htm"&gt;ANTS&lt;/A&gt; or &lt;A href="http://www.jetbrains.com/profiler/" mce_href="http://www.jetbrains.com/profiler/"&gt;dotTrace&lt;/A&gt;.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Combining the above can be a very&amp;nbsp;powerful way of getting what the code is doing, for example tracing the code to understand the paths through the code that is taken and using static analysis tools to explore those&amp;nbsp;classes\methods dependencies further.&lt;/P&gt;
&lt;P mce_keep="true"&gt;The final step is documenting what you find, the more you find the more may go onto your plan. Your findings may change the order of your plan&amp;nbsp;if you find objects are&amp;nbsp;worse than you first thought.&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7431612" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/astopford/archive/tags/General+Software+Development/default.aspx">General Software Development</category><category domain="http://weblogs.asp.net/astopford/archive/tags/Legacy+Code/default.aspx">Legacy Code</category></item></channel></rss>