<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/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>Living .NET...  : Review</title><link>http://msmvps.com/blogs/manoj/archive/tags/Review/default.aspx</link><description>Tags: Review</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Being Test-Driven</title><link>http://msmvps.com/blogs/manoj/archive/2005/05/22/Being-Test_2D00_Driven.aspx</link><pubDate>Sat, 21 May 2005 18:40:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:48298</guid><dc:creator>Manoj G</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/manoj/rsscomments.aspx?PostID=48298</wfw:commentRss><comments>http://msmvps.com/blogs/manoj/archive/2005/05/22/Being-Test_2D00_Driven.aspx#comments</comments><description>&lt;p&gt;&lt;font color="#000066" face="verdana,geneva"&gt;NUnit and other popular and freely available unit testing frameworks have been here for enough time for people to absorb unit testing in their .NET development environments. Does just having parallel NUnit test cases for your code suffice to being truly test driven? In the following sections, I have tried to put down what I think about this whole thing.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000066" face="verdana,geneva"&gt;Putting the very tenets of test driven development at the outset, the answer would be a straight &amp;lsquo;No&amp;#39;. So, what are these tenets? In my opinion, the most important tenets are: &lt;/font&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;font color="#000066" face="verdana,geneva"&gt;Test-First development&lt;/font&gt;&lt;/li&gt;&lt;li&gt;&lt;font color="#000066" face="verdana,geneva"&gt;Designing for testability&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;font color="#000066" face="verdana,geneva"&gt;Test-first development did not make sense to me at first. The very concept of writing unit test cases before writing the application code, appeared to be against the norm.&amp;nbsp;But if you take a hard look at it, you will see a value in writing test cases upfront. You will realize that it is the best scheme in building confidence in the code you are going to construct. Test cases built that way would be the guardian angels of the quality of code you write. In fact, I have started to believe that writing unit tests after you have churned out all the code does not add any value. You would be better off just testing manually - either running through the system&amp;#39;s functionality or by just walking through the code. The reason being you, as a developer, would be more biased towards what the code does, rather than what it should actually be doing.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000066" face="verdana,geneva"&gt;Like test-first development, designing for testability is not something that is typically at our disposition. Well, it is not any new model of design per se; it is just about taking your design and then asking these questions- is this suitable enough for me to write test cases against? Is it possible to create atomic units that can be tested and verified in isolation? This is definitely not as easy, as we typically tight-couple the layers in our application, rendering&amp;nbsp;them difficult to test them as separate units. Design&amp;nbsp;weaves the fabric of the application and hence, this tenet should be treated with a lot of importance. Because, having a design that makes it difficult to test individual units defeats the very purpose of unit testing.&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000066" face="verdana,geneva"&gt;Test-Driven development is a journey that I have embarked upon, and it is not going to be rosy to start with. The slogan - Red=&amp;gt;Green=&amp;gt;Refactor=&amp;gt;Test-Driven is all planted into my workplace, but I know, it would take more than that to imbibe it wholly into my daily work. But, I shall get there eventually. &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#000066" face="verdana,geneva"&gt;So, are you ready to be test-driven?&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=48298" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/manoj/archive/tags/Review/default.aspx">Review</category></item><item><title>Refactoring and ReSharper</title><link>http://msmvps.com/blogs/manoj/archive/2005/04/11/41587.aspx</link><pubDate>Mon, 11 Apr 2005 06:31:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:41587</guid><dc:creator>Manoj G</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/manoj/rsscomments.aspx?PostID=41587</wfw:commentRss><comments>http://msmvps.com/blogs/manoj/archive/2005/04/11/41587.aspx#comments</comments><description>&lt;P&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;I believe, all the published coding methodologies, practices and guidelines strive to achieve one simple thing: I said it - Simplicity - making things simple, easier to understand, easier to maintain. &lt;STRONG&gt;Refactoring&lt;/STRONG&gt;, is one such practice, which we all might have been doing for ages, perhaps without knowing that the practice is labeled 'Refactoring'. By definition, Refactoring is all about changing the structure of code without changing its expected behavior. Why do it - to simplify, simply put. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;There are many refactoring techniques one might want to use with respect to object oriented programming. I wouldn't enunciate all of them here; I would recommend Martin Fowler's most &lt;A href="http://www.amazon.com/exec/obidos/ASIN/0201485672/qid=1113200082/sr=2-1/ref=pd_bbs_b_2_1/102-1289196-1703368"&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;excellent book&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;for the same. Consider one such common technique - &lt;STRONG&gt;Rename&lt;/STRONG&gt;. As benign as this might appear, Renaming is one of the most powerful steps towards simplicity. Be it a member variable, a formal parameter, a method name or the class name, proper (re)naming should portray the true intent and eliminate the need for comments. Another common technique is &lt;STRONG&gt;Extract Method&lt;/STRONG&gt;. More often than not, a method gets bulky and its real intent starts becoming hazy. At such times, you may want to break it up into smaller methods so that the code becomes more 'readable' and hence maintainable.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;Now, the techniques that I have just mentioned require some amount of manual effort in the code editor (IDE). For instance, changing the name of a member variable would mean changing&amp;nbsp;them in all class methods where it is used. These changes could be drastic, if the members/methods are public. Manual effort is but, error prone and typically, refactoring entails unit tests to certify that expected behavior is not violated. To that end, wouldn't it be great to have a tool of sorts which automates most of such common refactoring techniques? VS.NET is a far cry in this respect; so, &lt;A href="http://www.jetbrains.com/resharper/"&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;ReSharper&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&amp;nbsp;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;comes to the rescue!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#000080&gt;Well actually, the very purpose of this blog post was to share with you, my experiences of working with this fabulous tool. &lt;/FONT&gt;&lt;FONT color=#000080&gt;ReSharper is essentially, a refactoring tool that comes as an add-on to the VC# IDE provided by VS.NET 2003. In addition to facilitating some refactoring techniques, ReSharper provides enhanced navigation, formatting and intellisense enhancements over and above what VS.NET provides, which make C# development even more pleasurable. There is good reason to see why VS 2005 provides most, if not all of what ReSharper provides already. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;
&lt;P&gt;Well yes, as the name would suggest, ReSharper is a tool that works only with C#. I don&amp;#8217;t want to get too philosophical here, but it seems as if VB.NET was perhaps, alienated from ReSharper for the same reason why Refactoring (or most of it) was opted out of VB 2005. (Ofcourse, time and scope, among many other things could have been a reason). In my opinion, refactoring is a technique that cuts across all languages and has to be adopted (I must say religiously) by all programmers, whatever be their language of choice for development. I am also of the opinion that IDEs have to provide refactoring support in some form or the other. &lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;&lt;FONT color=#000080 size=2&gt;Nonetheless, ReSharper has been one of the best developer tools I have ever worked with. It is truly a developer productivity enhancer and I personally would recommend ReSharper for every C# developer working on VS.NET 2003. Its more than worth 149$; go get your copy today. &lt;/FONT&gt;&lt;FONT color=#000080 size=2&gt;With ReSharper, refactoring is fun too !&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=41587" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/manoj/archive/tags/Review/default.aspx">Review</category></item><item><title>COmega</title><link>http://msmvps.com/blogs/manoj/archive/2004/07/29/10891.aspx</link><pubDate>Thu, 29 Jul 2004 17:27:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:10891</guid><dc:creator>Manoj G</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/manoj/rsscomments.aspx?PostID=10891</wfw:commentRss><comments>http://msmvps.com/blogs/manoj/archive/2004/07/29/10891.aspx#comments</comments><description>&lt;DIV&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&lt;STRONG&gt;COmega&lt;/STRONG&gt; is a research language (from MSR, where else) which gives really powerful extensions to C#.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;To summarize, there are two extensions : X# (Xen) and Polyphonic C#. Check out &lt;/FONT&gt;&lt;A href="http://research.microsoft.com/Comega/"&gt;&lt;STRONG&gt;&lt;FONT color=#0000ff&gt;COmega Home&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/A&gt;&lt;FONT color=#000080&gt; for more on what these really are. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;You can download the COmega compiler preview from the &lt;FONT color=#0000ff&gt;&lt;STRONG&gt;&lt;A href="http://research.microsoft.com/research/downloads/default.aspx"&gt;MSR downloads page&lt;/A&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;. This includes VS.NET templates, command line tools, documentation and lots of&amp;nbsp;samples.&lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;I was blown away by the raw power Comega provides as a programming language. So much so, that &amp;nbsp;I am really interested in joining a COmega SIG, if there is one, or probably start one, perhaps !!! &lt;/FONT&gt;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;FONT face=Verdana color=#000080 size=2&gt;I have not yet really delved into all aspects of the language (especially Polyphonic C#), but will do it and will definitely come back with more posts on the same.&lt;/FONT&gt;&lt;/DIV&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=10891" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/manoj/archive/tags/Review/default.aspx">Review</category></item></channel></rss>