<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://agileisrael.org/cs/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>Search results matching tags 'General Software Development' and 'Agile'</title><link>http://agileisrael.org/cs/search/SearchResults.aspx?o=DateDescending&amp;tag=General+Software+Development,Agile&amp;orTags=0</link><description>Search results matching tags 'General Software Development' and 'Agile'</description><dc:language>en-US</dc:language><generator>CommunityServer 2007 (Build: 20416.853)</generator><item><title>Goodbye mocks, Farewell stubs</title><link>http://agileisrael.org/cs/blogs/royo/archive/2008/09/20/goodbye-mocks-farewell-stubs.aspx</link><pubDate>Sat, 20 Sep 2008 12:45:59 GMT</pubDate><guid isPermaLink="false">23a435e0-515b-467d-ba86-b6d13375d82b:2084</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;About 4 years ago I was consulting for one of the largest companies in Israel (about 15,000+ employees) and helping them grok TDD and automated unit testing. I had spent there over a year and a half, on and off, and was teaching both .net, C++ and java developers about the techniques and tools they can use. &lt;/p&gt;  &lt;p&gt;I was consulting for C++, Java and .NET developers. &lt;/p&gt;  &lt;p&gt;&lt;u&gt;The C++ devs were first.&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;They had plenty of objections to what I was teaching them, because the amount of code refactoring they needed to do in order to make their code testable was almost unrealistic for them. Even writing new code meant writing something on top of old-untestable code, and they had a hard time adjusting to the more interface (pure virtual) based, contract driven TDD approach for new code. C++ devs has a hard time becuase it takes more code to write good testable code, and the coding tools they used (VS on windows and VI and such on UNIX based systems) didnt’ provide a good productive way to make code “bend” easily as they refactored it or created it in the first place. every little change meant a big “search and replace”. every method refactoring meant adding it the declaration in an .h file and thus they tried to have a little to do with changing code as possible.&lt;/p&gt;  &lt;p&gt;Looking back, today they still don’t have the right infrastructure in place or the right tooling or the willingness to do unit testing or TDD becuase it’s too hard with the current tooling to accomplish it.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;I had also spent some time with the .NET devs&lt;/u&gt;&lt;/p&gt;  &lt;p&gt; and thought them the same things. Becuase tooling support was better it was a bit easier for them to accept the practices, but still people had a lot of trouble grasping concepts such as dependency injection, inversion of control and designing for testability in general. I found that most people didn’t really have a big problem with the idea of exposing things they didn’t use to expose before, it was more about the concept of learning how to refactor the code in interesting OO ways to make it testable. Making a class non sealed, a method virtual, and then inheriting from that class and testing against the inherited class (“extract and override”) was very much unintuitive for them, and other concepts like containers (spring at the time) didn’t help them get into the groove either. For them it was like drinking water from a fire hose.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Consulting for the java devs&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Java has lots going for it in terms of unit testing, automation and TDD&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Java devs have a much longer “heritage” of tooling and unit testing than in the .NET world, and so you’d expect them to be more inclined to do these things. &lt;/li&gt;    &lt;li&gt;JUnit is part of any decent java idea so the barrier for entry should be lower, right? &lt;/li&gt;    &lt;li&gt;Refactoring was also in most decent java IDE&amp;#39;s, so you’d expect them to grok that too. but that wasn’t the case. &lt;/li&gt;    &lt;li&gt;class methods in java are virtual by default so you can override what you want as long as the class is not sealed (final)== more testable by default.&lt;/li&gt;    &lt;li&gt;Java required a much higher OO learning curve to start with. Good OO knowledge is fundamental for testable designs.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Unfortunately, most developers I met didn’t even know how to use the refactoring tools they had available and had a hard time with the same dependecy injection principles that the C++ and .NET devs had. It was just too cumbersome to make the code testable, but eventually the infa team at the company had made the decision to take a couple of weeks and make all the infra stuff replaceable for testing purposes. they did not regret that decision.&lt;/p&gt;  &lt;p&gt;So the java group had the most success with testable designs, but they still had a hard time doing it. in fact, only the infra team at that group took the plunge. the other (higher level) devs in the java group didn’t grok it. and don’t use it today.&lt;/p&gt;  &lt;p&gt;Why was this adoption been such a failure? They were willing to learn, but they didn’t like what they learned. It didn’t fit their needs in the real world. Or the way they worked, or the way they knew how to do things. &lt;/p&gt;  &lt;p&gt;Think what you will ,but 99% of the dev worlds aren’t ready for the “testability” message. and that is a fact that is hard to realize for most of us, which just can’t grasp why isn’t that any sensible human being isn’t willing to do everything much better than they are doing today.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Spending the past week running around the Microsoft Campus in Redmond had made several things clearer for me. I’ve been &lt;em&gt;feeling &lt;/em&gt;them for a while, but this week these abstract feelings materialized into something that is more coherent that I can talk about. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why do most developers not write unit tests, still?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Reason #1: Learning curve&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;One of the main reasons most developers &lt;strong&gt;still today&lt;/strong&gt; don’t really take to unit testing (and TDD) is the really high learning curve that is forced upon them. That is not to say that learning about &lt;/p&gt;  &lt;p&gt;mocks, stubs, dependency injection, IoC containers, Extract &amp;amp; override technique, Record\Replay, AAA and more &lt;/p&gt;  &lt;p&gt;-- is not useful, but it is a &lt;em&gt;big obstacle &lt;/em&gt;to get people into the habit of doing something which they know is good for them – test their code, verify their assumptions, automate, integrate, be confident, get feedback, define behavior – all those and many other benefits are being thrown away by developers all over the world because the entry fee to this world is too high, for all the wrong reasons.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;It’s time to simplify&lt;/strong&gt;. Get back to basics. Take a good hard look at the huge spiral that we are leading people into and asking whether removing some things today can lead to those things being accepted and being easier tomorrow. or maybe they weren’t needed at all.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Say Goodbye to “mock” and “stub”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;“mock” and “stub” have played their part in us trying to explain to ourselves what it is we are trying to do, to start learning the minute and important differences in the patterns of our test code. They helped us define what it is we are looking to do, in terms that, for lack of anything better, are now the de-facto pattern names for something that should never have been named in the first place for the casual programmer.&lt;/p&gt;  &lt;p&gt;That’s why in the new version of Isolator we’ve chosen to completely get rid of the words mock and stub, and get back into “fake”ing. You can &lt;em&gt;fake&lt;/em&gt; a method or a class instance, and you can &lt;em&gt;verify&lt;/em&gt; that something was called. You should not care whether this is a stub or a mock. &lt;/p&gt;  &lt;p&gt;We need to clean our language: mock, stub, fake, test double: They all mean something in the context of us trying to identify patterns in our test code. But as users mature and start using the frameworks, those same words increase the entry barrier, and effectively block people out. If I’m showing a simple test that fakes some dependency that a class uses to a new dev on my team, I should not have to send them over to read fowler’s “mocks arn’t stubs” article (which is enlightening, but should not be relevant to them) because it misses the point.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Less interaction testing, more state based testing&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Most crappy unit tests I’ve seen were &lt;em&gt;over specified&lt;/em&gt; in that they asserted on internal interaction with an object way too heavily, which made the tests very fragile. Getting back to basics means making it easy to enable state based testing (assert style checks) and only enabling interaction testing where it makes sense: (when your app does one-way messaging to an external component). &lt;em&gt;verifying&lt;/em&gt; that something was called should be the exception to the unit testing rule. The AAA style APis make that a more clear distinction. &lt;/p&gt;  &lt;p&gt;Record-replay APIs make it too easy to make interaction based tests when you really want a state based one (getting a result vs. checking that something was called)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Use AAA style Apis&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;As an industry we are learning and changing all the time. The “Arrange-act-assert” pattern in the field of mock frameworks represents us trying to return to basics. Moq did that nicely by showing a way that leads there, and it is being taken gladly by Rhino and Typemock Isolator. It is taking off because we are starting to look beyond our own little echo chamber and seeing what is is that all those other 99% of devs are expecting as guidance, and in what form. &lt;/p&gt;  &lt;p&gt;AAA is guidance because there was an outcry (a silent, vote of feet) that record-replay is not cutting it – it’s too confusing for non-experts. It’s too technical. and it does not lend itself to the way people want to work. So most people didn’t use it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Visual Basic Language Support&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Everyone &lt;/u&gt;screwed up on this one.most VB developers who will try to use one of the current frameworks will not succeed since they required anonymous methods or lambda expressions. Some frameworks use VB specific keywords which makes them VERY awkward to use. If we want broad acceptance of our practices we need to make sure whoever wants to can use the tooling we make. VB is &lt;em&gt;huge&lt;/em&gt; and its amazing how we all pretend it does not exist. But I think it’s the key to getting to those people who want to be better but all they see is a high wall instead of an entrance. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Use “Isolate” and “fake” instead of “mock”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Don’t say ‘mock’ frameworks, say “isolation” frameworks. Because ‘Mock’ is an overloaded word it is confusing. Explaining to a developer that you can “isolate” something from its dependencies rather than “mock” its dependencies feels more natural.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Simplify,Simplify,Simplify&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Remove APIs instead of adding to them. Have single point of entries to your frameworks because &lt;strong&gt;discoverability &lt;/strong&gt;is the key to good framework use. That’s why extension methods are problematic, they mean multiple points of entry.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Be open: Realize that other tools and techniques can act as bridges to the agile world&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Design for testability is just one way to get where you want to go. it is not the only way. Sometimes it’s impossible. Discouraging the use of other ways of working (using tools like Typemock Isolator or JMockit) will only make the current echo chamber more closed and feel more un-achievable for those who need to get to the same point with a very different set of constraints than what most of the “loud” voices need to face.&lt;/p&gt;  &lt;p&gt;By “allowing” other forms of working you enable those who want to, to get a bridge to help them instead of walking by foot the whole way. Any other way would mean that we will all fail in delivering what we believe in to those who have no idea what we’re talking about. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6635929" width="1" height="1" alt="" /&gt;</description></item><item><title>Typemock Isolator with AAA syntax</title><link>http://agileisrael.org/cs/blogs/royo/archive/2008/07/24/typemock-isolator-with-aaa-syntax.aspx</link><pubDate>Thu, 24 Jul 2008 07:34:15 GMT</pubDate><guid isPermaLink="false">23a435e0-515b-467d-ba86-b6d13375d82b:2003</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;We&amp;#39;ve &lt;a href="http://blog.typemock.com/2008/07/preview-and-questions-on-next-isolator.html"&gt;just posted a preview&lt;/a&gt; of the next Isolator API coming out in august. It is AAA-style (Arrange, act, assert) and has many changes. We &lt;strong&gt;need your input&lt;/strong&gt; so &lt;a href="http://blog.typemock.com/2008/07/preview-and-questions-on-next-isolator.html"&gt;head on over, read it and tell us your thoughts&lt;/a&gt;. This is the time where you can make a huge difference. anything you don&amp;#39;t like, say it in the comments. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6438105" width="1" height="1" alt="" /&gt;</description></item><item><title>A sneak Preview of Typemock Racer : Thread Deadlock Finder</title><link>http://agileisrael.org/cs/blogs/royo/archive/2008/07/08/a-sneak-preview-of-typemock-racer-thread-deadlock-finder.aspx</link><pubDate>Tue, 08 Jul 2008 15:42:28 GMT</pubDate><guid isPermaLink="false">23a435e0-515b-467d-ba86-b6d13375d82b:1988</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;Here&amp;#39;s a sneak preview of the upcoming &lt;a href="http://www.Typemock.com"&gt;Typemock&lt;/a&gt; Racer product, which I&amp;#39;m currently working on. We should be out in private CTP in a couple of weeks I hope.&lt;/p&gt;  &lt;p&gt;Typemock Racer tries to solve one huge problem for developers working in multi threaded environments: Detecting code that can result in deadlocks or race conditions. It does this by providing a framework API which you can use in your tests (under NUnit for example), that allows you to execrise your code under test until it finds a deadlock or times out.&lt;/p&gt;  &lt;p&gt;Here&amp;#39;s an example of how you&amp;#39;d use it. Consider the following class which has two methods, that if run by two seperate threads, can result in a deadlock condition:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/AsneakPreviewofTypemockRacer_10517/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="433" alt="image" src="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/AsneakPreviewofTypemockRacer_10517/image_thumb.png" width="328" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;At some point in time the threads could execute such that thread 1 is waiting on resource b, which is held by thread two , which is waiting on resource a, held by thread 1 - a pure deadlock.&lt;/p&gt;  &lt;p&gt;Given this class we can write a test that looks like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/AsneakPreviewofTypemockRacer_10517/image_4.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="217" alt="image" src="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/AsneakPreviewofTypemockRacer_10517/image_thumb_1.png" width="542" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The ThreadTest class has an &amp;quot;AddThreadAction&amp;quot; method that receives a delegate. you can use it to invoke your own code, it will be invoked in a different thread. IN this example we are creating two threads, each one running a different method on MyClassWithLocks.&lt;/p&gt;  &lt;p&gt;We can just right click and run the test with TestDriven.NET to recieve the following results:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/AsneakPreviewofTypemockRacer_10517/image_8.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="294" alt="image" src="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/AsneakPreviewofTypemockRacer_10517/image_thumb_3.png" width="569" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The output states that there is a deadlock that was found, with the exact steps that happened (with line locations) to reproduce this.&lt;/p&gt;  &lt;p&gt;It currently only works with lock (monitor.Enter\Exit) but will support all locking constructs in .NET.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;What if the methods you point to create their own threads? Like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/AsneakPreviewofTypemockRacer_10517/image_10.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="502" alt="image" src="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/AsneakPreviewofTypemockRacer_10517/image_thumb_4.png" width="568" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Here is the output that you&amp;#39;d get if you run this test:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/AsneakPreviewofTypemockRacer_10517/image_12.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="448" alt="image" src="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/AsneakPreviewofTypemockRacer_10517/image_thumb_5.png" width="661" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6376639" width="1" height="1" alt="" /&gt;</description></item><item><title>Two Faced Commits - how the ALT.NET Community is becoming more and more dogmatic</title><link>http://agileisrael.org/cs/blogs/royo/archive/2008/05/19/two-faced-commits-how-the-alt-net-community-is-becoming-more-and-more-dogmatic.aspx</link><pubDate>Mon, 19 May 2008 10:50:32 GMT</pubDate><guid isPermaLink="false">23a435e0-515b-467d-ba86-b6d13375d82b:1613</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;disclaimer: I work at Typemock. &lt;/p&gt;  &lt;p&gt;There is a big trend I am starting to notice in the &amp;quot;Advanced&amp;quot; unit testing community. That trend feels more and more like hypocrisy. Take &lt;a href="http://www.clariusconsulting.net/blogs/kzu/archive/2008/05/18/mock_statics_without_typemock.aspx"&gt;Daniel&amp;#39;s post about mocking statics without Typemock&lt;/a&gt;. (Daniel is the creator of &lt;a href="http://mockframeworks.com/moq"&gt;Moq&lt;/a&gt;, an open source mocking framework) Granted, it is important to know that you can always refactor things for testability, but just looks at what he writes:&lt;/p&gt;  &lt;p&gt;&amp;quot;So, don&amp;#39;t buy a product just because you&amp;#39;re lazy and want to avoid creating a few wrapper classes and interfaces&amp;quot;&lt;/p&gt;  &lt;p&gt;followed by&lt;/p&gt;  &lt;p&gt;&amp;quot;Always use the simplest thing that could possibly work.&amp;quot;&lt;/p&gt;  &lt;p&gt;Which is it, community? The idea of being prgamatic is using the right tool for the job. if that tools makes your job easier than not using it &amp;quot;cause you&amp;#39;re lazy otherwise&amp;quot; is plain old hypocrisy. &lt;/p&gt;  &lt;p&gt;The same argument also holds for tools like FinalBuilder vs. Nant\MsBuild\Other XML Hell. Tools don&amp;#39;t create problems if you use them correctly.&amp;#160; The community (especially the ALT.NET community) is going in a too extreme direction. so extreme that their advice are sometimes skewed too much to be considered pragmatic, sometimes falling into &amp;quot;dogmatic&amp;quot;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;div id="disqus_thread"&gt;&lt;/div&gt;&lt;a href="http://iserializable.disqus.com/?url=ref"&gt;View the forum thread.&lt;/a&gt;&lt;a href="http://disqus.com" class="dsq-brlink"&gt;blog comments powered by &lt;span class="logo-disqus"&gt;Disqus&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6201193" width="1" height="1" alt="" /&gt;</description></item><item><title>Project White and a cool debugging tip</title><link>http://agileisrael.org/cs/blogs/royo/archive/2008/02/24/project-white-and-a-cool-debugging-tip.aspx</link><pubDate>Sun, 24 Feb 2008 20:41:18 GMT</pubDate><guid isPermaLink="false">23a435e0-515b-467d-ba86-b6d13375d82b:1158</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;Some cool stuff happening in the testing world:&lt;/p&gt;  &lt;p&gt;* &lt;a href="http://www.codeplex.com/white"&gt;Project white&lt;/a&gt; seems like a nice takeoff on winforms testing (a la NUnitForms), from the thoughtworks Guys. &lt;a href="http://weblogs.asp.net/bsimser/archive/2008/02/21/automated-ui-testing-with-project-white.aspx"&gt;Bil Simser talks about it some more&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;* Gregg Miskelly came up with a brilliant debugging trick on his &lt;a href="http://blogs.msdn.com/greggm/archive/2007/01/17/setting-conditional-breakpoints-using-object-ids.aspx"&gt;blog&lt;/a&gt;. He shows how to set a breakpoint to stop only on a specific object instance using Object Ids during Debugging. (via &lt;a href="http://msdn.microsoft.com/msdnmag/issues/07/07/Bugslayer/#S6"&gt;BugSlayer&lt;/a&gt;)&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5855189" width="1" height="1" alt="" /&gt;</description></item><item><title>Trying out Team City - Looks Promising!</title><link>http://agileisrael.org/cs/blogs/royo/archive/2008/01/18/trying-out-team-city-looks-promising.aspx</link><pubDate>Sat, 19 Jan 2008 00:36:17 GMT</pubDate><guid isPermaLink="false">23a435e0-515b-467d-ba86-b6d13375d82b:968</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;I&amp;#39;ve been looking both at &lt;a href="http://www.cifactory.org/joomla/"&gt;CI Factory&lt;/a&gt; by &lt;a href="http://jayflowers.com/"&gt;Jay Flowers&lt;/a&gt;, and &lt;a href="http://www.jetbrains.com/teamcity/"&gt;Team City by JetBrains&lt;/a&gt; lately. this has to do with the fact that at Typemock we currently have a &lt;a href="http://en.wikipedia.org/wiki/Continuous_integration"&gt;Continuous Integration&lt;/a&gt; solution that is largely based on &lt;a href="http://cruisecontrol.sourceforge.net"&gt;CruiseControl.NET&lt;/a&gt; and MSBuild files.&lt;/p&gt;  &lt;p&gt;It sucks.&lt;/p&gt;  &lt;p&gt;The MSBuild files are hardly maintainable and the logic for running the build, signing things, obfuscating, licensing, installation, 64 bit versions and more - it&amp;#39;s chaos, held by some gum and a couple of strings. Not unlike many other builds I&amp;#39;ve seen.&lt;/p&gt;  &lt;p&gt;We&amp;#39;re in the process of moving the builds into &lt;a href="http://FinalBuilder.com"&gt;FinalBuilder&lt;/a&gt;, but I&amp;#39;m also looking for a better CC.NET. CI Factory looks nice in that it is very simple to setup but still requires messing around with MSBuild targets and the like to make your builds work with it.&lt;/p&gt;  &lt;p&gt;TeamCity looks very promising. I read &lt;a href="http://blog.eleutian.com/2007/12/22/CruiseControlNETIsDeadLongLiveTeamCity.aspx"&gt;this blog post from Elutian&lt;/a&gt; about their experience with Team City and wondered what it would be like to work with it against a FinalBuilder script. I installed TeamCity and ran it against SVN and FinalBuilder (like it would run at Typemock) and got it all working in less than 20 minutes. Pretty snazzy and no XML tampering needed to take place, Thank the gods.&lt;/p&gt;  &lt;p&gt;So, I&amp;#39;m thinking, with team city&amp;#39;s professional license being &lt;strong&gt;free&lt;/strong&gt; for up to 20 developers and 3 build agents, that we&amp;#39;ll give it a shot at Typemock HQ and see what happens. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5617834" width="1" height="1" alt="" /&gt;</description></item><item><title>The evolution of Unit Testing Syntax and Semantics</title><link>http://agileisrael.org/cs/blogs/royo/archive/2008/01/17/the-evolution-of-unit-testing-syntax-and-semantics.aspx</link><pubDate>Thu, 17 Jan 2008 11:21:59 GMT</pubDate><guid isPermaLink="false">23a435e0-515b-467d-ba86-b6d13375d82b:948</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;The semantics of how you write a unit test, the basic syntax, or Domain Specific language of how we write them, has been relatively stale for quite some years now.&amp;#160; But under the covers, the syntax revolution seems to be brewing, as people try to come up with newer, hopefully better and more readable syntaxes for tests and specifications that become more and more complex as the current Agile community struggles to accept best practices in this arena.&lt;/p&gt;  &lt;p&gt;I&amp;#39;m guilty of that too, but a recent post by Jeremy Miller prompted me to try and list all the different syntax variations I&amp;#39;ve come across in the .net and some in java world (not necessarily in chronological order). Most ofthese didn&amp;#39;t necessarily catch on as de facto standards, but are real world attempts to make a better world or explore new horizons.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;POUT (Plain Old Unit Test) Syntax&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;JUnit initial syntax&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Attributes:&lt;/strong&gt; NUnit with attribute syntax, removing inheritance and test naming requirements&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Extensibility&lt;/strong&gt;: MbUnit is extensible testing framework with lots of powerful attributes.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/rosherove/archive/2005/04/03/TestNamingStandards.aspx"&gt;Naming conventions&lt;/a&gt; for unit tests seem to be something people are actively looking for.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Simplicity &lt;/strong&gt;is back: &lt;a href="http://www.codeplex.com/xunit"&gt;XUnit&lt;/a&gt; tries to go back to basics: No setup\teardown, different attribute names.&amp;#160;&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Fluent&lt;/strong&gt;: My implementation of &lt;a href="http://weblogs.asp.net/rosherove/archive/2008/01/09/scala-nrehersal-and-fluent-test-interfaces.aspx"&gt;NRehersal&lt;/a&gt; uses delegates and a more fluent interface for tests&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Mocking&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Mocks Vs. Stubs&lt;/strong&gt;: The Difference is &lt;a href="http://martinfowler.com/articles/mocksArentStubs.html"&gt;explored&lt;/a&gt; (&lt;a href="http://martinfowler.com/articles/mocksArentStubs.html"&gt;here&lt;/a&gt; too) and makes its way into some of the mock frameworks (NMock, JMock, Rhino.Mocks)&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Explicit &lt;/strong&gt;(reflection based) mocking statements such as (New DynamicMock(typeof(Interface), mock.Expect(...))&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Record-replay &lt;/strong&gt;syntax from Rhino.Mocks, EasyMock, TypeMock and others&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;fluent mocking&lt;/strong&gt; APIs into our tests (&lt;a href="http://weblogs.asp.net/rosherove/archive/2005/06/18/413577.aspx"&gt;NMock2&lt;/a&gt;)&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Auto Mocking &lt;/strong&gt;Containers (introduced by &lt;a href="http://blog.eleutian.com/CommentView,guid,762249da-e25a-4503-8f20-c6d59b1a69bc.aspx"&gt;Elutian&lt;/a&gt;) will use RhinoMocks and Ioc Containers under the test covers (back to base classes)&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Mocking the Un-Mockable&lt;/strong&gt;: &lt;a href="http://TypeMock.com"&gt;TypeMock&lt;/a&gt; (and &lt;a href="https://jmockit.dev.java.net/"&gt;JMockIt&lt;/a&gt; on the java side) introduce the possibility of mocking production code that is currently untestable without needing to refactor it.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;BDD, Specifications and other Domain Specific Languages&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Ruby &lt;a href="http://spec-unit.rubyforge.org/"&gt;SpecUnit&lt;/a&gt;, &lt;a href="http://dannorth.net/2007/06/introducing-rbehave"&gt;RBehave&lt;/a&gt; and &lt;a href="http://rspec.rubyforge.org/"&gt;RSpec&lt;/a&gt; make a dent in the .NET community and stuff start showing up in our world:&lt;/li&gt;    &lt;li&gt;Extension Methods: Scott bellware comes up with the idea of using &lt;a href="http://exceptionz.wordpress.com/2006/09/13/rspec-specifications-in-c/"&gt;C# 3.0 extension methods for an easier expectation syntax&lt;/a&gt;.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/joe_ocampo/archive/2007/06/28/introducing-nunit-behave-or-insert-what-ever-other-catchy-name.aspx"&gt;NUnit.Behave&lt;/a&gt;, &lt;a href="http://nbehave.org/"&gt;NBehave&lt;/a&gt;, &lt;a href="http://nspec.tigris.org/"&gt;NSpec&lt;/a&gt; , &lt;a href="http://nspecify.sourceforge.net/"&gt;NSpecify&lt;/a&gt; try to use DSLs and fluent interfaces to express BDD specs.&lt;/li&gt;    &lt;li&gt;Jeremy &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/01/17/spiking-a-new-syntax-for-integration-tests-whaddaya-think.aspx"&gt;shows off his version&lt;/a&gt; of a more fluent and natural spec syntax by taking the auto mocking container idea, using &lt;a href="http://structuremap.sourceforge.net/Default.htm"&gt;structuremap&lt;/a&gt; under the covers and creating something that tries to be much more declarative and understandable at the same time. He uses delegates a lot as well.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I&amp;#39;m probably forgetting a few here, so let me know in the comments.&lt;/p&gt;  &lt;p&gt;So, we see a nice evolution from beginner style to bdd and spec style. lots of work on the syntax is done, but there is currently lots of chaos. Think Blue-Day Vs. HD-DVD, only with about 5 main competitors. The nice thing about this: The community will decide what worls, so it would be interesting to see where we are one year or a two years from now in relation to this list!&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=5612520" width="1" height="1" alt="" /&gt;</description></item><item><title>Organization Problems - Sounds Familiar?</title><link>http://agileisrael.org/cs/blogs/royo/archive/2007/10/18/organization-problems-sounds-familiar.aspx</link><pubDate>Thu, 18 Oct 2007 13:08:03 GMT</pubDate><guid isPermaLink="false">23a435e0-515b-467d-ba86-b6d13375d82b:593</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;I just finished a summary of a company&amp;#39;s review about work modes and problems before we can start doing something about it. I&amp;#39;m posting part of it as anonymous because I think this seems to relate to many other companies out there:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&amp;quot;&lt;strong&gt;The QA Department&lt;/strong&gt; seems to be the main gripe of most of the departments in the company. The main issues are of it being staffed with personnel who does not really understand the application aspects of what they are testing, and so don’t really know &lt;b&gt;what&lt;/b&gt; to test in the application. Another main issue is the lack of knowledge about proper QA methods. Each QA department seems to be reinventing the wheel and creating its own methods. This also leads to the face that most tests are not automated and most tests don’t even get repeated for regressions after each release, which leads to an overall lower quality in the product. &lt;p&gt;... &lt;p&gt;&lt;strong&gt;The Marketing division&lt;/strong&gt;&amp;nbsp;seems to be a large source of problems. Most of these come from the fact that Marketing people also serve as Product Managers in the company (Those who should be truly representing the client’s real needs), setting feature priorities and agenda for the next release with ultimate decision power. Because there is a conflict of interest between the role of marketing and role of Product manager, many of the things that are requested from other departments such as Customer Support are considered haphazardly if at all, which leads to a product that contains features a real customer might not need, but misses features the customer really does need. Add in a true product manager role into the company can help alleviate many of these issues as well as the partial amount of time that marketing has of actually communicating with all relevant departments as a customer. &lt;p&gt;... &lt;p&gt;&lt;strong&gt;The X group&lt;/strong&gt; is highly motivated in implementing agile practices such as unit testing, and are suffering from lack of automation in the group, “islands” of knowledge and lack of code reviews.  &lt;p&gt;... &lt;p&gt;&lt;strong&gt;Management&lt;/strong&gt; has a big role in creating the current conditions for problems. The lack of CTO, and the fact that the CEO is the one who is “acting CEO” lead to lack of real technical leadership (lack of time to handle things) and no clear “head” to turn to and get quick good answers. Management can help by supporting practices such as unit testing and automation and getting and hiring good people into the missing roles in the company (Product managers, CTO) and by allowing for real time extensions to projects that would like to implement them.  &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;...&lt;/p&gt; &lt;p&gt;Generally speaking, there are various “pain points” that currently prohibit the departments from either getting the full data they need, influence the current releases so they contain the correct feature set or be more productive in their work. A main example is the big confusion about the various issue management software: which is reported to be almost unusable and there is no clear sync between that and X and Y issue management software also used in the other departments. Also the fact that developers aren’t really aware of what the application is used for in the field leads to believe that more time spent with the customer can help. Overall many “small” things can make for a large difference in the organization’s ability to create quality software and get better communication between the departments more quickly.&lt;/p&gt;&amp;quot;&lt;/blockquote&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4622727" width="1" height="1" alt="" /&gt;</description></item><item><title>Things I learned at JAOO 2007</title><link>http://agileisrael.org/cs/blogs/royo/archive/2007/09/27/things-i-learned-at-jaoo-2007.aspx</link><pubDate>Thu, 27 Sep 2007 11:37:57 GMT</pubDate><guid isPermaLink="false">23a435e0-515b-467d-ba86-b6d13375d82b:455</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;&lt;strong&gt;&lt;a href="http://jaoo.dk"&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 20px 0px 0px;border-left:0px;border-bottom:0px;" height="139" alt="image" src="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/ThingsIlearnedatJAOO2007_117FF/image_1.png" width="240" align="left" border="0" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler&lt;/a&gt; &lt;/strong&gt;may be one of the great minds of our engineering age, but his accent sounds a lot like MR. Bean. He&amp;#39;s also not a great social figure and also sems to speak when spoken to. Eccentric.  &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.objectmentor.com/omTeam/martin_r.html"&gt;Robert C. Martin&lt;/a&gt; &lt;/strong&gt;is a good Drummer. He played the drums for me while I was doing some of my songs at the first ever JAOO Jam Session.&amp;nbsp; He&amp;#39;s also working on a new book called &amp;quot;Clean Code&amp;quot;. I suggested he might want to take a look at &lt;strong&gt;&lt;a href="http://www.amazon.com/exec/obidos/ASIN/1593271190/iserializable-20"&gt;Code Craft&lt;/a&gt; &lt;/strong&gt;so that he has some differentiators from it. I still don&amp;#39;t get why people call him uncle bob, but he says a friend of his called him that once and it stuck. From now on just call me Uncle Roy.  &lt;li&gt;&lt;strong&gt;&lt;a href="http://users.rcn.com/jcoplien/"&gt;Jim Coplien&lt;/a&gt; &lt;/strong&gt;seems to bring out the worst in me. In his session about Scrum and Architecture he publicly denounced TDD and said (quoting) &amp;quot;TDD will deteriorate your architecture&amp;quot; and spoke loudly against using it. Him outspokenness seems to have hit me where it hurts because it led to a full hour of me and him going at each other outside the lecture hall with people gathering around as if it was a boxing match. The day after that I decided to go to the Open Spaces sessions at JAOO and open up a new topic called &amp;quot;TDD+Scrum=Good?&amp;quot;. about 12 people showed up and Jim was one of them. For more than an hour we all exchanged ideas and some back and forth took place (lots of banter). I&amp;#39;ll have a whole separate post about this discussion later on. The bottom line is - TDD can be misunderstood which can lead to people saying &amp;quot;don&amp;#39;t use it&amp;quot; which can lead to people actually listening to this very bad advice which can lead to world chaos and the eventual death of the world. So don&amp;#39;t listen to Jim.  &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.interface21.com/people/mpollack.html"&gt;Mark Polack&lt;/a&gt;&lt;/strong&gt; is a great guy to talk to and is the main driving force behind &lt;a href="http://www.springframework.net/"&gt;Spring.NET&lt;/a&gt;. Spring.NET is much more powerful than I initially thought. He&amp;#39;s working hard on V 1.1 of that these days. He did a session on Spring.NET at JAOO. He doesn&amp;#39;t blog enough. In fact, I can&amp;#39;t even find his blog. &lt;li&gt;&lt;strong&gt;&lt;a href="http://hammett.castleproject.org/"&gt;Hamilton Verissimo&lt;/a&gt;&lt;/strong&gt; is the main force behind the &lt;a href="http://castleproject.org/"&gt;Castle Project&lt;/a&gt; and is a very smart and shy person. he also is a good listener and thinks twice before saying anything. I would love to talk to him more but I always fear I will say the wrong thing next to him (he feels so polite!). He&amp;#39;s the opposite of the Israeli state of mind.  &lt;li&gt;The Danish crowed is just as quite and polite as the Tech-Ed Europe crowd or the DevDays Belgium Crowd.  &lt;li&gt;I really like the voting system on the sessions. As you leave you get the choice of taking a yellow, green or red note. you pick one and drop it in a big bucket as you leave the room. then they count the reds greens and yellows. very agile although I suspect they may be missing some important specific feedback this way.  &lt;li&gt;A Guitar that starts out with you as flight baggage will not necessarily find its way through 3 connection flights. It may arrive 3 days later as you prepare to leave back home.  &lt;li&gt;There are some great people at JAOO and I got to play with some of them at the JAM session. great idea!  &lt;li&gt;Free wi-fi in your hotel room will allow you to run &lt;a href="http://www.utorrent.vom"&gt;utorrent&lt;/a&gt; so that when you leave back home you will have downloaded lots of nice TV shows to view on the place ride back home.  &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.erlang.org/"&gt;Erlang&lt;/a&gt;&lt;/strong&gt; is making a comeback. It&amp;#39;s been there 20 years mainly used by the telecom industry for parallel high volume stuff. now it&amp;#39;s the talk of the conference as the answer to multi-core and scalable application programming. I don&amp;#39;t remember who told me this nice sentence but it went like this: &amp;quot;I guess its true what they say. Everything has already been invented 20 years ago&amp;quot;. true.&lt;/li&gt;&lt;/ol&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4206558" width="1" height="1" alt="" /&gt;</description></item><item><title>The Art Of Unit Testing - Available to Purchase Online Now</title><link>http://agileisrael.org/cs/blogs/royo/archive/2007/09/26/the-art-of-unit-testing-available-to-purchase-online-now.aspx</link><pubDate>Wed, 26 Sep 2007 15:49:42 GMT</pubDate><guid isPermaLink="false">23a435e0-515b-467d-ba86-b6d13375d82b:452</guid><dc:creator>Anonymous</dc:creator><description>&lt;p&gt;&lt;a href="http://www.manning.com/affiliate/idevaffiliate.php?id=462_91"&gt;&lt;img style="border-right:0px;border-top:0px;margin:0px 5px 0px 0px;border-left:0px;border-bottom:0px;" height="202" alt="image" src="http://weblogs.asp.net/blogs/rosherove/WindowsLiveWriter/TheArtOfUnitTestingAvailabletoPurchaseOn_FAB2/image_1.png" width="240" align="left" border="0" /&gt;&lt;/a&gt; I&amp;#39;m happy to announce that you can now purchase my book &lt;a href="http://www.manning.com/affiliate/idevaffiliate.php?id=462_91" target="_blank"&gt;The Art Of Unit Testing&lt;/a&gt; through the Manning Early Access Program. Currently, the first five chapters are available, but when you purchase the MEAP version you get the new chapters as they come in, before anyone else. Also, you can help make the book better and more accurate as a MEAP reader since the author forum can be used to discuss book topics you find interesting and I will be reading it at least twice a week (hopefully daily).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;What&amp;#39;s with the ugly cover art?&lt;/strong&gt; I&amp;#39;m working on it. We had to have something to start putting this online. The final print will have something which I can actually stand behind.&lt;/li&gt; &lt;li&gt;What are the first five chapters about?&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The way I see it, the book is divided into several parts. the first part (chapters 1-5) are about the basic tools you need to know to start writing unit tests in the real world. Everything from working with NUnit and the basic attributes of unit tests, and up to using fake, stub and Mock objects. There is also quite a full reference for using the Rhino.Mocks framework. The idea is that you can take someone with no unit testing experience whatsoever in .NET, and have them read those five chapters. then they have the basic knowledge to actually know what you&amp;#39;re talking about when you say &amp;quot;Mocks&amp;quot; or &amp;quot;integration testing&amp;quot;. They may even be able to write some real world tests using these chapters, even interaction tests. &lt;/p&gt; &lt;p&gt;&lt;b&gt;Part I Getting started&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;1.&lt;/b&gt; &lt;a href="http://www.manning-source.com/books/osherove/osherove_meapch1.pdf"&gt;The basics of unit testing&lt;/a&gt; - FREE&lt;br /&gt;&lt;b&gt;&amp;nbsp;2. &lt;/b&gt;The first unit test - AVAILABLE&lt;br /&gt;&lt;b&gt;Part II Core techniques&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&amp;nbsp;3. &lt;/b&gt;Using Stubs to break dependencies - AVAILABLE&lt;br /&gt;&lt;b&gt;&amp;nbsp;4. &lt;/b&gt;Interaction testing Using Mock Objects - AVAILABLE&lt;br /&gt;&lt;b&gt;&amp;nbsp;5. &lt;/b&gt;Mock Object frameworks - AVAILABLE&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=4179285" width="1" height="1" alt="" /&gt;</description></item></channel></rss>