<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Adil Akhter</title><link>https://weblogs.asp.net:443/adilakhter/</link><description> on software engineering</description><item><title>Solving SPOJ 346. Bytelandian Gold Coins (COINS)  with Dynamic Programming and F#</title><link>https://weblogs.asp.net:443/adilakhter/spoj-346-bytelandian-gold-coins-coins-with-dynamic-programming-and-f</link><description>The &lt;a href="http://www.spoj.com/problems/COINS/" mce_href="http://www.spoj.com/problems/COINS/" target="_blank"&gt;Bytelandian Gold Coins&lt;/a&gt; problem, officially published in &lt;a href="http://www.spoj.com" mce_href="http://www.spoj.com" target="_blank"&gt;SPOJ&lt;/a&gt;, is centered around  computing the maximum dollars that can be exchanged for a Bytelandian gold coin. In this post, we outline a solution to this problem with &lt;a href="http://en.wikipedia.org/wiki/Memoization" mce_href="http://en.wikipedia.org/wiki/Memoization" target="_blank"&gt;memoization&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/F_Sharp_(programming_language)" mce_href="http://en.wikipedia.org/wiki/F_Sharp_(programming_language)" target="_blank"&gt;F#&lt;/a&gt;.&lt;h3&gt;Interpretation&lt;/h3&gt;
The problem definition enforces following rules to perform the exchange. Consider, a Bytelandian gold coin &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n"&gt; --

&lt;blockquote&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;a href="http://adilakhter.files.wordpress.com/2013/02/noun_project_855142.png" mce_href="http://adilakhter.files.wordpress.com/2013/02/noun_project_855142.png"&gt;&lt;img src="http://adilakhter.files.wordpress.com/2013/02/noun_project_855142_thumb.png" style="display:inline;" title="noun_project_8551" alt="noun_project_8551" mce_src="http://adilakhter.files.wordpress.com/2013/02/noun_project_855142_thumb.png" height="15" width="15"&gt;&lt;/a&gt; It can be exchanged to three other coins, i.e.,&lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=%5Cleft(%5Cfrac%7Bn%7D%7B2%7D%2C%20%5Cfrac%7Bn%7D%7B3%7D%2C%20%5Cfrac%7Bn%7D%7B4%7D%5Cright)" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=%5Cleft(%5Cfrac%7Bn%7D%7B2%7D%2C%20%5Cfrac%7Bn%7D%7B3%7D%2C%20%5Cfrac%7Bn%7D%7B4%7D%5Cright)"&gt; coins. Thus,  coin  &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n"&gt; yields &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=%5Cleft(%5Cfrac%7Bn%7D%7B2%7D%2B%5Cfrac%7Bn%7D%7B3%7D%2B%5Cfrac%7Bn%7D%7B4%7D%5Cright)" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=%5Cleft(%5Cfrac%7Bn%7D%7B2%7D%2B%5Cfrac%7Bn%7D%7B3%7D%2B%5Cfrac%7Bn%7D%7B4%7D%5Cright)"&gt; value in bytelandian gold coins.&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://adilakhter.files.wordpress.com/2013/02/noun_project_855142.png" mce_href="http://adilakhter.files.wordpress.com/2013/02/noun_project_855142.png"&gt;&lt;img src="http://adilakhter.files.wordpress.com/2013/02/noun_project_855142_thumb.png" style="display:inline;" title="noun_project_8551" alt="noun_project_8551" mce_src="http://adilakhter.files.wordpress.com/2013/02/noun_project_855142_thumb.png" height="15" width="15"&gt;&lt;/a&gt; Alternatively, &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n"&gt; coin can be exchanged for &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n"&gt; dollars.&lt;/div&gt;&lt;/blockquote&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
Our objective is to derive an algorithm that maximizes the dollars exchanged from the gold coin &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n"&gt;. &lt;a href="http://wp.me/p9jkj-nQ" mce_href="http://wp.me/p9jkj-nQ" target="_blank"&gt;(read more)&lt;/a&gt;</description><pubDate>Mon, 15 Apr 2013 15:30:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/spoj-346-bytelandian-gold-coins-coins-with-dynamic-programming-and-f</guid><category>algorithm</category><category>DynamicProgramming</category><category>F#</category><category>ProblemSolving</category><category>spoj</category></item><item><title>UVa 10664. Luggage with Dynamic Programming</title><link>https://weblogs.asp.net:443/adilakhter/uva-10664-luggage-with-dynamic-programming</link><description>&lt;p&gt;The &lt;a href="http://uva.onlinejudge.org/index.php?option=com_onlinejudge&amp;amp;Itemid=8&amp;amp;page=show_problem&amp;amp;problem=1605" mce_href="http://uva.onlinejudge.org/index.php?option=com_onlinejudge&amp;amp;Itemid=8&amp;amp;page=show_problem&amp;amp;problem=1605" target="_blank"&gt;UVa 10664: Luggage&lt;/a&gt; is a typical example of the problems that can be solved using &lt;a href="http://en.wikipedia.org/wiki/Dynamic_programming" mce_href="http://en.wikipedia.org/wiki/Dynamic_programming" target="_blank"&gt;dynamic programming&lt;/a&gt; (DP) technique. In fact, after further analysis, this problem can be realized as a special case of &lt;span id="dottedDiv"&gt;Subset-Sum problem&lt;/span&gt;, which we have discussed in &lt;a href="https://adilakhter.wordpress.com/2013/02/27/spoj-8545-subset-sum-main72-with-dynamic-programming-and-f/" mce_href="https://adilakhter.wordpress.com/2013/02/27/spoj-8545-subset-sum-main72-with-dynamic-programming-and-f/" target="_blank"&gt;a recent post&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;The following Java code snippet outlines an algorithm using dynamic programming to solve this problem.&lt;b&gt; &lt;a href="http://adilakhter.wordpress.com/2013/03/08/uva-10664-luggage-with-dynamic-programming-and-java/" mce_href="http://adilakhter.wordpress.com/2013/03/08/uva-10664-luggage-with-dynamic-programming-and-java/" target="_blank"&gt;(read more)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;</description><pubDate>Sat, 13 Apr 2013 12:51:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/uva-10664-luggage-with-dynamic-programming</guid><category>DynamicProgramming</category><category>Java</category><category>UVa</category></item><item><title>Solving SPOJ 97. Party Schedule with Dynamic Programing and F#</title><link>https://weblogs.asp.net:443/adilakhter/solving-spoj-97-party-schedule-with-dynamic-programing-and-f</link><description>The &lt;a href="http://www.spoj.com/problems/PARTY/" mce_href="http://www.spoj.com/problems/PARTY/" target="_blank"&gt;Party Schedule problem&lt;/a&gt;, published in &lt;a href="http://www.spoj.com" mce_href="http://www.spoj.com" target="_blank"&gt;SPOJ&lt;/a&gt; website, is about deriving an optimal set of parties that maximizes &lt;i&gt;fun value&lt;/i&gt;, given a party budget: &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=C" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=C"&gt; and &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=n"&gt; parties: &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=%5C%7B1%2C2%2C...%2Cn%5C%7D" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=%5C%7B1%2C2%2C...%2Cn%5C%7D"&gt; where each party &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=i%20%3D%201%2C2%2C...%2Cn" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=i%20%3D%201%2C2%2C...%2Cn"&gt; have an entrance cost &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=c_i" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=c_i"&gt;, and is associated with a fun value &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=v_i" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=v_i"&gt;. In this post, we discuss how to solve this problem by first outlining an &lt;a href="http://en.wikipedia.org/wiki/Algorithm" mce_href="http://en.wikipedia.org/wiki/Algorithm" target="_blank"&gt;algorithm&lt;/a&gt;, and afterwards, by implementing that using &lt;a href="http://en.wikipedia.org/wiki/F_Sharp_(programming_language)" mce_href="http://en.wikipedia.org/wiki/F_Sharp_(programming_language)" target="_blank"&gt;F#&lt;/a&gt;. This problem is a special case of  &lt;a href="http://en.wikipedia.org/wiki/Knapsack_problem" mce_href="http://en.wikipedia.org/wiki/Knapsack_problem" target="_blank"&gt;Knapsack problem&lt;/a&gt;. Main objective of this problem is to select a subset of parties that maximizes &lt;i&gt;fun value&lt;/i&gt;, subject to the restriction that the budget must not &lt;i&gt;exceed&lt;/i&gt; &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=C" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=C"&gt;. More formally, we are given a budget &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=C" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=C"&gt; as the bound. All parties &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=i%5Cin%5C%7B1%2C2%2C...%2Cn%5C%7D" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=i%5Cin%5C%7B1%2C2%2C...%2Cn%5C%7D"&gt; have costs &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=c_i" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=c_i"&gt; and values &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=v_i" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=v_i"&gt;. We have to select a subset &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=S" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=S"&gt; such that &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=%5Csum%20_%7B%20i%5Cin%20S%20%7D%5E%7B%20%20%7D%7B%20%7B%20v%20%7D_%7B%20i%20%7D%20%7D" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=%5Csum%20_%7B%20i%5Cin%20S%20%7D%5E%7B%20%20%7D%7B%20%7B%20v%20%7D_%7B%20i%20%7D%20%7D"&gt; is as large as possible, and subject to the following restriction-- &lt;b&gt;&lt;a href="http://wp.me/p9jkj-j6" mce_href="http://wp.me/p9jkj-j6" target="_blank"&gt;(read more)&lt;/a&gt;&lt;/b&gt;</description><pubDate>Thu, 11 Apr 2013 06:15:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/solving-spoj-97-party-schedule-with-dynamic-programing-and-f</guid><category>.Net</category><category>algorithm</category><category>DynamicProgramming</category><category>fsharp</category><category>KnapsackProblem</category><category>ProblemSolving</category><category>spoj</category></item><item><title>Solving Subset Sum with Dynamic Programming and F#</title><link>https://weblogs.asp.net:443/adilakhter/solving-ubset-sum-with-dynamic-programming-and-f</link><description>&lt;p&gt;The &lt;a href="http://www.spoj.com/problems/MAIN72/" mce_href="http://www.spoj.com/problems/MAIN72/" target="_blank"&gt;Subset Sum (Main72)&lt;/a&gt; problem, officially published in &lt;a href="http://www.spoj.com" mce_href="http://www.spoj.com" target="_blank"&gt;SPOJ&lt;/a&gt;, is about computing the sum of all integers that can be obtained from the summations over any subset of the given set (of integers). A naïve solution would be to derive all the subsets of the given set, which unfortunately would result in&amp;nbsp; &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=O(2%5EN)" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=O(2%5EN)"&gt; time complexity, given that &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=N" alt="" mce_src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=N"&gt; is the number of elements in the set. This post outlines a more efficient (&lt;span id="dottedDiv"&gt;pseudo-polynomial&lt;/span&gt;) solution to this problem using &lt;a href="http://en.wikipedia.org/wiki/Dynamic_programming" target="_blank"&gt;Dynamic Programming&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/F_Sharp_(programming_language)" target="_blank"&gt;F#&lt;/a&gt;. Additionally, we post &lt;a href="http://en.wikipedia.org/wiki/C_Sharp_(programming_language)" target="_blank"&gt;C#&lt;/a&gt; code of the solution...&lt;b&gt;&lt;a href="https://adilakhter.wordpress.com/2013/02/27/spoj-8545-subset-sum-main72-with-dynamic-programming-and-f/" mce_href="https://adilakhter.wordpress.com/2013/02/27/spoj-8545-subset-sum-main72-with-dynamic-programming-and-f/" target="_blank"&gt;(read more)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
</description><pubDate>Wed, 10 Apr 2013 21:31:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/solving-ubset-sum-with-dynamic-programming-and-f</guid><category>algorithm</category><category>DynamicProgramming</category><category>F#</category><category>ProblemSolving</category><category>spoj</category></item><item><title>Levenshtein Distance with F#</title><link>https://weblogs.asp.net:443/adilakhter/levenshtein-distance-with-f</link><description>This &lt;a href="http://www.spoj.com/problems/EDIST/" mce_href="http://www.spoj.com/problems/EDIST/" target="_blank"&gt;problem&lt;/a&gt; can be solved using&lt;a href="http://en.wikipedia.org/wiki/Dynamic_programming" mce_href="http://en.wikipedia.org/wiki/Dynamic_programming" target="_blank"&gt; dynamic programming&lt;/a&gt; with &lt;a href="http://en.wikipedia.org/wiki/Memoization" mce_href="http://en.wikipedia.org/wiki/Memoization" target="_blank"&gt;memoization &lt;/a&gt;technique. In essence, it is about computing the &lt;b&gt;Edit Distance&lt;/b&gt;, also known as, &lt;a href="http://en.wikipedia.org/wiki/Levenshtein_distance" mce_href="http://en.wikipedia.org/wiki/Levenshtein_distance" target="_blank"&gt;Levenshtein Distance&lt;/a&gt; between two given strings.

&lt;p&gt;&lt;b&gt;Definition&lt;/b&gt;. Edit Distance—a.k.a “Lavenshtein Distance”--is the minimum number of edit operations required to transform one word into another. The allowable edit operations are letter insertion, letter deletion and letter substitution ...&lt;b&gt;&lt;a href="http://wp.me/p9jkj-go" title="Edit Distance" mce_href="http://wp.me/p9jkj-go"&gt;(read more)&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
</description><pubDate>Wed, 10 Apr 2013 19:20:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/levenshtein-distance-with-f</guid><category>.Net</category><category>algorithm</category><category>DynamicProgramming</category><category>F#</category><category>ProblemSolving</category><category>spoj</category></item><item><title>UVa 10706. Number Sequence with F#</title><link>https://weblogs.asp.net:443/adilakhter/uva-10706-number-sequence-with-f</link><description>&lt;p&gt;This post describes an algorithm to solve &lt;a href="http://uva.onlinejudge.org/external/107/10706.html" title="Problem Description" mce_href="http://uva.onlinejudge.org/external/107/10706.html" target="_blank"&gt;UVa 10706: Number Sequence&lt;/a&gt; problem from &lt;a href="http://uva.onlinejudge.org/" mce_href="http://uva.onlinejudge.org/" target="_blank"&gt;UVa OJ&lt;/a&gt;. Before outlining the algorithm, we first give an overview of this problem in the next section... &lt;b&gt;&lt;a href="http://wp.me/p9jkj-yo" mce_href="http://wp.me/p9jkj-yo"&gt;continue reading.&lt;/a&gt;&lt;/b&gt; &lt;/p&gt;
</description><pubDate>Wed, 10 Apr 2013 18:57:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/uva-10706-number-sequence-with-f</guid><category>algorithm</category><category>BinarySearch</category><category>F#</category><category>ProblemSolving</category><category>UVa</category></item><item><title>UVa 136. Ugly Numbers with F#</title><link>https://weblogs.asp.net:443/adilakhter/uva-136-ugly-numbers-with-f</link><description>&lt;p class="main-content"&gt;
This blog-post is about  &lt;a href="http://uva.onlinejudge.org/external/1/136.html" title="see UVa 136: Ugly Numbers" target="_blank"&gt;&lt;span id="dottedDiv"&gt;UVa 136: Ugly Number&lt;/span&gt;&lt;/a&gt;, a trivial, but interesting UVa problem. The crux involves computing 1500&lt;sup&gt;th&lt;/sup&gt; Ugly number, where a &lt;span id="dottedDiv"&gt;Ugly number&lt;/span&gt; is defined as a number whose  prime factors are only 2, 3 or 5.  Following illustrates a sequence of Ugly numbers:
&lt;/p&gt;

&lt;pre&gt;1,2,3,4,5,6,8,9,10,12,15...&lt;/pre&gt; 


... &lt;a href="http://wp.me/p9jkj-uN" mce_href="http://wp.me/p9jkj-uN"&gt;Continue reading.&lt;/a&gt;

</description><pubDate>Tue, 26 Mar 2013 21:23:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/uva-136-ugly-numbers-with-f</guid><category>F#</category><category>UVa</category></item><item><title>Collatz Problem a.k.a. 3n+1 Problem</title><link>https://weblogs.asp.net:443/adilakhter/collatz-problem-a-k-a-3n-1-problem</link><description>This post focuses on &lt;i&gt;&lt;a href="http://mathworld.wolfram.com/CollatzProblem.html" target="_blank"&gt;Collatz problem&lt;/a&gt;&lt;/i&gt;, which is also known as, among others, the &lt;i&gt;3n+1 problem&lt;/i&gt;, and  the &lt;i&gt;Syracuse problem&lt;/i&gt;.

&lt;b&gt;Outline&lt;/b&gt;. We begin by introducing &lt;i&gt;Collatz conjecture&lt;/i&gt;; afterwards, we presents an algorithm to solve the &lt;img src="http://www.mathtran.org/cgi-bin/toy?D=1;tex=3n%2B1" alt=""&gt; problem (&lt;a href="http://uva.onlinejudge.org/" target="_blank"&gt;UVa 100&lt;/a&gt; or &lt;a href="http://www.spoj.com/problems/PROBTNPO/" target="_blank"&gt;SPOJ 4073&lt;/a&gt;) published in both &lt;a href="http://uva.onlinejudge.org/index.php" target="_blank"&gt;UVa&lt;/a&gt; and &lt;a href="http://www.spoj.com/" target="_blank"&gt;SPOJ&lt;/a&gt;. The primary advantage of having it in SPOJ is that we can use F# to derive a simple and elegant solution; at the same time, we can verify it via SPOJ's online judge...&lt;b&gt; &lt;a href="https://adilakhter.wordpress.com/2013/02/20/collatz-problem-a-k-a-3n1-problem/" title="https://adilakhter.wordpress.com/2013/02/20/collatz-problem-a-k-a-3n1-problem/" target="_blank" mce_href="https://adilakhter.wordpress.com/2013/02/20/collatz-problem-a-k-a-3n1-problem/"&gt;continue reading.&lt;/a&gt;&lt;/b&gt;
</description><pubDate>Tue, 26 Mar 2013 21:21:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/collatz-problem-a-k-a-3n-1-problem</guid><category>.Net</category><category>algorithm</category><category>F#</category><category>spoj</category></item><item><title>Coordination Strategies: Beyond Scrum | Part 3</title><link>https://weblogs.asp.net:443/adilakhter/coordination-strategies-beyond-scrum-part-3</link><description>&lt;p&gt;In the previous &lt;a href="http://weblogs.asp.net/adilakhter/archive/2011/06/07/coordination-strategies-on-successful-implementation-of-global-software-development-using-large-scale-fully-distributed-scrum-part-2.aspx" target="_blank"&gt;post&lt;/a&gt;, we discuss different strategies that are imperative in successful implementation of Scrum process model in the &lt;a href="https://adilakhter.wordpress.com/2010/06/30/importance-of-global-software-development/" target="_blank"&gt;GSD&lt;/a&gt; context. In this post, we take this discussion further by introducing few strategies that are originated from other disciplines than software development; however, can have positive impact on the &lt;a href="https://adilakhter.wordpress.com/2010/07/05/introduction-to-large-scale-fully-distributed-scrum/" target="_blank"&gt;LFDS&lt;/a&gt;. &lt;a href="http://adilakhter.wordpress.com/2010/08/02/coordination-strategies-beyond-scrum-part-3/" target="_blank"&gt;(read more)&lt;/a&gt;&lt;/p&gt;  
</description><pubDate>Tue, 07 Jun 2011 18:40:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/coordination-strategies-beyond-scrum-part-3</guid><category>Agile</category><category>Global Software Development</category><category>Scrum</category></item><item><title>Coordination Strategies: On Successful Implementation of Global Software Development using Large-scale Fully Distributed Scrum| Part 2</title><link>https://weblogs.asp.net:443/adilakhter/coordination-strategies-on-successful-implementation-of-global-software-development-using-large-scale-fully-distributed-scrum-part-2</link><description>In the &lt;a href="https://adilakhter.wordpress.com/2010/07/07/coordination-strategies-on-successful-implementation-of-gsd-using-lfds-part-1/"&gt;previous post&lt;/a&gt;, we discussed the motivation behind employing various coordination strategies while using &lt;a href="https://adilakhter.wordpress.com/2010/07/05/introduction-to-large-scale-fully-distributed-scrum/"&gt;LFDS&lt;/a&gt; in &lt;a href="https://adilakhter.wordpress.com/2010/06/30/importance-of-global-software-development/"&gt;GSD&lt;/a&gt; context. In this post, we discuss several intra- and inter-team coordination strategies to successfully implement &lt;a href="https://adilakhter.wordpress.com/2010/07/05/introduction-to-large-scale-fully-distributed-scrum/"&gt;LFDS&lt;/a&gt; to alleviate the impediments incurred by the &lt;a href="https://adilakhter.wordpress.com/2010/06/30/importance-of-global-software-development/"&gt;GSD&lt;/a&gt;. Two primary aspects – “scaling” and “distribution” of Scrum are the focus of these strategies.  &lt;a href="http://wp.me/p9jkj-9Y"&gt;(read more)&lt;/a&gt;
</description><pubDate>Tue, 07 Jun 2011 18:30:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/coordination-strategies-on-successful-implementation-of-global-software-development-using-large-scale-fully-distributed-scrum-part-2</guid><category>Agile</category><category>Global Software Development</category><category>Scrum</category></item><item><title>Coordination Strategies: On Successful Implementation of Global Software Development using Large-scale Fully Distributed Scrum | Part 1</title><link>https://weblogs.asp.net:443/adilakhter/coordination-strategies-on-successful-implementation-of-global-software-development-using-large-scale-fully-distributed-scrum-part-1</link><description>&lt;p align="justify"&gt;&lt;span style="color:#000000;"&gt;Software engineering is evolving every day to address the ever increasing growth of system’s complexity and size along with the application domains and level of interactions with the other systems. In current era of globalization, with the intention of the increase in productivity and resource utilization, large-scale global software development (&lt;a href="https://adilakhter.wordpress.com/2010/06/30/importance-of-global-software-development/" target="_blank"&gt;GSD&lt;/a&gt;) is a reality. However, it is known that the successful implementation of large-scale &lt;a href="https://adilakhter.wordpress.com/2010/06/30/importance-of-global-software-development/" target="_blank"&gt;GSD&lt;/a&gt; using traditional distributed development process is quite difficult. The consistently increasing popularity of agile software development approaches is the result of their ideology for reducing complexity and focusing strongly on coordination, collaboration and communication. It makes the adaptation of agile methodology, such as- Scrum an obvious choice in the &lt;a href="https://adilakhter.wordpress.com/2010/06/30/importance-of-global-software-development/" target="_blank"&gt;GSD&lt;/a&gt; context. &lt;/span&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;span style="color:#000000;"&gt;However, inherently, Scrum is only meant for local small teams and employing it to the large-scale &lt;a href="https://adilakhter.wordpress.com/2010/06/30/importance-of-global-software-development/" target="_blank"&gt;GSD&lt;/a&gt; is a paradigm shift for this agile process. Therefore, this fact necessitate a pragmatic derivation of coordination strategies or best practices to successfully implement Scrum framework in the large-scale &lt;a href="https://adilakhter.wordpress.com/2010/06/30/importance-of-global-software-development/" target="_blank"&gt;GSD&lt;/a&gt; context. In this post, we start we defining several concepts relevant for this topic. Afterwards, we provide the rational behind these strategies in successful implementation of &lt;a href="https://adilakhter.wordpress.com/2010/06/30/importance-of-global-software-development/" target="_blank"&gt;GSD&lt;/a&gt; powered by &lt;a href="https://adilakhter.wordpress.com/2010/07/05/introduction-to-large-scale-fully-distributed-scrum/" target="_blank"&gt;LFDS&lt;/a&gt;. &lt;/span&gt;  &lt;a href="http://wp.me/p9jkj-9S" target="_blank"&gt;(read more)&lt;/a&gt; &lt;/p&gt;
</description><pubDate>Tue, 07 Jun 2011 18:25:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/coordination-strategies-on-successful-implementation-of-global-software-development-using-large-scale-fully-distributed-scrum-part-1</guid></item><item><title>Essence: Software Language Composition</title><link>https://weblogs.asp.net:443/adilakhter/essence-software-language-composition</link><description>&lt;p&gt;Language composition is one of the desirable aspects of Software Language Engineering to enable reusability of the existing languages.&lt;/p&gt;
  
&lt;p&gt;"From now on, a main goal in designing a language should be to plan for growth.” - Guy Steele: Growing a Language, OOPSLA'98 invited talk[1].&lt;/p&gt;
  
&lt;p&gt;A language should be designed in such a way that evolving it with respect to different language constructs requires the minimum effort. It is well-recognized&amp;nbsp; that designing a high quality language requires considerable effort. Therefore, reusability is a highly desirable property in the context of software language engineering(SLE) that can support language evolution and integration in modest maintenance effort; thus, reusability of languages has become one of the primary research concern in the field of SLE.&lt;/p&gt;
  
&lt;p&gt;The complexity of this problem increases with the ubiquitous proliferation of Domain-specific Languages (&lt;a href="http://wp.me/s1kLXR-dsls" mce_href="http://wp.me/s1kLXR-dsls" target="_blank"&gt;DSLs&lt;/a&gt;) as composition of various &lt;a href="http://wp.me/s1kLXR-dsls" mce_href="http://wp.me/s1kLXR-dsls" target="_blank"&gt;DSLs&lt;/a&gt; in the context of solving different problems has become a real-world use-case scenario. Wider-acceptability of &lt;a href="http://wp.me/s1kLXR-dsls" mce_href="http://wp.me/s1kLXR-dsls" target="_blank"&gt;DSLs&lt;/a&gt; further warrant modular composition of language features since the realization of the &lt;a href="http://wp.me/s1kLXR-dsls" mce_href="http://wp.me/s1kLXR-dsls" target="_blank"&gt; DSLs &lt;/a&gt; can only be discerned if efforts put in their implementation can somehow be optimized. Therefore, just as any other disciplines, reusability is the key here.&lt;/p&gt;
  
&lt;p&gt; These days I am working on designing a meta-language that supports modular definition of the language constructs. Primary objective of this endeavor is to promote "Language-as-a-Library" ideology in software language design. Thus, we envisage that the outcome of this research would be a framework that would facilitate rapid software language development by reusing the exiting language features as much as possible and thus, it will enable cost-effective language development.&lt;/p&gt;
  
&lt;p&gt; The goal of designing language in a modular and reusable manner, I started with a survey to find out the existing state-of-the-art framework that supports these kinds of features. Hence, this blog contributes to this research endeavor by providing an outlook of the&amp;nbsp; existing strategies or patterns of software language composition, the technologies promoting the notion of modular and composable languages; and by reviewing the state-of-the-art approaches of software language composition in solving the relevant issues. &lt;/p&gt;
  
&lt;p&gt;&lt;b&gt;References&lt;/b&gt;&lt;/p&gt;
  
&lt;p&gt;1. Jr., G.L.S.: Growing a language. Higher-Order and Symbolic Computation 12(3), 221–236 (1999).&lt;/p&gt;</description><pubDate>Tue, 08 Feb 2011 20:15:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/essence-software-language-composition</guid><category>Domain-Specific Language</category><category>DSL Engineering</category><category>Language Composition</category></item><item><title>Domain-specific Languages(DSLs)</title><link>https://weblogs.asp.net:443/adilakhter/domain-specific-languages-dsls</link><description>&lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Domain-specific languages (DSLs) are basically programming languages. But they are specifically targeted/tailored towards particular problem domains. Hence, it implies to the fact that DSLs are narrow in applicably unlike General-purpose programming languages(GPLs)[1]; hence, DSL precisely abstracts the domain and its semantics.&amp;#160; At the same time, being specific to a particular problem domains make it hard to reuse and adapt to a new problem domains or to the same evolving domain with new set of requirements.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;a href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/problemdaomin_73675D94.jpg"&gt;&lt;span style="font-size: small"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="problemdaomin" border="0" alt="problemdaomin" src="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/problemdaomin_thumb_063BE13F.jpg" width="447" height="354" /&gt;&lt;/span&gt;&lt;/a&gt;         &lt;br /&gt;&lt;span style="font-size: small"&gt;Figure 1:&amp;#160; DSLs are bridging the semantic gaps.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;em&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;“Only way to manage complexity is to bring order to chaos”&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Complex software systems consist of several concerns such as, performance, reliability , fault-tolerance, persistency. Hence, domain specialization is required to capture these concerns precisely and to perform various analyses specific to the domain. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://wp.me/s1kLXR-dsls"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;DSLs&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt; , thus reduce the complexity of complex systems&amp;#160; by providing high level linguistic abstraction through succinct syntax and by isolating concerns from one another which additionally results in highly cohesive sub-systems.&amp;#160; Following figure illustrate the fact that DSLs covers various concerns of complex software systems vertically rather than horizontally. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;img style="margin: 0px 5px" alt="alt" src="http://languageengineering.files.wordpress.com/2010/11/112110_1327_whoelsewant15.jpg?w=958" width="443" height="391" /&gt;           &lt;br /&gt;&lt;span style="font-size: small"&gt;&lt;em&gt;Figure 2 &lt;/em&gt;:&amp;#160; Vertical domain specialization of DSLs in a complex system.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;     &lt;br /&gt;&lt;!--nextpage--&gt;    &lt;br /&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Although in recent years DSL-centric paradigm gets wider-applicability in various application domains due to the increase of domain specialization, the fundamental ideas[2] of DSLs existed&amp;#160; long before.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;As we were discussing in this blog, the inherent implementation strategies of DSLs warrant re-thinking the software process involved in DSLs development. To a large extent, success of a DSL depends on&amp;#160; the cost-effectiveness of the end product. We believe that it can only be achieved through modularizing definition of DSLs and by promoting reusability of the existing language constructs. Different aspects even when beginning a DSL development thus require careful considerations.&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h3 align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;strong&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Key Properties&amp;#160; of&amp;#160; a DSL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Coverage &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Expressivity&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Completeness&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Portability&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Support for evolution&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;Quality of the generated artifacts.&lt;/span&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;h3 align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;strong&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Types of DSLs&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;  &lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Primarily, DSLs can be categorized into following categories– &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;li&gt;   &lt;div align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;Implicit DSLs&amp;#160; or &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;Explicit DSLs&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/li&gt;  &lt;li&gt;   &lt;div align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Textual DSLs&amp;#160; or Visual DSLs &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;    &lt;h3 align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;strong&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Basic Components of a DSL&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;    &lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Alike GPLs, a DSL is constructed with the following primary components.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;ol&gt;     &lt;li&gt;       &lt;div align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;em&gt;Syntax definition formalism &lt;/em&gt;for defining syntax.&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;A &lt;em&gt;parser&lt;/em&gt; to parse the syntax of DSL and construct Abstract Syntax Tree(AST) or underlying model. ( however, visual DSLs does not require&amp;#160; parsers as AST can be constructed from the end-users’ specification).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;em&gt;Model Transformer. &lt;/em&gt;It performs several model-to-model transformation such as, dusugaring , normalizing , decorating. As such, it annotate more context to AST.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Afterwards, &lt;em&gt;Semantic Analyzer &lt;/em&gt;performs static consistency checking. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;      &lt;li&gt;       &lt;div align="justify"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;em&gt;Code Generators&lt;/em&gt;. Final artifacts are generated through model transformation and string interpolation. In several DSLs, during code generations or in earlier phases, a meta-model is created. Afterwards, artifacts are generated by utilizing this meta-model. This way of creating a meta-model and generating artifacts from it promotes robust and maintainable code generator along with quality outcomes. Complex systems may require additional tuning, which can be facilitated via &lt;em&gt;Code Customization&amp;#160; ( we will discuss about it in later blog posts) &lt;/em&gt;. &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;               &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;               &lt;br /&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;a href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/phase_43E8C8FB.jpg"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="phase" border="0" alt="phase" src="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/phase_thumb_0D97A0EC.jpg" width="408" height="115" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;                 &lt;br /&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;em&gt;Figure 3&lt;/em&gt; : Various phases of step-by-step transformations and finally, code generation using a DSL [3].&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt; &lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;     &lt;/li&gt;   &lt;/ol&gt;    &lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;Aside above mentioned components, support of rich development environment is increasingly becoming important to get expected productivity from a DSLs. Several language workbenches[3] thus are providing rich support from various editor services such as code folding , syntax highlighting , reference resolving, syntax completion.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p align="justify"&gt;&lt;span style="font-size: medium"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt;&lt;em&gt;&lt;font size="2"&gt;[in-progress]&lt;/font&gt;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p align="justify"&gt;&lt;span style="font-size: medium"&gt;&lt;strong&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;"&gt;&lt;font size="2"&gt;References&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p align="justify"&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;[&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;1]&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt; Spinellis, D. (2001). &amp;quot;Notable design patterns for domain-specific languages.&amp;quot; J. Syst. Softw. 56(1): 91-99.                  &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;#39;Book Antiqua&amp;#39;; font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;&lt;span style="font-size: small"&gt;[2] Landin, P. J. (1966). &amp;quot;The next 700 programming languages.&amp;quot; Commun. ACM 9(3): 157-166.                &lt;br /&gt;[3]L. Kats, E. Visser.The Spoofax Language Workbench . Rules for Declarative Speci?cation of Languages and IDEs.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;     &lt;/li&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px; padding:0px 0px 0px 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt; &lt;/script&gt; &lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;&lt;/div&gt;</description><pubDate>Tue, 08 Feb 2011 18:06:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/domain-specific-languages-dsls</guid><category>Domain-Specific Language</category><category>DSL Engineering</category><category>DSLs</category></item><item><title>F#: Computing Length of a List (Tail Recursive)</title><link>https://weblogs.asp.net:443/adilakhter/f-recipe-computing-length-of-a-list</link><description>&lt;p&gt;
The code snippets listed below defines a function to compute the length of a give list using F#. Note that these functions are also known &lt;b&gt;polymorphic function&lt;/b&gt;, as they work with any type of list (as shown in the &lt;i&gt;output&lt;/i&gt;).
&lt;/p&gt;

&lt;pre class="brush: fsharp;"&gt;// naive implementation
let rec length list =
    match list with
        | [] -&amp;gt; 0
        | _::tail -&amp;gt; 1 + computeLength tail
&lt;/pre&gt;

&lt;p&gt;A &lt;i&gt;tail recursive implementation &lt;/i&gt;is outlined next.&lt;/p&gt;

&lt;pre class="brush: fsharp;"&gt;// Tail recursive computation of List's length
let length list =
    // Auxiliary function to compute length
    // It store intermediate result in acc.
    let rec lengthAux acc list =
        match list with
        | [] -&amp;gt; acc
        | _::tail -&amp;gt; lengthAux (acc+1) tail
    lengthAux 0 list // invoking lengthAux with acc = 0
&lt;/pre&gt;

&lt;p&gt;&lt;b&gt;Output:&lt;/b&gt;&lt;/p&gt;


&lt;pre class="brush: csharp;"&gt;&amp;gt; length [];;
val it : int = 0
&amp;gt; length [1;2;3;4];;
val it : int = 4
&amp;gt; length ['a';'b'];;
val it : int = 2
&lt;/pre&gt;</description><pubDate>Wed, 08 Dec 2010 00:42:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/f-recipe-computing-length-of-a-list</guid><category>.Net</category><category>F#</category><category>List</category><category>Tail-recursion</category></item><item><title>Cr-Documentor - A Cool DXCore Plug-in for Visual Studio</title><link>https://weblogs.asp.net:443/adilakhter/cr-documentor</link><description>&lt;P mce_keep="true"&gt;&lt;FONT face=Calibri size=2&gt;May be I am last person on the Earth, who discovered and started using this way too cool plug-in recently ….however, if you have not checked it out yet – probably you should do it now :). &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;&lt;A href="http://code.google.com/p/cr-documentor/" target=_blank mce_href="http://code.google.com/p/cr-documentor/"&gt;Cr_Documentor&lt;/A&gt; gives you just-in time rendering of your XML Documentation to preview it. So, you can update your documentation and at the same time you can preview it how it would look like after you generate documentation for your project using rendering engine like NDoc or SandCastle – &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/1cr_documentor_realtime_3qbV0w.jpg" mce_href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/1cr_documentor_realtime_3qbV0w.jpg"&gt;&lt;IMG title=1cr_documentor_realtime style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=378 alt=1cr_documentor_realtime src="https://aspblogs.blob.core.windows.net/media/adilakhter/1cr_documentor_realtime_thumb_d/LCcg.jpg" width=391 border=0 mce_src="https://aspblogs.blob.core.windows.net/media/adilakhter/1cr_documentor_realtime_thumb_d/LCcg.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;It gives you real time error message if there is any error with the documentation you created. For example , in the following example, since in line 16 , I missed “name” attribute in paramref , it is showing the error with red bold letter :) - &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/2cr_documentor_error_pcVCfQ.jpg" mce_href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/2cr_documentor_error_pcVCfQ.jpg"&gt;&lt;IMG title=2cr_documentor_error style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=328 alt=2cr_documentor_error src="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/2cr_documentor_error_thumb_HbtJxA.jpg" width=394 border=0 mce_src="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/2cr_documentor_error_thumb_HbtJxA.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;After fixing the problem,&amp;nbsp; it looks -&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/3cr_documentor2_o8zzDQ.jpg" mce_href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/3cr_documentor2_o8zzDQ.jpg"&gt;&lt;IMG title=3cr_documentor2 style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=373 alt=3cr_documentor2 src="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/3cr_documentor2_thumb_i%2bnN8w.jpg" width=395 border=0 mce_src="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/3cr_documentor2_thumb_i%2bnN8w.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;In addition , &lt;A href="http://code.google.com/p/cr-documentor/" target=_blank mce_href="http://code.google.com/p/cr-documentor/"&gt;Cr_Documentor&lt;/A&gt;&amp;nbsp; provides a context menu that presents great support&amp;nbsp; for documentation like- &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/4cr_documentor_contextmenu_XWiXqQ.jpg" mce_href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/4cr_documentor_contextmenu_XWiXqQ.jpg"&gt;&lt;IMG title=4cr_documentor_contextmenu style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=97 alt=4cr_documentor_contextmenu src="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/4cr_documentor_contextmenu_thumb_fS78ZA.jpg" width=389 border=0 mce_src="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/4cr_documentor_contextmenu_thumb_fS78ZA.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;Last but not the least, &lt;/FONT&gt;&lt;A href="http://code.google.com/p/cr-documentor/" target=_blank mce_href="http://code.google.com/p/cr-documentor/"&gt;&lt;FONT face=Calibri size=2&gt;Cr_Documentor&lt;/FONT&gt;&lt;/A&gt;&lt;FONT face=Calibri size=2&gt; also offers options to configure the compatibility level , unrecognized tag handling , Formatting , Display and preview&amp;nbsp; -&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;Using the options , you can really configure different aspects of your Documentation. For example, if you change the preview style to SandCastle – the preview will look like -&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/7cr_documentor_sandcastle_spf2ZQ.jpg" mce_href="https://aspblogs.blob.core.windows.net/media/adilakhter/Media/7cr_documentor_sandcastle_spf2ZQ.jpg"&gt;&lt;IMG title=7cr_documentor_sandcastle style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=418 alt=7cr_documentor_sandcastle src="https://aspblogs.blob.core.windows.net/media/adilakhter/7cr_documentor_sandcastle_thumb_WLZJ/w.jpg" width=406 border=0 mce_src="https://aspblogs.blob.core.windows.net/media/adilakhter/7cr_documentor_sandcastle_thumb_WLZJ/w.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;If you want to check it out , y&lt;/FONT&gt;&lt;FONT face=Calibri size=2&gt;ou will have to download and Install the &lt;A href="http://devexpress.com/Downloads/Visual_Studio_Add-in/DXCore/" target=_blank mce_href="http://devexpress.com/Downloads/Visual_Studio_Add-in/DXCore/"&gt;DxCore&lt;/A&gt; ( A Powerful extensibility framework for Visual Studio) first. Then, you can download and get more details about &lt;A href="http://code.google.com/p/cr-documentor/" target=_blank mce_href="http://code.google.com/p/cr-documentor/"&gt;Cr_Documentor from Google Code&lt;/A&gt;. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;In conclusion , by leveraging &lt;A href="http://code.google.com/p/cr-documentor/" target=_blank mce_href="http://code.google.com/p/cr-documentor/"&gt;Cr_Documentor&lt;/A&gt;, writing and maintaining Xml Documentation for your projects would be far more easy and less error-prone. I can’t help thanking &lt;A href="http://blog.lutzroeder.com/" target=_blank mce_href="http://blog.lutzroeder.com/"&gt;Lutz Roeder&lt;/A&gt; and &lt;A href="http://www.paraesthesia.com/archive/2004/11/15/cr_documentor---the-documentor-plug-in-for-dxcore.aspx" target=_blank mce_href="http://www.paraesthesia.com/archive/2004/11/15/cr_documentor---the-documentor-plug-in-for-dxcore.aspx"&gt;Travis Illig&lt;/A&gt; for taking it this far. It’s just wonderful !!!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Calibri size=2&gt;&lt;/FONT&gt;&lt;/P&gt;</description><pubDate>Mon, 24 Nov 2008 12:48:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/cr-documentor</guid><category>Cr_Documentor</category><category>Tool</category></item><item><title>.Net Provider Pattern - Designing decoupled and extensible Component for .Net Application</title><link>https://weblogs.asp.net:443/adilakhter/ProviderDesignPattern</link><description>&lt;p&gt;Provider design pattern of .Net Framework 2.0 facilitates an approach to design components in a decoupled and extensible manner. Ron Howard mentioned- &lt;/p&gt;

&lt;blockquote&gt;
“A provider is simply a contract between an API and the Business Logic/Data Abstraction Layer. The provider is the implementation of the API separate from the API itself.”
&lt;/blockquote&gt;

&lt;p&gt;Provider pattern is a way to get rid of the coupling among the components while making the components extensible. Main reason for our today's discussion on Provider Pattern is its wonderful ability to publish the API and at the same time make the API pluggable; that is-- it gives us the flexibility to choose the API that is best suited for the application rather than the one developed by API developer. And from an API developer perspective, it allows them to create an extension point for the API where clients of the framework can extend the functionality in their own way.&lt;/p&gt;

In this post, we investigate this design pattern, and show how we can utilize it to make components decoupled while providing extension points for configuration. To do so, we present the outline of today's discussion as follows-–&lt;a href=" http://wp.me/p9jkj-2i" title="Provider Design Pattern" target="_blank" mce_href=" http://wp.me/p9jkj-2i"&gt;(read more)&lt;/a&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;


</description><pubDate>Sun, 02 Nov 2008 21:22:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/ProviderDesignPattern</guid></item><item><title>More on Unit Testing : TestContext</title><link>https://weblogs.asp.net:443/adilakhter/more-on-unit-testing-testcontext</link><description>From empirical evidence, we know that improving code coverage by verifying all the boundary conditions, and ensuring quality of code-base significantly enhances maintainability and comprehensibility of complex software systems. Therefore, writing effective unit and integration tests has become one of the integral part in software development life cycle. In fact, development methodology such as TDD has been embraced rapidly due to these realized benefits.

In today's post, we talk more about &lt;code&gt;TestContext&lt;/code&gt; of &lt;code&gt;mstest&lt;/code&gt;. In particular, we focus on its usage in devising effective unit tests. Before moving forward, we would like to outline the previous posts of the series regarding Unit Testing.
&lt;ul&gt;
	&lt;li&gt;&lt;a href="https://adilakhter.wordpress.com/2008/04/18/why-is-unit-testing-so-important/" title="why is unit testing so important?" mce_href="https://adilakhter.wordpress.com/2008/04/18/why-is-unit-testing-so-important/"&gt;Why is Unit Testing so important?&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href="http://wp.me/p9jkj-1K" title="TDD in a Nutshell" mce_href="http://wp.me/p9jkj-1K"&gt;TDD in a Nutshell.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;What is TestContext?&lt;/h3&gt;

&lt;code&gt;TestContext&lt;/code&gt; is an abstract class of &lt;code&gt;Microsoft.VisualStudio.TestTools.UnitTesting&lt;/code&gt; namespace. It exposed several properties related to the current context (i.e., current test run). In addition, it provides following supports: &lt;a href="http://wp.me/p9jkj-1L" mce_href="http://wp.me/p9jkj-1L"&gt;(read more)&lt;/a&gt;</description><pubDate>Sun, 04 May 2008 10:24:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/more-on-unit-testing-testcontext</guid><category>TDD</category><category>TestContext</category><category>Unit Testing</category></item><item><title>Passing Parameter to a Predicate in .Net2.0</title><link>https://weblogs.asp.net:443/adilakhter/passing-parameter-to-a-predicate-in-net2-0</link><description>&lt;P&gt;In this post, we will see how to pass parameter to a method representing Predicate.&lt;/P&gt;
&lt;P&gt;Let's say, we have a collection of SprintBacklogItem and we want to filter all the SprintBacklogItem with Title start's with, let say "QA" or "Dev Task" depending on a input parameter. Now from &lt;A href="http://weblogs.asp.net/adilakhter/archive/2008/04/16/using-predicate-amp-action-of-net2-0.aspx" target=_blank mce_href="http://weblogs.asp.net/adilakhter/archive/2008/04/16/using-predicate-amp-action-of-net2-0.aspx"&gt;the previous post&lt;/A&gt; we know that , predicate only have 1 parameter of type T.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://adilakhter.files.wordpress.com/2008/01/image1.png" mce_href="http://adilakhter.files.wordpress.com/2008/01/image1.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; WIDTH: 151px; HEIGHT: 216px; BORDER-RIGHT-WIDTH: 0px" height=239 alt=image src="http://adilakhter.files.wordpress.com/2008/01/image-thumb1.png" width=194 border=0 mce_src="http://adilakhter.files.wordpress.com/2008/01/image-thumb1.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Then, how to pass a input parameter _HeaderToSearch in Predicate?&lt;/P&gt;
&lt;P&gt;1. To do that, we need to a new object called ListMatcher -&lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="COLOR: blue"&gt;public class &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ListMatcher 
   &lt;/SPAN&gt;{ 
       &lt;SPAN style="COLOR: blue"&gt;private string &lt;/SPAN&gt;_HeaderToSearch; 
       &lt;SPAN style="COLOR: blue"&gt;public &lt;/SPAN&gt;ListMatcher(&lt;SPAN style="COLOR: blue"&gt;string &lt;/SPAN&gt;headerToSearch) 
       { 
           _HeaderToSearch = headerToSearch; 
       }  

       &lt;SPAN style="COLOR: blue"&gt;public bool &lt;/SPAN&gt;Predicate(&lt;SPAN style="COLOR: #2b91af"&gt;SprintBacklogItem &lt;/SPAN&gt;item) 
       { 
           &lt;SPAN style="COLOR: blue"&gt;return &lt;/SPAN&gt;item.Title.StartsWith(_HeaderToSearch, &lt;SPAN style="COLOR: #2b91af"&gt;StringComparison&lt;/SPAN&gt;.InvariantCultureIgnoreCase); 
       }  

   }&amp;nbsp; &lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;2. Next , I initialized the ListMatcher object and use the HeaderToSearch&amp;nbsp; to filter the items- &lt;BR&gt;&lt;/P&gt;&lt;PRE&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ListMatcher &lt;/SPAN&gt;matcher = &lt;SPAN style="COLOR: blue"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR: #2b91af"&gt;ListMatcher&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #a31515"&gt;"QA"&lt;/SPAN&gt;); 
&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;.FindAll(matcher.Predicate);&lt;/PRE&gt;
&lt;P&gt;&lt;BR&gt;Done.:)&lt;/P&gt;</description><pubDate>Fri, 18 Apr 2008 14:34:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/passing-parameter-to-a-predicate-in-net2-0</guid><category>.Net2.0</category><category>C#</category></item><item><title>TDD - In a Nutshell</title><link>https://weblogs.asp.net:443/adilakhter/tdd-in-a-nutshell</link><description>&lt;BLOCKQUOTE&gt;
&lt;H5&gt;"One Picture's&amp;nbsp; Worth Thousands Words"&lt;/H5&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="https://aspblogs.blob.core.windows.net/media/adilakhter/WindowsLiveWriter/TDDInaNutshell_D277/image_2.png" mce_href="https://aspblogs.blob.core.windows.net/media/adilakhter/WindowsLiveWriter/TDDInaNutshell_D277/image_2.png"&gt;&lt;IMG style="WIDTH: 191px; HEIGHT: 369px" height=653 alt=image src="https://aspblogs.blob.core.windows.net/media/adilakhter/WindowsLiveWriter/TDDInaNutshell_D277/image_thumb.png" width=375 mce_src="https://aspblogs.blob.core.windows.net/media/adilakhter/WindowsLiveWriter/TDDInaNutshell_D277/image_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;Benefits( from my personal experience): &lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;1. Development can be done much quicker. You already jot down all the test cases before writing codes. By that way, you are giving much time in thinking how to solve problem. Codes become much more standard and organized because of the brainstorming.&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;2. Quality of code is far better and deterministic.&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;3. Tests are the first class document for how your code will eventually work. Any developer/tester can go through the test cases you covered and get the idea how the system should work in different cases. &lt;SPAN style="FONT-FAMILY: Wingdings; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;&lt;SPAN style="mso-char-type: symbol; mso-symbol-font-family: Wingdings"&gt;J&lt;/SPAN&gt;&lt;/SPAN&gt; Isn’t it too cool ?&lt;BR&gt;&lt;o:p&gt;&lt;/o:p&gt;4. Easier and risk free to change the code - you just need to run the tests, you will get to know where there might be some problem.&lt;o:p&gt;&lt;/o:p&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt; 
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;BR&gt;And so on...&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;</description><pubDate>Fri, 18 Apr 2008 12:58:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/tdd-in-a-nutshell</guid><category>Unit Testing</category></item><item><title>Why  is  Unit Testing so important?</title><link>https://weblogs.asp.net:443/adilakhter/why-unit-testing-is-so-important</link><description>&lt;p&gt;&lt;font size="2"&gt;Moved &lt;font size="2"&gt;to &lt;a href="http://adilakhter.wordpress.com/2008/04/18/why-is-unit-testing-so-important/" title="why is unit testing so important -- wordpress" target="_blank" mce_href="http://adilakhter.wordpress.com/2008/04/18/why-is-unit-testing-so-important/"&gt;http://adilakhter.wordpress.com/2008/04/18/why-is-unit-testing-so-important/&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><pubDate>Fri, 18 Apr 2008 11:47:00 GMT</pubDate><guid isPermaLink="true">https://weblogs.asp.net:443/adilakhter/why-unit-testing-is-so-important</guid><category>Agile</category><category>TDD</category><category>Unit Testing</category></item></channel></rss>